xref: /minix/minix/lib/libminc/Makefile (revision e1cdaee1)
1#
2# Minimal libc for servers and drivers.
3#
4
5# LSC: TODO: Explaination of how this works
6#.for f in \
7#${f} ${f:C/\.o/.bc/}:	${NETBSDSRCDIR}//${f:C/\.o/.S/}
8#OBJS+=	${f} ${f:C/\.o/.bc/}
9#CLEANFILES+= ${f} ${f:C/\.o/.bc/}
10#
11#.if ${USE_BITCODE:Uno} == "yes"
12#OBJS+=	${f:C/\.o/.bc/}
13#CLEANFILES+= ${f:C/\.o/.bc/}
14#.endif # ${USE_BITCODE:Uno} == "yes"
15
16#.endfor
17
18.include <bsd.own.mk>
19
20LIB=		minc
21
22MKPIC=		no # Never used as a dynamic library
23
24LIBSADIR=	${NETBSDSRCDIR}/sys/lib/libsa
25LIBSYSDIR=	${NETBSDSRCDIR}/minix/lib/libsys
26LIBMINIXCDIR=	${NETBSDSRCDIR}/minix/lib/libc
27LIBMINIXCARCHDIR= ${NETBSDSRCDIR}/minix/lib/libc/arch/${MACHINE_CPU}
28LIBCDIR=	${NETBSDSRCDIR}/lib/libc
29LIBCARCHDIR=	${LIBCDIR}/arch/${MACHINE_CPU}
30LIBCOMMONCDIR=	${NETBSDSRCDIR}/common/lib/libc
31LIBCOMMONCARCHDIR= ${LIBCOMMONCDIR}/arch/${MACHINE_CPU}
32
33CPPFLAGS+=	-I${LIBCDIR}/include -I${LIBCDIR}
34CPPFLAGS+=	-D_LIBMINC
35
36CFLAGS+=	-fno-builtin
37
38#
39# Customized versions of libc functions.
40#
41SRCS+= atoi.c fputs.c _snprintf.c strtol.c
42CPPFLAGS._snprintf.c+=	-I${LIBSADIR}
43
44CPPFLAGS.strtol.c+=	-D_STANDALONE
45CPPFLAGS.strtol.c+=	-I${LIBCOMMONCDIR}/stdlib
46CPPFLAGS.strtol.c+=	-I${NETBSDSRCDIR}/sys
47
48########################################################################
49#
50# Functions imported from libsa (StandAlone)
51#
52.for f in \
53	errno.o printf.o strerror.o subr_prf.o
54${f} ${f:C/\.o/.bc/}:	${LIBSADIR}/${f:C/\.o/.c/}
55OBJS+=	${f}
56CLEANFILES+= ${f}
57
58.if ${USE_BITCODE:Uno} == "yes"
59OBJS+=	${f:C/\.o/.bc/}
60CLEANFILES+= ${f:C/\.o/.bc/}
61.endif # ${USE_BITCODE:Uno} == "yes"
62.endfor
63
64CPPFLAGS.fslib.c+= -I${NETBSDSRCDIR}/minix/fs
65
66# LSC: I would like not to have to copy te file, but I can't
67#      have libsa appear first in the .PATH, for a lot of files
68#      would be taken from there, which is not the intention ATM.
69CPPFLAGS.strerror.c+= -I${LIBSADIR}
70
71# LSC: putchar and kputc have the same role / signature.
72CPPFLAGS.subr_prf.c+= -Dputchar=kputc
73
74# Activate optional support, may be deactivated.
75CPPFLAGS.subr_prf.c+= -DLIBSA_PRINTF_LONGLONG_SUPPORT
76CPPFLAGS.subr_prf.c+= -DLIBSA_PRINTF_WIDTH_SUPPORT
77
78########################################################################
79#
80# Imports from libsys
81#
82.for f in \
83	kputc.o sys_diagctl.o
84${f} ${f:C/\.o/.bc/}:	${LIBSYSDIR}/${f:C/\.o/.c/}
85OBJS+=	${f}
86CLEANFILES+= ${f}
87
88.if ${USE_BITCODE:Uno} == "yes"
89OBJS+=	${f:C/\.o/.bc/}
90CLEANFILES+= ${f:C/\.o/.bc/}
91.endif # ${USE_BITCODE:Uno} == "yes"
92.endfor
93
94########################################################################
95#
96# Shared libc with userspace (/common/lib/libc)
97#
98
99.for f in \
100	bswap64.o rb.o
101${f} ${f:C/\.o/.bc/}:	${LIBCOMMONCDIR}/gen/${f:C/\.o/.c/}
102OBJS+=	${f}
103CLEANFILES+= ${f}
104
105.if ${USE_BITCODE:Uno} == "yes"
106OBJS+=	${f:C/\.o/.bc/}
107CLEANFILES+= ${f:C/\.o/.bc/}
108.endif # ${USE_BITCODE:Uno} == "yes"
109.endfor
110
111CPPFLAGS.rb.c+=		-D_LIBC
112
113.for f in \
114	sha2.o
115${f} ${f:C/\.o/.bc/}:	${LIBCOMMONCDIR}/hash/sha2/${f:C/\.o/.c/}
116OBJS+=	${f}
117CLEANFILES+= ${f}
118
119.if ${USE_BITCODE:Uno} == "yes"
120OBJS+=	${f:C/\.o/.bc/}
121CLEANFILES+= ${f:C/\.o/.bc/}
122.endif # ${USE_BITCODE:Uno} == "yes"
123.endfor
124
125CPPFLAGS.sha2.c+=	-I${NETBSDSRCDIR}/sys
126
127.for f in \
128	ashrdi3.o divdi3.o lshrdi3.o moddi3.o \
129	udivdi3.o umoddi3.o umodsi3.o udivsi3.o \
130	udivmoddi4.o divsi3.o modsi3.o divmoddi4.o \
131	divmodsi4.o udivmodsi4.o #qdivrem.o lshldi3.o
132${f} ${f:C/\.o/.bc/}:	${NETBSDSRCDIR}/sys/external/bsd/compiler_rt/dist/lib/builtins/${f:C/\.o/.c/}
133OBJS+=	${f}
134CLEANFILES+= ${f}
135
136COPTS+=  -Wno-missing-prototypes \
137                -Wno-old-style-definition \
138                -Wno-strict-prototypes \
139                -Wno-uninitialized \
140                -Wno-cast-qual
141
142
143
144.if ${USE_BITCODE:Uno} == "yes"
145OBJS+=	${f:C/\.o/.bc/}
146CLEANFILES+= ${f:C/\.o/.bc/}
147.endif # ${USE_BITCODE:Uno} == "yes"
148.endfor
149
150.for f in \
151	random.o strtoul.o
152${f} ${f:C/\.o/.bc/}:	${LIBCOMMONCDIR}/stdlib/${f:C/\.o/.c/}
153OBJS+=	${f}
154CLEANFILES+= ${f}
155
156.if ${USE_BITCODE:Uno} == "yes"
157OBJS+=	${f:C/\.o/.bc/}
158CLEANFILES+= ${f:C/\.o/.bc/}
159.endif # ${USE_BITCODE:Uno} == "yes"
160.endfor
161
162CPPFLAGS.strtoul.c+=	-D_STANDALONE
163CPPFLAGS.strtoul.c+=	-I${NETBSDSRCDIR}/sys
164
165.for f in \
166	strcasecmp.o strcspn.o strncasecmp.o strnlen.o strlcat.o
167${f} ${f:C/\.o/.bc/}:	${LIBCOMMONCDIR}/string/${f:C/\.o/.c/}
168OBJS+=	${f}
169CLEANFILES+= ${f}
170
171.if ${USE_BITCODE:Uno} == "yes"
172OBJS+=	${f:C/\.o/.bc/}
173CLEANFILES+= ${f:C/\.o/.bc/}
174.endif # ${USE_BITCODE:Uno} == "yes"
175.endfor
176
177########################################################################
178#
179# Functions imported directly from libc.
180#
181
182.include "${.CURDIR}/arch/${MACHINE_ARCH}/Makefile.libc.inc"
183
184# This file is specifically generated
185SRCS+= errlist.c
186
187errlist.c: ${LIBCDIR}/gen/errlist.awk \
188	   ${NETBSDSRCDIR}/sys/sys/errno.h
189	${TOOL_CAT} ${NETBSDSRCDIR}/sys/sys/errno.h | ${TOOL_SED} 's/(_SIGN//' | ${TOOL_AWK} -f ${LIBCDIR}/gen/errlist.awk > ${.TARGET}
190CLEANFILES+=	errlist.c
191
192.for f in \
193	_errno.o \
194	getprogname.o setprogname.o execle.o sleep.o time.o \
195	ctype_.o tolower_.o toupper_.o usleep.o waitpid.o sigsetops.o
196${f} ${f:C/\.o/.bc/}:	${LIBCDIR}/gen/${f:C/\.o/.c/}
197OBJS+=	${f}
198CLEANFILES+= ${f}
199
200.if ${USE_BITCODE:Uno} == "yes"
201OBJS+=	${f:C/\.o/.bc/}
202CLEANFILES+= ${f:C/\.o/.bc/}
203.endif # ${USE_BITCODE:Uno} == "yes"
204.endfor
205
206CPPFLAGS.ctype_.c+= -I${LIBCDIR}/locale
207CPPFLAGS.isctype.c+= -I${LIBCDIR}/locale
208CPPFLAGS.tolower_.c+= -I${LIBCDIR}/locale
209CPPFLAGS.toupper_.c+= -I${LIBCDIR}/locale
210
211.for f in \
212	read_tsc_64.o fslib.o itoa.o oneC_sum.o
213${f} ${f:C/\.o/.bc/}:	${LIBMINIXCDIR}/gen/${f:C/\.o/.c/}
214OBJS+=	${f}
215CLEANFILES+= ${f}
216
217.if ${USE_BITCODE:Uno} == "yes"
218OBJS+=	${f:C/\.o/.bc/}
219CLEANFILES+= ${f:C/\.o/.bc/}
220.endif # ${USE_BITCODE:Uno} == "yes"
221.endfor
222
223.for f in \
224	initfini.o stack_protector.o
225${f} ${f:C/\.o/.bc/}:	${LIBCDIR}/misc/${f:C/\.o/.c/}
226OBJS+=	${f}
227CLEANFILES+= ${f}
228
229.if ${USE_BITCODE:Uno} == "yes"
230OBJS+=	${f:C/\.o/.bc/}
231CLEANFILES+= ${f:C/\.o/.bc/}
232.endif # ${USE_BITCODE:Uno} == "yes"
233.endfor
234
235CPPFLAGS.stack_protector.c+= -Dxprintf=printf
236
237.for f in \
238	regcomp.o regerror.o regexec.o regfree.o
239${f} ${f:C/\.o/.bc/}:	${LIBCDIR}/regex/${f:C/\.o/.c/}
240OBJS+=	${f}
241CLEANFILES+= ${f}
242
243.if ${USE_BITCODE:Uno} == "yes"
244OBJS+=	${f:C/\.o/.bc/}
245CLEANFILES+= ${f:C/\.o/.bc/}
246.endif # ${USE_BITCODE:Uno} == "yes"
247.endfor
248
249.for f in \
250	abort.o atexit.o _env.o exit.o getenv.o \
251	ldiv.o malloc.o setenv.o \
252	reallocarr.o _rand48.o lrand48.o srand48.o
253${f} ${f:C/\.o/.bc/}:	${LIBCDIR}/stdlib/${f:C/\.o/.c/}
254OBJS+=	${f}
255CLEANFILES+= ${f}
256
257.if ${USE_BITCODE:Uno} == "yes"
258OBJS+=	${f:C/\.o/.bc/}
259CLEANFILES+= ${f:C/\.o/.bc/}
260.endif # ${USE_BITCODE:Uno} == "yes"
261
262# LSC FIXME: Try to get this out of the loop
263CPPFLAGS.${i}+=	-I${LIBCDIR}/stdlib
264.endfor
265
266CPPFLAGS.malloc.c+= -D_LIBSYS
267# Avoid magic instrumentation of the malloc data variables, since the heap is
268# reconstructed upon state transfer. We do need to instrument the malloc
269# functions, since we need to hook their mmap/munmap calls.
270SECTIONIFY.malloc.c+= -sectionify-no-override \
271	-sectionify-data-section-map=.*/magic_malloc_data
272
273.for f in \
274	strdup.o
275${f} ${f:C/\.o/.bc/}:	${LIBCDIR}/string/${f:C/\.o/.c/}
276OBJS+=	${f}
277CLEANFILES+= ${f}
278
279.if ${USE_BITCODE:Uno} == "yes"
280OBJS+=	${f:C/\.o/.bc/}
281CLEANFILES+= ${f:C/\.o/.bc/}
282.endif # ${USE_BITCODE:Uno} == "yes"
283.endfor
284
285.for f in \
286	access.o brk.o close.o environ.o execve.o fork.o fsync.o \
287	getgid.o getpid.o geteuid.o getuid.o gettimeofday.o getvfsstat.o \
288	init.o kernel_utils.o kill.o link.o loadname.o lseek.o _mcontext.o \
289	minix_rs.o mknod.o mmap.o nanosleep.o open.o pread.o pwrite.o read.o \
290	sbrk.o select.o sem.o setuid.o shmctl.o sigprocmask.o stack_utils.o \
291	stat.o stime.o svrctl.o syscall.o __sysctl.o _ucontext.o umask.o \
292	unlink.o wait4.o write.o
293${f} ${f:C/\.o/.bc/}:	${LIBMINIXCDIR}/sys/${f:C/\.o/.c/}
294OBJS+=	${f}
295CLEANFILES+= ${f}
296
297.if ${USE_BITCODE:Uno} == "yes"
298OBJS+=	${f:C/\.o/.bc/}
299CLEANFILES+= ${f:C/\.o/.bc/}
300.endif # ${USE_BITCODE:Uno} == "yes"
301.endfor
302
303.for f in \
304	brksize.o _do_kernel_call_intr.o ipc_minix_kerninfo.o _ipc.o ucontext.o
305${f} ${f:C/\.o/.bc/}:	${LIBMINIXCARCHDIR}/sys/${f:C/\.o/.S/}
306OBJS+=	${f}
307CLEANFILES+= ${f}
308
309.if ${USE_BITCODE:Uno} == "yes"
310OBJS+=	${f:C/\.o/.bc/}
311CLEANFILES+= ${f:C/\.o/.bc/}
312.endif # ${USE_BITCODE:Uno} == "yes"
313.endfor
314
315.for f in \
316	localtime.o
317${f} ${f:C/\.o/.bc/}:	${LIBCDIR}/time/${f:C/\.o/.c/}
318OBJS+=	${f}
319CLEANFILES+= ${f}
320
321.if ${USE_BITCODE:Uno} == "yes"
322OBJS+=	${f:C/\.o/.bc/}
323CLEANFILES+= ${f:C/\.o/.bc/}
324.endif # ${USE_BITCODE:Uno} == "yes"
325.endfor
326
327ARCHSUBDIR=${MACHINE_CPU}
328.include "${NETBSDSRCDIR}/minix/lib/libc/arch/${MACHINE_CPU}/Makefile.inc"
329
330.include <bsd.lib.mk>
331