From 2a333ed0884c65d06591607e6e9b2857bd327d6e Mon Sep 17 00:00:00 2001 From: kud1ing Date: Fri, 1 Nov 2013 19:39:35 +0100 Subject: [PATCH] Fixes for compilation to iOS: - remove /usr/include from the include path since the iOS SDK provides the correct version - `_NSGetEnviron()` is private and not available on iOS - `.align` without an argument is not allowed with the Apple tools. 2^2 should be the default alignment - ignore error messages for XCode < 5 - pass include path to libuv --- mk/platform.mk | 4 ++-- mk/rt.mk | 7 +++++++ src/rt/arch/arm/_context.S | 5 ++++- src/rt/arch/arm/record_sp.S | 5 ++++- src/rt/rust_builtin.cpp | 12 +++++++++--- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/mk/platform.mk b/mk/platform.mk index e7c9a10bc63e2..d9df4d42f5796 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -195,8 +195,8 @@ CFG_RUN_TARG_i686-unknown-linux-gnu=$(call CFG_RUN_i686-unknown-linux-gnu,,$(2)) # arm-apple-darwin configuration ifeq ($(CFG_OSTYPE),apple-darwin) -CFG_IOS_SDK = $(shell xcrun --show-sdk-path -sdk iphoneos) -CFG_IOS_FLAGS = -target arm-apple-darwin -isysroot $(CFG_IOS_SDK) -I $(CFG_IOS_SDK)/usr/include -I $(CFG_IOS_SDK)/usr/include/c++/4.2.1 -I /usr/include +CFG_IOS_SDK = $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null) +CFG_IOS_FLAGS = -target arm-apple-darwin -isysroot $(CFG_IOS_SDK) -I$(CFG_IOS_SDK)/usr/include -I$(CFG_IOS_SDK)/usr/include/c++/4.2.1 CC_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang) CXX_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++) CPP_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++) diff --git a/mk/rt.mk b/mk/rt.mk index d8490230675b8..3f5f079d504fc 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -28,6 +28,13 @@ LIBUV_FLAGS_i386 = -m32 -fPIC -I$(S)src/etc/mingw-fix-include LIBUV_FLAGS_x86_64 = -m64 -fPIC ifeq ($(OSTYPE_$(1)), linux-androideabi) LIBUV_FLAGS_arm = -fPIC -DANDROID -std=gnu99 +else ifeq ($(OSTYPE_$(1)), apple-darwin) + ifeq ($(HOST_$(1)), arm) + IOS_SDK := $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null) + LIBUV_FLAGS_arm := -fPIC -std=gnu99 -I$(IOS_SDK)/usr/include -I$(IOS_SDK)/usr/include/c++/4.2.1 + else + LIBUV_FLAGS_arm := -fPIC -std=gnu99 + endif else LIBUV_FLAGS_arm = -fPIC -std=gnu99 endif diff --git a/src/rt/arch/arm/_context.S b/src/rt/arch/arm/_context.S index 6441f59a4d30c..7227c15cc47e9 100644 --- a/src/rt/arch/arm/_context.S +++ b/src/rt/arch/arm/_context.S @@ -6,8 +6,11 @@ .text .code 32 .arm +#if defined(__APPLE__) +.align 2 +#else .align - +#endif .globl swap_registers swap_registers: diff --git a/src/rt/arch/arm/record_sp.S b/src/rt/arch/arm/record_sp.S index 6900444c0fe29..cce14ed5a3ecf 100644 --- a/src/rt/arch/arm/record_sp.S +++ b/src/rt/arch/arm/record_sp.S @@ -6,8 +6,11 @@ .text .code 32 .arm +#if defined(__APPLE__) +.align 2 +#else .align - +#endif .globl record_sp_limit .globl get_sp_limit diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 90cfd98bc4859..f682c596addb3 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -18,8 +18,14 @@ #include #ifdef __APPLE__ -#include -#include + #include + #include + + #if (TARGET_OS_IPHONE) + extern char **environ; + #else + #include + #endif #endif #if !defined(__WIN32__) @@ -58,7 +64,7 @@ rust_env_pairs() { #else extern "C" CDECL char** rust_env_pairs() { -#ifdef __APPLE__ +#if defined(__APPLE__) && !(TARGET_OS_IPHONE) char **environ = *_NSGetEnviron(); #endif return environ;