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