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