Skip to content

Commit

Permalink
Auto merge of #38086 - semarie:openbsd-i686, r=alexcrichton
Browse files Browse the repository at this point in the history
Add i686-unknown-openbsd target.

It is a preliminary work. I still have some tests failing, but I have a working rustc binary which is able to rebuild itself.

an update of libc should be required too, but I dunno how to do it with vendor/ layout.

r? @alexcrichton
  • Loading branch information
bors committed Dec 4, 2016
2 parents b462e8f + 6774e7a commit 2190f6c
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 2 deletions.
24 changes: 24 additions & 0 deletions mk/cfg/i686-unknown-openbsd.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# i686-unknown-openbsd configuration
CC_i686-unknown-openbsd=$(CC)
CXX_i686-unknown-openbsd=$(CXX)
CPP_i686-unknown-openbsd=$(CPP)
AR_i686-unknown-openbsd=$(AR)
CFG_LIB_NAME_i686-unknown-openbsd=lib$(1).so
CFG_STATIC_LIB_NAME_i686-unknown-openbsd=lib$(1).a
CFG_LIB_GLOB_i686-unknown-openbsd=lib$(1)-*.so
CFG_LIB_DSYM_GLOB_i686-unknown-openbsd=$(1)-*.dylib.dSYM
CFG_JEMALLOC_CFLAGS_i686-unknown-openbsd := -m32 -I/usr/include $(CFLAGS)
CFG_GCCISH_CFLAGS_i686-unknown-openbsd := -g -fPIC -m32 -I/usr/include $(CFLAGS)
CFG_GCCISH_LINK_FLAGS_i686-unknown-openbsd := -shared -fPIC -g -pthread -m32
CFG_GCCISH_DEF_FLAG_i686-unknown-openbsd := -Wl,--export-dynamic,--dynamic-list=
CFG_LLC_FLAGS_i686-unknown-openbsd :=
CFG_INSTALL_NAME_i686-unknown-openbsd =
CFG_EXE_SUFFIX_i686-unknown-openbsd :=
CFG_WINDOWSY_i686-unknown-openbsd :=
CFG_UNIXY_i686-unknown-openbsd := 1
CFG_LDPATH_i686-unknown-openbsd :=
CFG_RUN_i686-unknown-openbsd=$(2)
CFG_RUN_TARG_i686-unknown-openbsd=$(call CFG_RUN_i686-unknown-openbsd,,$(2))
CFG_GNU_TRIPLE_i686-unknown-openbsd := i686-unknown-openbsd
RUSTC_FLAGS_i686-unknown-openbsd=-C linker=$(call FIND_COMPILER,$(CC))
CFG_DISABLE_JEMALLOC_i686-unknown-openbsd := 1
2 changes: 1 addition & 1 deletion src/liblibc
Submodule liblibc updated 36 files
+10 −9 .travis.yml
+2 −2 Cargo.lock
+1 −1 Cargo.toml
+1 −1 README.md
+34 −4 ci/docker/arm-linux-androideabi/Dockerfile
+15 −0 ci/docker/arm-linux-androideabi/accept-licenses.sh
+21 −0 ci/docker/arm-linux-androideabi/install-ndk.sh
+33 −0 ci/docker/arm-linux-androideabi/install-sdk.sh
+4 −1 ci/docker/mips-unknown-linux-musl/Dockerfile
+12 −5 ci/run-docker.sh
+42 −2 libc-test/build.rs
+45 −0 src/unix/bsd/apple/mod.rs
+21 −0 src/unix/bsd/freebsdlike/dragonfly/mod.rs
+45 −4 src/unix/bsd/freebsdlike/freebsd/mod.rs
+30 −0 src/unix/bsd/freebsdlike/mod.rs
+46 −0 src/unix/bsd/netbsdlike/netbsd/mod.rs
+7 −3 src/unix/bsd/netbsdlike/openbsdlike/mod.rs
+2 −0 src/unix/bsd/netbsdlike/openbsdlike/other/b32/mod.rs
+2 −0 src/unix/bsd/netbsdlike/openbsdlike/other/b64/mod.rs
+11 −0 src/unix/bsd/netbsdlike/openbsdlike/other/mod.rs
+5 −0 src/unix/mod.rs
+3 −0 src/unix/notbsd/android/mod.rs
+281 −0 src/unix/notbsd/linux/mips/mips32.rs
+19 −40 src/unix/notbsd/linux/mips/mips64.rs
+11 −262 src/unix/notbsd/linux/mips/mod.rs
+22 −4 src/unix/notbsd/linux/mod.rs
+1 −0 src/unix/notbsd/linux/musl/b32/arm.rs
+1 −0 src/unix/notbsd/linux/musl/b32/asmjs.rs
+1 −0 src/unix/notbsd/linux/musl/b32/mips.rs
+1 −0 src/unix/notbsd/linux/musl/b32/x86.rs
+1 −0 src/unix/notbsd/linux/musl/b64/mod.rs
+20 −0 src/unix/notbsd/linux/musl/mod.rs
+21 −0 src/unix/notbsd/linux/other/mod.rs
+19 −0 src/unix/notbsd/linux/s390x.rs
+17 −0 src/unix/notbsd/mod.rs
+1 −0 src/unix/solaris/mod.rs
30 changes: 30 additions & 0 deletions src/librustc_back/target/i686_unknown_openbsd.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright 2016 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, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::openbsd_base::opts();
base.cpu = "pentium4".to_string();
base.max_atomic_width = Some(64);
base.pre_link_args.push("-m32".to_string());

Ok(Target {
llvm_target: "i686-unknown-openbsd".to_string(),
target_endian: "little".to_string(),
target_pointer_width: "32".to_string(),
data_layout: "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128".to_string(),
arch: "x86".to_string(),
target_os: "openbsd".to_string(),
target_env: "".to_string(),
target_vendor: "unknown".to_string(),
options: base,
})
}
9 changes: 9 additions & 0 deletions src/librustc_back/target/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,10 @@ supported_targets! {
("x86_64-unknown-dragonfly", x86_64_unknown_dragonfly),

("x86_64-unknown-bitrig", x86_64_unknown_bitrig),

("i686-unknown-openbsd", i686_unknown_openbsd),
("x86_64-unknown-openbsd", x86_64_unknown_openbsd),

("x86_64-unknown-netbsd", x86_64_unknown_netbsd),
("x86_64-rumprun-netbsd", x86_64_rumprun_netbsd),

Expand Down Expand Up @@ -299,6 +302,9 @@ pub struct TargetOptions {
pub staticlib_suffix: String,
/// OS family to use for conditional compilation. Valid options: "unix", "windows".
pub target_family: Option<String>,
/// Whether the target toolchain is like OpenBSD's.
/// Only useful for compiling against OpenBSD, for configuring abi when returning a struct.
pub is_like_openbsd: bool,
/// Whether the target toolchain is like OSX's. Only useful for compiling against iOS/OS X, in
/// particular running dsymutil and some other stuff like `-dead_strip`. Defaults to false.
pub is_like_osx: bool,
Expand Down Expand Up @@ -403,6 +409,7 @@ impl Default for TargetOptions {
staticlib_prefix: "lib".to_string(),
staticlib_suffix: ".a".to_string(),
target_family: None,
is_like_openbsd: false,
is_like_osx: false,
is_like_solaris: false,
is_like_windows: false,
Expand Down Expand Up @@ -569,6 +576,7 @@ impl Target {
key!(staticlib_prefix);
key!(staticlib_suffix);
key!(target_family, optional);
key!(is_like_openbsd, bool);
key!(is_like_osx, bool);
key!(is_like_solaris, bool);
key!(is_like_windows, bool);
Expand Down Expand Up @@ -730,6 +738,7 @@ impl ToJson for Target {
target_option_val!(staticlib_prefix);
target_option_val!(staticlib_suffix);
target_option_val!(target_family);
target_option_val!(is_like_openbsd);
target_option_val!(is_like_osx);
target_option_val!(is_like_solaris);
target_option_val!(is_like_windows);
Expand Down
1 change: 1 addition & 0 deletions src/librustc_back/target/openbsd_base.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn opts() -> TargetOptions {
executables: true,
linker_is_gnu: true,
has_rpath: true,
is_like_openbsd: true,
pre_link_args: vec![
// GNU-style linkers will use this to omit linking to libraries
// which don't actually fulfill any relocations, but only for
Expand Down
3 changes: 2 additions & 1 deletion src/librustc_trans/cabi_x86.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ pub fn compute_abi_info(ccx: &CrateContext, fty: &mut FnType) {
// http://www.angelcode.com/dev/callconv/callconv.html
// Clang's ABI handling is in lib/CodeGen/TargetInfo.cpp
let t = &ccx.sess().target.target;
if t.options.is_like_osx || t.options.is_like_windows {
if t.options.is_like_osx || t.options.is_like_windows
|| t.options.is_like_openbsd {
match llsize_of_alloc(ccx, fty.ret.ty) {
1 => fty.ret.cast = Some(Type::i8(ccx)),
2 => fty.ret.cast = Some(Type::i16(ccx)),
Expand Down

0 comments on commit 2190f6c

Please sign in to comment.