about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJyun-Yan You <jyyou.tw@gmail.com>2013-05-05 22:29:10 +0800
committerJyun-Yan You <jyyou@cs.nctu.edu.tw>2013-05-07 13:17:14 +0800
commit48b6262b383365b7319ef76fa9c6d2c63c4d70e1 (patch)
tree09d2a9979e48f290fb4f0cd5edb1242797b76a91
parent063851ffa1b8388a0b70446c0209af16264e8181 (diff)
downloadrust-48b6262b383365b7319ef76fa9c6d2c63c4d70e1.tar.gz
rust-48b6262b383365b7319ef76fa9c6d2c63c4d70e1.zip
preliminary Linux ARM support
-rw-r--r--mk/platform.mk26
-rw-r--r--mk/rt.mk4
-rw-r--r--src/librustc/back/arm.rs2
-rw-r--r--src/rt/arch/arm/record_sp.S8
-rw-r--r--src/rt/rust_task.h3
5 files changed, 42 insertions, 1 deletions
diff --git a/mk/platform.mk b/mk/platform.mk
index e03b7c15247..78ca57f9c62 100644
--- a/mk/platform.mk
+++ b/mk/platform.mk
@@ -239,6 +239,32 @@ CFG_RUN_arm-linux-androideabi=
 CFG_RUN_TARG_arm-linux-androideabi=
 RUSTC_FLAGS_arm-linux-androideabi :=--android-cross-path=$(CFG_ANDROID_CROSS_PATH)
 
+# arm-unknown-linux-gnueabihf configuration
+CC_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-gcc
+CXX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-g++
+CPP_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-gcc -E
+AR_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-ar
+CFG_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).so
+CFG_LIB_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.so
+CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.dylib.dSYM
+CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabihf := -Wall -g -fPIC
+CFG_GCCISH_CXXFLAGS_arm-unknown-linux-gnueabihf := -fno-rtti
+CFG_GCCISH_LINK_FLAGS_arm-unknown-linux-gnueabihf := -shared -fPIC -g
+CFG_GCCISH_DEF_FLAG_arm-unknown-linux-gnueabihf := -Wl,--export-dynamic,--dynamic-list=
+CFG_GCCISH_PRE_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-whole-archive
+CFG_GCCISH_POST_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-no-whole-archive
+CFG_DEF_SUFFIX_arm-unknown-linux-gnueabihf := .linux.def
+CFG_INSTALL_NAME_ar,-unknown-linux-gnueabihf =
+CFG_LIBUV_LINK_FLAGS_arm-unknown-linux-gnueabihf =
+CFG_EXE_SUFFIX_arm-unknown-linux-gnueabihf :=
+CFG_WINDOWSY_arm-unknown-linux-gnueabihf :=
+CFG_UNIXY_arm-unknown-linux-gnueabihf := 1
+CFG_PATH_MUNGE_arm-unknown-linux-gnueabihf := true
+CFG_LDPATH_arm-unknown-linux-gnueabihf :=
+CFG_RUN_arm-unknown-linux-gnueabihf=
+CFG_RUN_TARG_arm-unknown-linux-gnueabihf=
+RUSTC_FLAGS_arm-unknown-linux-gnueabihf := --linker=$(CC_arm-unknown-linux-gnueabihf)
+
 # mips-unknown-linux-gnu configuration
 CC_mips-unknown-linux-gnu=mips-linux-gnu-gcc
 CXX_mips-unknown-linux-gnu=mips-linux-gnu-g++
diff --git a/mk/rt.mk b/mk/rt.mk
index 30dda2fb276..e26d7ac517e 100644
--- a/mk/rt.mk
+++ b/mk/rt.mk
@@ -26,7 +26,11 @@
 # Hack for passing flags into LIBUV, see below.
 LIBUV_FLAGS_i386 = -m32 -fPIC
 LIBUV_FLAGS_x86_64 = -m64 -fPIC
+ifeq ($(OSTYPE_$(1)), linux-androideabi)
 LIBUV_FLAGS_arm = -fPIC -DANDROID -std=gnu99
+else
+LIBUV_FLAGS_arm = -fPIC -std=gnu99
+endif
 LIBUV_FLAGS_mips = -fPIC -mips32r2 -msoft-float -mabi=32
 
 # when we're doing a snapshot build, we intentionally degrade as many
diff --git a/src/librustc/back/arm.rs b/src/librustc/back/arm.rs
index dfe5751f21b..ff3c71da458 100644
--- a/src/librustc/back/arm.rs
+++ b/src/librustc/back/arm.rs
@@ -64,7 +64,7 @@ pub fn get_target_strs(target_os: session::os) -> target_strs::t {
         target_triple: match target_os {
           session::os_macos => ~"arm-apple-darwin",
           session::os_win32 => ~"arm-pc-mingw32",
-          session::os_linux => ~"arm-unknown-linux",
+          session::os_linux => ~"arm-unknown-linux-gnueabihf",
           session::os_android => ~"arm-linux-androideabi",
           session::os_freebsd => ~"arm-unknown-freebsd"
         },
diff --git a/src/rt/arch/arm/record_sp.S b/src/rt/arch/arm/record_sp.S
index 95fce8746a1..8d5f24bc5a8 100644
--- a/src/rt/arch/arm/record_sp.S
+++ b/src/rt/arch/arm/record_sp.S
@@ -15,13 +15,21 @@
 
 record_sp_limit:
 	mrc p15, #0, r3, c13, c0, #3
+#if __ANDROID__
 	add r3, r3, #252
+#elif __linux__
+	add r3, r3, #4
+#endif
 	str r0, [r3]
 	mov pc, lr
 
 get_sp_limit:
 	mrc p15, #0, r3, c13, c0, #3
+#if __ANDROID__
 	add r3, r3, #252
+#elif __linux__
+	add r3, r3, #4
+#endif
 	ldr r0, [r3]
 	mov pc, lr
 
diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h
index fd4e8451b64..6813e3b46c4 100644
--- a/src/rt/rust_task.h
+++ b/src/rt/rust_task.h
@@ -146,6 +146,9 @@
 #ifdef __mips__
 #define RED_ZONE_SIZE RZ_LINUX_32
 #endif
+#ifdef __arm__
+#define RED_ZONE_SIZE RZ_LINUX_32
+#endif
 #endif
 #ifdef __APPLE__
 #ifdef __i386__