diff --git a/configure b/configure index 572e486f816..9576e36828a 100755 --- a/configure +++ b/configure @@ -1164,7 +1164,7 @@ do ;; - *-musl) + x86_64-*-musl) if [ ! -f $CFG_MUSL_ROOT/lib/libc.a ] then err "musl libc $CFG_MUSL_ROOT/lib/libc.a not found" diff --git a/mk/cfg/mips-unknown-linux-musl.mk b/mk/cfg/mips-unknown-linux-musl.mk new file mode 100644 index 00000000000..33528b986f6 --- /dev/null +++ b/mk/cfg/mips-unknown-linux-musl.mk @@ -0,0 +1,24 @@ +# mips-unknown-linux-musl configuration +CC_mips-unknown-linux-musl=mips-linux-musl-gcc +CXX_mips-unknown-linux-musl=mips-linux-musl-g++ +CPP_mips-unknown-linux-musl=mips-linux-musl-gcc -E +AR_mips-unknown-linux-musl=mips-linux-musl-ar +CFG_LIB_NAME_mips-unknown-linux-musl=lib$(1).so +CFG_STATIC_LIB_NAME_mips-unknown-linux-musl=lib$(1).a +CFG_LIB_GLOB_mips-unknown-linux-musl=lib$(1)-*.so +CFG_LIB_DSYM_GLOB_mips-unknown-linux-musl=lib$(1)-*.dylib.dSYM +CFG_JEMALLOC_CFLAGS_mips-unknown-linux-musl := -mips32r2 -msoft-float -mabi=32 $(CFLAGS) +CFG_GCCISH_CFLAGS_mips-unknown-linux-musl := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 $(CFLAGS) +CFG_GCCISH_CXXFLAGS_mips-unknown-linux-musl := -fno-rtti $(CXXFLAGS) +CFG_GCCISH_LINK_FLAGS_mips-unknown-linux-musl := -shared -fPIC -g -mips32r2 -msoft-float -mabi=32 +CFG_GCCISH_DEF_FLAG_mips-unknown-linux-musl := -Wl,--export-dynamic,--dynamic-list= +CFG_LLC_FLAGS_mips-unknown-linux-musl := +CFG_INSTALL_NAME_mips-unknown-linux-musl = +CFG_EXE_SUFFIX_mips-unknown-linux-musl = +CFG_WINDOWSY_mips-unknown-linux-musl := +CFG_UNIXY_mips-unknown-linux-musl := 1 +CFG_LDPATH_mips-unknown-linux-musl := +CFG_RUN_mips-unknown-linux-musl= +CFG_RUN_TARG_mips-unknown-linux-musl= +RUSTC_FLAGS_mips-unknown-linux-musl := +CFG_GNU_TRIPLE_mips-unknown-linux-musl := mips-unknown-linux-musl diff --git a/mk/cfg/mipsel-unknown-linux-musl.mk b/mk/cfg/mipsel-unknown-linux-musl.mk new file mode 100644 index 00000000000..db836b81c5f --- /dev/null +++ b/mk/cfg/mipsel-unknown-linux-musl.mk @@ -0,0 +1,24 @@ +# mipsel-unknown-linux-musl configuration +CC_mipsel-unknown-linux-musl=mipsel-linux-musl-gcc +CXX_mipsel-unknown-linux-musl=mipsel-linux-musl-g++ +CPP_mipsel-unknown-linux-musl=mipsel-linux-musl-gcc +AR_mipsel-unknown-linux-musl=mipsel-linux-musl-ar +CFG_LIB_NAME_mipsel-unknown-linux-musl=lib$(1).so +CFG_STATIC_LIB_NAME_mipsel-unknown-linux-musl=lib$(1).a +CFG_LIB_GLOB_mipsel-unknown-linux-musl=lib$(1)-*.so +CFG_LIB_DSYM_GLOB_mipsel-unknown-linux-musl=lib$(1)-*.dylib.dSYM +CFG_JEMALLOC_CFLAGS_mipsel-unknown-linux-musl := -mips32 -mabi=32 $(CFLAGS) +CFG_GCCISH_CFLAGS_mipsel-unknown-linux-musl := -Wall -g -fPIC -mips32 -mabi=32 $(CFLAGS) +CFG_GCCISH_CXXFLAGS_mipsel-unknown-linux-musl := -fno-rtti $(CXXFLAGS) +CFG_GCCISH_LINK_FLAGS_mipsel-unknown-linux-musl := -shared -fPIC -g -mips32 +CFG_GCCISH_DEF_FLAG_mipsel-unknown-linux-musl := -Wl,--export-dynamic,--dynamic-list= +CFG_LLC_FLAGS_mipsel-unknown-linux-musl := +CFG_INSTALL_NAME_mipsel-unknown-linux-musl = +CFG_EXE_SUFFIX_mipsel-unknown-linux-musl := +CFG_WINDOWSY_mipsel-unknown-linux-musl := +CFG_UNIXY_mipsel-unknown-linux-musl := 1 +CFG_LDPATH_mipsel-unknown-linux-musl := +CFG_RUN_mipsel-unknown-linux-musl= +CFG_RUN_TARG_mipsel-unknown-linux-musl= +RUSTC_FLAGS_mipsel-unknown-linux-musl := +CFG_GNU_TRIPLE_mipsel-unknown-linux-musl := mipsel-unknown-linux-musl diff --git a/src/liblibc b/src/liblibc index 91ff43c736d..30f70baa6cc 160000 --- a/src/liblibc +++ b/src/liblibc @@ -1 +1 @@ -Subproject commit 91ff43c736de664f8d3cd351e148c09cdea6731e +Subproject commit 30f70baa6cc1ba3ddebb55b988fafbad0c0cc810 diff --git a/src/librustc_back/target/mips_unknown_linux_musl.rs b/src/librustc_back/target/mips_unknown_linux_musl.rs new file mode 100644 index 00000000000..050fb91aa19 --- /dev/null +++ b/src/librustc_back/target/mips_unknown_linux_musl.rs @@ -0,0 +1,28 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use target::{Target, TargetOptions}; + +pub fn target() -> Target { + Target { + llvm_target: "mips-unknown-linux-musl".to_string(), + target_endian: "big".to_string(), + target_pointer_width: "32".to_string(), + arch: "mips".to_string(), + target_os: "linux".to_string(), + target_env: "musl".to_string(), + target_vendor: "unknown".to_string(), + options: TargetOptions { + cpu: "mips32r2".to_string(), + features: "+mips32r2,+soft-float".to_string(), + ..super::linux_base::opts() + } + } +} diff --git a/src/librustc_back/target/mipsel_unknown_linux_musl.rs b/src/librustc_back/target/mipsel_unknown_linux_musl.rs new file mode 100644 index 00000000000..383a0d891ca --- /dev/null +++ b/src/librustc_back/target/mipsel_unknown_linux_musl.rs @@ -0,0 +1,28 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use target::{Target, TargetOptions}; + +pub fn target() -> Target { + Target { + llvm_target: "mipsel-unknown-linux-musl".to_string(), + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + arch: "mips".to_string(), + target_os: "linux".to_string(), + target_env: "musl".to_string(), + target_vendor: "unknown".to_string(), + options: TargetOptions { + cpu: "mips32".to_string(), + features: "+mips32".to_string(), + ..super::linux_base::opts() + } + } +} diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs index 331ec4a82ac..39f05ba645e 100644 --- a/src/librustc_back/target/mod.rs +++ b/src/librustc_back/target/mod.rs @@ -420,6 +420,8 @@ impl Target { armv7_unknown_linux_gnueabihf, aarch64_unknown_linux_gnu, x86_64_unknown_linux_musl, + mips_unknown_linux_musl, + mipsel_unknown_linux_musl, i686_linux_android, arm_linux_androideabi, diff --git a/src/libstd/os/linux/raw.rs b/src/libstd/os/linux/raw.rs index 953d0917141..286823552c2 100644 --- a/src/libstd/os/linux/raw.rs +++ b/src/libstd/os/linux/raw.rs @@ -93,11 +93,20 @@ mod arch { use os::raw::{c_long, c_ulong}; use os::unix::raw::{gid_t, uid_t}; + #[cfg(target_env = "musl")] + #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64; + #[cfg(not(target_env = "musl"))] #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i32; #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32; + #[cfg(target_env = "musl")] + #[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = u64; + #[cfg(not(target_env = "musl"))] #[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = u32; #[stable(feature = "raw_ext", since = "1.1.0")] pub type nlink_t = u32; + #[cfg(target_env = "musl")] #[stable(feature = "raw_ext", since = "1.1.0")] pub type off_t = i32; + #[cfg(not(target_env = "musl"))] + #[stable(feature = "raw_ext", since = "1.1.0")] pub type off_t = i64; #[stable(feature = "raw_ext", since = "1.1.0")] pub type time_t = i32; #[repr(C)] diff --git a/src/libstd/sys/common/libunwind.rs b/src/libstd/sys/common/libunwind.rs index 77d1eed9623..179a27a2ec8 100644 --- a/src/libstd/sys/common/libunwind.rs +++ b/src/libstd/sys/common/libunwind.rs @@ -101,9 +101,10 @@ pub type _Unwind_Exception_Cleanup_Fn = exception: *mut _Unwind_Exception); #[cfg_attr(any(all(target_os = "linux", not(target_env = "musl")), - target_os = "freebsd"), + target_os = "freebsd", + all(target_os = "linux", target_env = "musl", not(target_arch = "x86_64"))), link(name = "gcc_s"))] -#[cfg_attr(all(target_os = "linux", target_env = "musl", not(test)), +#[cfg_attr(all(target_os = "linux", target_env = "musl", target_arch = "x86_64", not(test)), link(name = "unwind", kind = "static"))] #[cfg_attr(any(target_os = "android", target_os = "openbsd"), link(name = "gcc"))]