Loading...
#include "base.xcconfig"

// Allow building for all platforms
SUPPORTED_PLATFORMS = macosx iphoneos xros watchos appletvos bridgeos watchsimulator iphonesimulator xrsimulator appletvsimulator exclavekit.macosx exclavekit.iphoneos exclavekit.appletvos exclavekit.xros exclavekit.watchos driverkit

// Some headers are generated by copy and script phases.
INSTALLHDRS_COPY_PHASE   = YES
INSTALLHDRS_SCRIPT_PHASE = YES

// Most headers go into /usr/include/mach-o
PUBLIC_HEADERS_FOLDER_PATH                  = ${SYSTEM_PREFIX}/usr/include/mach-o
PUBLIC_HEADERS_FOLDER_PATH[sdk=driverkit*]  = $(DRIVERKITROOT)/Runtime/usr/include/mach-o
PRIVATE_HEADERS_FOLDER_PATH                 = ${SYSTEM_PREFIX}/usr/local/include/mach-o
PRIVATE_HEADERS_FOLDER_PATH[sdk=driverkit*] = $(DRIVERKITROOT)/Runtime/usr/local/include/mach-o

// A small set of headers go into /usr/include
SECOND_PUBLIC_HEADERS_FOLDER_PATH                  = $(SYSTEM_PREFIX)/usr/include
SECOND_PUBLIC_HEADERS_FOLDER_PATH[sdk=driverkit*]  = $(DRIVERKITROOT)/usr/include
SECOND_PRIVATE_HEADERS_FOLDER_PATH                 = $(SYSTEM_PREFIX)/usr/local/include
SECOND_PRIVATE_HEADERS_FOLDER_PATH[sdk=driverkit*] = $(DRIVERKITROOT)/usr/local/include

IS_ZIPPERED = YES

LIBSYSTEM_LIBS[sdk=*simulator*]     = -Wl,-no_warn_unused_dylibs -Wl,-upward-lsystem_sim_platform -Wl,-upward-lsystem_malloc -Wl,-upward-lsystem_c -Wl,-upward-lsystem_sim_pthread -Wl,-upward-lxpc -Wl,-upward-lsystem_blocks -Wl,-upward-lsystem_sim_kernel -Wl,-upward-ldispatch
LIBSYSTEM_LIBS[sdk=embedded*]       = -Wl,-no_warn_unused_dylibs -Wl,-upward-lsystem_platform     -Wl,-upward-lsystem_malloc -Wl,-upward-lsystem_c -Wl,-upward-lsystem_pthread     -Wl,-upward-lxpc -Wl,-upward-lsystem_blocks -Wl,-upward-lsystem_kernel     -Wl,-upward-ldispatch -Wl,-upward-lcompiler_rt
LIBSYSTEM_LIBS[sdk=macosx*]         = -Wl,-no_warn_unused_dylibs -Wl,-upward-lsystem_platform     -Wl,-upward-lsystem_malloc -Wl,-upward-lsystem_c -Wl,-upward-lsystem_pthread     -Wl,-upward-lxpc -Wl,-upward-lsystem_blocks -Wl,-upward-lsystem_kernel     -Wl,-upward-ldispatch -Wl,-upward-lcompiler_rt
LIBSYSTEM_LIBS[sdk=driverkit*]      = -Wl,-no_warn_unused_dylibs -Wl,-upward-lsystem_platform     -Wl,-upward-lsystem_malloc -Wl,-upward-lsystem_c -Wl,-upward-lsystem_pthread                      -Wl,-upward-lsystem_blocks -Wl,-upward-lsystem_kernel
LIBSYSTEM_LIBS[sdk=exclavekit*]     = -Wl,-no_warn_unused_dylibs -Wl,-upward-llibc -Wl,-upward-lsystem_malloc -Wl,-upward-lsystem_blocks 

INSTALL_PATH = $(SYSTEM_PREFIX)/usr/lib/system

// Disable building the _asan variant for dyld on ExclaveKit
BUILD_VARIANTS[sdk=exclavekit*] = normal

GCC_PREPROCESSOR_DEFINITIONS_Release          =
GCC_PREPROCESSOR_DEFINITIONS_Debug            = DEBUG=1
GCC_PREPROCESSOR_DEFINITIONS                  = $(GCC_PREPROCESSOR_DEFINITIONS_$(CONFIGURATION)) BUILDING_LIBDYLD=1
GCC_PREPROCESSOR_DEFINITIONS[sdk=exclavekit*] = $(GCC_PREPROCESSOR_DEFINITIONS_$(CONFIGURATION)) BUILDING_LIBDYLD=1 L4_CONFIG_PLAT_EVP=1

// Turn off the use of __libcpp_verbose_abort from std::string_view
CLANG_CXX_STANDARD_LIBRARY_HARDENING[sdk=exclavekit*] = '_LIBCPP_HARDENING_MODE_NONE'

SYSTEM_HEADER_SEARCH_PATHS                  =
SYSTEM_HEADER_SEARCH_PATHS[sdk=exclavekit*] = $(SDKROOT)$(SYSTEM_PREFIX)/usr/local/standalone/cL4/include
SYSTEM_HEADER_SEARCH_PATHS[sdk=driverkit*]  = $(SDKROOT)/$(DRIVERKITROOT)/usr/include/c++/v1 $(SDKROOT)/$(DRIVERKITROOT)/Runtime/usr/local/include $(SDKROOT)/$(DRIVERKITROOT)/Runtime/usr/include $(SDKROOT)/$(SYSTEM_PREFIX)/usr/include $(SDKROOT)/$(DRIVERKITROOT)/usr/local/include

SYSTEM_FRAMEWORK_SEARCH_PATHS[sdk=driverkit*] = $(SDKROOT)/$(DRIVERKITROOT)/System/Library/PrivateFrameworks $(SDKROOT)/$(DRIVERKITROOT)/Runtime/System/Library/Frameworks


// We don't have many symbols in libdyld.dylib, so mark them up manually with __attribute__((section())) and avoid the SDK dirty data file
// FIXME: We force DATA_CONST for now to ensure ld64 generates split seg v2 on x86_64
DIRTY = -Wl,-dirty_data_list,${SRCROOT}/configs/libdyld.dirty -Wl,-data_const

// FIXME: -Wl,-unexported_symbol is a hack to deal with C++20 comparison visbility, we can probably fix it better
OTHER_LDFLAGS = -Wl,-no_inits -nostdlib -lCrashReporterClient $(LIBSYSTEM_LIBS) -umbrella System -L$(SDKROOT)/$(DRIVERKITROOT)/usr/lib/system $(EXTRA_SECTIONS) -Wl,-unexported_symbol,__ZNSt3* $(DIRTY)
OTHER_LDFLAGS[sdk=exclavekit*] = -Wl,-no_inits -nostdlib $(LIBSYSTEM_LIBS) -umbrella System -L$(SDKROOT)/$(SYSTEM_PREFIX)/usr/lib/system $(EXTRA_SECTIONS) -Wl,-unexported_symbol,__ZNSt3* $(DIRTY)

OTHER_TAPI_FLAGS = -umbrella System $(inherited)
TAPI_EXTRA_PUBLIC_HEADERS = ${SRCROOT}/include/dlfcn.h
TAPI_EXTRA_PRIVATE_HEADERS = ${SRCROOT}/include/mach-o/dyld_priv.h ${SRCROOT}/include/dlfcn_private.h

CODE_SIGN_IDENTITY = $(TRUSTED_CODE_SIGN_IDENTITY)

// TODO: Clean these up.  They were moved from the build settings
EXECUTABLE_PREFIX = lib
HEADER_SEARCH_PATHS = ./include
ONLY_ACTIVE_ARCH[config=Debug] = NO
PRODUCT_NAME = dyld
SUPPORTS_TEXT_BASED_API = YES
TAPI_VERIFY_MODE = Pedantic
USER_HEADER_SEARCH_PATHS = $(DERIVED_FILE_DIR)
VERSION_INFO_EXPORT_DECL = __attribute__((visibility("default")))