Description := Static runtime libraries for clang/Linux. ### CC := clang Arch := unknown Configs := # We don't currently have any general purpose way to target architectures other # than the compiler defaults (because there is no generalized way to invoke # cross compilers). For now, we just find the target archicture of the compiler # and only define configurations we know that compiler can generate. CompilerTargetTriple := $(shell \ $(CC) -v 2>&1 | grep 'Target:' | cut -d' ' -f2) ifneq ($(DEBUGMAKE),) ifeq ($(CompilerTargetTriple),) $(error "unable to infer compiler target triple for $(CC)") endif endif CompilerTargetArch := $(firstword $(subst -, ,$(CompilerTargetTriple))) # Only define configs if we detected a linux target. ifneq ($(findstring -linux-,$(CompilerTargetTriple)),) # Configurations which just include all the runtime functions. ifeq ($(call contains,i386 x86_64,$(CompilerTargetArch)),true) Configs += full-i386 full-x86_64 Arch.full-i386 := i386 Arch.full-x86_64 := x86_64 endif # Configuration for profile runtime. ifeq ($(call contains,i386 x86_64,$(CompilerTargetArch)),true) Configs += profile-i386 profile-x86_64 Arch.profile-i386 := i386 Arch.profile-x86_64 := x86_64 endif # Configuration for ASAN runtime. ifeq ($(CompilerTargetArch),i386) Configs += asan-i386 Arch.asan-i386 := i386 endif ifeq ($(CompilerTargetArch),x86_64) Configs += asan-x86_64 Arch.asan-x86_64 := x86_64 endif # Configuration for TSAN runtime. ifeq ($(CompilerTargetArch),x86_64) Configs += tsan-x86_64 Arch.tsan-x86_64 := x86_64 endif endif ### CFLAGS := -Wall -Werror -O3 -fomit-frame-pointer CFLAGS.full-i386 := $(CFLAGS) -m32 CFLAGS.full-x86_64 := $(CFLAGS) -m64 CFLAGS.profile-i386 := $(CFLAGS) -m32 CFLAGS.profile-x86_64 := $(CFLAGS) -m64 CFLAGS.asan-i386 := $(CFLAGS) -m32 -fPIE -fno-builtin CFLAGS.asan-x86_64 := $(CFLAGS) -m64 -fPIE -fno-builtin CFLAGS.tsan-x86_64 := $(CFLAGS) -m64 -fPIE -fno-builtin # Use our stub SDK as the sysroot to support more portable building. For now we # just do this for the non-ASAN modules, because the stub SDK doesn't have # enough support to build ASAN. CFLAGS.full-i386 += --sysroot=$(ProjSrcRoot)/SDKs/linux CFLAGS.full-x86_64 += --sysroot=$(ProjSrcRoot)/SDKs/linux CFLAGS.profile-i386 += --sysroot=$(ProjSrcRoot)/SDKs/linux CFLAGS.profile-x86_64 += --sysroot=$(ProjSrcRoot)/SDKs/linux FUNCTIONS.full-i386 := $(CommonFunctions) $(ArchFunctions.i386) FUNCTIONS.full-x86_64 := $(CommonFunctions) $(ArchFunctions.x86_64) FUNCTIONS.profile-i386 := GCDAProfiling FUNCTIONS.profile-x86_64 := GCDAProfiling FUNCTIONS.asan-i386 := $(AsanFunctions) $(InterceptionFunctions) \ $(SanitizerCommonFunctions) FUNCTIONS.asan-x86_64 := $(AsanFunctions) $(InterceptionFunctions) \ $(SanitizerCommonFunctions) FUNCTIONS.tsan-x86_64 := $(TsanFunctions) $(InterceptionFunctions) \ $(SanitizerCommonFunctions) # Always use optimized variants. OPTIMIZED := 1 # We don't need to use visibility hidden on Linux. VISIBILITY_HIDDEN := 0