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