local.meta.sys.mk revision 291995
166458Sdfr# $FreeBSD: head/share/mk/local.meta.sys.mk 291995 2015-12-08 17:09:17Z bdrewery $ 266458Sdfr 366458Sdfr# local configuration specific to meta mode 4139790Simp# XXX some of this should be in meta.sys.mk 566458Sdfr# we assume that MK_DIRDEPS_BUILD=yes 666458Sdfr 766458Sdfr# we need this until there is an alternative 866458SdfrMK_INSTALL_AS_USER= yes 966458Sdfr 1066458Sdfr_default_makeobjdir=$${.CURDIR:S,^$${SRCTOP},$${OBJTOP},} 1166458Sdfr 1266458Sdfr.if empty(OBJROOT) || ${.MAKE.LEVEL} == 0 1366458Sdfr.if defined(MAKEOBJDIRPREFIX) 1466458Sdfr# put things approximately where they want 1566458SdfrOBJROOT:=${MAKEOBJDIRPREFIX}${SRCTOP}/ 1666458SdfrMAKEOBJDIRPREFIX= 1766458Sdfr.export MAKEOBJDIRPREFIX 1866458Sdfr.endif 1966458Sdfr.if empty(MAKEOBJDIR) 2066458Sdfr# OBJTOP set below 2166458SdfrMAKEOBJDIR=${_default_makeobjdir} 2266458Sdfr# export but do not track 2366458Sdfr.export-env MAKEOBJDIR 2466458Sdfr# Expand for our own use 2566458SdfrMAKEOBJDIR:= ${MAKEOBJDIR} 2666458Sdfr.endif 2766458Sdfr.if !empty(SB) 2866458SdfrSB_OBJROOT ?= ${SB}/obj/ 2966458Sdfr# this is what we use below 3066458SdfrOBJROOT ?= ${SB_OBJROOT} 3166458Sdfr.endif 3266458SdfrOBJROOT ?= /usr/obj${SRCTOP}/ 3366458Sdfr.if ${OBJROOT:M*/} != "" 34105014SmikeOBJROOT:= ${OBJROOT:H:tA}/ 35105014Smike.else 36105014SmikeOBJROOT:= ${OBJROOT:H:tA}/${OBJROOT:T} 3766458Sdfr.endif 3866458Sdfr.export OBJROOT SRCTOP 39105014Smike 4094375Sdfr# we need HOST_TARGET etc below. 4194375Sdfr.include <host-target.mk> 4294375Sdfr.export HOST_TARGET 4394375Sdfr.endif 4494375Sdfr 4594375Sdfr# from src/Makefile (for universe) 4694375SdfrTARGET_ARCHES_arm?= arm armeb armv6 armv6hf 4794375SdfrTARGET_ARCHES_arm64?= aarch64 4894375SdfrTARGET_ARCHES_mips?= mipsel mips mips64el mips64 mipsn32 mipsn32el 4994375SdfrTARGET_ARCHES_powerpc?= powerpc powerpc64 5094375SdfrTARGET_ARCHES_pc98?= i386 51105014Smike 5294375Sdfr# some corner cases 5366458SdfrBOOT_MACHINE_DIR.amd64 = boot/i386 5466458SdfrMACHINE_ARCH.host = ${_HOST_ARCH} 5566458Sdfr 5666458Sdfr# the list of machines we support 5766458SdfrALL_MACHINE_LIST?= amd64 arm arm64 i386 mips pc98 powerpc sparc64 5866458Sdfr.for m in ${ALL_MACHINE_LIST:O:u} 5966458SdfrMACHINE_ARCH_LIST.$m?= ${TARGET_ARCHES_${m}:U$m} 6066458SdfrMACHINE_ARCH.$m?= ${MACHINE_ARCH_LIST.$m:[1]} 61105014SmikeBOOT_MACHINE_DIR.$m ?= boot/$m 62115084Smarcel.endfor 63115084Smarcel 6466458Sdfr.ifndef _TARGET_SPEC 6566458Sdfr.if empty(MACHINE_ARCH) 6666458Sdfr.if !empty(TARGET_ARCH) 6766458SdfrMACHINE_ARCH= ${TARGET_ARCH} 6883047Sobrien.else 69115084SmarcelMACHINE_ARCH= ${MACHINE_ARCH.${MACHINE}} 70115084Smarcel.endif 71115084Smarcel.endif 72115084SmarcelMACHINE_ARCH?= ${MACHINE_ARCH.${MACHINE}} 73115084SmarcelMACHINE_ARCH:= ${MACHINE_ARCH} 74115084Smarcel.else 75115084Smarcel# we got here via dirdeps 76115084SmarcelMACHINE_ARCH:= ${MACHINE_ARCH.${MACHINE}} 77115084Smarcel.endif 7866458Sdfr 79105014Smike# now because for universe we want to potentially 8066458Sdfr# build for multiple MACHINE_ARCH per MACHINE 8166458Sdfr# we need more than MACHINE in TARGET_SPEC 82TARGET_SPEC_VARS= MACHINE MACHINE_ARCH 83# see dirdeps.mk 84.if ${TARGET_SPEC:Uno:M*,*} != "" 85_tspec := ${TARGET_SPEC:S/,/ /g} 86MACHINE := ${_tspec:[1]} 87MACHINE_ARCH := ${_tspec:[2]} 88# etc. 89# We need to stop that TARGET_SPEC affecting any submakes 90# and deal with MACHINE=${TARGET_SPEC} in the environment. 91TARGET_SPEC= 92# export but do not track 93.export-env TARGET_SPEC 94.export ${TARGET_SPEC_VARS} 95.for v in ${TARGET_SPEC_VARS:O:u} 96.if empty($v) 97.undef $v 98.endif 99.endfor 100.endif 101# make sure we know what TARGET_SPEC is 102# as we may need it to find Makefile.depend* 103TARGET_SPEC = ${TARGET_SPEC_VARS:@v@${$v:U}@:ts,} 104 105# to be consistent with src/Makefile just concatenate with '.'s 106TARGET_OBJ_SPEC:= ${TARGET_SPEC:S;,;.;g} 107OBJTOP:= ${OBJROOT}${TARGET_OBJ_SPEC} 108 109.if defined(MAKEOBJDIR) 110.if ${MAKEOBJDIR:M*/*} == "" 111.error Cannot use MAKEOBJDIR=${MAKEOBJDIR}${.newline}Unset MAKEOBJDIR to get default: MAKEOBJDIR='${_default_makeobjdir}' 112.endif 113.endif 114 115HOST_OBJTOP ?= ${OBJROOT}${HOST_TARGET} 116 117.if ${OBJTOP} == ${HOST_OBJTOP} || ${REQUESTED_MACHINE:U${MACHINE}} == "host" 118MACHINE= host 119.if ${TARGET_MACHINE:Uno} == ${HOST_TARGET} 120# not what we want 121TARGET_MACHINE= host 122.endif 123.endif 124.if ${MACHINE} == "host" 125OBJTOP := ${HOST_OBJTOP} 126.endif 127 128.if ${.MAKE.LEVEL} == 0 129PYTHON ?= /usr/local/bin/python 130.export PYTHON 131# this works best if share/mk is ready for it. 132BUILD_AT_LEVEL0= no 133 134# we want to end up with a singe stage tree for all machines 135.if ${MK_STAGING} == "yes" 136.if empty(STAGE_ROOT) 137STAGE_ROOT?= ${OBJROOT}stage 138.export STAGE_ROOT 139.endif 140.endif 141.endif 142 143.if ${MK_STAGING} == "yes" 144.if ${MACHINE} == "host" 145STAGE_MACHINE= ${HOST_TARGET} 146.else 147STAGE_MACHINE:= ${TARGET_OBJ_SPEC} 148.endif 149STAGE_OBJTOP:= ${STAGE_ROOT}/${STAGE_MACHINE} 150STAGE_COMMON_OBJTOP:= ${STAGE_ROOT}/common 151STAGE_HOST_OBJTOP:= ${STAGE_ROOT}/${HOST_TARGET} 152 153# Use tools/install.sh which can avoid the need for xinstall for simple cases. 154INSTALL?= sh ${SRCTOP}/tools/install.sh 155# This is for stage-install to pickup from the environment. 156REAL_INSTALL:= ${INSTALL} 157.export REAL_INSTALL 158STAGE_INSTALL= sh ${.PARSEDIR:tA}/stage-install.sh OBJDIR=${.OBJDIR:tA} 159 160STAGE_LIBDIR= ${STAGE_OBJTOP}${_LIBDIR:U${LIBDIR:U/lib}} 161STAGE_INCLUDEDIR= ${STAGE_OBJTOP}${INCLUDEDIR:U/usr/include} 162# this is not the same as INCLUDEDIR 163STAGE_INCSDIR= ${STAGE_OBJTOP}${INCSDIR:U/include} 164# the target is usually an absolute path 165STAGE_SYMLINKS_DIR= ${STAGE_OBJTOP} 166 167LDFLAGS_LAST+= -Wl,-rpath-link -Wl,${STAGE_LIBDIR} 168.if ${MK_SYSROOT} == "yes" 169SYSROOT?= ${STAGE_OBJTOP} 170.else 171LDFLAGS_LAST+= -L${STAGE_LIBDIR} 172.endif 173 174.endif # MK_STAGING 175 176# this is sufficient for most of the tree. 177.MAKE.DEPENDFILE_DEFAULT = ${.MAKE.DEPENDFILE_PREFIX} 178 179# but if we have a machine qualified file it should be used in preference 180.MAKE.DEPENDFILE_PREFERENCE = \ 181 ${.MAKE.DEPENDFILE_PREFIX}.${MACHINE} \ 182 ${.MAKE.DEPENDFILE_PREFIX} 183 184.undef .MAKE.DEPENDFILE 185 186.include "sys.dependfile.mk" 187 188.if ${.MAKE.LEVEL} > 0 && ${MACHINE} == "host" && ${.MAKE.DEPENDFILE:E} != "host" 189# we can use this but should not update it. 190UPDATE_DEPENDFILE= NO 191.endif 192 193# define the list of places that contain files we are responsible for 194.MAKE.META.BAILIWICK = ${SB} ${OBJROOT} ${STAGE_ROOT} 195 196CSU_DIR.${MACHINE_ARCH} ?= csu/${MACHINE_ARCH} 197CSU_DIR := ${CSU_DIR.${MACHINE_ARCH}} 198 199.if !empty(TIME_STAMP) 200TRACER= ${TIME_STAMP} ${:U} 201.endif 202 203# toolchains can be a pain - especially bootstrappping them 204.if ${MACHINE} == "host" 205MK_SHARED_TOOLCHAIN= no 206.endif 207TOOLCHAIN_VARS= AS AR CC CLANG_TBLGEN CXX CPP LD NM OBJDUMP OBJCOPY RANLIB \ 208 STRINGS SIZE TBLGEN 209_toolchain_bin_CLANG_TBLGEN= /usr/bin/clang-tblgen 210_toolchain_bin_CXX= /usr/bin/c++ 211.ifdef WITH_TOOLSDIR 212TOOLSDIR?= ${HOST_OBJTOP}/tools 213.elif defined(STAGE_HOST_OBJTOP) 214TOOLSDIR?= ${STAGE_HOST_OBJTOP} 215.endif 216# Don't use the bootstrap tools logic on itself. 217.if ${.TARGETS:Mbootstrap-tools} == "" && \ 218 !make(showconfig) && \ 219 !defined(BOOTSTRAPPING_TOOLS) && !empty(TOOLSDIR) && ${.MAKE.LEVEL} == 0 220.for dir in /sbin /bin /usr/sbin /usr/bin 221PATH:= ${TOOLSDIR}${dir}:${PATH} 222.endfor 223.export PATH 224# Prefer the TOOLSDIR version of the toolchain if present vs the host version. 225.for var in ${TOOLCHAIN_VARS} 226_toolchain_bin.${var}= ${TOOLSDIR}${_toolchain_bin_${var}:U/usr/bin/${var:tl}} 227.if exists(${_toolchain_bin.${var}}) 228HOST_${var}?= ${_toolchain_bin.${var}} 229${var}?= ${HOST_${var}} 230.export HOST_${var} ${var} 231.endif 232.endfor 233.endif 234 235.for var in ${TOOLCHAIN_VARS} 236HOST_${var}?= ${_toolchain_bin_${var}:U/usr/bin/${var:tl}} 237.endfor 238 239.if ${MACHINE} == "host" 240.for var in ${TOOLCHAIN_VARS} 241${var}= ${HOST_${var}} 242.endfor 243.endif 244 245.if ${MACHINE:Nhost:Ncommon} != "" && ${MACHINE} != ${HOST_MACHINE} 246# cross-building 247.if !defined(FREEBSD_REVISION) 248FREEBSD_REVISION!= sed -n '/^REVISION=/{s,.*=,,;s,",,g;p; }' ${SRCTOP}/sys/conf/newvers.sh 249.export FREEBSD_REVISION 250.endif 251CROSS_TARGET_FLAGS= -target ${MACHINE_ARCH}-unknown-freebsd${FREEBSD_REVISION} 252CFLAGS+= ${CROSS_TARGET_FLAGS} 253ACFLAGS+= ${CROSS_TARGET_FLAGS} 254LDFLAGS+= -Wl,-m -Wl,elf_${MACHINE_ARCH}_fbsd 255.endif 256