1b6209a9bSSimon J. Gerraty
2b6209a9bSSimon J. Gerraty# building clang is particularly tedious - so avoid re-inventing wheels
3b6209a9bSSimon J. Gerraty
4b6209a9bSSimon J. Gerratyall: bootstrap-toolchain
5b6209a9bSSimon J. Gerraty
6b6209a9bSSimon J. GerratyUPDATE_DEPENDFILE= no
7b6209a9bSSimon J. Gerraty.export UPDATE_DEPENDFILE
8b6209a9bSSimon J. Gerraty
9b6209a9bSSimon J. Gerraty# we build for the pseudo machine "host"
10b6209a9bSSimon J. GerratyTARGET_MACHINE= host
11b6209a9bSSimon J. Gerraty
12b6209a9bSSimon J. GerratyHOST_MACHINE!= uname -m
13b6209a9bSSimon J. GerratyHOST_MACHINE_ARCH!= uname -p
14b6209a9bSSimon J. GerratyBTOOLSDIR?= ${HOST_OBJTOP}/tools
154dc89c4dSBryan DreweryWORLDTMP= ${BTOOLSDIR}
16b6209a9bSSimon J. GerratyLEGACY_TOOLS?= ${BTOOLSDIR}/legacy
17b6209a9bSSimon J. Gerraty
18b6209a9bSSimon J. GerratyBSENV= \
19b6209a9bSSimon J. Gerraty	MAKESYSPATH=${SRCTOP}/tools/build/mk:${SRCTOP}/share/mk \
20b6209a9bSSimon J. Gerraty	TARGET=${HOST_MACHINE} TARGET_ARCH=${HOST_MACHINE_ARCH} \
2198e0ffaeSSimon J. Gerraty	WITHOUT_STAGING=1 STAGE_ROOT= BOOTSTRAPPING_TOOLS=1 \
223bed45abSBryan Drewery	WORLDTMP=${BTOOLSDIR} \
230695a3bcSBryan Drewery	INSTALL="sh ${SRCTOP}/tools/install.sh" \
240695a3bcSBryan Drewery	PATH=${LEGACY_TOOLS}/usr/sbin:${LEGACY_TOOLS}/usr/bin:${LEGACY_TOOLS}/bin:${PATH}
25b6209a9bSSimon J. Gerraty
2698e0ffaeSSimon J. Gerraty.if !defined(OSRELDATE)
2798e0ffaeSSimon J. Gerratyord_h= /usr/include/osreldate.h
2898e0ffaeSSimon J. Gerraty.if exists(${ord_h})
2998e0ffaeSSimon J. GerratyOSRELDATE!= sed -n '/define.*__FreeBSD_version/{s,^[^0-9]*,,p;q;}' ${ord_h}
3098e0ffaeSSimon J. Gerraty.endif
3198e0ffaeSSimon J. GerratyOSRELDATE?= 0
3298e0ffaeSSimon J. Gerraty.endif
3398e0ffaeSSimon J. Gerraty
3498e0ffaeSSimon J. Gerraty# need to keep this in sync with src/Makefile.inc1
353cad5c68SBryan DreweryBSARGS= 	DESTDIR= \
362c36cefeSBryan Drewery		OBJTOP='${WORLDTMP}/obj-tools' \
374dc89c4dSBryan Drewery		OBJROOT='$${OBJTOP}/' \
38996e4759SBryan Drewery		MAKEOBJDIRPREFIX= \
3998e0ffaeSSimon J. Gerraty		BOOTSTRAPPING=${OSRELDATE} \
40817366f1SBryan Drewery		BWPHASE=${.TARGET} \
41bcd2f41fSMitchell Horne		-DNO_CPU_CFLAGS \
42bcd2f41fSMitchell Horne		-DNO_LINT \
43bcd2f41fSMitchell Horne		-DNO_PIC \
44bcd2f41fSMitchell Horne		-DNO_SHARED \
45bcd2f41fSMitchell Horne		MK_CTF=no \
46bcd2f41fSMitchell Horne		MK_CLANG_EXTRAS=no \
47bcd2f41fSMitchell Horne		MK_CLANG_FORMAT=no \
48bcd2f41fSMitchell Horne		MK_CLANG_FULL=no \
49bcd2f41fSMitchell Horne		MK_HTML=no \
50bcd2f41fSMitchell Horne		MK_MAN=no \
51bcd2f41fSMitchell Horne		MK_PROFILE=no \
52bcd2f41fSMitchell Horne		MK_RETPOLINE=no \
5361ed578eSMitchell Horne		MK_SSP=no \
54bcd2f41fSMitchell Horne		MK_TESTS=no \
55bcd2f41fSMitchell Horne		MK_WERROR=no \
56bcd2f41fSMitchell Horne		MK_INCLUDES=yes \
57bcd2f41fSMitchell Horne		MK_MAN_UTILS=yes
58b6209a9bSSimon J. Gerraty
596ca6c445SBryan Drewery# We will handle building the toolchain and cross-compiler.
601e4c8029SJessica ClarkeBSARGS+= MK_CROSS_COMPILER=no MK_CLANG=no MK_LLDB=no
61dfb62a5aSBryan Drewery
6224b1e7f1SBryan DreweryDISTRIB_ENV=	INSTALL="sh ${SRCTOP}/tools/install.sh" NO_FSCHG=1 MK_TESTS=no
63b7d28affSBryan Drewerylegacy: .MAKE ${META_DEPS}
64b6209a9bSSimon J. Gerraty	mkdir -p ${LEGACY_TOOLS}
657b3ea376SBryan Drewery	${DISTRIB_ENV} ${MAKE} -C ${SRCTOP}/etc distrib-dirs \
667b3ea376SBryan Drewery	    DESTDIR=${BTOOLSDIR} > $@.distrib-dirs_btoolsdir
677b3ea376SBryan Drewery	${DISTRIB_ENV} ${MAKE} -C ${SRCTOP}/etc distrib-dirs \
6830f1a936SBryan Drewery	    DESTDIR=${LEGACY_TOOLS} > $@.distrib-dirs_legacy_tools
69b6209a9bSSimon J. Gerraty	${BSENV} ${MAKE} -C ${SRCTOP} -f Makefile.inc1 ${BSARGS} $@
70b6209a9bSSimon J. Gerraty
71b6209a9bSSimon J. Gerratybootstrap-tools: legacy
72b6209a9bSSimon J. Gerratybuild-tools: bootstrap-tools
73b6209a9bSSimon J. Gerratycross-tools: build-tools
74b6209a9bSSimon J. Gerraty
75b7d28affSBryan Drewerycross-tools build-tools bootstrap-tools: .MAKE ${META_DEPS}
76b6209a9bSSimon J. Gerraty	${BSENV} ${MAKE} -C ${SRCTOP} -f Makefile.inc1 ${BSARGS} $@
77b6209a9bSSimon J. Gerraty
78b6209a9bSSimon J. Gerraty# MAKELEVEL=0 so that dirdeps.mk does its thing
793bed45abSBryan Drewery# BSENV:MPATH=* lets us use the bootstrapped stuff in LEGACY_TOOLS above.
80b6209a9bSSimon J. Gerraty# TARGET* is so that MK_CLANG gets set correctly.
81b6209a9bSSimon J. GerratyBSTCENV= \
82b6209a9bSSimon J. Gerraty	MAKELEVEL=0 \
83b6209a9bSSimon J. Gerraty	MACHINE=host \
843bed45abSBryan Drewery	BOOTSTRAPPING_TOOLS=1 \
85b6209a9bSSimon J. Gerraty	TARGET=${HOST_MACHINE} \
863bed45abSBryan Drewery	TARGET_ARCH=${HOST_MACHINE_ARCH} \
873bed45abSBryan Drewery	${BSENV:MPATH=*}
88b6209a9bSSimon J. Gerraty
89b6209a9bSSimon J. GerratyBSTCARGS= \
9057f80467SEd Maste	${BSARGS:NDESTDIR=*:NOBJTOP=*:NOBJROOT=*:NMK_CROSS_COMPILER=*:NMK_CLANG=*} \
9198e0ffaeSSimon J. Gerraty	BUILD_DIRDEPS=yes \
9206c3fb27SDimitry Andric	LLVM_MIN_TBLGEN=${TOOLSDIR}/usr/bin/llvm-min-tblgen \
9312330f35SBryan Drewery	LLVM_TBLGEN=${TOOLSDIR}/usr/bin/llvm-tblgen \
9412330f35SBryan Drewery	CLANG_TBLGEN=${TOOLSDIR}/usr/bin/clang-tblgen \
95b6209a9bSSimon J. Gerraty	-DWITH_STAGING \
96b6209a9bSSimon J. Gerraty	-DWITH_TOOLSDIR
97b6209a9bSSimon J. Gerraty
98b6209a9bSSimon J. Gerraty# finally we build toolchain leveraging the above.
99b6209a9bSSimon J. Gerratybootstrap-toolchain:	.MAKE cross-tools
1001128ae00SBryan Drewery	${BSTCENV} ${MAKE} -C ${SRCTOP} ${BSTCARGS} toolchain
101f6b95617SBryan Drewery
102f6b95617SBryan Drewery# Ensure CCACHE_DIR is ignored since we are processing .meta files here.
103f6b95617SBryan Drewery.include <bsd.compiler.mk>
104