From cc2906cb26304301709557a88ac4a3334b88616b Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Fri, 13 Apr 2018 16:52:54 -0700 Subject: rustbuild: allow building tools with debuginfo Debugging information for the extended tools is currently disabled for concerns about the size. This patch adds `--enable-debuginfo-tools` to let one opt into having that debuginfo. This is useful for debugging the tools in distro packages. We always strip debuginfo into separate packages anyway, so the extra size is not a concern in regular use. --- src/bootstrap/builder.rs | 12 ++++++++---- src/bootstrap/config.rs | 5 +++++ src/bootstrap/configure.py | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src/bootstrap') diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index 7ff64af9196..ae19c66d607 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -622,10 +622,14 @@ impl<'a> Builder<'a> { cargo.env("RUSTDOC_LIBDIR", self.rustc_libdir(self.compiler(2, self.build.build))); } - if mode != Mode::Tool { - // Tools don't get debuginfo right now, e.g. cargo and rls don't - // get compiled with debuginfo. - // Adding debuginfo increases their sizes by a factor of 3-4. + if mode == Mode::Tool { + // Tools like cargo and rls don't get debuginfo by default right now, but this can be + // enabled in the config. Adding debuginfo increases their sizes by a factor of 3-4. + if self.config.rust_debuginfo_tools { + cargo.env("RUSTC_DEBUGINFO", self.config.rust_debuginfo.to_string()); + cargo.env("RUSTC_DEBUGINFO_LINES", self.config.rust_debuginfo_lines.to_string()); + } + } else { cargo.env("RUSTC_DEBUGINFO", self.config.rust_debuginfo.to_string()); cargo.env("RUSTC_DEBUGINFO_LINES", self.config.rust_debuginfo_lines.to_string()); cargo.env("RUSTC_FORCE_UNSTABLE", "1"); diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 239316d45c4..95d138b9fab 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -94,6 +94,7 @@ pub struct Config { pub rust_debuginfo: bool, pub rust_debuginfo_lines: bool, pub rust_debuginfo_only_std: bool, + pub rust_debuginfo_tools: bool, pub rust_rpath: bool, pub rustc_parallel_queries: bool, pub rustc_default_linker: Option, @@ -282,6 +283,7 @@ struct Rust { debuginfo: Option, debuginfo_lines: Option, debuginfo_only_std: Option, + debuginfo_tools: Option, experimental_parallel_queries: Option, debug_jemalloc: Option, use_jemalloc: Option, @@ -462,6 +464,7 @@ impl Config { let mut llvm_assertions = None; let mut debuginfo_lines = None; let mut debuginfo_only_std = None; + let mut debuginfo_tools = None; let mut debug = None; let mut debug_jemalloc = None; let mut debuginfo = None; @@ -499,6 +502,7 @@ impl Config { debuginfo = rust.debuginfo; debuginfo_lines = rust.debuginfo_lines; debuginfo_only_std = rust.debuginfo_only_std; + debuginfo_tools = rust.debuginfo_tools; optimize = rust.optimize; ignore_git = rust.ignore_git; debug_jemalloc = rust.debug_jemalloc; @@ -582,6 +586,7 @@ impl Config { }; config.rust_debuginfo_lines = debuginfo_lines.unwrap_or(default); config.rust_debuginfo_only_std = debuginfo_only_std.unwrap_or(default); + config.rust_debuginfo_tools = debuginfo_tools.unwrap_or(default); let default = debug == Some(true); config.debug_jemalloc = debug_jemalloc.unwrap_or(default); diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py index b06968d313b..a0123da6d8f 100755 --- a/src/bootstrap/configure.py +++ b/src/bootstrap/configure.py @@ -79,6 +79,7 @@ o("llvm-release-debuginfo", "llvm.release-debuginfo", "build LLVM with debugger o("debuginfo", "rust.debuginfo", "build with debugger metadata") o("debuginfo-lines", "rust.debuginfo-lines", "build with line number debugger metadata") o("debuginfo-only-std", "rust.debuginfo-only-std", "build only libstd with debugging information") +o("debuginfo-tools", "rust.debuginfo-tools", "build extended tools with debugging information") o("debug-jemalloc", "rust.debug-jemalloc", "build jemalloc with --enable-debug --enable-fill") v("save-toolstates", "rust.save-toolstates", "save build and test status of external tools into this file") -- cgit 1.4.1-3-g733a5 From bc7403d067b3e2a154df1ef088377cb2a75f429c Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Fri, 13 Apr 2018 21:57:53 -0700 Subject: Avoid specific claims about debuginfo size --- config.toml.example | 2 +- src/bootstrap/builder.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/bootstrap') diff --git a/config.toml.example b/config.toml.example index bd18a604a9c..effe0084381 100644 --- a/config.toml.example +++ b/config.toml.example @@ -263,7 +263,7 @@ #debuginfo-only-std = false # Enable debuginfo for the extended tools: cargo, rls, rustfmt -# Adding debuginfo increases their sizes by a factor of 3-4. +# Adding debuginfo makes them several times larger. #debuginfo-tools = false # Whether or not jemalloc is built and enabled diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index ae19c66d607..6874efa5a4c 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -624,7 +624,7 @@ impl<'a> Builder<'a> { if mode == Mode::Tool { // Tools like cargo and rls don't get debuginfo by default right now, but this can be - // enabled in the config. Adding debuginfo increases their sizes by a factor of 3-4. + // enabled in the config. Adding debuginfo makes them several times larger. if self.config.rust_debuginfo_tools { cargo.env("RUSTC_DEBUGINFO", self.config.rust_debuginfo.to_string()); cargo.env("RUSTC_DEBUGINFO_LINES", self.config.rust_debuginfo_lines.to_string()); -- cgit 1.4.1-3-g733a5 From 93734e9c46e30acc9a51f19c56511ce8516b6855 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Fri, 13 Apr 2018 21:58:21 -0700 Subject: Make debuginfo-tools always default false --- src/bootstrap/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/bootstrap') diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 95d138b9fab..1b4b2c5fb2a 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -586,7 +586,7 @@ impl Config { }; config.rust_debuginfo_lines = debuginfo_lines.unwrap_or(default); config.rust_debuginfo_only_std = debuginfo_only_std.unwrap_or(default); - config.rust_debuginfo_tools = debuginfo_tools.unwrap_or(default); + config.rust_debuginfo_tools = debuginfo_tools.unwrap_or(false); let default = debug == Some(true); config.debug_jemalloc = debug_jemalloc.unwrap_or(default); -- cgit 1.4.1-3-g733a5