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