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