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