1324651Simp# $FreeBSD: stable/11/stand/defs.mk 360614 2020-05-03 18:46:03Z dim $ 2324651Simp 3324651Simp.if !defined(__BOOT_DEFS_MK__) 4324651Simp__BOOT_DEFS_MK__=${MFILE} 5324651Simp 6346482Skevans# We need to define all the MK_ options before including src.opts.mk 7346482Skevans# because it includes bsd.own.mk which needs the right MK_ values, 8346482Skevans# espeically MK_CTF. 9346482Skevans 10329183SkevansMK_CTF= no 11329183SkevansMK_SSP= no 12329183SkevansMK_PROFILE= no 13329183SkevansMAN= 14329183Skevans.if !defined(PIC) 15329183SkevansNO_PIC= 16329183SkevansINTERNALLIB= 17329183Skevans.endif 18329183Skevans 19346482Skevans.include <src.opts.mk> 20346482Skevans 21346482SkevansWARNS?= 1 22346482Skevans 23329145SkevansBOOTSRC= ${SRCTOP}/stand 24329140SkevansEFISRC= ${BOOTSRC}/efi 25329140SkevansEFIINC= ${EFISRC}/include 26329140SkevansEFIINCMD= ${EFIINC}/${MACHINE} 27329140SkevansFDTSRC= ${BOOTSRC}/fdt 28329140SkevansFICLSRC= ${BOOTSRC}/ficl 29329140SkevansLDRSRC= ${BOOTSRC}/common 30344220SkevansLIBLUASRC= ${BOOTSRC}/liblua 31344220SkevansLUASRC= ${SRCTOP}/contrib/lua/src 32329140SkevansSASRC= ${BOOTSRC}/libsa 33324651SimpSYSDIR= ${SRCTOP}/sys 34329140SkevansUBOOTSRC= ${BOOTSRC}/uboot 35344377SkevansZFSSRC= ${SASRC}/zfs 36351515SkevansLIBCSRC= ${SRCTOP}/lib/libc 37324651Simp 38329145SkevansBOOTOBJ= ${OBJTOP}/stand 39329140Skevans 40329140Skevans# BINDIR is where we install 41329140SkevansBINDIR?= /boot 42329140Skevans 43355345Skevans# LUAPATH is where we search for and install lua scripts. 44355345SkevansLUAPATH?= /boot/lua 45355345SkevansFLUASRC?= ${SRCTOP}/libexec/flua 46355345Skevans 47329140SkevansLIBSA= ${BOOTOBJ}/libsa/libsa.a 48329140Skevans.if ${MACHINE} == "i386" 49329140SkevansLIBSA32= ${LIBSA} 50329140Skevans.else 51329140SkevansLIBSA32= ${BOOTOBJ}/libsa32/libsa32.a 52329140Skevans.endif 53324651Simp 54324653Simp# Standard options: 55329175SkevansCFLAGS+= -nostdinc 56329175Skevans.if ${MACHINE_ARCH} == "amd64" && ${DO32:U0} == 1 57329175SkevansCFLAGS+= -I${BOOTOBJ}/libsa32 58329175Skevans.else 59329175SkevansCFLAGS+= -I${BOOTOBJ}/libsa 60324653Simp.endif 61329175SkevansCFLAGS+= -I${SASRC} -D_STANDALONE 62329175SkevansCFLAGS+= -I${SYSDIR} 63332135Skevans# Spike the floating point interfaces 64332135SkevansCFLAGS+= -Ddouble=jagged-little-pill -Dfloat=floaty-mcfloatface 65344413Skevans.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" 66344413Skevans# Slim down the image. This saves about 15% in size with clang 6 on x86 67344413Skevans# Our most constrained /boot/loader env is BIOS booting on x86, where 68344413Skevans# our text + data + BTX have to fit into 640k below the ISA hole. 69344413Skevans# Experience has shown that problems arise between ~520k to ~530k. 70344413SkevansCFLAGS.clang+= -Oz 71344413SkevansCFLAGS.gcc+= -Os 72344413Skevans.endif 73324653Simp 74329175Skevans# GELI Support, with backward compat hooks (mostly) 75329140Skevans.if defined(LOADER_NO_GELI_SUPPORT) 76329140SkevansMK_LOADER_GELI=no 77329140Skevans.warning "Please move from LOADER_NO_GELI_SUPPORT to WITHOUT_LOADER_GELI" 78324653Simp.endif 79329140Skevans.if defined(LOADER_GELI_SUPPORT) 80329140SkevansMK_LOADER_GELI=yes 81329140Skevans.warning "Please move from LOADER_GELI_SUPPORT to WITH_LOADER_GELI" 82324653Simp.endif 83329140Skevans.if ${MK_LOADER_GELI} == "yes" 84329140SkevansCFLAGS+= -DLOADER_GELI_SUPPORT 85344373SkevansCFLAGS+= -I${SASRC}/geli 86329175Skevans.endif # MK_LOADER_GELI 87329175Skevans 88329175Skevans# These should be confined to loader.mk, but can't because uboot/lib 89329175Skevans# also uses it. It's part of loader, but isn't a loader so we can't 90329175Skevans# just include loader.mk 91329175Skevans.if ${LOADER_DISK_SUPPORT:Uyes} == "yes" 92329175SkevansCFLAGS+= -DLOADER_DISK_SUPPORT 93329140Skevans.endif 94324653Simp 95329175Skevans# Machine specific flags for all builds here 96329140Skevans 97329140Skevans# All PowerPC builds are 32 bit. We have no 64-bit loaders on powerpc 98329140Skevans# or powerpc64. 99329140Skevans.if ${MACHINE_ARCH} == "powerpc64" 100329140SkevansCFLAGS+= -m32 -mcpu=powerpc 101329140Skevans.endif 102329140Skevans 103329140Skevans# For amd64, there's a bit of mixed bag. Some of the tree (i386, lib*32) is 104329140Skevans# build 32-bit and some 64-bit (lib*, efi). Centralize all the 32-bit magic here 105329140Skevans# and activate it when DO32 is explicitly defined to be 1. 106329140Skevans.if ${MACHINE_ARCH} == "amd64" && ${DO32:U0} == 1 107334572SdimCFLAGS+= -m32 108329140Skevans# LD_FLAGS is passed directly to ${LD}, not via ${CC}: 109329140SkevansLD_FLAGS+= -m elf_i386_fbsd 110329140SkevansAFLAGS+= --32 111329140Skevans.endif 112329140Skevans 113329175SkevansSSP_CFLAGS= 114329175Skevans 115329175Skevans# Add in the no float / no SIMD stuff and announce we're freestanding 116329175Skevans# aarch64 and riscv don't have -msoft-float, but all others do. riscv 117329175Skevans# currently has no /boot/loader, but may soon. 118329175SkevansCFLAGS+= -ffreestanding ${CFLAGS_NO_SIMD} 119329175Skevans.if ${MACHINE_CPUARCH} == "aarch64" 120332131SkevansCFLAGS+= -mgeneral-regs-only -fPIC 121332131Skevans.elif ${MACHINE_CPUARCH} == "riscv" 122332131SkevansCFLAGS+= -march=rv64imac -mabi=lp64 123332131Skevans.else 124329175SkevansCFLAGS+= -msoft-float 125329175Skevans.endif 126329175Skevans 127346482Skevans# -msoft-float seems to be insufficient for powerpcspe 128346482Skevans.if ${MACHINE_ARCH} == "powerpcspe" 129346482SkevansCFLAGS+= -mno-spe 130346482Skevans.endif 131346482Skevans 132329175Skevans.if ${MACHINE_CPUARCH} == "i386" || (${MACHINE_CPUARCH} == "amd64" && ${DO32:U0} == 1) 133329175SkevansCFLAGS+= -march=i386 134329175SkevansCFLAGS.gcc+= -mpreferred-stack-boundary=2 135329175Skevans.endif 136332131Skevans.if ${MACHINE_CPUARCH} == "amd64" && ${DO32:U0} == 0 137332131SkevansCFLAGS+= -fPIC -mno-red-zone 138332131Skevans.endif 139329175Skevans 140329175Skevans.if ${MACHINE_CPUARCH} == "arm" 141329175Skevans# Do not generate movt/movw, because the relocation fixup for them does not 142329175Skevans# translate to the -Bsymbolic -pie format required by self_reloc() in loader(8). 143329175Skevans# Also, the fpu is not available in a standalone environment. 144329175Skevans.if ${COMPILER_VERSION} < 30800 145329175SkevansCFLAGS.clang+= -mllvm -arm-use-movt=0 146329175Skevans.else 147329175SkevansCFLAGS.clang+= -mno-movt 148329175Skevans.endif 149329175SkevansCFLAGS.clang+= -mfpu=none 150332131SkevansCFLAGS+= -fPIC 151329175Skevans.endif 152329175Skevans 153329175Skevans# The boot loader build uses dd status=none, where possible, for reproducible 154329175Skevans# build output (since performance varies from run to run). Trouble is that 155329175Skevans# option was recently (10.3) added to FreeBSD and is non-standard. Only use it 156329175Skevans# when this test succeeds rather than require dd to be a bootstrap tool. 157329175SkevansDD_NOSTATUS!=(dd status=none count=0 2> /dev/null && echo status=none) || true 158329175SkevansDD=dd ${DD_NOSTATUS} 159329175Skevans 160332131Skevans.if ${MACHINE_CPUARCH} == "mips" 161332131SkevansCFLAGS+= -G0 -fno-pic -mno-abicalls 162332131Skevans.endif 163332131Skevans 164329175Skevans.if ${MK_LOADER_FORCE_LE} != "no" 165329175Skevans.if ${MACHINE_ARCH} == "powerpc64" 166329175SkevansCFLAGS+= -mlittle-endian 167329175Skevans.endif 168329175Skevans.endif 169329175Skevans 170344413Skevans# 171344413Skevans# Have a sensible default 172344413Skevans# 173344455Skevans# XXX Do not change the ordering of this chain in this branch. 4th must remain 174344455Skevans# the default for the lifetime of stable/11. 175344413Skevans.if ${MK_FORTH} == "yes" 176344413SkevansLOADER_DEFAULT_INTERP?=4th 177344413Skevans.elif ${MK_LOADER_LUA} == "yes" 178344413SkevansLOADER_DEFAULT_INTERP?=lua 179344413Skevans.else 180344413SkevansLOADER_DEFAULT_INTERP?=simp 181344413Skevans.endif 182344413SkevansLOADER_INTERP?=${LOADER_DEFAULT_INTERP} 183344413Skevans 184329140Skevans# Make sure we use the machine link we're about to create 185329140SkevansCFLAGS+=-I. 186329140Skevans 187331143Simpall: ${PROG} 188331143Simp 189331143Simp.if !defined(NO_OBJ) 190360611Sdim_ILINKS=machine 191329140Skevans.if ${MACHINE} != ${MACHINE_CPUARCH} && ${MACHINE} != "arm64" 192360611Sdim_ILINKS+=${MACHINE_CPUARCH} 193329140Skevans.endif 194329140Skevans.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" 195360611Sdim_ILINKS+=x86 196329140Skevans.endif 197360611SdimCLEANFILES+=${_ILINKS} 198329140Skevans 199329140Skevansbeforedepend: ${_ILINKS} 200329140Skevansbeforebuild: ${_ILINKS} 201329140Skevans 202329140Skevans# Ensure that the links exist without depending on it when it exists which 203329140Skevans# causes all the modules to be rebuilt when the directory pointed to changes. 204329140Skevans.for _link in ${_ILINKS} 205329140Skevans.if !exists(${.OBJDIR}/${_link}) 206329140Skevans${OBJS}: ${_link} 207331143Simp.endif # _link exists 208329140Skevans.endfor 209329140Skevans 210329140Skevans.NOPATH: ${_ILINKS} 211329140Skevans 212360611Sdim${_ILINKS}: 213360611Sdim @case ${.TARGET} in \ 214329140Skevans machine) \ 215329140Skevans if [ ${DO32:U0} -eq 0 ]; then \ 216329140Skevans path=${SYSDIR}/${MACHINE}/include ; \ 217329140Skevans else \ 218329140Skevans path=${SYSDIR}/${MACHINE:C/amd64/i386/}/include ; \ 219329140Skevans fi ;; \ 220329140Skevans *) \ 221329140Skevans path=${SYSDIR}/${.TARGET:T}/include ;; \ 222329140Skevans esac ; \ 223329140Skevans path=`(cd $$path && /bin/pwd)` ; \ 224360611Sdim ${ECHO} ${.TARGET:T} "->" $$path ; \ 225360611Sdim ln -fhs $$path ${.TARGET:T} 226331143Simp.endif # !NO_OBJ 227324651Simp.endif # __BOOT_DEFS_MK__ 228