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 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