iOS: preliminary 64-bit archs support
This commit is contained in:
parent
3fbbc6ea2a
commit
577d0dbcb8
36
mk/cfg/aarch64-apple-ios.mk
Normal file
36
mk/cfg/aarch64-apple-ios.mk
Normal file
@ -0,0 +1,36 @@
|
||||
# aarch64-apple-ios configuration
|
||||
CFG_SDK_NAME_aarch64-apple-ios := iphoneos
|
||||
CFG_SDK_ARCHS_aarch64-apple-ios := arm64
|
||||
ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
|
||||
CFG_IOS_SDK_aarch64-apple-ios := $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null)
|
||||
CFG_IOS_SDK_FLAGS_aarch64-apple-ios := -target aarch64-apple-darwin -isysroot $(CFG_IOS_SDK_aarch64-apple-ios) -mios-version-min=7.0 -arch arm64
|
||||
CC_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos clang)
|
||||
CXX_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos clang++)
|
||||
CPP_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos clang++)
|
||||
AR_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos ar)
|
||||
endif
|
||||
CFG_LIB_NAME_aarch64-apple-ios = lib$(1).a
|
||||
CFG_LIB_GLOB_aarch64-apple-ios = lib$(1)-*.a
|
||||
CFG_LIB_SKIP_INSTALL_aarch64-apple-ios = 1 #lib$(1)-*.a
|
||||
CFG_STATIC_LIB_NAME_aarch64-apple-ios=lib$(1).a
|
||||
CFG_LIB_DSYM_GLOB_aarch64-apple-ios = lib$(1)-*.a.dSYM
|
||||
CFG_CFLAGS_aarch64-apple-ios := $(CFG_IOS_SDK_FLAGS_aarch64-apple-ios)
|
||||
CFG_JEMALLOC_CFLAGS_aarch64-apple-ios := $(CFG_IOS_SDK_FLAGS_aarch64-apple-ios)
|
||||
CFG_GCCISH_CFLAGS_aarch64-apple-ios := -Wall -Werror -fPIC $(CFG_IOS_SDK_FLAGS_aarch64-apple-ios)
|
||||
CFG_GCCISH_CXXFLAGS_aarch64-apple-ios := -fno-rtti $(CFG_IOS_SDK_FLAGS_aarch64-apple-ios) -I$(CFG_IOS_SDK_aarch64-apple-ios)/usr/include/c++/4.2.1
|
||||
CFG_GCCISH_LINK_FLAGS_aarch64-apple-ios := -lpthread -syslibroot $(CFG_IOS_SDK_aarch64-apple-ios) -Wl,-no_compact_unwind
|
||||
CFG_GCCISH_DEF_FLAG_aarch64-apple-ios := -Wl,-exported_symbols_list,
|
||||
CFG_GCCISH_PRE_LIB_FLAGS_aarch64-apple-ios :=
|
||||
CFG_GCCISH_POST_LIB_FLAGS_aarch64-apple-ios :=
|
||||
CFG_DEF_SUFFIX_aarch64-apple-ios := .darwin.def
|
||||
CFG_LLC_FLAGS_aarch64-apple-ios := -mattr=+neon,+cyclone,+fp-armv8
|
||||
CFG_INSTALL_NAME_aarch64-apple-ios = -Wl,-install_name,@rpath/$(1)
|
||||
CFG_LIBUV_LINK_FLAGS_aarch64-apple-ios =
|
||||
CFG_EXE_SUFFIX_aarch64-apple-ios :=
|
||||
CFG_WINDOWSY_aarch64-apple-ios :=
|
||||
CFG_UNIXY_aarch64-apple-ios := 1
|
||||
CFG_PATH_MUNGE_aarch64-apple-ios := true
|
||||
CFG_LDPATH_aarch64-apple-ios :=
|
||||
CFG_RUN_aarch64-apple-ios = $(2)
|
||||
CFG_RUN_TARG_aarch64-apple-ios = $(call CFG_RUN_aarch64-apple-ios,,$(2))
|
||||
CFG_GNU_TRIPLE_aarch64-apple-ios := aarch64-apple-ios
|
36
mk/cfg/x86_64-apple-ios.mk
Normal file
36
mk/cfg/x86_64-apple-ios.mk
Normal file
@ -0,0 +1,36 @@
|
||||
# x86_64-apple-ios configuration
|
||||
CFG_SDK_NAME_x86_64-apple-ios := iphonesimulator
|
||||
CFG_SDK_ARCHS_x86_64-apple-ios := x86_64
|
||||
ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
|
||||
CFG_IOSSIM_SDK_x86_64-apple-ios := $(shell xcrun --show-sdk-path -sdk iphonesimulator 2>/dev/null)
|
||||
CFG_IOSSIM_FLAGS_x86_64-apple-ios := -m64 -target x86_64-apple-ios -isysroot $(CFG_IOSSIM_SDK_x86_64-apple-ios) -mios-simulator-version-min=7.0
|
||||
CC_x86_64-apple-ios = $(shell xcrun -find -sdk iphonesimulator clang)
|
||||
CXX_x86_64-apple-ios = $(shell xcrun -find -sdk iphonesimulator clang++)
|
||||
CPP_x86_64-apple-ios = $(shell xcrun -find -sdk iphonesimulator clang++)
|
||||
AR_x86_64-apple-ios = $(shell xcrun -find -sdk iphonesimulator ar)
|
||||
endif
|
||||
CFG_LIB_NAME_x86_64-apple-ios = lib$(1).a
|
||||
CFG_LIB_GLOB_x86_64-apple-ios = lib$(1)-*.a
|
||||
CFG_LIB_SKIP_INSTALL_x86_64-apple-ios = 1 #lib$(1)-*.a
|
||||
CFG_STATIC_LIB_NAME_x86_64-apple-ios=lib$(1).a
|
||||
CFG_LIB_DSYM_GLOB_x86_64-apple-ios = lib$(1)-*.a.dSYM
|
||||
CFG_CFLAGS_x86_64-apple-ios := $(CFG_IOSSIM_FLAGS_x86_64-apple-ios)
|
||||
CFG_JEMALLOC_CFLAGS_x86_64-apple-ios := $(CFG_IOSSIM_FLAGS_x86_64-apple-ios)
|
||||
CFG_GCCISH_CFLAGS_x86_64-apple-ios := -Wall -Werror -fPIC $(CFG_IOSSIM_FLAGS_x86_64-apple-ios)
|
||||
CFG_GCCISH_CXXFLAGS_x86_64-apple-ios := -fno-rtti $(CFG_IOSSIM_FLAGS_x86_64-apple-ios) -I$(CFG_IOSSIM_SDK_x86_64-apple-ios)/usr/include/c++/4.2.1
|
||||
CFG_GCCISH_LINK_FLAGS_x86_64-apple-ios := -lpthread -Wl,-no_compact_unwind -m64 -Wl,-syslibroot $(CFG_IOSSIM_SDK_x86_64-apple-ios)
|
||||
CFG_GCCISH_DEF_FLAG_x86_64-apple-ios := -Wl,-exported_symbols_list,
|
||||
CFG_GCCISH_PRE_LIB_FLAGS_x86_64-apple-ios :=
|
||||
CFG_GCCISH_POST_LIB_FLAGS_x86_64-apple-ios :=
|
||||
CFG_DEF_SUFFIX_x86_64-apple-ios := .darwin.def
|
||||
CFG_LLC_FLAGS_x86_64-apple-ios :=
|
||||
CFG_INSTALL_NAME_x86_64-apple-ios = -Wl,-install_name,@rpath/$(1)
|
||||
CFG_LIBUV_LINK_FLAGS_x86_64-apple-ios :=
|
||||
CFG_EXE_SUFFIX_x86_64-apple-ios :=
|
||||
CFG_WINDOWSY_x86_64-apple-ios :=
|
||||
CFG_UNIXY_x86_64-apple-ios := 1
|
||||
CFG_PATH_MUNGE_x86_64-apple-ios := true
|
||||
CFG_LDPATH_x86_64-apple-ios :=
|
||||
CFG_RUN_x86_64-apple-ios = $(2)
|
||||
CFG_RUN_TARG_x86_64-apple-ios = $(call CFG_RUN_x86_64-apple-ios,,$(2))
|
||||
CFG_GNU_TRIPLE_i386-apple-ios := x86_64-apple-ios
|
@ -1968,7 +1968,7 @@ pub mod types {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
#[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
|
||||
pub mod arch {
|
||||
pub mod c95 {
|
||||
pub type c_char = i8;
|
||||
|
31
src/librustc_back/target/aarch64_apple_ios.rs
Normal file
31
src/librustc_back/target/aarch64_apple_ios.rs
Normal file
@ -0,0 +1,31 @@
|
||||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use target::{Target, TargetOptions};
|
||||
use super::apple_ios_base::{opts, Arch};
|
||||
|
||||
pub fn target() -> Target {
|
||||
Target {
|
||||
// reference layout: e-m:o-i64:64-i128:128-n32:64-S128
|
||||
data_layout: "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-\
|
||||
i128:128-f32:32:32-f64:64:64-v64:64:64-v128:128:128-\
|
||||
a:0:64-n32:64-S128".to_string(),
|
||||
llvm_target: "arm64-apple-ios".to_string(),
|
||||
target_endian: "little".to_string(),
|
||||
target_pointer_width: "64".to_string(),
|
||||
arch: "aarch64".to_string(),
|
||||
target_os: "ios".to_string(),
|
||||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+cyclone".to_string(),
|
||||
eliminate_frame_pointer: false,
|
||||
.. opts(Arch::Arm64)
|
||||
},
|
||||
}
|
||||
}
|
@ -64,6 +64,7 @@ mod i386_apple_ios;
|
||||
mod arm_linux_androideabi;
|
||||
mod arm_unknown_linux_gnueabi;
|
||||
mod arm_unknown_linux_gnueabihf;
|
||||
mod aarch64_apple_ios;
|
||||
mod aarch64_unknown_linux_gnu;
|
||||
mod i686_apple_darwin;
|
||||
mod i686_pc_windows_gnu;
|
||||
@ -72,6 +73,7 @@ mod i686_unknown_linux_gnu;
|
||||
mod mips_unknown_linux_gnu;
|
||||
mod mipsel_unknown_linux_gnu;
|
||||
mod x86_64_apple_darwin;
|
||||
mod x86_64_apple_ios;
|
||||
mod x86_64_pc_windows_gnu;
|
||||
mod x86_64_unknown_freebsd;
|
||||
mod x86_64_unknown_dragonfly;
|
||||
@ -351,6 +353,8 @@ impl Target {
|
||||
i686_apple_darwin,
|
||||
|
||||
i386_apple_ios,
|
||||
x86_64_apple_ios,
|
||||
aarch64_apple_ios,
|
||||
armv7_apple_ios,
|
||||
armv7s_apple_ios,
|
||||
|
||||
|
26
src/librustc_back/target/x86_64_apple_ios.rs
Normal file
26
src/librustc_back/target/x86_64_apple_ios.rs
Normal file
@ -0,0 +1,26 @@
|
||||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use target::Target;
|
||||
use super::apple_ios_base::{opts, Arch};
|
||||
|
||||
pub fn target() -> Target {
|
||||
Target {
|
||||
data_layout: "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-\
|
||||
f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-\
|
||||
s0:64:64-f80:128:128-n8:16:32:64".to_string(),
|
||||
llvm_target: "x86_64-apple-ios".to_string(),
|
||||
target_endian: "little".to_string(),
|
||||
target_pointer_width: "64".to_string(),
|
||||
arch: "x86_64".to_string(),
|
||||
target_os: "ios".to_string(),
|
||||
options: opts(Arch::X86_64)
|
||||
}
|
||||
}
|
@ -61,19 +61,22 @@ mod os {
|
||||
mod os {
|
||||
use libc;
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
#[cfg(any(target_arch = "x86_64",
|
||||
target_arch = "aarch64"))]
|
||||
const __PTHREAD_MUTEX_SIZE__: uint = 56;
|
||||
#[cfg(any(target_arch = "x86",
|
||||
target_arch = "arm"))]
|
||||
const __PTHREAD_MUTEX_SIZE__: uint = 40;
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
#[cfg(any(target_arch = "x86_64",
|
||||
target_arch = "aarch64"))]
|
||||
const __PTHREAD_COND_SIZE__: uint = 40;
|
||||
#[cfg(any(target_arch = "x86",
|
||||
target_arch = "arm"))]
|
||||
const __PTHREAD_COND_SIZE__: uint = 24;
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
#[cfg(any(target_arch = "x86_64",
|
||||
target_arch = "aarch64"))]
|
||||
const __PTHREAD_RWLOCK_SIZE__: uint = 192;
|
||||
#[cfg(any(target_arch = "x86",
|
||||
target_arch = "arm"))]
|
||||
|
@ -7,13 +7,29 @@
|
||||
|
||||
/* See i386/morestack.S for the lengthy, general explanation. */
|
||||
|
||||
.global rust_stack_exhausted
|
||||
#if defined(__APPLE__)
|
||||
#define MORESTACK ___morestack
|
||||
#define STACK_EXHAUSTED _rust_stack_exhausted
|
||||
#else
|
||||
#define MORESTACK __morestack
|
||||
#define STACK_EXHAUSTED rust_stack_exhausted
|
||||
#endif
|
||||
|
||||
.global STACK_EXHAUSTED
|
||||
|
||||
#if defined(__APPLE__)
|
||||
.private_extern MORESTACK
|
||||
#else
|
||||
.hidden MORESTACK
|
||||
#endif
|
||||
|
||||
#if !defined(__APPLE__)
|
||||
.type MORESTACK,%function
|
||||
#endif
|
||||
|
||||
// FIXME(AARCH64): this might not be perfectly right but works for now
|
||||
func __morestack
|
||||
MORESTACK:
|
||||
.cfi_startproc
|
||||
bl rust_stack_exhausted
|
||||
bl STACK_EXHAUSTED@plt
|
||||
// the above function ensures that it never returns
|
||||
.cfi_endproc
|
||||
endfunc __morestack
|
||||
.hidden __morestack
|
||||
|
Loading…
Reference in New Issue
Block a user