Skip to content

Commit 7c14a54

Browse files
committedMay 30, 2018
Replace libbacktrace with a submodule
While we're at it update the `backtrace` crate from crates.io. It turns out that the submodule's configure script has gotten a lot more finnicky as of late so also switch over to using the `cc` crate manually which allows to avoid some hacks around the configure script as well
1 parent 1402a10 commit 7c14a54

File tree

6 files changed

+63
-26
lines changed

6 files changed

+63
-26
lines changed
 

‎.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,6 @@
5353
[submodule "src/tools/lld"]
5454
path = src/tools/lld
5555
url = https://github.com/rust-lang/lld.git
56+
[submodule "src/libbacktrace"]
57+
path = src/libbacktrace
58+
url = https://github.com/rust-lang-nursery/libbacktrace

‎src/Cargo.lock

+5-3
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ name = "backtrace"
105105
version = "0.3.6"
106106
source = "registry+https://github.com/rust-lang/crates.io-index"
107107
dependencies = [
108-
"backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
108+
"backtrace-sys 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
109109
"cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
110110
"libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
111111
"rustc-demangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -114,11 +114,12 @@ dependencies = [
114114

115115
[[package]]
116116
name = "backtrace-sys"
117-
version = "0.1.16"
117+
version = "0.1.22"
118118
source = "registry+https://github.com/rust-lang/crates.io-index"
119119
dependencies = [
120120
"cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
121121
"libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
122+
"pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
122123
]
123124

124125
[[package]]
@@ -2513,6 +2514,7 @@ dependencies = [
25132514
"alloc_jemalloc 0.0.0",
25142515
"alloc_system 0.0.0",
25152516
"build_helper 0.1.0",
2517+
"cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
25162518
"compiler_builtins 0.0.0",
25172519
"core 0.0.0",
25182520
"libc 0.0.0",
@@ -3051,7 +3053,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
30513053
"checksum assert_cli 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5da59dbd8df54562665b925b427221ceda9b771408cb8a6cbd2125d3b001330b"
30523054
"checksum atty 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "af80143d6f7608d746df1520709e5d141c96f240b0e62b0aa41bdfb53374d9d4"
30533055
"checksum backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe525f66f42d207968308ee86bc2dd60aa5fab535b22e616323a173d097d8e"
3054-
"checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661"
3056+
"checksum backtrace-sys 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5fd343a2466c4603f76f38de264bc0526cffc7fa38ba52fb9f13237eccc1ced2"
30553057
"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
30563058
"checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"
30573059
"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"

‎src/libbacktrace

Submodule libbacktrace added at f4d02bb

‎src/libstd/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ rustc_msan = { path = "../librustc_msan" }
3939
rustc_tsan = { path = "../librustc_tsan" }
4040

4141
[build-dependencies]
42+
cc = "1.0"
4243
build_helper = { path = "../build_helper" }
4344

4445
[features]

‎src/libstd/build.rs

+52-23
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,22 @@
1111
#![deny(warnings)]
1212

1313
extern crate build_helper;
14+
extern crate cc;
1415

16+
use build_helper::native_lib_boilerplate;
1517
use std::env;
16-
use std::process::Command;
17-
use build_helper::{run, native_lib_boilerplate};
18+
use std::fs::File;
1819

1920
fn main() {
2021
let target = env::var("TARGET").expect("TARGET was not set");
21-
let host = env::var("HOST").expect("HOST was not set");
2222
if cfg!(feature = "backtrace") &&
2323
!target.contains("cloudabi") &&
2424
!target.contains("emscripten") &&
2525
!target.contains("fuchsia") &&
2626
!target.contains("msvc") &&
2727
!target.contains("wasm32")
2828
{
29-
let _ = build_libbacktrace(&host, &target);
29+
let _ = build_libbacktrace(&target);
3030
}
3131

3232
if target.contains("linux") {
@@ -84,26 +84,55 @@ fn main() {
8484
}
8585
}
8686

87-
fn build_libbacktrace(host: &str, target: &str) -> Result<(), ()> {
88-
let native = native_lib_boilerplate("libbacktrace", "libbacktrace", "backtrace", ".libs")?;
89-
let cflags = env::var("CFLAGS").unwrap_or_default() + " -fvisibility=hidden -O2";
87+
fn build_libbacktrace(target: &str) -> Result<(), ()> {
88+
let native = native_lib_boilerplate("libbacktrace", "libbacktrace", "backtrace", "")?;
9089

91-
run(Command::new("sh")
92-
.current_dir(&native.out_dir)
93-
.arg(native.src_dir.join("configure").to_str().unwrap()
94-
.replace("C:\\", "/c/")
95-
.replace("\\", "/"))
96-
.arg("--with-pic")
97-
.arg("--disable-multilib")
98-
.arg("--disable-shared")
99-
.arg("--disable-host-shared")
100-
.arg(format!("--host={}", build_helper::gnu_target(target)))
101-
.arg(format!("--build={}", build_helper::gnu_target(host)))
102-
.env("CFLAGS", cflags));
90+
let mut build = cc::Build::new();
91+
build
92+
.flag("-fvisibility=hidden")
93+
.include("../libbacktrace")
94+
.include(&native.out_dir)
95+
.out_dir(&native.out_dir)
96+
.warnings(false)
97+
.file("../libbacktrace/alloc.c")
98+
.file("../libbacktrace/backtrace.c")
99+
.file("../libbacktrace/dwarf.c")
100+
.file("../libbacktrace/fileline.c")
101+
.file("../libbacktrace/posix.c")
102+
.file("../libbacktrace/read.c")
103+
.file("../libbacktrace/sort.c")
104+
.file("../libbacktrace/state.c");
103105

104-
run(Command::new(build_helper::make(host))
105-
.current_dir(&native.out_dir)
106-
.arg(format!("INCDIR={}", native.src_dir.display()))
107-
.arg("-j").arg(env::var("NUM_JOBS").expect("NUM_JOBS was not set")));
106+
if target.contains("darwin") {
107+
build.file("../libbacktrace/macho.c");
108+
} else if target.contains("windows") {
109+
build.file("../libbacktrace/pecoff.c");
110+
} else {
111+
build.file("../libbacktrace/elf.c");
112+
113+
if target.contains("64") {
114+
build.define("BACKTRACE_ELF_SIZE", "64");
115+
} else {
116+
build.define("BACKTRACE_ELF_SIZE", "32");
117+
}
118+
}
119+
120+
File::create(native.out_dir.join("backtrace-supported.h")).unwrap();
121+
build.define("BACKTRACE_SUPPORTED", "1");
122+
build.define("BACKTRACE_USES_MALLOC", "1");
123+
build.define("BACKTRACE_SUPPORTS_THREADS", "0");
124+
build.define("BACKTRACE_SUPPORTS_DATA", "0");
125+
126+
File::create(native.out_dir.join("config.h")).unwrap();
127+
if !target.contains("apple-ios") &&
128+
!target.contains("solaris") &&
129+
!target.contains("redox") &&
130+
!target.contains("android") {
131+
build.define("HAVE_DL_ITERATE_PHDR", "1");
132+
}
133+
build.define("_GNU_SOURCE", "1");
134+
build.define("_LARGE_FILES", "1");
135+
136+
build.compile("backtrace");
108137
Ok(())
109138
}

‎src/tools/tidy/src/deps.rs

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ static WHITELIST: &'static [Crate] = &[
9898
Crate("parking_lot"),
9999
Crate("parking_lot_core"),
100100
Crate("polonius-engine"),
101+
Crate("pkg-config"),
101102
Crate("quick-error"),
102103
Crate("rand"),
103104
Crate("redox_syscall"),

0 commit comments

Comments
 (0)
Please sign in to comment.