1*a325d9c4SApple OSS Distributions# -*- mode: makefile;-*- 2*a325d9c4SApple OSS Distributions# 3*a325d9c4SApple OSS Distributions# Copyright (C) 1999-2021 Apple Inc. All rights reserved. 4*a325d9c4SApple OSS Distributions# 5*a325d9c4SApple OSS Distributions# MakeInc.def contains global definitions for building, 6*a325d9c4SApple OSS Distributions# linking, and installing files. 7*a325d9c4SApple OSS Distributions# 8*a325d9c4SApple OSS Distributions 9*a325d9c4SApple OSS Distributions# 10*a325d9c4SApple OSS Distributions# Architecture Configuration options 11*a325d9c4SApple OSS Distributions# 12*a325d9c4SApple OSS DistributionsSUPPORTED_ARCH_CONFIGS := X86_64 X86_64H ARM ARM64 13*a325d9c4SApple OSS Distributions 14*a325d9c4SApple OSS Distributions# 15*a325d9c4SApple OSS Distributions# Kernel Configuration options 16*a325d9c4SApple OSS Distributions# 17*a325d9c4SApple OSS DistributionsSUPPORTED_KERNEL_CONFIGS = RELEASE DEVELOPMENT DEBUG PROFILE KASAN 18*a325d9c4SApple OSS Distributions 19*a325d9c4SApple OSS Distributions 20*a325d9c4SApple OSS Distributions# 21*a325d9c4SApple OSS Distributions# Machine Configuration options 22*a325d9c4SApple OSS Distributions# 23*a325d9c4SApple OSS Distributions 24*a325d9c4SApple OSS DistributionsSUPPORTED_X86_64_MACHINE_CONFIGS = NONE 25*a325d9c4SApple OSS DistributionsSUPPORTED_X86_64H_MACHINE_CONFIGS = NONE 26*a325d9c4SApple OSS Distributions 27*a325d9c4SApple OSS Distributionsifneq ($(findstring _Sim,$(RC_ProjectName)),) 28*a325d9c4SApple OSS DistributionsSUPPORTED_ARM_MACHINE_CONFIGS = NONE 29*a325d9c4SApple OSS DistributionsSUPPORTED_ARM64_MACHINE_CONFIGS = NONE 30*a325d9c4SApple OSS Distributionselse ifneq ($(findstring _host,$(RC_ProjectName)),) 31*a325d9c4SApple OSS DistributionsSUPPORTED_ARM_MACHINE_CONFIGS = NONE 32*a325d9c4SApple OSS DistributionsSUPPORTED_ARM64_MACHINE_CONFIGS = NONE 33*a325d9c4SApple OSS Distributionselse 34*a325d9c4SApple OSS DistributionsSUPPORTED_ARM_MACHINE_CONFIGS = NONE 35*a325d9c4SApple OSS DistributionsSUPPORTED_ARM64_MACHINE_CONFIGS = BCM2837 T6000 T8101 VMAPPLE 36*a325d9c4SApple OSS Distributions 37*a325d9c4SApple OSS Distributionsendif 38*a325d9c4SApple OSS Distributions 39*a325d9c4SApple OSS Distributions# 40*a325d9c4SApple OSS Distributions# Setup up *_LC variables during recursive invocations 41*a325d9c4SApple OSS Distributions# 42*a325d9c4SApple OSS Distributions 43*a325d9c4SApple OSS Distributionsifndef CURRENT_ARCH_CONFIG_LC 44*a325d9c4SApple OSS Distributions export CURRENT_ARCH_CONFIG_LC := $(shell printf "%s" "$(CURRENT_ARCH_CONFIG)" | $(TR) A-Z a-z) 45*a325d9c4SApple OSS Distributionsendif 46*a325d9c4SApple OSS Distributions 47*a325d9c4SApple OSS Distributionsifndef CURRENT_KERNEL_CONFIG_LC 48*a325d9c4SApple OSS Distributions export CURRENT_KERNEL_CONFIG_LC := $(shell printf "%s" "$(CURRENT_KERNEL_CONFIG)" | $(TR) A-Z a-z) 49*a325d9c4SApple OSS Distributionsendif 50*a325d9c4SApple OSS Distributions 51*a325d9c4SApple OSS Distributionsifndef CURRENT_MACHINE_CONFIG_LC 52*a325d9c4SApple OSS Distributions export CURRENT_MACHINE_CONFIG_LC := $(shell printf "%s" "$(CURRENT_MACHINE_CONFIG)" | $(TR) A-Z a-z) 53*a325d9c4SApple OSS Distributionsendif 54*a325d9c4SApple OSS Distributions 55*a325d9c4SApple OSS Distributions# 56*a325d9c4SApple OSS Distributions# Component List 57*a325d9c4SApple OSS Distributions# 58*a325d9c4SApple OSS DistributionsCOMPONENT_LIST = osfmk bsd libkern iokit pexpert libsa security san 59*a325d9c4SApple OSS DistributionsCOMPONENT = $(if $(word 2,$(subst /, ,$(RELATIVE_SOURCE_PATH))),$(word 2,$(subst /, ,$(RELATIVE_SOURCE_PATH))),$(firstword $(subst /, ,$(RELATIVE_SOURCE_PATH)))) 60*a325d9c4SApple OSS DistributionsCOMPONENT_IMPORT_LIST = $(filter-out $(COMPONENT),$(COMPONENT_LIST)) 61*a325d9c4SApple OSS Distributions 62*a325d9c4SApple OSS DistributionsMACHINE_FLAGS_ARM64_T8101 = -DARM64_BOARD_CONFIG_T8101_T8103 -mcpu=apple-a14 63*a325d9c4SApple OSS DistributionsMACHINE_FLAGS_ARM64_T6000 = -DARM64_BOARD_CONFIG_T6000 -mcpu=apple-a14 64*a325d9c4SApple OSS DistributionsMACHINE_FLAGS_ARM64_VMAPPLE = -DARM64_BOARD_CONFIG_VMAPPLE -march=armv8.5a 65*a325d9c4SApple OSS DistributionsMACHINE_FLAGS_ARM64_BCM2837 = -DARM64_BOARD_CONFIG_BCM2837 66*a325d9c4SApple OSS Distributions 67*a325d9c4SApple OSS Distributions 68*a325d9c4SApple OSS Distributions# 69*a325d9c4SApple OSS Distributions# Deployment target flag 70*a325d9c4SApple OSS Distributions# 71*a325d9c4SApple OSS Distributionsifeq ($(PLATFORM),MacOSX) 72*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = -mmacosx-version-min=$(SDKVERSION) -DXNU_TARGET_OS_OSX 73*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = -Wl,-macosx_version_min,$(SDKVERSION) 74*a325d9c4SApple OSS Distributionselse ifeq ($(PLATFORM),DriverKit) 75*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = -target apple-driverkit$(SDKVERSION) -DXNU_TARGET_OS_OSX 76*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = -Wl,-target,apple-driverkit$(SDKVERSION) 77*a325d9c4SApple OSS Distributionselse ifeq ($(PLATFORM),WatchOS) 78*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = -mwatchos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_WATCH 79*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = 80*a325d9c4SApple OSS Distributionselse ifeq ($(PLATFORM),tvOS) 81*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_TV 82*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = 83*a325d9c4SApple OSS Distributionselse ifeq ($(PLATFORM),AppleTVOS) 84*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_TV 85*a325d9c4SApple OSS Distributionselse ifeq ($(PLATFORM),BridgeOS) 86*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = -mbridgeos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_BRIDGE 87*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = 88*a325d9c4SApple OSS Distributionselse ifneq ($(filter $(SUPPORTED_EMBEDDED_PLATFORMS),$(PLATFORM)),) 89*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = -miphoneos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_IOS 90*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = -Wl,-ios_version_min,$(SDKVERSION) 91*a325d9c4SApple OSS Distributionselse ifneq ($(filter $(SUPPORTED_SIMULATOR_PLATFORMS),$(PLATFORM)),) 92*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = 93*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = 94*a325d9c4SApple OSS Distributionselse 95*a325d9c4SApple OSS Distributions DEPLOYMENT_TARGET_FLAGS = 96*a325d9c4SApple OSS Distributions DEPLOYMENT_LINKER_FLAGS = 97*a325d9c4SApple OSS Distributionsendif 98*a325d9c4SApple OSS Distributions 99*a325d9c4SApple OSS DistributionsDEPLOYMENT_TARGET_DEFINES = -DPLATFORM_$(PLATFORM) 100*a325d9c4SApple OSS Distributions 101*a325d9c4SApple OSS Distributions 102*a325d9c4SApple OSS Distributionsifneq ($(RC_ENABLE_PRODUCT_INFO_FILTER),) 103*a325d9c4SApple OSS DistributionsSEED_DEFINES += -DRC_ENABLE_XNU_PRODUCT_INFO_FILTER 104*a325d9c4SApple OSS Distributionselse 105*a325d9c4SApple OSS DistributionsSEED_DEFINES += -URC_ENABLE_XNU_PRODUCT_INFO_FILTER 106*a325d9c4SApple OSS Distributionsendif 107*a325d9c4SApple OSS Distributions 108*a325d9c4SApple OSS Distributions# 109*a325d9c4SApple OSS Distributions# Standard defines list 110*a325d9c4SApple OSS Distributions# 111*a325d9c4SApple OSS DistributionsDEFINES = -DAPPLE -DKERNEL -DKERNEL_PRIVATE -DXNU_KERNEL_PRIVATE \ 112*a325d9c4SApple OSS Distributions -DPRIVATE -D__MACHO__=1 -Dvolatile=__volatile -DXNU_KERN_EVENT_DATA_IS_VLA \ 113*a325d9c4SApple OSS Distributions -DCURRENT_MACHINE_CONFIG_LC=$(CURRENT_MACHINE_CONFIG_LC) \ 114*a325d9c4SApple OSS Distributions $(CONFIG_DEFINES) $(SEED_DEFINES) 115*a325d9c4SApple OSS Distributions 116*a325d9c4SApple OSS Distributions# Enable caching with `make CCACHE=ccache` 117*a325d9c4SApple OSS Distributions# This intentionally does not override $(CC) because that will confuse 118*a325d9c4SApple OSS Distributions# utilities like mig. 119*a325d9c4SApple OSS DistributionsCCACHE ?= 120*a325d9c4SApple OSS Distributions 121*a325d9c4SApple OSS Distributions# 122*a325d9c4SApple OSS Distributions# Compiler command 123*a325d9c4SApple OSS Distributions# 124*a325d9c4SApple OSS DistributionsKCC = $(CCACHE) $(CC) 125*a325d9c4SApple OSS DistributionsKC++ = $(CCACHE) $(CXX) 126*a325d9c4SApple OSS Distributions 127*a325d9c4SApple OSS DistributionsGENASSYM_KCC = $(CCACHE) $(CC) 128*a325d9c4SApple OSS Distributions 129*a325d9c4SApple OSS Distributions# 130*a325d9c4SApple OSS Distributions# Compiler warning flags 131*a325d9c4SApple OSS Distributions# 132*a325d9c4SApple OSS Distributions 133*a325d9c4SApple OSS DistributionsUSE_WERROR := 1 134*a325d9c4SApple OSS Distributionsifneq ($(BUILD_WERROR),) 135*a325d9c4SApple OSS DistributionsUSE_WERROR := $(BUILD_WERROR) 136*a325d9c4SApple OSS Distributionsendif 137*a325d9c4SApple OSS Distributions 138*a325d9c4SApple OSS Distributionsifeq ($(USE_WERROR),1) 139*a325d9c4SApple OSS DistributionsWERROR := -Werror 140*a325d9c4SApple OSS Distributionsendif 141*a325d9c4SApple OSS Distributions 142*a325d9c4SApple OSS Distributions# Shared C/C++ warning flags 143*a325d9c4SApple OSS Distributions# NOTE: order matters here. -Wno-xxx goes before opt-in of ones we want 144*a325d9c4SApple OSS DistributionsWARNFLAGS_STD := \ 145*a325d9c4SApple OSS Distributions -Weverything \ 146*a325d9c4SApple OSS Distributions -Wundef-prefix=TARGET_OS_ \ 147*a325d9c4SApple OSS Distributions -Wno-pedantic \ 148*a325d9c4SApple OSS Distributions $(WERROR) \ 149*a325d9c4SApple OSS Distributions -Wno-bad-function-cast \ 150*a325d9c4SApple OSS Distributions -Wno-c++-compat \ 151*a325d9c4SApple OSS Distributions -Wno-c++98-compat \ 152*a325d9c4SApple OSS Distributions -Wno-conditional-uninitialized \ 153*a325d9c4SApple OSS Distributions -Wno-covered-switch-default \ 154*a325d9c4SApple OSS Distributions -Wno-disabled-macro-expansion \ 155*a325d9c4SApple OSS Distributions -Wno-documentation-unknown-command \ 156*a325d9c4SApple OSS Distributions -Wno-extra-semi-stmt \ 157*a325d9c4SApple OSS Distributions -Wno-format-non-iso \ 158*a325d9c4SApple OSS Distributions -Wno-format-nonliteral \ 159*a325d9c4SApple OSS Distributions -Wno-language-extension-token \ 160*a325d9c4SApple OSS Distributions -Wno-missing-variable-declarations \ 161*a325d9c4SApple OSS Distributions -Wno-packed \ 162*a325d9c4SApple OSS Distributions -Wno-padded \ 163*a325d9c4SApple OSS Distributions -Wno-partial-availability \ 164*a325d9c4SApple OSS Distributions -Wno-reserved-id-macro \ 165*a325d9c4SApple OSS Distributions -Wno-shift-sign-overflow \ 166*a325d9c4SApple OSS Distributions -Wno-switch-enum \ 167*a325d9c4SApple OSS Distributions -Wno-undef \ 168*a325d9c4SApple OSS Distributions -Wno-unused-macros \ 169*a325d9c4SApple OSS Distributions -Wno-used-but-marked-unused \ 170*a325d9c4SApple OSS Distributions -Wno-variadic-macros \ 171*a325d9c4SApple OSS Distributions -Wno-vla \ 172*a325d9c4SApple OSS Distributions -Wno-zero-length-array 173*a325d9c4SApple OSS Distributions 174*a325d9c4SApple OSS Distributions# When a new clang has new warnings disable them here until the kernel is fixed. 175*a325d9c4SApple OSS DistributionsWARNFLAGS_STD := $(WARNFLAGS_STD) \ 176*a325d9c4SApple OSS Distributions -Wno-unknown-warning-option \ 177*a325d9c4SApple OSS Distributions -Wno-anon-enum-enum-conversion \ 178*a325d9c4SApple OSS Distributions -Wno-error=enum-enum-conversion \ 179*a325d9c4SApple OSS Distributions -Wno-error=c99-designator \ 180*a325d9c4SApple OSS Distributions -Wno-error=reorder-init-list 181*a325d9c4SApple OSS Distributions 182*a325d9c4SApple OSS Distributions# Hand-written sign conversion diagnostics are resolved, but the 183*a325d9c4SApple OSS Distributions# auto-generated ones need mig and iig to be updated to fix. Disable the 184*a325d9c4SApple OSS Distributions# diagnostic here until we've completed that: 185*a325d9c4SApple OSS DistributionsWARNFLAGS_STD := $(WARNFLAGS_STD) \ 186*a325d9c4SApple OSS Distributions -Wno-sign-compare \ 187*a325d9c4SApple OSS Distributions -Wno-sign-conversion 188*a325d9c4SApple OSS Distributions 189*a325d9c4SApple OSS Distributions# Opt-ins: 190*a325d9c4SApple OSS DistributionsWARNFLAGS_STD := $(WARNFLAGS_STD) \ 191*a325d9c4SApple OSS Distributions -Wpointer-arith 192*a325d9c4SApple OSS Distributions 193*a325d9c4SApple OSS DistributionsCWARNFLAGS_STD = \ 194*a325d9c4SApple OSS Distributions $(WARNFLAGS_STD) 195*a325d9c4SApple OSS Distributions 196*a325d9c4SApple OSS Distributions 197*a325d9c4SApple OSS Distributions 198*a325d9c4SApple OSS Distributions# Can be overridden in Makefile.template or Makefile.$arch 199*a325d9c4SApple OSS Distributionsexport CWARNFLAGS ?= $(CWARNFLAGS_STD) 200*a325d9c4SApple OSS Distributions 201*a325d9c4SApple OSS Distributionsdefine add_perfile_cflags 202*a325d9c4SApple OSS Distributions$(1)_CWARNFLAGS_ADD += $2 203*a325d9c4SApple OSS Distributionsendef 204*a325d9c4SApple OSS Distributions 205*a325d9c4SApple OSS Distributionsdefine rm_perfile_cflags 206*a325d9c4SApple OSS Distributions$(1)_CFLAGS_RM += $2 207*a325d9c4SApple OSS Distributionsendef 208*a325d9c4SApple OSS Distributions 209*a325d9c4SApple OSS DistributionsCXXWARNFLAGS_STD = \ 210*a325d9c4SApple OSS Distributions $(WARNFLAGS_STD) \ 211*a325d9c4SApple OSS Distributions -Wno-c++98-compat-pedantic \ 212*a325d9c4SApple OSS Distributions -Wno-exit-time-destructors \ 213*a325d9c4SApple OSS Distributions -Wno-global-constructors \ 214*a325d9c4SApple OSS Distributions -Wno-old-style-cast 215*a325d9c4SApple OSS Distributions 216*a325d9c4SApple OSS Distributions# Can be overridden in Makefile.template or Makefile.$arch 217*a325d9c4SApple OSS Distributionsexport CXXWARNFLAGS ?= $(CXXWARNFLAGS_STD) 218*a325d9c4SApple OSS Distributions 219*a325d9c4SApple OSS Distributionsdefine add_perfile_cxxflags 220*a325d9c4SApple OSS Distributions$(1)_CXXWARNFLAGS_ADD += $2 221*a325d9c4SApple OSS Distributionsendef 222*a325d9c4SApple OSS Distributions 223*a325d9c4SApple OSS Distributions# 224*a325d9c4SApple OSS Distributions# Default ARCH_FLAGS, for use with compiler/linker/assembler/mig drivers 225*a325d9c4SApple OSS Distributions 226*a325d9c4SApple OSS DistributionsARCH_FLAGS_X86_64 = -arch x86_64 227*a325d9c4SApple OSS DistributionsARCH_FLAGS_X86_64H = -arch x86_64h 228*a325d9c4SApple OSS Distributions 229*a325d9c4SApple OSS Distributionsifeq ($(RC_ProjectName),xnu_libraries) 230*a325d9c4SApple OSS DistributionsWILL_BUILD_STATIC_KC := 1 231*a325d9c4SApple OSS DistributionsBUILD_STATIC_LINK := 1 232*a325d9c4SApple OSS DistributionsBUILD_XNU_LIBRARY := 1 233*a325d9c4SApple OSS DistributionsRC_NONARCH_CFLAGS += -D__BUILDING_XNU_LIBRARY__=1 234*a325d9c4SApple OSS Distributionsendif 235*a325d9c4SApple OSS Distributions 236*a325d9c4SApple OSS Distributionsifneq ($(filter ARM ARM64,$(CURRENT_ARCH_CONFIG)),) 237*a325d9c4SApple OSS Distributions 238*a325d9c4SApple OSS Distributionsifneq ($(findstring _Sim,$(RC_ProjectName)),) 239*a325d9c4SApple OSS DistributionsARCH_FLAGS_ARM64 = -arch arm64e 240*a325d9c4SApple OSS Distributionselse ifneq ($(findstring _host,$(RC_ProjectName)),) 241*a325d9c4SApple OSS DistributionsARCH_FLAGS_ARM64 = -arch arm64e 242*a325d9c4SApple OSS Distributionselse 243*a325d9c4SApple OSS Distributions 244*a325d9c4SApple OSS Distributionsifndef ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG 245*a325d9c4SApple OSS Distributions 246*a325d9c4SApple OSS Distributionsifneq ($(EMBEDDED_DEVICE_MAP),) 247*a325d9c4SApple OSS Distributionsexport ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG := $(shell $(EMBEDDED_DEVICE_MAP) -db $(EDM_DBPATH) -query SELECT DISTINCT KernelMachOArchitecture FROM Targets WHERE KernelPlatform IS \"$(CURRENT_MACHINE_CONFIG_LC)\" LIMIT 1 || echo UNKNOWN ) 248*a325d9c4SApple OSS Distributionselse 249*a325d9c4SApple OSS Distributions# Without embdedded device map, use a default arch string 250*a325d9c4SApple OSS Distributionsexport ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG := $(shell echo $(CURRENT_ARCH_CONFIG) | tr A-Z a-z) 251*a325d9c4SApple OSS Distributionsifneq ($(filter ARM64,$(CURRENT_ARCH_CONFIG)),) 252*a325d9c4SApple OSS Distributionsexport ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG := arm64e 253*a325d9c4SApple OSS Distributionsendif 254*a325d9c4SApple OSS Distributionsendif 255*a325d9c4SApple OSS Distributionsendif 256*a325d9c4SApple OSS Distributions 257*a325d9c4SApple OSS Distributions# 258*a325d9c4SApple OSS Distributions# This can have false negatives, and is used to avoid calling CTF when we'll build a static KC 259*a325d9c4SApple OSS Distributions# 260*a325d9c4SApple OSS Distributionsifndef WILL_BUILD_STATIC_KC 261*a325d9c4SApple OSS Distributionsifneq ($(EMBEDDED_DEVICE_MAP),) 262*a325d9c4SApple OSS Distributionsexport WILL_BUILD_STATIC_KC := $(shell $(EMBEDDED_DEVICE_MAP) -db $(EDM_DBPATH) \ 263*a325d9c4SApple OSS Distributions -query 'SELECT COUNT(*) != 0 FROM Targets WHERE KernelPlatform IS "$(CURRENT_MACHINE_CONFIG_LC)" \ 264*a325d9c4SApple OSS Distributions AND (KernelMachOArchitecture LIKE "arm64e" OR ProductType LIKE "iphone10,%")') 265*a325d9c4SApple OSS Distributionselse 266*a325d9c4SApple OSS Distributionsexport WILL_BUILD_STATIC_KC := 0 267*a325d9c4SApple OSS Distributionsendif 268*a325d9c4SApple OSS Distributionsendif 269*a325d9c4SApple OSS Distributions 270*a325d9c4SApple OSS DistributionsBUILD_STATIC_LINK := 1 271*a325d9c4SApple OSS Distributions 272*a325d9c4SApple OSS DistributionsARCH_FLAGS_ARM = -arch $(ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG) 273*a325d9c4SApple OSS DistributionsARCH_FLAGS_ARM64 = -arch $(ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG) 274*a325d9c4SApple OSS Distributions 275*a325d9c4SApple OSS Distributionsendif 276*a325d9c4SApple OSS Distributions 277*a325d9c4SApple OSS Distributionselse 278*a325d9c4SApple OSS Distributions# non arm machine config string 279*a325d9c4SApple OSS Distributionsifndef ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG 280*a325d9c4SApple OSS Distributionsexport ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG := $(shell echo $(CURRENT_ARCH_CONFIG) | tr A-Z a-z) 281*a325d9c4SApple OSS Distributionsendif 282*a325d9c4SApple OSS Distributions 283*a325d9c4SApple OSS Distributionsendif 284*a325d9c4SApple OSS Distributions 285*a325d9c4SApple OSS Distributions# 286*a325d9c4SApple OSS Distributions# Default CFLAGS 287*a325d9c4SApple OSS Distributions# 288*a325d9c4SApple OSS Distributionsifdef RC_NONARCH_CFLAGS 289*a325d9c4SApple OSS DistributionsOTHER_CFLAGS = $(RC_NONARCH_CFLAGS) 290*a325d9c4SApple OSS Distributionsendif 291*a325d9c4SApple OSS Distributions 292*a325d9c4SApple OSS Distributions# 293*a325d9c4SApple OSS Distributions# Debug info 294*a325d9c4SApple OSS Distributions# 295*a325d9c4SApple OSS DistributionsDSYMINFODIR = Contents 296*a325d9c4SApple OSS DistributionsDSYMKGMACROSDIR = Contents/Resources 297*a325d9c4SApple OSS DistributionsDSYMLLDBMACROSDIR = Contents/Resources/Python 298*a325d9c4SApple OSS DistributionsDSYMDWARFDIR = Contents/Resources/DWARF 299*a325d9c4SApple OSS Distributions 300*a325d9c4SApple OSS DistributionsDEBUG_CFLAGS := -g 301*a325d9c4SApple OSS DistributionsBUILD_DSYM := 1 302*a325d9c4SApple OSS Distributions 303*a325d9c4SApple OSS Distributions# 304*a325d9c4SApple OSS Distributions# We must not use -fno-keep-inline-functions, or it will remove the dtrace 305*a325d9c4SApple OSS Distributions# probes from the kernel. 306*a325d9c4SApple OSS Distributions# 307*a325d9c4SApple OSS DistributionsCFLAGS_GEN = $(DEBUG_CFLAGS) -nostdinc \ 308*a325d9c4SApple OSS Distributions -ferror-limit=10000 \ 309*a325d9c4SApple OSS Distributions -fno-builtin \ 310*a325d9c4SApple OSS Distributions -fno-common \ 311*a325d9c4SApple OSS Distributions -ftrivial-auto-var-init=zero \ 312*a325d9c4SApple OSS Distributions -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang \ 313*a325d9c4SApple OSS Distributions -fsigned-bitfields \ 314*a325d9c4SApple OSS Distributions -fmerge-all-constants \ 315*a325d9c4SApple OSS Distributions -fno-c++-static-destructors \ 316*a325d9c4SApple OSS Distributions $(OTHER_CFLAGS) 317*a325d9c4SApple OSS Distributions 318*a325d9c4SApple OSS DistributionsCFLAGS_RELEASE = 319*a325d9c4SApple OSS DistributionsCFLAGS_DEVELOPMENT = 320*a325d9c4SApple OSS DistributionsCFLAGS_DEBUG = 321*a325d9c4SApple OSS DistributionsCFLAGS_KASAN = $(CFLAGS_DEVELOPMENT) 322*a325d9c4SApple OSS DistributionsCFLAGS_PROFILE = -pg 323*a325d9c4SApple OSS Distributions 324*a325d9c4SApple OSS DistributionsCFLAGS_X86_64 = -Dx86_64 -DX86_64 -D__X86_64__ -DLP64 \ 325*a325d9c4SApple OSS Distributions -DPAGE_SIZE_FIXED -mkernel -msoft-float 326*a325d9c4SApple OSS Distributions 327*a325d9c4SApple OSS DistributionsCFLAGS_X86_64H = $(CFLAGS_X86_64) 328*a325d9c4SApple OSS Distributions 329*a325d9c4SApple OSS DistributionsCFLAGS_ARM = -Darm -DARM -D__ARM__ -DPAGE_SIZE_FIXED \ 330*a325d9c4SApple OSS Distributions -momit-leaf-frame-pointer -fno-strict-aliasing -D__API__=v4 331*a325d9c4SApple OSS Distributions 332*a325d9c4SApple OSS DistributionsLARGE_MEMORY_DEFINE=-UARM_LARGE_MEMORY 333*a325d9c4SApple OSS DistributionsARM64_PLKSEG_ADDR =0xfffffff004004000 334*a325d9c4SApple OSS DistributionsARM64_LINK_ADDR =0xfffffff007004000 335*a325d9c4SApple OSS Distributions 336*a325d9c4SApple OSS Distributions# Use ARM_LARGE_MEMORY config for all MacOSX targets. 337*a325d9c4SApple OSS Distributionsifneq ($(filter $(PLATFORM),MacOSX),) 338*a325d9c4SApple OSS DistributionsLARGE_MEMORY_DEFINE=-DARM_LARGE_MEMORY=1 339*a325d9c4SApple OSS DistributionsARM64_PLKSEG_ADDR =0xfffffe0004004000 340*a325d9c4SApple OSS DistributionsARM64_LINK_ADDR =0xfffffe0007004000 341*a325d9c4SApple OSS Distributionsendif 342*a325d9c4SApple OSS Distributions 343*a325d9c4SApple OSS Distributions 344*a325d9c4SApple OSS DistributionsCFLAGS_ARM64 = -Darm64 -DARM64 -D__ARM64__ -DLP64 -DPAGE_SIZE_FIXED -DVM_KERNEL_LINK_ADDRESS=$(ARM64_LINK_ADDR) \ 345*a325d9c4SApple OSS Distributions $(LARGE_MEMORY_DEFINE) -momit-leaf-frame-pointer -fno-strict-aliasing -D__API__=v4 -mkernel 346*a325d9c4SApple OSS Distributions 347*a325d9c4SApple OSS DistributionsCFLAGS_RELEASEX86_64 = -O2 348*a325d9c4SApple OSS DistributionsCFLAGS_DEVELOPMENTX86_64 = -O2 349*a325d9c4SApple OSS DistributionsCFLAGS_KASANX86_64 = $(CFLAGS_DEVELOPMENTX86_64) 350*a325d9c4SApple OSS Distributions# No space optimization for the DEBUG kernel for the benefit of gdb: 351*a325d9c4SApple OSS DistributionsCFLAGS_DEBUGX86_64 = -O0 352*a325d9c4SApple OSS DistributionsCFLAGS_PROFILEX86_64 = -O2 353*a325d9c4SApple OSS Distributions 354*a325d9c4SApple OSS DistributionsCFLAGS_RELEASEX86_64H = -O2 355*a325d9c4SApple OSS DistributionsCFLAGS_DEVELOPMENTX86_64H = -O2 356*a325d9c4SApple OSS DistributionsCFLAGS_KASANX86_64H = $(CFLAGS_DEVELOPMENTX86_64H) 357*a325d9c4SApple OSS Distributions# No space optimization for the DEBUG kernel for the benefit of gdb: 358*a325d9c4SApple OSS DistributionsCFLAGS_DEBUGX86_64H = -O0 359*a325d9c4SApple OSS DistributionsCFLAGS_PROFILEX86_64H = -O2 360*a325d9c4SApple OSS Distributions 361*a325d9c4SApple OSS DistributionsCFLAGS_RELEASEARM = -O2 362*a325d9c4SApple OSS DistributionsCFLAGS_DEVELOPMENTARM = -O2 363*a325d9c4SApple OSS DistributionsCFLAGS_DEBUGARM = -O0 364*a325d9c4SApple OSS DistributionsCFLAGS_PROFILEARM = -O2 365*a325d9c4SApple OSS Distributions 366*a325d9c4SApple OSS DistributionsCFLAGS_RELEASEARM64 = -O2 367*a325d9c4SApple OSS DistributionsCFLAGS_DEVELOPMENTARM64 = -O2 368*a325d9c4SApple OSS DistributionsCFLAGS_KASANARM64 = $(CFLAGS_DEVELOPMENTARM64) 369*a325d9c4SApple OSS DistributionsCFLAGS_DEBUGARM64 = -O0 370*a325d9c4SApple OSS DistributionsCFLAGS_PROFILEARM64 = -O2 371*a325d9c4SApple OSS Distributions 372*a325d9c4SApple OSS Distributions# 373*a325d9c4SApple OSS Distributions# bound-checking support 374*a325d9c4SApple OSS Distributions# 375*a325d9c4SApple OSS Distributions# BOUND_CHECKS=0 disables, else support is dynamically detected 376*a325d9c4SApple OSS Distributions# 377*a325d9c4SApple OSS Distributions### ifndef BOUND_CHECKS 378*a325d9c4SApple OSS Distributions### ifeq ($(shell $(CC) -E -fbounds-attributes /dev/null 2>/dev/null && echo 1),1) 379*a325d9c4SApple OSS Distributions### export BOUND_CHECKS := 1 380*a325d9c4SApple OSS Distributions### else 381*a325d9c4SApple OSS Distributions### export BOUND_CHECKS := 0 382*a325d9c4SApple OSS Distributions### endif 383*a325d9c4SApple OSS Distributions### endif # ifndef BOUND_CHECKS 384*a325d9c4SApple OSS Distributionsifeq ($(BOUND_CHECKS),1) 385*a325d9c4SApple OSS DistributionsCFLAGS_BOUND_CHECKS = -DXNU_BOUND_CHECKS=1 -fbounds-attributes 386*a325d9c4SApple OSS Distributionsifneq ($(shell $(CC) -E -fbounds-attributes /dev/null 2>/dev/null && echo 1),1) 387*a325d9c4SApple OSS Distributions $(error "your toolchain doesn't support bound checking") 388*a325d9c4SApple OSS Distributionsendif 389*a325d9c4SApple OSS Distributionselse 390*a325d9c4SApple OSS DistributionsCFLAGS_BOUND_CHECKS = -UXNU_BOUND_CHECKS 391*a325d9c4SApple OSS Distributionsendif 392*a325d9c4SApple OSS Distributions 393*a325d9c4SApple OSS Distributions# 394*a325d9c4SApple OSS Distributions# Sanitizers Support (KASan, UBSan) 395*a325d9c4SApple OSS Distributions# 396*a325d9c4SApple OSS Distributions 397*a325d9c4SApple OSS Distributions# Which kernel configurations are built with KCOV enabled. 398*a325d9c4SApple OSS DistributionsKCOV_RUNTIME := KASAN 399*a325d9c4SApple OSS Distributions 400*a325d9c4SApple OSS Distributionsifneq ($(filter RELEASE, $(KCOV_RUNTIME)),) 401*a325d9c4SApple OSS Distributions$(error "Sanitizer runtime should not be eabled for RELEASE kernel.") 402*a325d9c4SApple OSS Distributionsendif 403*a325d9c4SApple OSS Distributions 404*a325d9c4SApple OSS Distributions 405*a325d9c4SApple OSS DistributionsSAN=0 406*a325d9c4SApple OSS Distributions 407*a325d9c4SApple OSS Distributions# KASan support 408*a325d9c4SApple OSS Distributions# 409*a325d9c4SApple OSS Distributions 410*a325d9c4SApple OSS Distributionsifeq ($(CURRENT_KERNEL_CONFIG),KASAN) 411*a325d9c4SApple OSS Distributions# KASan kernel config implicitly enables the KASan instrumentation. 412*a325d9c4SApple OSS Distributions# Instrumentation for other sanitizers is enabled explicitly at build time. 413*a325d9c4SApple OSS DistributionsKASAN = 1 414*a325d9c4SApple OSS Distributionsendif 415*a325d9c4SApple OSS Distributions 416*a325d9c4SApple OSS Distributionsifeq ($(KASAN),1) 417*a325d9c4SApple OSS DistributionsSAN=1 418*a325d9c4SApple OSS DistributionsBUILD_LTO=0 419*a325d9c4SApple OSS Distributions 420*a325d9c4SApple OSS Distributions# KASAN_CLASSIC is currently the default 421*a325d9c4SApple OSS DistributionsKASAN_CLASSIC=1 422*a325d9c4SApple OSS Distributions 423*a325d9c4SApple OSS DistributionsKASAN_BLACKLIST=$(OBJROOT)/san/kasan-blacklist-$(CURRENT_ARCH_CONFIG_LC) 424*a325d9c4SApple OSS Distributions 425*a325d9c4SApple OSS Distributions# KASAN supports two different runtime models, KASAN_CLASSIC and KASAN_TBI. 426*a325d9c4SApple OSS Distributions# Shadow map scale differs between the two. With KASAN_SCALE=N, the shadow memory consumes 1/2^N of 427*a325d9c4SApple OSS Distributions# the virtual address space. 428*a325d9c4SApple OSS Distributionsifeq ($(KASAN_TBI), 1) 429*a325d9c4SApple OSS DistributionsKASAN_SCALE=4 430*a325d9c4SApple OSS DistributionsKASAN_OFFSET_ARM64=0xf000000000000000 431*a325d9c4SApple OSS DistributionsKASAN_OFFSET=$(KASAN_OFFSET_ARM64) 432*a325d9c4SApple OSS DistributionsCFLAGS_KASAN_TBI = -fsanitize=kernel-hwaddress \ 433*a325d9c4SApple OSS Distributions -fsanitize-blacklist=$(KASAN_BLACKLIST) \ 434*a325d9c4SApple OSS Distributions -mllvm -hwasan-recover=0 \ 435*a325d9c4SApple OSS Distributions -mllvm -hwasan-mapping-offset=$(KASAN_OFFSET) \ 436*a325d9c4SApple OSS Distributions -mllvm -hwasan-instrument-atomics=0 \ 437*a325d9c4SApple OSS Distributions -mllvm -hwasan-instrument-stack=0 \ 438*a325d9c4SApple OSS Distributions -mllvm -hwasan-uar-retag-to-zero=1 \ 439*a325d9c4SApple OSS Distributions -mllvm -hwasan-generate-tags-with-calls=1 \ 440*a325d9c4SApple OSS Distributions -mllvm -hwasan-instrument-with-calls=0 \ 441*a325d9c4SApple OSS Distributions -mllvm -hwasan-memory-access-callback-prefix="__asan_" 442*a325d9c4SApple OSS Distributions 443*a325d9c4SApple OSS DistributionsCFLAGS_KASAN_MODEL_TAG=-DKASAN_TBI=1 444*a325d9c4SApple OSS DistributionsCFLAGS_KASAN_MODEL=$(CFLAGS_KASAN_TBI) 445*a325d9c4SApple OSS Distributionselse ifeq ($(KASAN_CLASSIC), 1) 446*a325d9c4SApple OSS DistributionsKASAN_SCALE=3 447*a325d9c4SApple OSS DistributionsKASAN_OFFSET_ARM64=0xe000000000000000 448*a325d9c4SApple OSS Distributions# To calculate the kasan offset, subtract the lowest KVA to sanitize, shifted right by 3 bits, 449*a325d9c4SApple OSS Distributions# from the base address of the kasan shadow area, (e.g. solve the following equation: 450*a325d9c4SApple OSS Distributions# OFFSET = {VA mapped by the first KASAN PML4 [Currently #494]} - (LOWEST_KVA >> 3) 451*a325d9c4SApple OSS Distributions# OFFSET = (0ULL - (512GiB * (512 - 494))) - (LOWEST_SAN_KVA >> 3) 452*a325d9c4SApple OSS Distributions# OFFSET = FFFFF70000000000 - ((0ULL - (512GiB * (512 - 496))) >> 3) [PML4 #496 is the first possible KVA] 453*a325d9c4SApple OSS Distributions# OFFSET = FFFFF70000000000 - (FFFFF80000000000 >> 3) 454*a325d9c4SApple OSS Distributions# OFFSET = DFFFF80000000000 455*a325d9c4SApple OSS Distributions# ). 456*a325d9c4SApple OSS DistributionsKASAN_OFFSET_X86_64=0xdffff80000000000 457*a325d9c4SApple OSS DistributionsKASAN_OFFSET_X86_64H=$(KASAN_OFFSET_X86_64) 458*a325d9c4SApple OSS DistributionsKASAN_OFFSET=$($(addsuffix $(CURRENT_ARCH_CONFIG),KASAN_OFFSET_)) 459*a325d9c4SApple OSS Distributions 460*a325d9c4SApple OSS DistributionsCFLAGS_KASAN_CLASSIC= -fsanitize=address \ 461*a325d9c4SApple OSS Distributions -mllvm -asan-globals-live-support \ 462*a325d9c4SApple OSS Distributions -mllvm -asan-mapping-offset=$(KASAN_OFFSET) \ 463*a325d9c4SApple OSS Distributions -fsanitize-blacklist=$(KASAN_BLACKLIST) 464*a325d9c4SApple OSS Distributions 465*a325d9c4SApple OSS DistributionsCFLAGS_KASAN_MODEL_TAG = -DKASAN_CLASSIC=1 466*a325d9c4SApple OSS DistributionsCFLAGS_KASAN_MODEL = $(CFLAGS_KASAN_CLASSIC) 467*a325d9c4SApple OSS Distributions 468*a325d9c4SApple OSS Distributionselse 469*a325d9c4SApple OSS Distributions$(error No KASAN model specified) 470*a325d9c4SApple OSS Distributionsendif 471*a325d9c4SApple OSS Distributions 472*a325d9c4SApple OSS DistributionsCFLAGS_GEN += -DKASAN=1 -DKASAN_OFFSET=$(KASAN_OFFSET) -DKASAN_SCALE=$(KASAN_SCALE) \ 473*a325d9c4SApple OSS Distributions $(CFLAGS_KASAN_MODEL) $(CFLAGS_KASAN_MODEL_TAG) 474*a325d9c4SApple OSS Distributions 475*a325d9c4SApple OSS Distributionsendif 476*a325d9c4SApple OSS Distributions 477*a325d9c4SApple OSS Distributions# UBSan 478*a325d9c4SApple OSS Distributions# 479*a325d9c4SApple OSS Distributions# The Undefined Behavior sanitizer runtime is always built as part of, and only for, 480*a325d9c4SApple OSS Distributions# KASAN variants. UBSan instrumentation is disabled by default and only enabled explicitly 481*a325d9c4SApple OSS Distributions# when building with UBSAN=1. 482*a325d9c4SApple OSS Distributions# 483*a325d9c4SApple OSS Distributions# On iOS RELEASE and DEVELOPMENT kernels, a subset of UBSan checks is enabled along with a minimal 484*a325d9c4SApple OSS Distributions# runtime that emulates trap mode (but makes it recoverable). 485*a325d9c4SApple OSS Distributions 486*a325d9c4SApple OSS Distributionsifeq ($(KASAN), 1) 487*a325d9c4SApple OSS Distributions 488*a325d9c4SApple OSS Distributionsifeq ($(UBSAN),1) 489*a325d9c4SApple OSS DistributionsSAN=1 490*a325d9c4SApple OSS Distributions 491*a325d9c4SApple OSS DistributionsUBSAN_RUNTIME = 492*a325d9c4SApple OSS DistributionsUBSAN_CHECKS += signed-integer-overflow shift pointer-overflow bounds object-size # non-fatal (calls runtime, can return) 493*a325d9c4SApple OSS Distributions# UBSAN_CHECKS = undefined nullability unsigned-integer-overflow # everything 494*a325d9c4SApple OSS DistributionsUBSAN_CHECKS_FATAL = # fatal (calls runtime, must not return) 495*a325d9c4SApple OSS DistributionsUBSAN_CHECKS_TRAP = vla-bound builtin # emit a trap instruction (no runtime support) 496*a325d9c4SApple OSS DistributionsUBSAN_DISABLED += vptr function # requires unsupported C++ runtime 497*a325d9c4SApple OSS Distributions 498*a325d9c4SApple OSS Distributions# UBSan alignment + KASan code size is too large 499*a325d9c4SApple OSS Distributions# UBSan unreachable doesn't play nice with ASan (40723397) 500*a325d9c4SApple OSS DistributionsUBSAN_DISABLED += alignment unreachable 501*a325d9c4SApple OSS Distributions 502*a325d9c4SApple OSS Distributionsendif 503*a325d9c4SApple OSS Distributions 504*a325d9c4SApple OSS Distributionselse 505*a325d9c4SApple OSS Distributions 506*a325d9c4SApple OSS Distributions# DEVELOPMENT and RELEASE variants 507*a325d9c4SApple OSS Distributionsifeq ($(PLATFORM),iPhoneOS) 508*a325d9c4SApple OSS Distributions 509*a325d9c4SApple OSS Distributions# Currently we have to keep alive two separated UBSAN runtimes (minimal for DEVELOPMENT, 510*a325d9c4SApple OSS Distributions# full for KASAN). This implies that we cannot use CFLAGS_$(CURRENT_KERNEL_CONFIG), because 511*a325d9c4SApple OSS Distributions# CFLAGS_DEVELOPMENT is folded into CFLAGS_KASAN. For the time being we leave this check here, 512*a325d9c4SApple OSS Distributions# as we work (independently) to both break the CFLAGS direct dependency and commonize the 513*a325d9c4SApple OSS Distributions# sanitizer runtimes. 514*a325d9c4SApple OSS DistributionsUBSAN_MINIMAL_RUNTIME := DEVELOPMENT DEBUG 515*a325d9c4SApple OSS Distributionsifneq ($(filter $(CURRENT_KERNEL_CONFIG), $(UBSAN_MINIMAL_RUNTIME)),) 516*a325d9c4SApple OSS Distributions 517*a325d9c4SApple OSS Distributions# This is (unfortunately) intentional. Currently the "kasan" blacklist, which folds both 518*a325d9c4SApple OSS Distributions# ubsan and kasan specific files, is generated for all builds during the 519*a325d9c4SApple OSS Distributions# setup phase. The blacklist file itself is divided per-sanitizer, so won't 520*a325d9c4SApple OSS Distributions# affect the UBSAN build outside of the entries that are legitimately 521*a325d9c4SApple OSS Distributions# intended for it. 522*a325d9c4SApple OSS DistributionsUBSAN_BLACKLIST=$(OBJROOT)/san/kasan-blacklist-$(CURRENT_ARCH_CONFIG_LC) 523*a325d9c4SApple OSS Distributions 524*a325d9c4SApple OSS DistributionsUBSAN_CHECKS = signed-integer-overflow 525*a325d9c4SApple OSS DistributionsUBSAN_RUNTIME = -fsanitize-minimal-runtime -fsanitize-blacklist=$(UBSAN_BLACKLIST) 526*a325d9c4SApple OSS DistributionsUBSAN_CHECKS_TRAP = 527*a325d9c4SApple OSS DistributionsUBSAN_CHECKS_FATAL = 528*a325d9c4SApple OSS DistributionsUBSAN_DISABLED = 529*a325d9c4SApple OSS Distributionsendif 530*a325d9c4SApple OSS Distributionsendif 531*a325d9c4SApple OSS Distributions 532*a325d9c4SApple OSS Distributionsendif 533*a325d9c4SApple OSS Distributions 534*a325d9c4SApple OSS DistributionsCFLAGS_GEN += $(UBSAN_RUNTIME) 535*a325d9c4SApple OSS DistributionsCFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS) $(UBSAN_CHECKS_FATAL) $(UBSAN_CHECKS_TRAP),-fsanitize=$(x)) 536*a325d9c4SApple OSS DistributionsCFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS_FATAL),-fno-sanitize-recover=$(x)) 537*a325d9c4SApple OSS DistributionsCFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS_TRAP),-fsanitize-trap=$(x)) 538*a325d9c4SApple OSS DistributionsCFLAGS_GEN += $(foreach x,$(UBSAN_DISABLED),-fno-sanitize=$(x)) 539*a325d9c4SApple OSS Distributions 540*a325d9c4SApple OSS Distributionsifeq ($(KSANCOV),1) 541*a325d9c4SApple OSS Distributions# Enable SanitizerCoverage instrumentation in xnu 542*a325d9c4SApple OSS DistributionsSAN = 1 543*a325d9c4SApple OSS DistributionsKCOV_BLACKLIST := $(OBJROOT)/san/kcov-blacklist-$(CURRENT_ARCH_CONFIG_LC) 544*a325d9c4SApple OSS DistributionsKCOV_CFLAGS := -fsanitize-coverage=trace-pc-guard -fsanitize-coverage-blocklist=$(KCOV_BLACKLIST) 545*a325d9c4SApple OSS DistributionsCFLAGS_GEN += $(KCOV_CFLAGS) -DKSANCOV=1 546*a325d9c4SApple OSS Distributionsendif 547*a325d9c4SApple OSS Distributions 548*a325d9c4SApple OSS Distributionsifeq ($(SAN),1) 549*a325d9c4SApple OSS DistributionsCFLAGS_GEN += -fsanitize-blacklist=$(OBJROOT)/san/kasan-blacklist-$(CURRENT_ARCH_CONFIG_LC) 550*a325d9c4SApple OSS Distributionsendif 551*a325d9c4SApple OSS Distributions 552*a325d9c4SApple OSS Distributions 553*a325d9c4SApple OSS DistributionsCFLAGS = $(CFLAGS_GEN) \ 554*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_MACHINE_CONFIG),MACHINE_FLAGS_$(CURRENT_ARCH_CONFIG)_)) \ 555*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \ 556*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),CFLAGS_)) \ 557*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_KERNEL_CONFIG),CFLAGS_)) \ 558*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG), $(addsuffix $(CURRENT_KERNEL_CONFIG),CFLAGS_))) \ 559*a325d9c4SApple OSS Distributions $(DEPLOYMENT_TARGET_FLAGS) \ 560*a325d9c4SApple OSS Distributions $(DEPLOYMENT_TARGET_DEFINES) \ 561*a325d9c4SApple OSS Distributions $(BOUND_CHECKS_DEFINES) \ 562*a325d9c4SApple OSS Distributions $(DEFINES) 563*a325d9c4SApple OSS Distributions 564*a325d9c4SApple OSS Distributions# 565*a325d9c4SApple OSS Distributions# Default C++ flags 566*a325d9c4SApple OSS Distributions# 567*a325d9c4SApple OSS Distributions 568*a325d9c4SApple OSS DistributionsOTHER_CXXFLAGS = 569*a325d9c4SApple OSS Distributions 570*a325d9c4SApple OSS DistributionsCXXFLAGS_GEN = -std=gnu++1z -fsized-deallocation -fapple-kext $(OTHER_CXXFLAGS) 571*a325d9c4SApple OSS Distributions 572*a325d9c4SApple OSS DistributionsCXXFLAGS = $(CXXFLAGS_GEN) \ 573*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),CXXFLAGS_)) \ 574*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_KERNEL_CONFIG),CXXFLAGS_)) 575*a325d9c4SApple OSS Distributions 576*a325d9c4SApple OSS Distributions# 577*a325d9c4SApple OSS Distributions# Assembler command 578*a325d9c4SApple OSS Distributions# 579*a325d9c4SApple OSS DistributionsAS = $(CCACHE) $(CC) 580*a325d9c4SApple OSS DistributionsS_KCC = $(CC) 581*a325d9c4SApple OSS Distributions 582*a325d9c4SApple OSS Distributions# 583*a325d9c4SApple OSS Distributions# Default SFLAGS 584*a325d9c4SApple OSS Distributions# 585*a325d9c4SApple OSS DistributionsSFLAGS_GEN = -D__ASSEMBLER__ -DASSEMBLER $(OTHER_CFLAGS) 586*a325d9c4SApple OSS Distributions 587*a325d9c4SApple OSS DistributionsSFLAGS_RELEASE = 588*a325d9c4SApple OSS DistributionsSFLAGS_DEVELOPMENT = 589*a325d9c4SApple OSS Distributions 590*a325d9c4SApple OSS Distributions# When making non-compatible changes to the XNU runtime, it can be useful to build 591*a325d9c4SApple OSS Distributions# a KASAN kernel + runtime, but linked against a DEVELOPMENT kernel cache. 592*a325d9c4SApple OSS Distributions# Uncomment the lines below to be able to build development, but passing KASAN=1. 593*a325d9c4SApple OSS Distributions# #_ifeq ($(KASAN),1) 594*a325d9c4SApple OSS Distributions# SFLAGS_DEVELOPMENT += -DKASAN=1 595*a325d9c4SApple OSS Distributions# #_endif 596*a325d9c4SApple OSS Distributions 597*a325d9c4SApple OSS DistributionsSFLAGS_KASAN = $(SFLAGS_DEVELOPMENT) -DKASAN=1 598*a325d9c4SApple OSS DistributionsSFLAGS_DEBUG = 599*a325d9c4SApple OSS DistributionsSFLAGS_PROFILE = 600*a325d9c4SApple OSS Distributions 601*a325d9c4SApple OSS DistributionsSFLAGS_X86_64 = $(CFLAGS_X86_64) 602*a325d9c4SApple OSS DistributionsSFLAGS_X86_64H = $(CFLAGS_X86_64H) 603*a325d9c4SApple OSS DistributionsSFLAGS_ARM = $(CFLAGS_ARM) 604*a325d9c4SApple OSS DistributionsSFLAGS_ARM64 = $(CFLAGS_ARM64) 605*a325d9c4SApple OSS Distributions 606*a325d9c4SApple OSS DistributionsSFLAGS = $(SFLAGS_GEN) \ 607*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_MACHINE_CONFIG),MACHINE_FLAGS_$(CURRENT_ARCH_CONFIG)_)) \ 608*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \ 609*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),SFLAGS_)) \ 610*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_KERNEL_CONFIG),SFLAGS_)) \ 611*a325d9c4SApple OSS Distributions $(DEPLOYMENT_TARGET_FLAGS) \ 612*a325d9c4SApple OSS Distributions $(DEPLOYMENT_TARGET_DEFINES) \ 613*a325d9c4SApple OSS Distributions $(DEFINES) 614*a325d9c4SApple OSS Distributions 615*a325d9c4SApple OSS Distributions# 616*a325d9c4SApple OSS Distributions# Linker command 617*a325d9c4SApple OSS Distributions# 618*a325d9c4SApple OSS DistributionsLD = $(KC++) -nostdlib 619*a325d9c4SApple OSS Distributions 620*a325d9c4SApple OSS Distributions# 621*a325d9c4SApple OSS Distributions# Default LDFLAGS 622*a325d9c4SApple OSS Distributions# 623*a325d9c4SApple OSS Distributions# Availability of DWARF allows DTrace CTF (compressed type format) to be constructed. 624*a325d9c4SApple OSS Distributions# ctf_insert creates the CTF section. It needs reserved padding in the 625*a325d9c4SApple OSS Distributions# headers for the load command segment and the CTF section structures. 626*a325d9c4SApple OSS Distributions# 627*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_GEN = \ 628*a325d9c4SApple OSS Distributions -nostdlib \ 629*a325d9c4SApple OSS Distributions -fapple-kext \ 630*a325d9c4SApple OSS Distributions -Wl,-e,__start \ 631*a325d9c4SApple OSS Distributions -Wl,-sectalign,__TEXT,__text,0x1000 \ 632*a325d9c4SApple OSS Distributions -Wl,-sectalign,__DATA,__percpu,0x80 \ 633*a325d9c4SApple OSS Distributions -Wl,-sectalign,__DATA,__common,0x1000 \ 634*a325d9c4SApple OSS Distributions -Wl,-sectalign,__DATA,__bss,0x1000 \ 635*a325d9c4SApple OSS Distributions -Wl,-sectcreate,__PRELINK_TEXT,__text,/dev/null \ 636*a325d9c4SApple OSS Distributions -Wl,-segprot,__PRELINK_TEXT,r-x,r-x \ 637*a325d9c4SApple OSS Distributions -Wl,-sectcreate,__PRELINK_INFO,__info,/dev/null \ 638*a325d9c4SApple OSS Distributions -Wl,-new_linker \ 639*a325d9c4SApple OSS Distributions -Wl,-pagezero_size,0x0 \ 640*a325d9c4SApple OSS Distributions -Wl,-version_load_command \ 641*a325d9c4SApple OSS Distributions -Wl,-function_starts \ 642*a325d9c4SApple OSS Distributions -Wl,-headerpad,152 643*a325d9c4SApple OSS Distributions 644*a325d9c4SApple OSS Distributions# LDFLAGS_KERNEL_SDK = -L$(SDKROOT)/usr/local/lib/kernel -lfirehose_kernel 645*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_SDK = -L$(SDKROOT)/usr/local/lib/kernel 646*a325d9c4SApple OSS Distributions 647*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_RELEASE = 648*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEVELOPMENT = 649*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_KASAN = $(LDFLAGS_KERNEL_DEVELOPMENT) 650*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEBUG = 651*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_PROFILE = 652*a325d9c4SApple OSS Distributions 653*a325d9c4SApple OSS Distributions# KASLR static slide config: 654*a325d9c4SApple OSS Distributionsifndef SLIDE 655*a325d9c4SApple OSS DistributionsSLIDE=0x00 656*a325d9c4SApple OSS Distributionsendif 657*a325d9c4SApple OSS DistributionsKERNEL_MIN_ADDRESS = 0xffffff8000000000 658*a325d9c4SApple OSS DistributionsKERNEL_BASE_OFFSET = 0x100000 659*a325d9c4SApple OSS Distributions# POSIX shells use signed long for their arithmetic expressions. However, 660*a325d9c4SApple OSS Distributions# we're dealing with uintptr_t values here, so explicitly use bash which 661*a325d9c4SApple OSS Distributions# is known to be able to handle such larger values. ksh also works; dash 662*a325d9c4SApple OSS Distributions# and zsh both fail with different results (zsh even warns you). 663*a325d9c4SApple OSS DistributionsKERNEL_STATIC_SLIDE = $(shell $(BASH) -c 'printf "0x%016x" \ 664*a325d9c4SApple OSS Distributions $$(( $(SLIDE) << 21 ))') 665*a325d9c4SApple OSS DistributionsKERNEL_STATIC_BASE = $(shell $(BASH) -c 'printf "0x%016x" \ 666*a325d9c4SApple OSS Distributions $$(( $(KERNEL_MIN_ADDRESS) + $(KERNEL_BASE_OFFSET) ))') 667*a325d9c4SApple OSS DistributionsKERNEL_HIB_SECTION_BASE = $(shell $(BASH) -c 'printf "0x%016x" \ 668*a325d9c4SApple OSS Distributions $$(( $(KERNEL_STATIC_BASE) + $(KERNEL_STATIC_SLIDE) ))') 669*a325d9c4SApple OSS DistributionsKERNEL_TEXT_BASE = $(shell $(BASH) -c 'printf "0x%016x" \ 670*a325d9c4SApple OSS Distributions $$(( $(KERNEL_HIB_SECTION_BASE) + 0x100000 ))') 671*a325d9c4SApple OSS Distributions 672*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_RELEASEX86_64 = \ 673*a325d9c4SApple OSS Distributions -Wl,-pie \ 674*a325d9c4SApple OSS Distributions -Wl,-segaddr,__HIB,$(KERNEL_HIB_SECTION_BASE) \ 675*a325d9c4SApple OSS Distributions -Wl,-image_base,$(KERNEL_TEXT_BASE) \ 676*a325d9c4SApple OSS Distributions -Wl,-seg_page_size,__TEXT,0x200000 \ 677*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__bootPT,0x1000 \ 678*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__desc,0x1000 \ 679*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__data,0x1000 \ 680*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__text,0x1000 \ 681*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__const,0x1000 \ 682*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__bss,0x1000 \ 683*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__common,0x1000 \ 684*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__llvm_prf_cnts,0x1000 \ 685*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__llvm_prf_names,0x1000 \ 686*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__llvm_prf_data,0x1000 \ 687*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__textcoal_nt,0x1000 \ 688*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__cstring,0x1000 \ 689*a325d9c4SApple OSS Distributions -Wl,-rename_section,__DATA,__const,__DATA_CONST,__const \ 690*a325d9c4SApple OSS Distributions -Wl,-segprot,__DATA_CONST,r--,r-- \ 691*a325d9c4SApple OSS Distributions -Wl,-rename_section,__KLD,__const,__KLDDATA,__const \ 692*a325d9c4SApple OSS Distributions -Wl,-rename_section,__KLD,__cstring,__KLDDATA,__cstring \ 693*a325d9c4SApple OSS Distributions -Wl,-segprot,__KLDDATA,rw-,rw- \ 694*a325d9c4SApple OSS Distributions -Wl,-segprot,__KLD,r-x,r-x \ 695*a325d9c4SApple OSS Distributions -Wl,-no_zero_fill_sections \ 696*a325d9c4SApple OSS Distributions $(LDFLAGS_NOSTRIP_FLAG) 697*a325d9c4SApple OSS Distributions 698*a325d9c4SApple OSS Distributionsifeq ($(SAN),1) 699*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_RELEASEX86_64 += \ 700*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__cstring,0x1000 701*a325d9c4SApple OSS Distributionsendif 702*a325d9c4SApple OSS Distributions 703*a325d9c4SApple OSS Distributionsifeq ($(KSANCOV),1) 704*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_RELEASEX86_64 += \ 705*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__sancov_guards,0x1000 \ 706*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__sancov_pcs,0x1000 707*a325d9c4SApple OSS Distributionsendif 708*a325d9c4SApple OSS Distributions 709*a325d9c4SApple OSS Distributions# Define KERNEL_BASE_OFFSET so known at compile time: 710*a325d9c4SApple OSS DistributionsCFLAGS_X86_64 += -DKERNEL_BASE_OFFSET=$(KERNEL_BASE_OFFSET) 711*a325d9c4SApple OSS DistributionsCFLAGS_X86_64H += -DKERNEL_BASE_OFFSET=$(KERNEL_BASE_OFFSET) 712*a325d9c4SApple OSS Distributions 713*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEBUGX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64) 714*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEVELOPMENTX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64) 715*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_KASANX86_64 = $(LDFLAGS_KERNEL_DEVELOPMENTX86_64) \ 716*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__asan_globals,0x1000 \ 717*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__asan_liveness,0x1000 \ 718*a325d9c4SApple OSS Distributions -Wl,-sectalign,__HIB,__mod_term_func,0x1000 \ 719*a325d9c4SApple OSS Distributions -Wl,-rename_section,__HIB,__mod_init_func,__NULL,__mod_init_func \ 720*a325d9c4SApple OSS Distributions -Wl,-rename_section,__HIB,__eh_frame,__NULL,__eh_frame 721*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_PROFILEX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64) 722*a325d9c4SApple OSS Distributions 723*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_RELEASEX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64) 724*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEBUGX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H) 725*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEVELOPMENTX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H) 726*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_KASANX86_64H = $(LDFLAGS_KERNEL_KASANX86_64) 727*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_PROFILEX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H) 728*a325d9c4SApple OSS Distributions 729*a325d9c4SApple OSS Distributions# We preload ___udivmoddi4 in order to work around an issue with building 730*a325d9c4SApple OSS Distributions# LTO on armv7. 731*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_GENARM = \ 732*a325d9c4SApple OSS Distributions -Wl,-pie \ 733*a325d9c4SApple OSS Distributions -Wl,-static \ 734*a325d9c4SApple OSS Distributions -Wl,-image_base,0x80001000 \ 735*a325d9c4SApple OSS Distributions -Wl,-sectalign,__DATA,__const,0x1000 \ 736*a325d9c4SApple OSS Distributions -Wl,-u,___udivmoddi4 \ 737*a325d9c4SApple OSS Distributions -Wl,-rename_section,__KLD,__const,__KLDDATA,__const \ 738*a325d9c4SApple OSS Distributions -Wl,-rename_section,__KLD,__cstring,__KLDDATA,__cstring \ 739*a325d9c4SApple OSS Distributions -Wl,-segprot,__KLDDATA,rw-,rw- \ 740*a325d9c4SApple OSS Distributions -Wl,-segprot,__KLD,r-x,r-x 741*a325d9c4SApple OSS Distributions 742*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_RELEASEARM = \ 743*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_GENARM) \ 744*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_STRIP_LTO) 745*a325d9c4SApple OSS Distributions 746*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_CONFIG_RELEASEARM = \ 747*a325d9c4SApple OSS Distributions -Wl,-exported_symbols_list,$(TARGET)/all-kpi.exp 748*a325d9c4SApple OSS Distributions 749*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEVELOPMENTARM = \ 750*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_GENARM) \ 751*a325d9c4SApple OSS Distributions $(LDFLAGS_NOSTRIP_FLAG) 752*a325d9c4SApple OSS Distributions 753*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_CONFIG_DEVELOPMENTARM = 754*a325d9c4SApple OSS Distributions 755*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEBUGARM = $(LDFLAGS_KERNEL_DEVELOPMENTARM) 756*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_CONFIG_DEBUGARM = $(LDFLAGS_KERNEL_ONLY_CONFIG_DEVELOPMENTARM) 757*a325d9c4SApple OSS Distributions 758*a325d9c4SApple OSS Distributions# Offset image base by page to have iBoot load kernel TEXT correctly. 759*a325d9c4SApple OSS Distributions# First page is used for various purposes : sleep token, reset vector. 760*a325d9c4SApple OSS Distributions# We also need a 32MB offset, as this is the minimum block mapping size 761*a325d9c4SApple OSS Distributions# for a 16KB page runtime, and we wish to use the first virtual block 762*a325d9c4SApple OSS Distributions# to map the low globals page. We also need another 4MB to account for 763*a325d9c4SApple OSS Distributions# the address space reserved by L4 (because the reservation is not a 764*a325d9c4SApple OSS Distributions# multiple of the block size in alignment/length, we will implictly map 765*a325d9c4SApple OSS Distributions# it with our block mapping, and we therefore must reflect that the 766*a325d9c4SApple OSS Distributions# first 4MB of the block mapping for xnu do not belong to xnu). 767*a325d9c4SApple OSS Distributions# For the moment, kaliber has a unique memory layout (monitor at the top 768*a325d9c4SApple OSS Distributions# of memory). Support this by breaking 16KB on other platforms and 769*a325d9c4SApple OSS Distributions# mandating 32MB alignment. Image base (i.e. __TEXT) must be 16KB 770*a325d9c4SApple OSS Distributions# aligned since ld64 will link with 16KB alignment for ARM64. 771*a325d9c4SApple OSS Distributions# 772*a325d9c4SApple OSS Distributions# We currently offset by an additional 32MB in order to reclaim memory. 773*a325d9c4SApple OSS Distributions# We need a dedicated virtual page for the low globals. Our bootloader 774*a325d9c4SApple OSS Distributions# may have a significant chunk of memory (up to an L2 entry in size) 775*a325d9c4SApple OSS Distributions# that lies before the kernel. The addition 32MB of virtual padding 776*a325d9c4SApple OSS Distributions# ensures that we have enough virtual address space to map all of that 777*a325d9c4SApple OSS Distributions# memory as part of the V-to-P mapping. 778*a325d9c4SApple OSS Distributions# 23355738 - put __PRELINK_TEXT first. We reserve enough room 779*a325d9c4SApple OSS Distributions# for 0x0000000003000000 = 48MB of kexts 780*a325d9c4SApple OSS Distributions# 781*a325d9c4SApple OSS Distributions# 0xfffffff000000000 (32MB range for low globals) 782*a325d9c4SApple OSS Distributions# 0xfffffff002000000 (32MB range to allow for large page physical slide) 783*a325d9c4SApple OSS Distributions# 0xfffffff004000000 (16KB range to reserve the first available page) 784*a325d9c4SApple OSS Distributions# 0xfffffff004004000 (48MB range for kexts) 785*a325d9c4SApple OSS Distributions# 0xfffffff007004000 (Start of xnu proper). 786*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_GENARM64 = \ 787*a325d9c4SApple OSS Distributions -Wl,-pie \ 788*a325d9c4SApple OSS Distributions -Wl,-static \ 789*a325d9c4SApple OSS Distributions -Wl,-segaddr,__PRELINK_TEXT,$(ARM64_PLKSEG_ADDR) \ 790*a325d9c4SApple OSS Distributions -Wl,-image_base,$(ARM64_LINK_ADDR) \ 791*a325d9c4SApple OSS Distributions \ 792*a325d9c4SApple OSS Distributions -Wl,-rename_section,__HIB,__text,__TEXT_EXEC,__hib_text \ 793*a325d9c4SApple OSS Distributions \ 794*a325d9c4SApple OSS Distributions -Wl,-rename_section,__HIB,__const,__DATA_CONST,__hib_const \ 795*a325d9c4SApple OSS Distributions -Wl,-rename_section,__HIB,__cstring,__DATA_CONST,__hib_const \ 796*a325d9c4SApple OSS Distributions -Wl,-rename_section,__HIB,__literal8,__DATA_CONST,__hib_const \ 797*a325d9c4SApple OSS Distributions -Wl,-rename_section,__HIB,__literal16,__DATA_CONST,__hib_const \ 798*a325d9c4SApple OSS Distributions \ 799*a325d9c4SApple OSS Distributions -Wl,-rename_segment,__HIB,__HIBDATA \ 800*a325d9c4SApple OSS Distributions \ 801*a325d9c4SApple OSS Distributions -Wl,-sectalign,__DATA,__const,0x4000 \ 802*a325d9c4SApple OSS Distributions -Wl,-sectalign,__DATA,__data,0x4000 \ 803*a325d9c4SApple OSS Distributions -Wl,-rename_section,__DATA,__mod_init_func,__DATA_CONST,__mod_init_func \ 804*a325d9c4SApple OSS Distributions -Wl,-rename_section,__DATA,__mod_term_func,__DATA_CONST,__mod_term_func \ 805*a325d9c4SApple OSS Distributions -Wl,-rename_section,__DATA,__auth_ptr,__DATA_CONST,__auth_ptr \ 806*a325d9c4SApple OSS Distributions -Wl,-rename_section,__DATA,__auth_got,__DATA_CONST,__auth_got \ 807*a325d9c4SApple OSS Distributions -Wl,-rename_section,__DATA,__const,__DATA_CONST,__const \ 808*a325d9c4SApple OSS Distributions -Wl,-segprot,__DATA_CONST,r--,r-- \ 809*a325d9c4SApple OSS Distributions -Wl,-rename_section,__KLD,__const,__KLDDATA,__const \ 810*a325d9c4SApple OSS Distributions -Wl,-rename_section,__KLD,__cstring,__KLDDATA,__cstring \ 811*a325d9c4SApple OSS Distributions -Wl,-segprot,__KLDDATA,rw-,rw- \ 812*a325d9c4SApple OSS Distributions -Wl,-segprot,__KLD,r-x,r-x \ 813*a325d9c4SApple OSS Distributions -Wl,-rename_section,__TEXT,__text,__TEXT_EXEC,__text \ 814*a325d9c4SApple OSS Distributions -Wl,-rename_section,__TEXT,__stubs,__TEXT_EXEC,__stubs \ 815*a325d9c4SApple OSS Distributions -Wl,-sectcreate,"__PLK_TEXT_EXEC",__text,/dev/null \ 816*a325d9c4SApple OSS Distributions -Wl,-sectcreate,__PRELINK_DATA,__data,/dev/null \ 817*a325d9c4SApple OSS Distributions -Wl,-sectcreate,"__PLK_DATA_CONST",__data,/dev/null \ 818*a325d9c4SApple OSS Distributions -Wl,-sectcreate,"__PLK_LLVM_COV",__llvm_covmap,/dev/null \ 819*a325d9c4SApple OSS Distributions -Wl,-sectcreate,"__PLK_LINKEDIT",__data,/dev/null 820*a325d9c4SApple OSS Distributions 821*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_SEGARM64 = \ 822*a325d9c4SApple OSS Distributions -Wl,-rename_section,__PPLDATA,__const,__PPLDATA_CONST,__const \ 823*a325d9c4SApple OSS Distributions -Wl,-segment_order,__TEXT:__DATA_CONST:__LINKEDIT:__TEXT_EXEC:__KLD:__PPLTEXT:__PPLTRAMP:__PPLDATA_CONST:__LASTDATA_CONST:__LAST:__PPLDATA:__KLDDATA:__DATA:__HIBDATA:__BOOTDATA \ 824*a325d9c4SApple OSS Distributions -Wl,-segprot,__PPLTEXT,r-x,r-x -Wl,-segprot,__PPLTRAMP,r-x,r-x -Wl,-segprot,__PPLDATA_CONST,r--,r-- -Wl,-segprot,__LASTDATA_CONST,r--,r-- -Wl,-segprot,__LAST,r-x,r-x \ 825*a325d9c4SApple OSS Distributions 826*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_RELEASEARM64 = \ 827*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_GENARM64) \ 828*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_SEGARM64) \ 829*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_STRIP_LTO) 830*a325d9c4SApple OSS Distributions 831*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_CONFIG_RELEASEARM64 = \ 832*a325d9c4SApple OSS Distributions -Wl,-exported_symbols_list,$(TARGET)/all-kpi.exp 833*a325d9c4SApple OSS Distributions 834*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEVELOPMENTARM64 = \ 835*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_GENARM64) \ 836*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_SEGARM64) \ 837*a325d9c4SApple OSS Distributions $(LDFLAGS_NOSTRIP_FLAG) 838*a325d9c4SApple OSS Distributions 839*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_CONFIG_DEVELOPMENTARM64 = 840*a325d9c4SApple OSS Distributions 841*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_KASANARM64 = $(LDFLAGS_KERNEL_DEVELOPMENTARM64) 842*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_DEBUGARM64 = $(LDFLAGS_KERNEL_DEVELOPMENTARM64) 843*a325d9c4SApple OSS Distributions 844*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_CONFIG_KASANARM64 = $(LDFLAGS_KERNEL_ONLY_CONFIG_DEVELOPMENTARM64) 845*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_CONFIG_DEBUGARM64 = $(LDFLAGS_KERNEL_ONLY_CONFIG_DEVELOPMENTARM64) 846*a325d9c4SApple OSS Distributions 847*a325d9c4SApple OSS Distributions# 848*a325d9c4SApple OSS Distributions# arm64e specific linker flags that should be used only when linking the kernel 849*a325d9c4SApple OSS Distributions# (and not the static kernel cache / kcgen) 850*a325d9c4SApple OSS Distributions# 851*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_SUBARCH_arm64e = \ 852*a325d9c4SApple OSS Distributions -Wl,-add_split_seg_info \ 853*a325d9c4SApple OSS Distributions -Wl,-kernel 854*a325d9c4SApple OSS Distributions 855*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_SUBARCH_x86_64 = \ 856*a325d9c4SApple OSS Distributions -Wl,-add_split_seg_info \ 857*a325d9c4SApple OSS Distributions -Wl,-kernel 858*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY_SUBARCH_x86_64h = $(LDFLAGS_KERNEL_ONLY_SUBARCH_x86_64) 859*a325d9c4SApple OSS Distributions 860*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL = $(LDFLAGS_KERNEL_GEN) \ 861*a325d9c4SApple OSS Distributions $(LDFLAGS_KERNEL_SDK) \ 862*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \ 863*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),LDFLAGS_KERNEL_)) \ 864*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_KERNEL_CONFIG),LDFLAGS_KERNEL_)) \ 865*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG), $(addsuffix $(CURRENT_KERNEL_CONFIG),LDFLAGS_KERNEL_))) \ 866*a325d9c4SApple OSS Distributions $(DEPLOYMENT_TARGET_FLAGS) 867*a325d9c4SApple OSS Distributions 868*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_ONLY += \ 869*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG), $(addsuffix $(CURRENT_KERNEL_CONFIG),LDFLAGS_KERNEL_ONLY_CONFIG_))) \ 870*a325d9c4SApple OSS Distributions $($(addsuffix $(ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG),LDFLAGS_KERNEL_ONLY_SUBARCH_)) \ 871*a325d9c4SApple OSS Distributions -Wl,-alias_list,$(TARGET)/all-alias.exp \ 872*a325d9c4SApple OSS Distributions -Wl,-sectcreate,__LINKINFO,__symbolsets,$(TARGET)/symbolsets.plist -Wl,-segprot,__LINKINFO,r--,r-- 873*a325d9c4SApple OSS Distributions 874*a325d9c4SApple OSS DistributionsLDFILES_KERNEL_ONLY = $(TARGET)/all-kpi.exp $(TARGET)/all-alias.exp $(TARGET)/symbolsets.plist 875*a325d9c4SApple OSS Distributions 876*a325d9c4SApple OSS Distributions# 877*a325d9c4SApple OSS Distributions# Default runtime libraries to be linked with the kernel 878*a325d9c4SApple OSS Distributions# 879*a325d9c4SApple OSS DistributionsLD_KERNEL_LIBS = -lcc_kext 880*a325d9c4SApple OSS DistributionsLD_KERNEL_ARCHIVES = $(LDFLAGS_KERNEL_SDK) -lfirehose_kernel 881*a325d9c4SApple OSS Distributions# Link opensource binary library 882*a325d9c4SApple OSS Distributionsifneq ($(filter T6000 T8101 VMAPPLE T6000 T8101 VMAPPLE,$(CURRENT_MACHINE_CONFIG)),) 883*a325d9c4SApple OSS Distributions LDFLAGS_KERNEL_ONLY += -rdynamic -Wl,-force_load,$(KDKROOT)/System/Library/KernelSupport/lib$(CURRENT_MACHINE_CONFIG).os.$(CURRENT_KERNEL_CONFIG).a 884*a325d9c4SApple OSS Distributionsendif 885*a325d9c4SApple OSS Distributions 886*a325d9c4SApple OSS Distributions# 887*a325d9c4SApple OSS Distributions# DTrace support 888*a325d9c4SApple OSS Distributions# 889*a325d9c4SApple OSS Distributionsifndef DO_CTFMERGE 890*a325d9c4SApple OSS DistributionsDO_CTFMERGE := 1 891*a325d9c4SApple OSS Distributionsifeq ($(CURRENT_KERNEL_CONFIG),RELEASE) 892*a325d9c4SApple OSS Distributionsifneq ($(PLATFORM),MacOSX) 893*a325d9c4SApple OSS DistributionsDO_CTFMERGE := 0 894*a325d9c4SApple OSS Distributionsendif 895*a325d9c4SApple OSS Distributionsendif 896*a325d9c4SApple OSS Distributionsifneq ($(CURRENT_KERNEL_CONFIG),KASAN) 897*a325d9c4SApple OSS Distributionsifneq ($(PLATFORM),MacOSX) 898*a325d9c4SApple OSS Distributionsifeq ($(WILL_BUILD_STATIC_KC),1) 899*a325d9c4SApple OSS DistributionsDO_CTFMERGE := 0 900*a325d9c4SApple OSS Distributionsendif 901*a325d9c4SApple OSS Distributionsendif 902*a325d9c4SApple OSS Distributionsendif 903*a325d9c4SApple OSS Distributionsendif # DO_CTFMERGE 904*a325d9c4SApple OSS Distributions 905*a325d9c4SApple OSS Distributions 906*a325d9c4SApple OSS Distributions# 907*a325d9c4SApple OSS Distributions# Default INCFLAGS 908*a325d9c4SApple OSS Distributions# 909*a325d9c4SApple OSS DistributionsINCFLAGS_IMPORT = $(patsubst %, -I$(OBJROOT)/EXPORT_HDRS/%, $(COMPONENT_IMPORT_LIST)) 910*a325d9c4SApple OSS DistributionsINCFLAGS_EXTERN = -I$(SRCROOT)/EXTERNAL_HEADERS 911*a325d9c4SApple OSS DistributionsINCFLAGS_GEN = -I$(SRCROOT)/$(COMPONENT) -I$(OBJROOT)/EXPORT_HDRS/$(COMPONENT) 912*a325d9c4SApple OSS DistributionsINCFLAGS_LOCAL = -I. 913*a325d9c4SApple OSS DistributionsINCFLAGS_SDK = -I$(SDKROOT)/usr/local/include/kernel 914*a325d9c4SApple OSS Distributions 915*a325d9c4SApple OSS DistributionsINCFLAGS = $(INCFLAGS_LOCAL) $(INCFLAGS_GEN) $(INCFLAGS_IMPORT) $(INCFLAGS_EXTERN) $(INCFLAGS_MAKEFILE) $(INCFLAGS_SDK) 916*a325d9c4SApple OSS Distributions 917*a325d9c4SApple OSS Distributions# 918*a325d9c4SApple OSS Distributions# Default MIGFLAGS 919*a325d9c4SApple OSS Distributions# 920*a325d9c4SApple OSS DistributionsMIGFLAGS = $(DEFINES) $(INCFLAGS) -novouchers $($(addsuffix $(CURRENT_ARCH_CONFIG),CFLAGS_)) $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \ 921*a325d9c4SApple OSS Distributions $(DEPLOYMENT_TARGET_FLAGS) 922*a325d9c4SApple OSS Distributions 923*a325d9c4SApple OSS Distributions# Support for LLVM Profile Guided Optimization (PGO) 924*a325d9c4SApple OSS Distributions 925*a325d9c4SApple OSS Distributionsifeq ($(BUILD_PROFILE),1) 926*a325d9c4SApple OSS DistributionsCFLAGS_GEN += -fprofile-instr-generate -DPROFILE 927*a325d9c4SApple OSS DistributionsCXXFLAGS_GEN += -fprofile-instr-generate -DPROFILE 928*a325d9c4SApple OSS Distributionsendif 929*a325d9c4SApple OSS Distributions 930*a325d9c4SApple OSS Distributionsifdef USE_PROFILE 931*a325d9c4SApple OSS DistributionsCFLAGS_GEN += -fprofile-instr-use=$(USE_PROFILE) 932*a325d9c4SApple OSS DistributionsCXXFLAGS_GEN += -fprofile-instr-use=$(USE_PROFILE) 933*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_GEN += -fprofile-instr-use=$(USE_PROFILE) 934*a325d9c4SApple OSS Distributions 935*a325d9c4SApple OSS DistributionsCFLAGS_GEN += -Wno-error=profile-instr-out-of-date 936*a325d9c4SApple OSS Distributionsendif 937*a325d9c4SApple OSS Distributions 938*a325d9c4SApple OSS Distributions# 939*a325d9c4SApple OSS Distributions# Support for LLVM Link Time Optimization (LTO) 940*a325d9c4SApple OSS Distributions# 941*a325d9c4SApple OSS Distributions# LTO can be explicitly enabled or disabled with BUILD_LTO=1|0 942*a325d9c4SApple OSS Distributions# and defaults to enabled except for DEBUG kernels 943*a325d9c4SApple OSS Distributions# 944*a325d9c4SApple OSS Distributions# CFLAGS_NOLTO_FLAG is needed on a per-file basis (for files 945*a325d9c4SApple OSS Distributions# that deal poorly with LTO, or files that must be machine 946*a325d9c4SApple OSS Distributions# code *.o files for xnu to build (i.e, setsegname runs on 947*a325d9c4SApple OSS Distributions# them). 948*a325d9c4SApple OSS Distributions# 949*a325d9c4SApple OSS Distributions# LDFLAGS_NOSTRIP_FLAG is used to support configurations that 950*a325d9c4SApple OSS Distributions# do not utilize an export list. For these configs to build, 951*a325d9c4SApple OSS Distributions# we need to prevent the LTO logic from dead stripping them. 952*a325d9c4SApple OSS Distributions 953*a325d9c4SApple OSS DistributionsLTO_ENABLED_RELEASE = 1 954*a325d9c4SApple OSS DistributionsLTO_ENABLED_DEVELOPMENT = 1 955*a325d9c4SApple OSS DistributionsLTO_ENABLED_DEBUG = 0 956*a325d9c4SApple OSS DistributionsLTO_ENABLED_KASAN = 0 957*a325d9c4SApple OSS Distributions 958*a325d9c4SApple OSS Distributionsifneq ($(BUILD_LTO),) 959*a325d9c4SApple OSS DistributionsUSE_LTO = $(BUILD_LTO) 960*a325d9c4SApple OSS Distributionselse 961*a325d9c4SApple OSS DistributionsUSE_LTO = $(LTO_ENABLED_$(CURRENT_KERNEL_CONFIG)) 962*a325d9c4SApple OSS Distributionsendif 963*a325d9c4SApple OSS Distributions 964*a325d9c4SApple OSS Distributionsifeq ($(USE_LTO),1) 965*a325d9c4SApple OSS DistributionsCFLAGS_GEN += -flto 966*a325d9c4SApple OSS DistributionsCXXFLAGS_GEN += -flto 967*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_LTO = -Wl,-mllvm,-inline-threshold=100 968*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_GEN += $(LDFLAGS_KERNEL_LTO) -Wl,-object_path_lto,$(TARGET)/lto.o 969*a325d9c4SApple OSS DistributionsLDFLAGS_NOSTRIP_FLAG = -rdynamic 970*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_STRIP_LTO = -Wl,-dead_strip,-no_dead_strip_inits_and_terms 971*a325d9c4SApple OSS Distributions 972*a325d9c4SApple OSS DistributionsCFLAGS_NOLTO_FLAG = -fno-lto 973*a325d9c4SApple OSS Distributionselse 974*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_LTO = 975*a325d9c4SApple OSS DistributionsLDFLAGS_NOSTRIP_FLAG = 976*a325d9c4SApple OSS DistributionsLDFLAGS_KERNEL_STRIP_LTO = 977*a325d9c4SApple OSS DistributionsCFLAGS_NOLTO_FLAG = 978*a325d9c4SApple OSS Distributionsendif 979*a325d9c4SApple OSS Distributions 980*a325d9c4SApple OSS Distributionsifeq ($(BUILD_JSON_COMPILATION_DATABASE),1) 981*a325d9c4SApple OSS DistributionsBUILD_DSYM := 0 982*a325d9c4SApple OSS DistributionsDO_CTFMERGE := 0 983*a325d9c4SApple OSS DistributionsKCC = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CC) 984*a325d9c4SApple OSS DistributionsKC++ = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CXX) 985*a325d9c4SApple OSS DistributionsS_KCC = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CC) 986*a325d9c4SApple OSS DistributionsSTRIP = true 987*a325d9c4SApple OSS Distributionsendif 988*a325d9c4SApple OSS Distributions 989*a325d9c4SApple OSS Distributions# 990*a325d9c4SApple OSS Distributions# Default VPATH 991*a325d9c4SApple OSS Distributions# 992*a325d9c4SApple OSS Distributionsexport VPATH = .:$(SOURCE) 993*a325d9c4SApple OSS Distributions 994*a325d9c4SApple OSS Distributions 995*a325d9c4SApple OSS Distributions 996*a325d9c4SApple OSS Distributions# 997*a325d9c4SApple OSS Distributions# Macros that control installation of kernel and its header files 998*a325d9c4SApple OSS Distributions# 999*a325d9c4SApple OSS Distributions# install flags for header files 1000*a325d9c4SApple OSS Distributions# 1001*a325d9c4SApple OSS DistributionsINSTALL_FLAGS = -c -S -m 0444 1002*a325d9c4SApple OSS DistributionsDATA_INSTALL_FLAGS = -c -S -m 0644 1003*a325d9c4SApple OSS DistributionsDATA_INSTALL_FLAGS_RO = -c -S -m 0444 1004*a325d9c4SApple OSS DistributionsEXEC_INSTALL_FLAGS = -c -S -m 0755 1005*a325d9c4SApple OSS Distributions 1006*a325d9c4SApple OSS Distributions# 1007*a325d9c4SApple OSS Distributions# Header file destinations 1008*a325d9c4SApple OSS Distributions# 1009*a325d9c4SApple OSS Distributions 1010*a325d9c4SApple OSS Distributionsifeq ($(DRIVERKIT),1) 1011*a325d9c4SApple OSS Distributions SDKHEADERSROOT=$(DRIVERKITRUNTIMEROOT) 1012*a325d9c4SApple OSS Distributions # only whitelisted headers install outside of the DriverKit Runtime hierarchy 1013*a325d9c4SApple OSS Distributions DRIVERKITSDKHEADERSROOT=$(DRIVERKITROOT) 1014*a325d9c4SApple OSS Distributions DRIVERKITFRAMEDIR = $(DRIVERKITROOT)/System/Library/Frameworks 1015*a325d9c4SApple OSS Distributionsendif 1016*a325d9c4SApple OSS Distributions 1017*a325d9c4SApple OSS DistributionsFRAMEDIR = $(SDKHEADERSROOT)/System/Library/Frameworks 1018*a325d9c4SApple OSS Distributions 1019*a325d9c4SApple OSS DistributionsSINCVERS = B 1020*a325d9c4SApple OSS DistributionsSINCFRAME = $(FRAMEDIR)/System.framework 1021*a325d9c4SApple OSS DistributionsSINCDIR = $(SINCFRAME)/Versions/$(SINCVERS)/Headers 1022*a325d9c4SApple OSS DistributionsSPINCDIR = $(SINCFRAME)/Versions/$(SINCVERS)/PrivateHeaders 1023*a325d9c4SApple OSS DistributionsSRESDIR = $(SINCFRAME)/Versions/$(SINCVERS)/Resources 1024*a325d9c4SApple OSS Distributions 1025*a325d9c4SApple OSS Distributionsifndef INCDIR 1026*a325d9c4SApple OSS Distributions INCDIR = $(SDKHEADERSROOT)/usr/include 1027*a325d9c4SApple OSS Distributionsendif 1028*a325d9c4SApple OSS Distributionsifndef DRIVERKITINCDIR 1029*a325d9c4SApple OSS Distributions DRIVERKITINCDIR = $(DRIVERKITSDKHEADERSROOT)/usr/include 1030*a325d9c4SApple OSS Distributionsendif 1031*a325d9c4SApple OSS Distributionsifndef LCLDIR 1032*a325d9c4SApple OSS Distributions LCLDIR = $(SDKHEADERSROOT)/usr/local/include 1033*a325d9c4SApple OSS Distributionsendif 1034*a325d9c4SApple OSS Distributionsifndef DRIVERKITLCLDIR 1035*a325d9c4SApple OSS Distributions DRIVERKITLCLDIR = $(DRIVERKITSDKHEADERSROOT)/usr/local/include 1036*a325d9c4SApple OSS Distributionsendif 1037*a325d9c4SApple OSS Distributions 1038*a325d9c4SApple OSS DistributionsKINCVERS = A 1039*a325d9c4SApple OSS DistributionsKINCFRAME = $(FRAMEDIR)/Kernel.framework 1040*a325d9c4SApple OSS DistributionsKINCDIR = $(KINCFRAME)/Versions/$(KINCVERS)/Headers 1041*a325d9c4SApple OSS DistributionsKPINCDIR = $(KINCFRAME)/Versions/$(KINCVERS)/PrivateHeaders 1042*a325d9c4SApple OSS DistributionsKRESDIR = $(KINCFRAME)/Versions/$(KINCVERS)/Resources 1043*a325d9c4SApple OSS Distributions 1044*a325d9c4SApple OSS DistributionsDKIT_INCFRAME = DriverKit.framework 1045*a325d9c4SApple OSS Distributions 1046*a325d9c4SApple OSS Distributionsifeq ($(PLATFORM),MacOSX) 1047*a325d9c4SApple OSS DistributionsDKIT_INCVERS = A 1048*a325d9c4SApple OSS DistributionsDKIT_INCDIR = $(DKIT_INCFRAME)/Versions/$(DKIT_INCVERS)/Headers 1049*a325d9c4SApple OSS DistributionsDKIT_PINCDIR = $(DKIT_INCFRAME)/Versions/$(DKIT_INCVERS)/PrivateHeaders 1050*a325d9c4SApple OSS Distributionselse 1051*a325d9c4SApple OSS Distributions# non-macOS SDK frameworks use shallow bundle structure 1052*a325d9c4SApple OSS DistributionsDKIT_INCDIR = $(DKIT_INCFRAME)/Headers 1053*a325d9c4SApple OSS DistributionsDKIT_PINCDIR = $(DKIT_INCFRAME)/PrivateHeaders 1054*a325d9c4SApple OSS Distributionsendif 1055*a325d9c4SApple OSS Distributions 1056*a325d9c4SApple OSS Distributions# DriverKit SDK frameworks use shallow bundle structure 1057*a325d9c4SApple OSS DistributionsDRIVERKIT_DKIT_INCDIR = $(DKIT_INCFRAME)/Headers 1058*a325d9c4SApple OSS DistributionsDRIVERKIT_DKIT_PINCDIR = $(DKIT_INCFRAME)/PrivateHeaders 1059*a325d9c4SApple OSS Distributions 1060*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF := 1061*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -UMACH_KERNEL_PRIVATE 1062*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -UBSD_KERNEL_PRIVATE 1063*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -UIOKIT_KERNEL_PRIVATE 1064*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -ULIBKERN_KERNEL_PRIVATE 1065*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -ULIBSA_KERNEL_PRIVATE 1066*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -UPEXPERT_KERNEL_PRIVATE 1067*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -UXNU_KERNEL_PRIVATE 1068*a325d9c4SApple OSS DistributionsXNU_PRIVATE_UNIFDEF += -UXNU_BOUND_CHECKS 1069*a325d9c4SApple OSS Distributions 1070*a325d9c4SApple OSS Distributions 1071*a325d9c4SApple OSS DistributionsPLATFORM_UNIFDEF = $(foreach x,$(SUPPORTED_PLATFORMS),$(if $(filter $(PLATFORM),$(x)),-DPLATFORM_$(x) $(foreach token,$(PLATFORM_UNIFDEF_BLACKLIST_TOKENS_$(x)),-U$(token)),-UPLATFORM_$(x))) 1072*a325d9c4SApple OSS Distributions 1073*a325d9c4SApple OSS Distributions 1074*a325d9c4SApple OSS Distributions# Some header guards need to be present and checked in kernel headers but removed from userspace headers 1075*a325d9c4SApple OSS DistributionsKERNEL_ONLY_GUARDS_UNIFDEF = 1076*a325d9c4SApple OSS Distributions 1077*a325d9c4SApple OSS DistributionsSPINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -DPRIVATE -UDRIVERKIT -U_OPEN_SOURCE_ -U__OPEN_SOURCE__ $(KERNEL_ONLY_GUARDS_UNIFDEF) 1078*a325d9c4SApple OSS DistributionsSINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -UPRIVATE -UDRIVERKIT -D_OPEN_SOURCE_ -D__OPEN_SOURCE__ $(KERNEL_ONLY_GUARDS_UNIFDEF) 1079*a325d9c4SApple OSS DistributionsDKPINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -DPRIVATE -DDRIVERKIT -U_OPEN_SOURCE_ -U__OPEN_SOURCE__ $(KERNEL_ONLY_GUARDS_UNIFDEF) 1080*a325d9c4SApple OSS DistributionsDKINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -UPRIVATE -DDRIVERKIT -D_OPEN_SOURCE_ -D__OPEN_SOURCE__ $(KERNEL_ONLY_GUARDS_UNIFDEF) 1081*a325d9c4SApple OSS DistributionsKPINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -DKERNEL_PRIVATE -DKERNEL -DPRIVATE -UDRIVERKIT -U_OPEN_SOURCE_ -U__OPEN_SOURCE__ 1082*a325d9c4SApple OSS DistributionsKINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -DKERNEL -UPRIVATE -UDRIVERKIT -D_OPEN_SOURCE_ -D__OPEN_SOURCE__ 1083*a325d9c4SApple OSS DistributionsPDATA_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -DPRIVATE -U_OPEN_SOURCE_ -U__OPEN_SOURCE__ 1084*a325d9c4SApple OSS DistributionsDATA_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UPRIVATE -D_OPEN_SOURCE_ -D__OPEN_SOURCE__ 1085*a325d9c4SApple OSS Distributions 1086*a325d9c4SApple OSS Distributions# 1087*a325d9c4SApple OSS Distributions# Compononent Header file destinations 1088*a325d9c4SApple OSS Distributions# 1089*a325d9c4SApple OSS DistributionsEXPDIR = EXPORT_HDRS/$(COMPONENT) 1090*a325d9c4SApple OSS Distributions 1091*a325d9c4SApple OSS Distributions# 1092*a325d9c4SApple OSS Distributions# Strip Flags 1093*a325d9c4SApple OSS Distributions# 1094*a325d9c4SApple OSS DistributionsSTRIP_FLAGS_RELEASE = -S -x 1095*a325d9c4SApple OSS DistributionsSTRIP_FLAGS_DEVELOPMENT = -S 1096*a325d9c4SApple OSS DistributionsSTRIP_FLAGS_KASAN = $(STRIP_FLAGS_DEVELOPMENT) 1097*a325d9c4SApple OSS DistributionsSTRIP_FLAGS_DEBUG = -S 1098*a325d9c4SApple OSS DistributionsSTRIP_FLAGS_PROFILE = -S -x 1099*a325d9c4SApple OSS Distributions 1100*a325d9c4SApple OSS DistributionsSTRIP_FLAGS = $($(addsuffix $(CURRENT_KERNEL_CONFIG),STRIP_FLAGS_)) 1101*a325d9c4SApple OSS Distributions 1102*a325d9c4SApple OSS Distributions# 1103*a325d9c4SApple OSS Distributions# dsymutil flags 1104*a325d9c4SApple OSS Distributions# 1105*a325d9c4SApple OSS DistributionsDSYMUTIL_FLAGS_GEN = --minimize 1106*a325d9c4SApple OSS Distributions 1107*a325d9c4SApple OSS DistributionsDSYMUTIL_FLAGS_X86_64 = --arch=x86_64 1108*a325d9c4SApple OSS DistributionsDSYMUTIL_FLAGS_X86_64H = --arch=x86_64h 1109*a325d9c4SApple OSS DistributionsDSYMUTIL_FLAGS_ARM = --arch=arm 1110*a325d9c4SApple OSS DistributionsDSYMUTIL_FLAGS_ARM64 = 1111*a325d9c4SApple OSS Distributions 1112*a325d9c4SApple OSS DistributionsDSYMUTIL_FLAGS = $(DSYMUTIL_FLAGS_GEN) \ 1113*a325d9c4SApple OSS Distributions $($(addsuffix $(CURRENT_ARCH_CONFIG),DSYMUTIL_FLAGS_)) 1114*a325d9c4SApple OSS Distributions 1115*a325d9c4SApple OSS Distributions# 1116*a325d9c4SApple OSS Distributions# Man Page destination 1117*a325d9c4SApple OSS Distributions# 1118*a325d9c4SApple OSS DistributionsMANDIR = /usr/share/man 1119*a325d9c4SApple OSS Distributions 1120*a325d9c4SApple OSS Distributions# 1121*a325d9c4SApple OSS Distributions# DEBUG alias location 1122*a325d9c4SApple OSS Distributions# 1123*a325d9c4SApple OSS DistributionsDEVELOPER_EXTRAS_DIR = /AppleInternal/CoreOS/xnu_$(CURRENT_KERNEL_CONFIG_LC) 1124*a325d9c4SApple OSS Distributions 1125*a325d9c4SApple OSS Distributions# 1126*a325d9c4SApple OSS Distributions# mach_kernel install location 1127*a325d9c4SApple OSS Distributions# 1128*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_DIR = / 1129*a325d9c4SApple OSS Distributions 1130*a325d9c4SApple OSS Distributions# 1131*a325d9c4SApple OSS Distributions# new OS X install location 1132*a325d9c4SApple OSS Distributions# 1133*a325d9c4SApple OSS DistributionsSYSTEM_LIBRARY_KERNELS_DIR = /System/Library/Kernels 1134*a325d9c4SApple OSS Distributions 1135*a325d9c4SApple OSS Distributions# 1136*a325d9c4SApple OSS Distributions# File names in DSTROOT 1137*a325d9c4SApple OSS Distributions# 1138*a325d9c4SApple OSS Distributions 1139*a325d9c4SApple OSS Distributionsifeq ($(PLATFORM),MacOSX) 1140*a325d9c4SApple OSS DistributionsKERNEL_FILE_NAME_PREFIX = kernel 1141*a325d9c4SApple OSS Distributionselse 1142*a325d9c4SApple OSS DistributionsKERNEL_FILE_NAME_PREFIX = mach 1143*a325d9c4SApple OSS Distributionsendif 1144*a325d9c4SApple OSS Distributions 1145*a325d9c4SApple OSS Distributionsifeq ($(CURRENT_MACHINE_CONFIG),NONE) 1146*a325d9c4SApple OSS Distributionsifeq ($(CURRENT_KERNEL_CONFIG),RELEASE) 1147*a325d9c4SApple OSS DistributionsKERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX) 1148*a325d9c4SApple OSS DistributionsKERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX).py 1149*a325d9c4SApple OSS Distributionselse 1150*a325d9c4SApple OSS DistributionsKERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC) 1151*a325d9c4SApple OSS DistributionsKERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX).py 1152*a325d9c4SApple OSS Distributionsendif 1153*a325d9c4SApple OSS Distributionselse 1154*a325d9c4SApple OSS DistributionsKERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC).$(CURRENT_MACHINE_CONFIG_LC) 1155*a325d9c4SApple OSS DistributionsKERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX)_$(CURRENT_KERNEL_CONFIG_LC).py 1156*a325d9c4SApple OSS Distributionsendif 1157*a325d9c4SApple OSS Distributions 1158*a325d9c4SApple OSS DistributionsCURRENT_ALIAS_MACHINE_CONFIG = $(word 4,$(subst ^, ,$(CURRENT_BUILD_CONFIG))) 1159*a325d9c4SApple OSS DistributionsCURRENT_ALIAS_MACHINE_CONFIG_LC = $(shell printf "%s" "$(CURRENT_ALIAS_MACHINE_CONFIG)" | $(TR) A-Z a-z) 1160*a325d9c4SApple OSS Distributionsifneq ($(CURRENT_ALIAS_MACHINE_CONFIG),) 1161*a325d9c4SApple OSS DistributionsALIAS_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC).$(CURRENT_ALIAS_MACHINE_CONFIG_LC) 1162*a325d9c4SApple OSS Distributionsendif 1163*a325d9c4SApple OSS Distributions 1164*a325d9c4SApple OSS Distributions# 1165*a325d9c4SApple OSS Distributions# System.kext pseudo-kext install location 1166*a325d9c4SApple OSS Distributions# 1167*a325d9c4SApple OSS DistributionsINSTALL_EXTENSIONS_DIR = /System/Library/Extensions 1168*a325d9c4SApple OSS Distributions 1169*a325d9c4SApple OSS Distributions# 1170*a325d9c4SApple OSS Distributions# System.kext PlugIns install location 1171*a325d9c4SApple OSS Distributions# 1172*a325d9c4SApple OSS DistributionsDSTROOT_SYSTEM_KEXT_PATH = $(addprefix $(DSTROOT)$(INSTALL_EXTENSIONS_DIR),/System.kext/PlugIns) 1173*a325d9c4SApple OSS DistributionsSYMROOT_SYSTEM_KEXT_PATH = $(addprefix $(SYMROOT),/System.kext/PlugIns) 1174*a325d9c4SApple OSS Distributions 1175*a325d9c4SApple OSS Distributions# 1176*a325d9c4SApple OSS Distributions# KDK location 1177*a325d9c4SApple OSS Distributions# 1178*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_SYM_DIR = /System/Library/Extensions/KDK 1179*a325d9c4SApple OSS Distributions 1180*a325d9c4SApple OSS Distributions# 1181*a325d9c4SApple OSS Distributions# Misc. Etc. 1182*a325d9c4SApple OSS Distributions# 1183*a325d9c4SApple OSS DistributionsINSTALL_SHARE_MISC_DIR = /usr/share/misc 1184*a325d9c4SApple OSS DistributionsINSTALL_DTRACE_SCRIPTS_DIR = /usr/lib/dtrace 1185*a325d9c4SApple OSS DistributionsINSTALL_DTRACE_LIBEXEC_DIR = /usr/libexec/dtrace 1186*a325d9c4SApple OSS Distributions 1187*a325d9c4SApple OSS Distributions# 1188*a325d9c4SApple OSS Distributions# Overrides for XBS build aliases 1189*a325d9c4SApple OSS Distributions# 1190*a325d9c4SApple OSS Distributionsifneq ($(filter $(RC_ProjectName),xnu_headers_driverkit),) 1191*a325d9c4SApple OSS DistributionsUSE_BINARY_PLIST = 1 1192*a325d9c4SApple OSS Distributionselse ifneq ($(filter $(RC_ProjectName),xnu_debug),) 1193*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_DIR := $(DEVELOPER_EXTRAS_DIR) 1194*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_SYM_DIR := $(DEVELOPER_EXTRAS_DIR) 1195*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_SYM_TO_KDK = 1 1196*a325d9c4SApple OSS DistributionsINSTALL_XNU_DEBUG_FILES = 1 1197*a325d9c4SApple OSS Distributionselse ifneq ($(filter $(SUPPORTED_EMBEDDED_PLATFORMS),$(PLATFORM)),) 1198*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_SYM_TO_KDK = 1 1199*a325d9c4SApple OSS DistributionsUSE_BINARY_PLIST = 1 1200*a325d9c4SApple OSS Distributionselse ifneq ($(filter $(SUPPORTED_SIMULATOR_PLATFORMS),$(PLATFORM)),) 1201*a325d9c4SApple OSS DistributionsUSE_BINARY_PLIST = 1 1202*a325d9c4SApple OSS Distributionselse ifeq ($(PLATFORM),MacOSX) 1203*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_DIR := $(SYSTEM_LIBRARY_KERNELS_DIR) 1204*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_SYM_DIR := $(SYSTEM_LIBRARY_KERNELS_DIR) 1205*a325d9c4SApple OSS DistributionsINSTALL_KERNEL_SYM_TO_KDK = $(if $(filter YES,$(DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT)),1,0) 1206*a325d9c4SApple OSS Distributionsendif 1207*a325d9c4SApple OSS Distributions 1208*a325d9c4SApple OSS Distributionsifneq ($(filter $(RC_ProjectName),xnu_kasan),) 1209*a325d9c4SApple OSS DistributionsINSTALL_KASAN_ONLY = 1 1210*a325d9c4SApple OSS Distributionsendif 1211*a325d9c4SApple OSS Distributions 1212*a325d9c4SApple OSS Distributions# vim: set ft=make: 1213