auto merge of #20024 : mneumann/rust/dragonfly-fixes3, r=alexcrichton

This commit is contained in:
bors 2014-12-25 05:11:36 +00:00
commit ead198c513
7 changed files with 46 additions and 26 deletions

View File

@ -7,9 +7,9 @@ CFG_LIB_NAME_x86_64-unknown-dragonfly=lib$(1).so
CFG_STATIC_LIB_NAME_x86_64-unknown-dragonfly=lib$(1).a CFG_STATIC_LIB_NAME_x86_64-unknown-dragonfly=lib$(1).a
CFG_LIB_GLOB_x86_64-unknown-dragonfly=lib$(1)-*.so CFG_LIB_GLOB_x86_64-unknown-dragonfly=lib$(1)-*.so
CFG_LIB_DSYM_GLOB_x86_64-unknown-dragonfly=$(1)-*.dylib.dSYM CFG_LIB_DSYM_GLOB_x86_64-unknown-dragonfly=$(1)-*.dylib.dSYM
CFG_JEMALLOC_CFLAGS_x86_64-unknown-dragonfly := -I/usr/include -I/usr/local/include $(CFLAGS) CFG_JEMALLOC_CFLAGS_x86_64-unknown-dragonfly := -m64 -I/usr/include -I/usr/local/include $(CFLAGS)
CFG_GCCISH_CFLAGS_x86_64-unknown-dragonfly := -Wall -Werror -g -fPIC -I/usr/include -I/usr/local/include $(CFLAGS) CFG_GCCISH_CFLAGS_x86_64-unknown-dragonfly := -Wall -Werror -g -fPIC -m64 -I/usr/include -I/usr/local/include $(CFLAGS)
CFG_GCCISH_LINK_FLAGS_x86_64-unknown-dragonfly := -shared -fPIC -g -pthread -lrt CFG_GCCISH_LINK_FLAGS_x86_64-unknown-dragonfly := -shared -fPIC -g -pthread -lrt -m64
CFG_GCCISH_DEF_FLAG_x86_64-unknown-dragonfly := -Wl,--export-dynamic,--dynamic-list= CFG_GCCISH_DEF_FLAG_x86_64-unknown-dragonfly := -Wl,--export-dynamic,--dynamic-list=
CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-dragonfly := -Wl,-whole-archive CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-dragonfly := -Wl,-whole-archive
CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-dragonfly := -Wl,-no-whole-archive CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-dragonfly := -Wl,-no-whole-archive

View File

@ -37,6 +37,7 @@ snapshot_files = {
"macos": ["bin/rustc"], "macos": ["bin/rustc"],
"winnt": ["bin/rustc.exe"], "winnt": ["bin/rustc.exe"],
"freebsd": ["bin/rustc"], "freebsd": ["bin/rustc"],
"dragonfly": ["bin/rustc"],
} }
winnt_runtime_deps_32 = ["libgcc_s_dw2-1.dll", winnt_runtime_deps_32 = ["libgcc_s_dw2-1.dll",
@ -86,6 +87,8 @@ def get_kernel(triple):
return "macos" return "macos"
if os_name == "freebsd": if os_name == "freebsd":
return "freebsd" return "freebsd"
if os_name == "dragonfly":
return "dragonfly"
return "linux" return "linux"
def get_cpu(triple): def get_cpu(triple):

View File

@ -1095,6 +1095,7 @@ pub mod types {
pub type sighandler_t = size_t; pub type sighandler_t = size_t;
} }
pub mod bsd44 { pub mod bsd44 {
use types::common::c95::{c_void};
use types::os::arch::c95::{c_char, c_int, c_uint}; use types::os::arch::c95::{c_char, c_int, c_uint};
pub type socklen_t = u32; pub type socklen_t = u32;
@ -1167,6 +1168,17 @@ pub mod types {
pub sun_family: sa_family_t, pub sun_family: sa_family_t,
pub sun_path: [c_char, ..104] pub sun_path: [c_char, ..104]
} }
#[repr(C)]
#[deriving(Copy)] pub struct ifaddrs {
pub ifa_next: *mut ifaddrs,
pub ifa_name: *mut c_char,
pub ifa_flags: c_uint,
pub ifa_addr: *mut sockaddr,
pub ifa_netmask: *mut sockaddr,
pub ifa_dstaddr: *mut sockaddr,
pub ifa_data: *mut c_void
}
} }
} }

View File

@ -215,22 +215,7 @@ mod test {
} }
#[test] #[test]
#[cfg(target_os = "freebsd")] #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))]
fn test_rpath_relative() {
let config = &mut RPathConfig {
used_crates: Vec::new(),
has_rpath: true,
is_like_osx: false,
out_filename: Path::new("bin/rustc"),
get_install_prefix_lib_path: || panic!(),
realpath: |p| Ok(p.clone())
};
let res = get_rpath_relative_to_output(config, &Path::new("lib/libstd.so"));
assert_eq!(res, "$ORIGIN/../lib");
}
#[test]
#[cfg(target_os = "dragonfly")]
fn test_rpath_relative() { fn test_rpath_relative() {
let config = &mut RPathConfig { let config = &mut RPathConfig {
used_crates: Vec::new(), used_crates: Vec::new(),

View File

@ -17,13 +17,18 @@ pub fn opts() -> TargetOptions {
dynamic_linking: true, dynamic_linking: true,
executables: true, executables: true,
morestack: true, morestack: true,
linker_is_gnu: true,
has_rpath: true, has_rpath: true,
pre_link_args: vec!( pre_link_args: vec!(
"-L/usr/local/lib".to_string(), "-L/usr/local/lib".to_string(),
"-L/usr/local/lib/gcc47".to_string(), "-L/usr/lib/gcc47".to_string(),
"-L/usr/local/lib/gcc44".to_string(), // GNU-style linkers will use this to omit linking to libraries
// which don't actually fulfill any relocations, but only for
// libraries which follow this flag. Thus, use it before
// specifying libraries to link to.
"-Wl,--as-needed".to_string(),
), ),
position_independent_executables: true,
.. Default::default() .. Default::default()
} }
} }

View File

@ -11,13 +11,18 @@
use target::Target; use target::Target;
pub fn target() -> Target { pub fn target() -> Target {
let mut base = super::dragonfly_base::opts();
base.pre_link_args.push("-m64".to_string());
Target { Target {
data_layout: "e-p:32:32-f64:32:64-i64:32:64-f80:32:32-n8:16:32".to_string(), 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-S128".to_string(),
llvm_target: "x86_64-unknown-dragonfly".to_string(), llvm_target: "x86_64-unknown-dragonfly".to_string(),
target_endian: "little".to_string(), target_endian: "little".to_string(),
target_word_size: "32".to_string(), target_word_size: "64".to_string(),
arch: "x86_64".to_string(), arch: "x86_64".to_string(),
target_os: "dragonfly".to_string(), target_os: "dragonfly".to_string(),
options: super::dragonfly_base::opts() options: base,
} }
} }

View File

@ -172,7 +172,7 @@ pub fn join_paths<T: BytesContainer>(paths: &[T]) -> Result<Vec<u8>, &'static st
Ok(joined) Ok(joined)
} }
#[cfg(any(target_os = "freebsd", target_os = "dragonfly"))] #[cfg(target_os = "freebsd")]
pub fn load_self() -> Option<Vec<u8>> { pub fn load_self() -> Option<Vec<u8>> {
unsafe { unsafe {
use libc::funcs::bsd44::*; use libc::funcs::bsd44::*;
@ -198,6 +198,16 @@ pub fn load_self() -> Option<Vec<u8>> {
} }
} }
#[cfg(target_os = "dragonfly")]
pub fn load_self() -> Option<Vec<u8>> {
use std::io;
match io::fs::readlink(&Path::new("/proc/curproc/file")) {
Ok(path) => Some(path.into_vec()),
Err(..) => None
}
}
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
pub fn load_self() -> Option<Vec<u8>> { pub fn load_self() -> Option<Vec<u8>> {
use std::io; use std::io;