1
2# building clang is particularly tedious - so avoid re-inventing wheels
3
4all: bootstrap-toolchain
5
6UPDATE_DEPENDFILE= no
7.export UPDATE_DEPENDFILE
8
9# we build for the pseudo machine "host"
10TARGET_MACHINE= host
11
12HOST_MACHINE!= uname -m
13HOST_MACHINE_ARCH!= uname -p
14BTOOLSDIR?= ${HOST_OBJTOP}/tools
15WORLDTMP= ${BTOOLSDIR}
16LEGACY_TOOLS?= ${BTOOLSDIR}/legacy
17
18BSENV= \
19	MAKESYSPATH=${SRCTOP}/tools/build/mk:${SRCTOP}/share/mk \
20	TARGET=${HOST_MACHINE} TARGET_ARCH=${HOST_MACHINE_ARCH} \
21	WITHOUT_STAGING=1 STAGE_ROOT= BOOTSTRAPPING_TOOLS=1 \
22	WORLDTMP=${BTOOLSDIR} \
23	INSTALL="sh ${SRCTOP}/tools/install.sh" \
24	PATH=${LEGACY_TOOLS}/usr/sbin:${LEGACY_TOOLS}/usr/bin:${LEGACY_TOOLS}/bin:${PATH}
25
26.if !defined(OSRELDATE)
27ord_h= /usr/include/osreldate.h
28.if exists(${ord_h})
29OSRELDATE!= sed -n '/define.*__FreeBSD_version/{s,^[^0-9]*,,p;q;}' ${ord_h}
30.endif
31OSRELDATE?= 0
32.endif
33
34# need to keep this in sync with src/Makefile.inc1 
35BSARGS= 	DESTDIR= \
36		OBJTOP='${WORLDTMP}/obj-tools' \
37		OBJROOT='$${OBJTOP}/' \
38		MAKEOBJDIRPREFIX= \
39		BOOTSTRAPPING=${OSRELDATE} \
40		BWPHASE=${.TARGET} \
41		-DNO_CPU_CFLAGS \
42		-DNO_LINT \
43		-DNO_PIC \
44		-DNO_SHARED \
45		MK_CTF=no \
46		MK_CLANG_EXTRAS=no \
47		MK_CLANG_FORMAT=no \
48		MK_CLANG_FULL=no \
49		MK_HTML=no \
50		MK_MAN=no \
51		MK_PROFILE=no \
52		MK_RETPOLINE=no \
53		MK_SSP=no \
54		MK_TESTS=no \
55		MK_WERROR=no \
56		MK_INCLUDES=yes \
57		MK_MAN_UTILS=yes
58
59# We will handle building the toolchain and cross-compiler.
60BSARGS+= MK_CROSS_COMPILER=no MK_CLANG=no MK_LLDB=no
61
62DISTRIB_ENV=	INSTALL="sh ${SRCTOP}/tools/install.sh" NO_FSCHG=1 MK_TESTS=no
63legacy: .MAKE ${META_DEPS}
64	mkdir -p ${LEGACY_TOOLS}
65	${DISTRIB_ENV} ${MAKE} -C ${SRCTOP}/etc distrib-dirs \
66	    DESTDIR=${BTOOLSDIR} > $@.distrib-dirs_btoolsdir
67	${DISTRIB_ENV} ${MAKE} -C ${SRCTOP}/etc distrib-dirs \
68	    DESTDIR=${LEGACY_TOOLS} > $@.distrib-dirs_legacy_tools
69	${BSENV} ${MAKE} -C ${SRCTOP} -f Makefile.inc1 ${BSARGS} $@
70
71bootstrap-tools: legacy
72build-tools: bootstrap-tools
73cross-tools: build-tools
74
75cross-tools build-tools bootstrap-tools: .MAKE ${META_DEPS}
76	${BSENV} ${MAKE} -C ${SRCTOP} -f Makefile.inc1 ${BSARGS} $@
77
78# MAKELEVEL=0 so that dirdeps.mk does its thing
79# BSENV:MPATH=* lets us use the bootstrapped stuff in LEGACY_TOOLS above.
80# TARGET* is so that MK_CLANG gets set correctly.
81BSTCENV= \
82	MAKELEVEL=0 \
83	MACHINE=host \
84	BOOTSTRAPPING_TOOLS=1 \
85	TARGET=${HOST_MACHINE} \
86	TARGET_ARCH=${HOST_MACHINE_ARCH} \
87	${BSENV:MPATH=*}
88
89BSTCARGS= \
90	${BSARGS:NDESTDIR=*:NOBJTOP=*:NOBJROOT=*:NMK_CROSS_COMPILER=*:NMK_CLANG=*} \
91	BUILD_DIRDEPS=yes \
92	LLVM_MIN_TBLGEN=${TOOLSDIR}/usr/bin/llvm-min-tblgen \
93	LLVM_TBLGEN=${TOOLSDIR}/usr/bin/llvm-tblgen \
94	CLANG_TBLGEN=${TOOLSDIR}/usr/bin/clang-tblgen \
95	-DWITH_STAGING \
96	-DWITH_TOOLSDIR
97
98# finally we build toolchain leveraging the above.
99bootstrap-toolchain:	.MAKE cross-tools
100	${BSTCENV} ${MAKE} -C ${SRCTOP} ${BSTCARGS} toolchain
101
102# Ensure CCACHE_DIR is ignored since we are processing .meta files here.
103.include <bsd.compiler.mk>
104