]> git.proxmox.com Git - rustc.git/blob - src/vendor/backtrace-sys/build.rs
New upstream version 1.28.0~beta.14+dfsg1
[rustc.git] / src / vendor / backtrace-sys / build.rs
1 extern crate pkg_config;
2 extern crate cc;
3
4 use std::env;
5 use std::path::PathBuf;
6 use std::fs::File;
7
8 fn main() {
9 let target = env::var("TARGET").unwrap();
10
11 // libbacktrace isn't used on windows
12 if target.contains("windows") {
13 return
14 }
15
16 // no way this will ever compile for emscripten
17 if target.contains("emscripten") {
18 return
19 }
20
21 let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());
22
23 let mut build = cc::Build::new();
24 build
25 .include("src/libbacktrace")
26 .include(&out_dir)
27 .warnings(false)
28 .file("src/libbacktrace/alloc.c")
29 .file("src/libbacktrace/backtrace.c")
30 .file("src/libbacktrace/dwarf.c")
31 .file("src/libbacktrace/fileline.c")
32 .file("src/libbacktrace/posix.c")
33 .file("src/libbacktrace/read.c")
34 .file("src/libbacktrace/sort.c")
35 .file("src/libbacktrace/state.c");
36
37 if target.contains("darwin") {
38 build.file("src/libbacktrace/macho.c");
39 } else if target.contains("windows") {
40 build.file("src/libbacktrace/pecoff.c");
41 } else {
42 build.flag("-fvisibility=hidden");
43 build.file("src/libbacktrace/elf.c");
44
45 if target.contains("64") {
46 build.define("BACKTRACE_ELF_SIZE", "64");
47 } else {
48 build.define("BACKTRACE_ELF_SIZE", "32");
49 }
50 }
51
52 if let Ok(unwind) = pkg_config::Config::new().probe("libunwind") {
53 for path in unwind.include_paths {
54 build.include(path);
55 }
56 }
57
58 File::create(out_dir.join("backtrace-supported.h")).unwrap();
59 build.define("BACKTRACE_SUPPORTED", "1");
60 build.define("BACKTRACE_USES_MALLOC", "1");
61 build.define("BACKTRACE_SUPPORTS_THREADS", "0");
62 build.define("BACKTRACE_SUPPORTS_DATA", "0");
63
64 File::create(out_dir.join("config.h")).unwrap();
65 if !target.contains("apple-ios") {
66 build.define("HAVE_DL_ITERATE_PHDR", "1");
67 }
68 build.define("_GNU_SOURCE", "1");
69 build.define("_LARGE_FILES", "1");
70
71 let syms = [
72 "backtrace_full",
73 "backtrace_dwarf_add",
74 "backtrace_initialize",
75 "backtrace_pcinfo",
76 "backtrace_syminfo",
77 "backtrace_get_view",
78 "backtrace_release_view",
79 "backtrace_alloc",
80 "backtrace_free",
81 "backtrace_vector_finish",
82 "backtrace_vector_grow",
83 "backtrace_vector_release",
84 "backtrace_close",
85 "backtrace_open",
86 "backtrace_print",
87 "backtrace_simple",
88 "backtrace_qsort",
89 "backtrace_create_state",
90 "backtrace_uncompress_zdebug",
91 ];
92 for sym in syms.iter() {
93 build.define(sym, &format!("__rbt_{}", sym)[..]);
94 }
95
96 build.compile("backtrace");
97 }