зеркало из https://github.com/microsoft/clang.git
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@229582 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
3cf3fd9fed
Коммит
d8035e6033
|
@ -23,7 +23,8 @@ Typical slowdown introduced by AddressSanitizer is **2x**.
|
|||
How to build
|
||||
============
|
||||
|
||||
Build LLVM/Clang with `CMake <http://llvm.org/docs/CMake.html>`_.
|
||||
Follow the `clang build instructions <../get_started.html>`_. CMake build is
|
||||
supported.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
|
|
@ -16,7 +16,8 @@ Typical slowdown introduced by MemorySanitizer is **3x**.
|
|||
How to build
|
||||
============
|
||||
|
||||
Build LLVM/Clang with `CMake <http://llvm.org/docs/CMake.html>`_.
|
||||
Follow the `clang build instructions <../get_started.html>`_. CMake
|
||||
build is supported.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
|
|
@ -12,7 +12,8 @@ ThreadSanitizer is about **5x-10x**.
|
|||
How to build
|
||||
------------
|
||||
|
||||
Build LLVM/Clang with `CMake <http://llvm.org/docs/CMake.html>`_.
|
||||
Follow the `Clang build instructions <../get_started.html>`_. CMake build is
|
||||
supported.
|
||||
|
||||
Supported Platforms
|
||||
-------------------
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче