Repository navigation
profiler = true in config.toml no longer works #79124
Description
Activity
- addedT-bootstrapRelevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)
on Nov 17, 2020 FYI, I confirmed the workaround (setting the target-specific
profilersetting) does work and my tests work again.I can't reproduce this issue.
sed -r -e 's/^#.*$//' -e '/^$/d' config.toml:changelog-seen = 2 [llvm] link-shared = true [build] sanitizers = true profiler = true [install] [rust] [target.x86_64-unknown-linux-gnu] cc = "clang" cxx = "clang++" ar = "/usr/bin/llvm-ar" ranlib = "/usr/bin/llvm-ranlib" linker = "clang" llvm-config = "/usr/bin/llvm-config" [dist]
> LANG=C git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: src/bootstrap/config.rs no changes added to commit (use "git add" and/or "git commit -a")
The master branch is at b5c37e8
git diffdiff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 94319a6d1e9..eb0e78bc941 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -341,7 +341,7 @@ fn do_merge<T: Merge>(x: &mut Option<T>, y: Option<T>) { } /// TOML representation of various global build decisions. -#[derive(Deserialize, Default, Clone, Merge)] +#[derive(Deserialize, Default, Clone, Merge, Debug)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] struct Build { build: Option<String>, @@ -621,8 +621,8 @@ pub fn parse(args: &[String]) -> Config { config.config = cfg; } + println!("Build: {:?}", toml.build); let build = toml.build.unwrap_or_default(); - config.hosts = if let Some(arg_host) = flags.host { arg_host } else if let Some(file_host) = build.host { @@ -899,7 +899,14 @@ pub fn parse(args: &[String]) -> Config { target.sanitizers = cfg.sanitizers.unwrap_or(build.sanitizers.unwrap_or_default()); target.profiler = cfg.profiler.unwrap_or(build.profiler.unwrap_or_default()); + println!("`sanitizers` in [build]: {:?}", build.sanitizers); + println!("`profiler` in [build]: {:?}", build.profiler); + println!("`sanitizers` in [target.{:?}]: {:?}", triple, cfg.sanitizers); + println!("`profiler` in [target.{:?}]: {:?}", triple, cfg.profiler); + println!("final sanitizers config for {:?} : {:?}", triple, target.sanitizers); + println!("final profiler config for {:?} profiler: {:?}", triple, target.profiler); config.target_config.insert(TargetSelection::from_user(&triple), target); + } }
build log:
> ./x.py build --stage 2 Compiling bootstrap v0.0.0 (/home/han/rust/src/bootstrap) Finished dev [unoptimized + debuginfo] target(s) in 5.59s Build: Some(Build { build: None, host: None, target: None, build_dir: None, cargo: None, rustc: None, rustfmt: None, docs: None, compiler_docs: None, submodules: None, fast_submodules: None, gdb: None, nodejs: None, python: None, locked_deps: None, vendor: None, full_bootstrap: None, extended: None, tools: None, verbose: None, sanitizers: Some(true), profiler: Some(true), cargo_native_static: None, low_priority: None, configure_args: None, local_rebuild: None, print_step_timings: None, doc_stage: None, build_stage: None, test_stage: None, install_stage: None, dist_stage: None, bench_stage: None }) `sanitizers` in [build]: Some(true) `profiler` in [build]: Some(true) `sanitizers` in [target."x86_64-unknown-linux-gnu"]: None `profiler` in [target."x86_64-unknown-linux-gnu"]: None final sanitizers config for "x86_64-unknown-linux-gnu" : true final profiler config for "x86_64-unknown-linux-gnu" profiler: true Building stage0 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu) ....binary:
> cd build > fd profiler_builtins x86_64-unknown-linux-gnu/stage0/lib/rustlib/x86_64-unknown-linux-gnu/lib/libprofiler_builtins-980d9c24cb189583.rlib x86_64-unknown-linux-gnu/stage0-std/release/build/profiler_builtins-bf12831b7cdd460d x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/build/profiler_builtins-b68ef23e630bcb17 x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps/libprofiler_builtins-9dbeff80a926e7f3.rlib x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps/libprofiler_builtins-9dbeff80a926e7f3.rmeta x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps/profiler_builtins-9dbeff80a926e7f3.d x86_64-unknown-linux-gnu/stage0-sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/libprofiler_builtins-9dbeff80a926e7f3.rlib x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib/libprofiler_builtins-bf052076084443f1.rlib x86_64-unknown-linux-gnu/stage1-std/release/build/profiler_builtins-3e0a6190a91a94e7 x86_64-unknown-linux-gnu/stage1-std/x86_64-unknown-linux-gnu/release/build/profiler_builtins-781d280c78c97112 x86_64-unknown-linux-gnu/stage1-std/x86_64-unknown-linux-gnu/release/deps/libprofiler_builtins-bf052076084443f1.rlib x86_64-unknown-linux-gnu/stage1-std/x86_64-unknown-linux-gnu/release/deps/libprofiler_builtins-bf052076084443f1.rmeta x86_64-unknown-linux-gnu/stage1-std/x86_64-unknown-linux-gnu/release/deps/profiler_builtins-bf052076084443f1.d x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/lib/libprofiler_builtins-bf052076084443f1.rlib > ls x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/lib libaddr2line-332cb94bf345094b.rlib librustc-dev_rt.asan.a libadler-79ca49f3556701a4.rlib librustc-dev_rt.lsan.a liballoc-fe9f96fdcdfe4199.rlib librustc-dev_rt.msan.a libcfg_if-822e432ce2db6e62.rlib librustc-dev_rt.tsan.a libcompiler_builtins-906b6a065e57e3b0.rlib librustc_demangle-fe649840dc443879.rlib libcore-7f60aaeb82b6bf4d.rlib librustc_std_workspace_alloc-358f99852a855d0c.rlib libgetopts-5251889848c01689.rlib librustc_std_workspace_core-19ff454e2880fb3f.rlib libgimli-574b2ef29d4f20c5.rlib librustc_std_workspace_std-1186ab5d6f452152.rlib libhashbrown-96ceb36319f90397.rlib libstd-781fdb343374624a.rlib liblibc-fc24b68582e61891.rlib libstd-781fdb343374624a.so libminiz_oxide-fe73ed392107a322.rlib libterm-c9b1a355d5d5251b.rlib libobject-d3897e5b78a79908.rlib libtest-5c093475bfb34ae2.rlib libpanic_abort-a4cf26a03fcee531.rlib libtest-5c093475bfb34ae2.so libpanic_unwind-2a21e5ef94ceb829.rlib libunicode_width-46b877fd84bbfd50.rlib libproc_macro-787384d30f7ecbdd.rlib libunwind-5f3a6e512e002a67.rlib libprofiler_builtins-bf052076084443f1.rlib self-containedAlso test on Windows 10
commit 54508a2
config.toml:changelog-seen = 2 [llvm] [build] build = "x86_64-pc-windows-msvc" sanitizers = true profiler = true [install] [rust] [target.x86_64-pc-windows-msvc] [dist]Output:
> python ./x.py build --stage 2 Updating only changed submodules Submodules updated in 0.17 seconds Finished dev [unoptimized + debuginfo] target(s) in 0.30s Build: Some(Build { build: Some("x86_64-pc-windows-msvc"), host: None, target: None, build_dir: None, cargo: None, rustc: None, rustfmt: None, docs: None, compiler_docs: None, submodules: None, fast_submodules: None, gdb: None, nodejs: None, python: None, locked_deps: None, vendor: None, full_bootstrap: None, extended: None, tools: None, verbose: None, sanitizers: Some(true), profiler: Some(true), cargo_native_static: None, low_priority: None, configure_args: None, local_rebuild: None, print_step_timings: None, doc_stage: None, build_stage: None, test_stage: None, install_stage: None, dist_stage: None, bench_stage: None }) `sanitizers` in [build]: Some(true) `profiler` in [build]: Some(true) `sanitizers` in [target."x86_64-pc-windows-msvc"]: None `profiler` in [target."x86_64-pc-windows-msvc"]: None final sanitizers config for "x86_64-pc-windows-msvc" : true final profiler config for "x86_64-pc-windows-msvc" profiler: true Building stage0 std artifacts (x86_64-pc-windows-msvc -> x86_64-pc-windows-msvc)binary:
> fd profiler_builtins x86_64-pc-windows-msvc\stage0-std\release\build\profiler_builtins-0fe06f81c31b9f86 x86_64-pc-windows-msvc\stage1-std\release\build\profiler_builtins-c8156efb6ad06c4e x86_64-pc-windows-msvc\stage0-std\x86_64-pc-windows-msvc\release\build\profiler_builtins-eab3dfd17a0d5ee9 x86_64-pc-windows-msvc\stage0-std\x86_64-pc-windows-msvc\release\deps\libprofiler_builtins-23c82d4c3ff5dfcc.rmeta x86_64-pc-windows-msvc\stage0-std\x86_64-pc-windows-msvc\release\deps\libprofiler_builtins-23c82d4c3ff5dfcc.rlib x86_64-pc-windows-msvc\stage0-std\x86_64-pc-windows-msvc\release\deps\profiler_builtins-23c82d4c3ff5dfcc.d x86_64-pc-windows-msvc\stage1-std\x86_64-pc-windows-msvc\release\build\profiler_builtins-baafc8bd8e1c2147 x86_64-pc-windows-msvc\stage1-std\x86_64-pc-windows-msvc\release\deps\libprofiler_builtins-94dca554e4a2a924.rlib x86_64-pc-windows-msvc\stage1-std\x86_64-pc-windows-msvc\release\deps\libprofiler_builtins-94dca554e4a2a924.rmeta x86_64-pc-windows-msvc\stage1-std\x86_64-pc-windows-msvc\release\deps\profiler_builtins-94dca554e4a2a924.d x86_64-pc-windows-msvc\stage0\lib\rustlib\x86_64-pc-windows-msvc\lib\libprofiler_builtins-d5702ec6a6329fe3.rlib x86_64-pc-windows-msvc\stage1\lib\rustlib\x86_64-pc-windows-msvc\lib\libprofiler_builtins-94dca554e4a2a924.rlib x86_64-pc-windows-msvc\stage0-sysroot\lib\rustlib\x86_64-pc-windows-msvc\lib\libprofiler_builtins-23c82d4c3ff5dfcc.rlib x86_64-pc-windows-msvc\stage2\lib\rustlib\x86_64-pc-windows-msvc\lib\libprofiler_builtins-94dca554e4a2a924.rlibTry it on Windows with a clean copy of
config.toml.exampleand set:[build] profiler = true
(I also set
ninja = true. I doubt that matters.)Don't change the target section. It should still say
[target.x86_64-unknown-linux-gnu]. I have no reason to set target-specific settings forwindows-msvcso I don't create a target-specific section for it. Defaults should be fine.It could be that just having the
msvcsection like you do is another workaround, but that shouldn't be required.

PR #78354 broke the build for users of profiler_builtins.
The PR copies the (commented out) #profiler = false line (among other things) from the [build] section to the sample target-specific (linux in config.toml.example) section, and made related changes to bootstrap.
Intuitively (especially because the [build] profiler = false/true option is still present, I believe that if profiler = true in build, then profiler should also be true in the target-specific setting, if not explicitly set for the target.
Since I always build with profiler = true, I did not expect the build to stop working after rebasing with the change, but with this PR, the profiler_builtins library is no longer built.
I think the new target-specific settings, if not set, need to default to the non-specific setting.
Workaround:
I had to add a target-specific setting on each platform I test with (Linux, Windows, and MacOS). On Mac, for example, I added these two lines in my config.toml:
It's still building, but it looks like it finally started building the profiler_builtins library.
cc @Mark-Simulacrum