local.meta.sys.mk revision 284349
1# $FreeBSD: head/share/mk/local.meta.sys.mk 284349 2015-06-13 19:52:35Z sjg $
2
3# local configuration specific to meta mode
4# XXX some of this should be in meta.sys.mk
5# we assume that MK_META_MODE=yes
6
7# we need this until there is an alternative
8MK_INSTALL_AS_USER= yes
9
10.if empty(OBJROOT) || ${.MAKE.LEVEL} == 0
11.if !empty(SB)
12SB_OBJROOT ?= ${SB}/obj/
13# this is what we use below
14OBJROOT ?= ${SB_OBJROOT}
15.endif
16OBJROOT ?= ${SRCTOP:H}/obj/
17.if ${OBJROOT:M*/} != ""
18OBJROOT:= ${OBJROOT:tA}/
19.else
20OBJROOT:= ${OBJROOT:H:tA}/${OBJROOT:T}
21.endif
22.export OBJROOT SRCTOP
23
24# we need HOST_TARGET etc below.
25.include <host-target.mk>
26.export HOST_TARGET
27.endif
28
29# from src/Makefile (for universe)
30TARGET_ARCHES_arm?=     arm armeb armv6 armv6eb
31TARGET_ARCHES_mips?=    mipsel mips mips64el mips64 mipsn32
32TARGET_ARCHES_powerpc?= powerpc powerpc64
33TARGET_ARCHES_pc98?=    i386
34
35# some corner cases
36BOOT_MACHINE_DIR.amd64 = boot/i386
37MACHINE_ARCH.host = ${_HOST_ARCH}
38
39# the list of machines we support
40ALL_MACHINE_LIST?= amd64 arm i386 ia64 mips pc98 powerpc sparc64
41.for m in ${ALL_MACHINE_LIST:O:u}
42MACHINE_ARCH_LIST.$m?= ${TARGET_ARCHES_${m}:U$m}
43MACHINE_ARCH.$m?= ${MACHINE_ARCH_LIST.$m:[1]}
44BOOT_MACHINE_DIR.$m ?= boot/$m
45.endfor
46
47.ifndef _TARGET_SPEC
48.if empty(MACHINE_ARCH)
49.if !empty(TARGET_ARCH)
50MACHINE_ARCH= ${TARGET_ARCH}
51.else
52MACHINE_ARCH= ${MACHINE_ARCH.${MACHINE}}
53.endif
54.endif
55MACHINE_ARCH?= ${MACHINE_ARCH.${MACHINE}}
56MACHINE_ARCH:= ${MACHINE_ARCH}
57.else
58# we got here via dirdeps
59MACHINE_ARCH:= ${MACHINE_ARCH.${MACHINE}}
60.endif
61
62# now because for universe we want to potentially
63# build for multiple MACHINE_ARCH per MACHINE
64# we need more than MACHINE in TARGET_SPEC
65TARGET_SPEC_VARS= MACHINE MACHINE_ARCH
66# see dirdeps.mk
67.if ${TARGET_SPEC:Uno:M*,*} != ""
68_tspec := ${TARGET_SPEC:S/,/ /g}
69MACHINE := ${_tspec:[1]}
70MACHINE_ARCH := ${_tspec:[2]}
71# etc.
72# We need to stop that TARGET_SPEC affecting any submakes
73# and deal with MACHINE=${TARGET_SPEC} in the environment.
74TARGET_SPEC=
75# export but do not track
76.export-env TARGET_SPEC 
77.export ${TARGET_SPEC_VARS}
78.for v in ${TARGET_SPEC_VARS:O:u}
79.if empty($v)
80.undef $v
81.endif
82.endfor
83.endif
84# make sure we know what TARGET_SPEC is
85# as we may need it to find Makefile.depend*
86TARGET_SPEC = ${TARGET_SPEC_VARS:@v@${$v:U}@:ts,}
87
88# to be consistent with src/Makefile just concatenate with '.'s
89TARGET_OBJ_SPEC:= ${TARGET_SPEC:S;,;.;g}
90OBJTOP:= ${OBJROOT}${TARGET_OBJ_SPEC}
91
92.if ${.CURDIR} == ${SRCTOP}
93RELDIR = .
94.elif ${.CURDIR:M${SRCTOP}/*}
95RELDIR := ${.CURDIR:S,${SRCTOP}/,,}
96.endif
97
98HOST_OBJTOP ?= ${OBJROOT}${HOST_TARGET}
99
100.if ${OBJTOP} == ${HOST_OBJTOP} || ${REQUESTED_MACHINE:U${MACHINE}} == "host"
101MACHINE= host
102.if ${TARGET_MACHINE:Uno} == ${HOST_TARGET}
103# not what we want
104TARGET_MACHINE= host
105.endif
106.endif
107.if ${MACHINE} == "host"
108OBJTOP := ${HOST_OBJTOP}
109.endif
110
111.if ${.MAKE.LEVEL} == 0
112PYTHON ?= /usr/local/bin/python
113.export PYTHON
114# this works best if share/mk is ready for it.
115BUILD_AT_LEVEL0= no
116
117# we want to end up with a singe stage tree for all machines
118.if ${MK_STAGING} == "yes"
119.if empty(STAGE_ROOT)
120STAGE_ROOT?= ${OBJROOT}stage
121.export STAGE_ROOT
122.endif
123.endif
124.endif
125
126.if ${MK_STAGING} == "yes"
127.if ${MACHINE} == "host"
128STAGE_MACHINE= ${HOST_TARGET}
129.else
130STAGE_MACHINE:= ${TARGET_OBJ_SPEC}
131.endif
132STAGE_OBJTOP:= ${STAGE_ROOT}/${STAGE_MACHINE}
133STAGE_COMMON_OBJTOP:= ${STAGE_ROOT}/common
134STAGE_HOST_OBJTOP:= ${STAGE_ROOT}/${HOST_TARGET}
135
136STAGE_LIBDIR= ${STAGE_OBJTOP}${_LIBDIR:U${LIBDIR:U/lib}}
137STAGE_INCLUDEDIR= ${STAGE_OBJTOP}${INCLUDEDIR:U/usr/include}
138# this is not the same as INCLUDEDIR
139STAGE_INCSDIR= ${STAGE_OBJTOP}${INCSDIR:U/include}
140# the target is usually an absolute path
141STAGE_SYMLINKS_DIR= ${STAGE_OBJTOP}
142
143LDFLAGS_LAST+= -Wl,-rpath-link -Wl,${STAGE_LIBDIR}
144.if ${MK_SYSROOT} == "yes"
145SYSROOT?= ${STAGE_OBJTOP}/
146.else
147LDFLAGS_LAST+= -L${STAGE_LIBDIR}
148.endif
149
150.endif				# MK_STAGING
151
152# this is sufficient for most of the tree.
153.MAKE.DEPENDFILE_DEFAULT = ${.MAKE.DEPENDFILE_PREFIX}
154
155# but if we have a machine qualified file it should be used in preference
156.MAKE.DEPENDFILE_PREFERENCE = \
157	${.MAKE.DEPENDFILE_PREFIX}.${MACHINE} \
158	${.MAKE.DEPENDFILE_PREFIX}
159
160.undef .MAKE.DEPENDFILE
161
162.include "sys.dependfile.mk"
163
164.if ${.MAKE.LEVEL} > 0 && ${MACHINE} == "host" && ${.MAKE.DEPENDFILE:E} != "host"
165# we can use this but should not update it.
166UPDATE_DEPENDFILE= NO
167.endif
168
169# define the list of places that contain files we are responsible for
170.MAKE.META.BAILIWICK = ${SB} ${OBJROOT} ${STAGE_ROOT}
171
172CSU_DIR.${MACHINE_ARCH} ?= csu/${MACHINE_ARCH}
173CSU_DIR := ${CSU_DIR.${MACHINE_ARCH}}
174
175.if !empty(TIME_STAMP)
176TRACER= ${TIME_STAMP} ${:U}
177.endif
178
179# toolchains can be a pain - especially bootstrappping them
180.if ${MACHINE} == "host"
181MK_SHARED_TOOLCHAIN= no
182.endif
183.ifdef WITH_TOOLSDIR
184TOOLSDIR?= ${HOST_OBJTOP}/tools
185.elif defined(STAGE_HOST_OBJTOP) && exists(${STAGE_HOST_OBJTOP}/usr/bin)
186TOOLSDIR?= ${STAGE_HOST_OBJTOP}
187.endif
188.if ${.MAKE.LEVEL} == 0 && exists(${TOOLSDIR}/usr/bin)
189PATH:= ${PATH:S,:, ,g:@d@${exists(${TOOLSDIR}$d):?${TOOLSDIR}$d:}@:ts:}:${PATH}
190.export PATH
191.if exists(${TOOLSDIR}/usr/bin/cc)
192HOST_CC?= ${TOOLSDIR}/usr/bin/cc
193CC?= ${TOOLSDIR}/usr/bin/cc
194CXX?= ${TOOLSDIR}/usr/bin/c++
195.export HOST_CC CC CXX
196.endif
197.endif
198
199.if ${MACHINE:Nhost:Ncommon} != "" && ${MACHINE} != ${HOST_MACHINE}
200# cross-building
201.if !defined(FREEBSD_REVISION)
202FREEBSD_REVISION!= sed -n '/^REVISION=/{s,.*=,,;s,",,g;p; }' ${SRCTOP}/sys/conf/newvers.sh
203.export FREEBSD_REVISION
204.endif
205CROSS_TARGET_FLAGS= -target ${MACHINE_ARCH}-unknown-freebsd${FREEBSD_REVISION}
206CFLAGS+= ${CROSS_TARGET_FLAGS}
207ACFLAGS+= ${CROSS_TARGET_FLAGS}
208LDFLAGS+= -Wl,-m -Wl,elf_${MACHINE_ARCH}_fbsd
209.endif
210