summaryrefslogtreecommitdiffstats
path: root/clang/runtime
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2015-02-17 23:27:37 +0000
committerMatthias Braun <matze@braunis.de>2015-02-17 23:27:37 +0000
commit44bf1c9c53d36637c0abca132a08518d3138a78b (patch)
tree1104c1c34a5906e4cc6e15435840b03f2df1a932 /clang/runtime
parente194dfa6be88729d7de7f1fee77072eb55b55e77 (diff)
downloadbcm5719-llvm-44bf1c9c53d36637c0abca132a08518d3138a78b.tar.gz
bcm5719-llvm-44bf1c9c53d36637c0abca132a08518d3138a78b.zip
Revert "Remove support for building sanitizers from Makefile/autoconf build."
This reverts commit r229554. Reverting this commit for now as several apple internal builds still rely on this functionality. llvm-svn: 229582
Diffstat (limited to 'clang/runtime')
-rw-r--r--clang/runtime/compiler-rt/Makefile50
1 files changed, 43 insertions, 7 deletions
diff --git a/clang/runtime/compiler-rt/Makefile b/clang/runtime/compiler-rt/Makefile
index 6daa6d1c5df..f06ef990f8e 100644
--- a/clang/runtime/compiler-rt/Makefile
+++ b/clang/runtime/compiler-rt/Makefile
@@ -23,7 +23,9 @@ ResourceDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib/clang/$(CLANG_VERSION)
PROJ_resources := $(DESTDIR)$(PROJ_prefix)/lib/clang/$(CLANG_VERSION)
ResourceLibDir := $(ResourceDir)/lib
+ResourceIncludeDir := $(ResourceDir)/include
PROJ_resources_lib := $(PROJ_resources)/lib
+PROJ_resources_include := $(PROJ_resources)/include
# Expect compiler-rt to be in llvm/projects/compiler-rt
COMPILERRT_SRC_ROOT := $(LLVM_SRC_ROOT)/projects/compiler-rt
@@ -75,7 +77,9 @@ ifeq ($(OS),Darwin)
RuntimeDirs += darwin macho_embedded
RuntimeLibrary.darwin.Configs := \
eprintf.a 10.4.a osx.a cc_kext.a \
- profile_osx.a
+ asan_osx_dynamic.dylib \
+ profile_osx.a \
+ ubsan_osx.a
IOS_SDK := $(shell xcrun --show-sdk-path -sdk iphoneos 2> /dev/null)
IOSSIM_SDK := $(shell xcrun --show-sdk-path -sdk iphonesimulator 2> /dev/null)
@@ -88,6 +92,10 @@ ifneq ($(IOS_SDK),)
RuntimeLibrary.darwin.Configs += cc_kext_ios5.a
endif
+ifneq ($(IOSSIM_SDK),)
+RuntimeLibrary.darwin.Configs += asan_iossim_dynamic.dylib
+endif
+
RuntimeLibrary.macho_embedded.Configs := \
hard_static.a hard_pic.a
ifneq (,$(findstring ARM,$(TARGETS_TO_BUILD)))
@@ -114,7 +122,8 @@ TryCompile = \
# We try to build 32-bit runtimes both on 32-bit hosts and 64-bit hosts.
Runtime32BitConfigs = \
- builtins-i386.a profile-i386.a
+ builtins-i386.a profile-i386.a san-i386.a asan-i386.a asan_cxx-i386.a \
+ ubsan-i386.a ubsan_cxx-i386.a
# We currently only try to generate runtime libraries on x86.
ifeq ($(ARCH),x86)
@@ -123,15 +132,21 @@ endif
ifeq ($(ARCH),x86_64)
RuntimeLibrary.linux.Configs += \
- builtins-x86_64.a profile-x86_64.a
-# We need to build 32-bit libraries on 64-bit platform, and add them
-# to the list of runtime libraries to make "clang -m32" work.
+ builtins-x86_64.a profile-x86_64.a san-x86_64.a asan-x86_64.a \
+ asan_cxx-x86_64.a tsan-x86_64.a msan-x86_64.a ubsan-x86_64.a \
+ ubsan_cxx-x86_64.a dfsan-x86_64.a lsan-x86_64.a
+# We need to build 32-bit ASan/UBsan libraries on 64-bit platform, and add them
+# to the list of runtime libraries to make
+# "clang -fsanitize=(address|undefined) -m32" work.
# We check that Clang can produce working 32-bit binaries by compiling a simple
# executable.
test_source = $(LLVM_SRC_ROOT)/tools/clang/runtime/compiler-rt/clang_linux_test_input.c
ifeq ($(call TryCompile,$(ToolDir)/clang,$(test_source),-m32),0)
RuntimeLibrary.linux.Configs += $(Runtime32BitConfigs)
endif
+ifneq ($(LLVM_ANDROID_TOOLCHAIN_DIR),)
+RuntimeLibrary.linux.Configs += asan-arm-android.so
+endif
endif
endif
@@ -151,6 +166,7 @@ BuildRuntimeLibraries:
ProjObjRoot=$(PROJ_OBJ_DIR) \
CC="$(ToolDir)/clang" \
VERBOSE=$(VERBOSE) \
+ LLVM_ANDROID_TOOLCHAIN_DIR="$(LLVM_ANDROID_TOOLCHAIN_DIR)" \
$(RuntimeDirs:%=clang_%)
.PHONY: BuildRuntimeLibraries
CleanRuntimeLibraries:
@@ -160,10 +176,18 @@ CleanRuntimeLibraries:
VERBOSE=$(VERBOSE) \
clean
.PHONY: CleanRuntimeLibraries
+RuntimeHeader: $(ResourceIncludeDir)/sanitizer
$(PROJ_resources_lib):
$(Verb) $(MKDIR) $@
+$(ResourceIncludeDir):
+ $(Verb) $(MKDIR) $@
+
+$(ResourceIncludeDir)/sanitizer: $(ResourceIncludeDir)
+ $(Verb) $(MKDIR) $@
+ $(Verb) cp $(COMPILERRT_SRC_ROOT)/include/sanitizer/*.h $@
+
# Expand rules for copying/installing each individual library. We can't use
# implicit rules here because we need to match against multiple things.
define RuntimeLibraryTemplate
@@ -218,9 +242,21 @@ RuntimeLibraryInstall.$1: \
endef
$(foreach lib,$(RuntimeDirs), $(eval $(call RuntimeLibraryTemplate,$(lib))))
+$(PROJ_resources_include):
+ $(Verb) $(MKDIR) $@
+
+$(PROJ_resources_include)/sanitizer: $(ResourceIncludeDir)/sanitizer $(PROJ_resources_include)
+ $(Verb) $(MKDIR) $@
+ $(Echo) Installing compiler runtime headers
+ $(Verb) $(DataInstall) $(ResourceIncludeDir)/sanitizer/* \
+ $(PROJ_resources_include)/sanitizer
+
+RuntimeHeaderInstall: $(PROJ_resources_include)/sanitizer
+.PHONY: RuntimeHeaderInstall
+
# Hook into the standard Makefile rules.
-all-local:: $(RuntimeDirs:%=RuntimeLibrary.%)
-install-local:: $(RuntimeDirs:%=RuntimeLibraryInstall.%)
+all-local:: $(RuntimeDirs:%=RuntimeLibrary.%) RuntimeHeader
+install-local:: $(RuntimeDirs:%=RuntimeLibraryInstall.%) RuntimeHeaderInstall
clean-local:: CleanRuntimeLibraries
endif
OpenPOWER on IntegriCloud