xref: /freebsd/tools/build/mk/Makefile.boot (revision 96474d2a3fa895fb9636183403fc8ca7ccf60216)
1# $FreeBSD$
2
3CFLAGS+=	-I${WORLDTMP}/legacy/usr/include
4DPADD+=		${WORLDTMP}/legacy/usr/lib/libegacy.a
5LDADD+=		-legacy
6LDFLAGS+=	-L${WORLDTMP}/legacy/usr/lib
7
8.if ${.MAKE.OS} != "FreeBSD"
9# On MacOS using a non-mac ar will fail the build, similarly on Linux using
10# nm may not work as expected if the nm for the target architecture comes in
11# $PATH before a nm that supports the host architecture.
12# To ensure that host binary compile as expected we use the tools from /usr/bin.
13AR:=	/usr/bin/ar
14RANLIB:=	/usr/bin/ranlib
15NM:=	/usr/bin/nm
16
17# Don't use lorder and tsort since lorder is not installed by default on most
18# Linux systems and the FreeBSD lorder does not work on Linux. For the bootstrap
19# tools the order of the .o files should not matter since we only care about
20# a few individual files (and might soon require linking with lld anyway)
21LORDER:=echo
22TSORT:=cat
23# When using cat as tsort we can't pass -q:
24TSORTFLAGS:=
25
26# Avoid stale dependecy warnings:
27LIBC:=
28LIBZ:=
29LIBM:=
30LIBUTIL:=
31LIBCPLUSPLUS:=
32LIBARCHIVE:=
33LIBPTHREAD:=
34LIBMD:=${WORLDTMP}/legacy/usr/lib/libmd.a
35LIBNV:=${WORLDTMP}/legacy/usr/lib/libmd.a
36LIBSBUF:=${WORLDTMP}/legacy/usr/lib/libsbuf.a
37LIBY:=${WORLDTMP}/legacy/usr/lib/liby.a
38LIBL:=${WORLDTMP}/legacy/usr/lib/libl.a
39LIBROKEN:=${WORLDTMP}/legacy/usr/lib/libroken.a
40LIBDWARF:=${WORLDTMP}/legacy/usr/lib/libdwarf.a
41LIBELF:=${WORLDTMP}/legacy/usr/lib/libelf.a
42
43# Add various -Werror flags to catch missing function declarations
44CFLAGS+=	-Werror=implicit-function-declaration -Werror=implicit-int \
45		-Werror=return-type -Wundef
46CFLAGS+=	-DHAVE_NBTOOL_CONFIG_H=1
47CFLAGS+=	-D__BSD_VISIBLE=1
48CFLAGS+=	-I${SRCTOP}/tools/build/cross-build/include/common
49
50# b64_pton and b64_ntop is in libresolv on MacOS and Linux:
51# TODO: only needed for uuencode and uudecode
52LDADD+=-lresolv
53
54.if ${.MAKE.OS} == "Linux"
55CFLAGS+=	-I${SRCTOP}/tools/build/cross-build/include/linux
56CFLAGS+=	-std=gnu99 -D_GNU_SOURCE=1
57# Needed for sem_init, etc. on Linux (used by usr.bin/sort)
58LDADD+=	-pthread
59
60.elif ${.MAKE.OS} == "Darwin"
61CFLAGS+=	-D_DARWIN_C_SOURCE=1
62CFLAGS+=	-I${SRCTOP}/tools/build/cross-build/include/mac
63# The macOS ar and ranlib don't understand all the flags supported by the
64# FreeBSD and Linux ar/ranlib
65ARFLAGS:=	-crs
66RANLIBFLAGS:=
67
68# to get libarchive (needed for elftoolchain)
69# MacOS ships /usr/lib/libarchive.dylib but doesn't provide the headers
70CFLAGS+=	-idirafter ${SRCTOP}/contrib/libarchive/libarchive
71.else
72.error "Unsupported build OS: ${.MAKE.OS}"
73.endif
74.endif # ${.MAKE.OS} != "FreeBSD"
75
76# we do not want to capture dependencies referring to the above
77UPDATE_DEPENDFILE= no
78
79# When building host tools we should never pull in headers from the source sys
80# directory to avoid any ABI issues that might cause the built binary to crash.
81# The only exceptions to this are sys/cddl/compat for dtrace bootstrap tools and
82# sys/crypto for libmd bootstrap.
83# We have to skip this check during make obj since bsd.crunchgen.mk will run
84# make obj on every directory during the build-tools phase.
85.if !make(obj)
86.if !empty(CFLAGS:M*${SRCTOP}/sys)
87.error Do not include $${SRCTOP}/sys when building bootstrap tools. \
88    Copy the header to $${WORLDTMP}/legacy in tools/build/Makefile instead. \
89    Error was caused by Makefile in ${.CURDIR}
90.endif
91
92# ${SRCTOP}/include should also never be used to avoid ABI issues
93.if !empty(CFLAGS:M*${SRCTOP}/include*)
94.error Do not include $${SRCTOP}/include when building bootstrap tools. \
95    Copy the header to $${WORLDTMP}/legacy in tools/build/Makefile instead. \
96    Error was caused by Makefile in ${.CURDIR}
97.endif
98.endif
99
100# GCC doesn't allow silencing warn_unused_result calls with (void) casts.
101CFLAGS.gcc+=-Wno-unused-result
102