From 1f4c8ea4412d96f97a2a1e1753292f0aab9d6ba9 Mon Sep 17 00:00:00 2001 From: angelsl Date: Sat, 24 Oct 2015 01:01:19 +0800 Subject: [PATCH 1/4] Rust: Add triple.mk Based on 1957424e9f575e13bd09a8f7be84a7b9c738b015 (vadimcn) --- make/platform/triple.mk | 66 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 make/platform/triple.mk diff --git a/make/platform/triple.mk b/make/platform/triple.mk new file mode 100644 index 0000000000..792e806200 --- /dev/null +++ b/make/platform/triple.mk @@ -0,0 +1,66 @@ +# This "platform" file is intended for building compiler-rt using gcc. +# The actual target platform is selected by setting the TargetTriple variable to the corresponding LLVM triple. + +Description := Static runtime libraries for platforms selected by 'TargetTriple' + +# Provide defaults for the required vars +ifndef CC + CC := gcc +endif +ifndef CFLAGS + CFLAGS := -Wall -O3 +endif + +Configs := builtins + +Arch := $(word 1,$(subst -, ,$(TargetTriple))) +ifeq ($(Arch),i686) + Arch := i386 +else ifeq ($(Arch),arm) +ifneq (,$(findstring ios,$(TargetTriple))) + Arch := armv7 +else ifneq (,$(findstring android,$(TargetTriple))) + Arch := armv7 +endif +endif + +# Filter out stuff that gcc cannot compile (these are only needed for clang-generated code anywasys). +CommonFunctions_gcc := $(filter-out atomic enable_execute_stack,$(CommonFunctions)) + +# Filter out stuff which is not available on specific target +# For example, sync_fetch_and_add_4 uses Thumb instructions, which are unavailable +# when building for arm-linux-androideabi +ifeq ($(TargetTriple),arm-linux-androideabi) + ArchDisabledFunctions := \ + sync_fetch_and_add_4 \ + sync_fetch_and_sub_4 \ + sync_fetch_and_and_4 \ + sync_fetch_and_or_4 \ + sync_fetch_and_xor_4 \ + sync_fetch_and_nand_4 \ + sync_fetch_and_max_4 \ + sync_fetch_and_umax_4 \ + sync_fetch_and_min_4 \ + sync_fetch_and_umin_4 \ + sync_fetch_and_add_8 \ + sync_fetch_and_sub_8 \ + sync_fetch_and_and_8 \ + sync_fetch_and_or_8 \ + sync_fetch_and_xor_8 \ + sync_fetch_and_nand_8 \ + sync_fetch_and_max_8 \ + sync_fetch_and_umax_8 \ + sync_fetch_and_min_8 \ + sync_fetch_and_umin_8 +endif + +# Clear cache is builtin on aarch64-apple-ios +# arm64 and aarch64 are synonims, but iOS targets usually use arm64 (history reasons) +ifeq (aarch64-apple-ios,$(subst arm64,aarch64,$(TargetTriple))) +CommonDisabledFunctions := clear_cache +endif + +ArchEnabledFunctions := $(filter-out $(ArchDisabledFunctions),$(value ArchFunctions.$(Arch))) +CommonEnabledFunctions := $(filter-out $(CommonDisabledFunctions),$(CommonFunctions_gcc)) + +FUNCTIONS.builtins := $(CommonEnabledFunctions) $(ArchEnabledFunctions) From 94ee7977c83d18c086a12bd8fa5f85e306b3aaca Mon Sep 17 00:00:00 2001 From: angelsl Date: Sat, 24 Oct 2015 01:02:01 +0800 Subject: [PATCH 2/4] Rust: Enable MSVC build --- lib/builtins/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt index d6a972e5a5..25bd921fcb 100644 --- a/lib/builtins/CMakeLists.txt +++ b/lib/builtins/CMakeLists.txt @@ -347,7 +347,7 @@ if (APPLE) add_subdirectory(Darwin-excludes) add_subdirectory(macho_embedded) darwin_add_builtin_libraries(${BUILTIN_SUPPORTED_OS}) -elseif (NOT WIN32 OR MINGW) +else () foreach (arch ${BUILTIN_SUPPORTED_ARCH}) if (CAN_TARGET_${arch}) # Filter out generic versions of routines that are re-implemented in From 4fba9acb9feb9267a4b5b4f2985aa505d27fe8b4 Mon Sep 17 00:00:00 2001 From: angelsl Date: Sat, 24 Oct 2015 01:20:27 +0800 Subject: [PATCH 3/4] Rust: triple.mk: properly filter out Clang-specific atomic* builtins --- make/platform/triple.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/platform/triple.mk b/make/platform/triple.mk index 792e806200..061faa7f96 100644 --- a/make/platform/triple.mk +++ b/make/platform/triple.mk @@ -25,7 +25,7 @@ endif endif # Filter out stuff that gcc cannot compile (these are only needed for clang-generated code anywasys). -CommonFunctions_gcc := $(filter-out atomic enable_execute_stack,$(CommonFunctions)) +CommonFunctions_gcc := $(filter-out atomic% enable_execute_stack,$(CommonFunctions)) # Filter out stuff which is not available on specific target # For example, sync_fetch_and_add_4 uses Thumb instructions, which are unavailable From 758a98ab1ca0edd28d349d209925e05bf95dbcd8 Mon Sep 17 00:00:00 2001 From: angelsl Date: Sat, 24 Oct 2015 01:21:15 +0800 Subject: [PATCH 4/4] rust: Silence -fPIC warnings on Windows Based on 44f2671fe87099a76510ec316a01644789aec689 (vadimcn) --- make/config.mk | 4 ++-- make/platform/clang_darwin.mk | 2 +- make/platform/clang_linux.mk | 2 +- make/platform/darwin_bni.mk | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/make/config.mk b/make/config.mk index 094fd160f9..0998aca0de 100644 --- a/make/config.mk +++ b/make/config.mk @@ -44,6 +44,6 @@ endif ### # Common compiler options COMMON_INCLUDES=-I${ProjSrcRoot}/lib -I${ProjSrcRoot}/include -COMMON_CXXFLAGS=-std=c++11 -fno-exceptions -fPIC -funwind-tables $(COMMON_INCLUDES) -COMMON_CFLAGS=-fPIC $(COMMON_INCLUDES) +COMMON_CXXFLAGS=-std=c++11 -fno-exceptions -funwind-tables $(COMMON_INCLUDES) +COMMON_CFLAGS=$(COMMON_INCLUDES) COMMON_ASMFLAGS=$(COMMON_INCLUDES) diff --git a/make/platform/clang_darwin.mk b/make/platform/clang_darwin.mk index dff26943be..ecee33c857 100644 --- a/make/platform/clang_darwin.mk +++ b/make/platform/clang_darwin.mk @@ -151,7 +151,7 @@ $(foreach config,$(Configs),\ override CC := $(subst -arch ,-arch_,$(CC)) override CC := $(patsubst -arch_%,,$(CC)) -CFLAGS := -Wall -Werror -O3 -fomit-frame-pointer +CFLAGS := -fPIC -Wall -Werror -O3 -fomit-frame-pointer # Always set deployment target arguments for every build, these libraries should # never depend on the environmental overrides. We simply set them to minimum diff --git a/make/platform/clang_linux.mk b/make/platform/clang_linux.mk index 7b109d56c0..534b04f169 100644 --- a/make/platform/clang_linux.mk +++ b/make/platform/clang_linux.mk @@ -67,7 +67,7 @@ endif ### -CFLAGS := -Wall -Werror -O3 -fomit-frame-pointer +CFLAGS := -fPIC -Wall -Werror -O3 -fomit-frame-pointer CFLAGS.builtins-i386 := $(CFLAGS) -m32 CFLAGS.builtins-x86_64 := $(CFLAGS) -m64 diff --git a/make/platform/darwin_bni.mk b/make/platform/darwin_bni.mk index 8e066e8e31..56e3ba5730 100644 --- a/make/platform/darwin_bni.mk +++ b/make/platform/darwin_bni.mk @@ -29,7 +29,7 @@ ifneq (,$(SDKROOT)) DEPLOYMENT_FLAGS += -isysroot $(SDKROOT) endif -CFLAGS := -Wall -Os -fomit-frame-pointer -g $(DEPLOYMENT_FLAGS) +CFLAGS := -fPIC -Wall -Os -fomit-frame-pointer -g $(DEPLOYMENT_FLAGS) CFLAGS.Static := $(CFLAGS) -static DYLIB_FLAGS := $(DEPLOYMENT_FLAGS) \ -Xarch_arm -Wl,-alias_list,$(SRCROOT)/lib/builtins/arm/softfloat-alias.list