103 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 937b23ef51b1d2f3d12adc9bd90dfd27936326dd Mon Sep 17 00:00:00 2001
 | |
| From: Josh Stone <jistone@redhat.com>
 | |
| Date: Thu, 28 Sep 2023 18:14:28 -0700
 | |
| Subject: [PATCH 1/2] bootstrap: allow disabling target self-contained
 | |
| 
 | |
| ---
 | |
|  config.example.toml                           | 5 +++++
 | |
|  src/bootstrap/src/core/build_steps/compile.rs | 4 ++++
 | |
|  src/bootstrap/src/core/config/config.rs       | 8 ++++++++
 | |
|  src/bootstrap/src/lib.rs                      | 5 +++++
 | |
|  4 files changed, 22 insertions(+)
 | |
| 
 | |
| diff --git a/config.example.toml b/config.example.toml
 | |
| index 26687bcfb370..381a23f9cead 100644
 | |
| --- a/config.example.toml
 | |
| +++ b/config.example.toml
 | |
| @@ -872,6 +872,11 @@
 | |
|  # argument as the test binary.
 | |
|  #runner = <none> (string)
 | |
|  
 | |
| +# Copy libc and CRT objects into the target lib/self-contained/ directory.
 | |
| +# Enabled by default on `musl`, `wasi`, and `windows-gnu` targets. Other
 | |
| +# targets may ignore this setting if they have nothing to be contained.
 | |
| +#self-contained = <platform-specific> (bool)
 | |
| +
 | |
|  # =============================================================================
 | |
|  # Distribution options
 | |
|  #
 | |
| diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs
 | |
| index 3e79acad1c4b..525b6e956405 100644
 | |
| --- a/src/bootstrap/src/core/build_steps/compile.rs
 | |
| +++ b/src/bootstrap/src/core/build_steps/compile.rs
 | |
| @@ -357,6 +357,10 @@ fn copy_self_contained_objects(
 | |
|      compiler: &Compiler,
 | |
|      target: TargetSelection,
 | |
|  ) -> Vec<(PathBuf, DependencyType)> {
 | |
| +    if builder.self_contained(target) != Some(true) {
 | |
| +        return vec![];
 | |
| +    }
 | |
| +
 | |
|      let libdir_self_contained = builder.sysroot_libdir(*compiler, target).join("self-contained");
 | |
|      t!(fs::create_dir_all(&libdir_self_contained));
 | |
|      let mut target_deps = vec![];
 | |
| diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
 | |
| index 9d5aa795c6c0..720dc53514d3 100644
 | |
| --- a/src/bootstrap/src/core/config/config.rs
 | |
| +++ b/src/bootstrap/src/core/config/config.rs
 | |
| @@ -565,6 +565,7 @@ pub struct Target {
 | |
|      pub runner: Option<String>,
 | |
|      pub no_std: bool,
 | |
|      pub codegen_backends: Option<Vec<String>>,
 | |
| +    pub self_contained: bool,
 | |
|  }
 | |
|  
 | |
|  impl Target {
 | |
| @@ -573,6 +574,9 @@ pub fn from_triple(triple: &str) -> Self {
 | |
|          if triple.contains("-none") || triple.contains("nvptx") || triple.contains("switch") {
 | |
|              target.no_std = true;
 | |
|          }
 | |
| +        if triple.contains("-musl") || triple.contains("-wasi") || triple.contains("-windows-gnu") {
 | |
| +            target.self_contained = true;
 | |
| +        }
 | |
|          target
 | |
|      }
 | |
|  }
 | |
| @@ -1140,6 +1144,7 @@ struct TomlTarget {
 | |
|          no_std: Option<bool> = "no-std",
 | |
|          codegen_backends: Option<Vec<String>> = "codegen-backends",
 | |
|          runner: Option<String> = "runner",
 | |
| +        self_contained: Option<bool> = "self-contained",
 | |
|      }
 | |
|  }
 | |
|  
 | |
| @@ -1900,6 +1905,9 @@ fn get_table(option: &str) -> Result<TomlConfig, toml::de::Error> {
 | |
|                  if let Some(s) = cfg.no_std {
 | |
|                      target.no_std = s;
 | |
|                  }
 | |
| +                if let Some(s) = cfg.self_contained {
 | |
| +                    target.self_contained = s;
 | |
| +                }
 | |
|                  target.cc = cfg.cc.map(PathBuf::from);
 | |
|                  target.cxx = cfg.cxx.map(PathBuf::from);
 | |
|                  target.ar = cfg.ar.map(PathBuf::from);
 | |
| diff --git a/src/bootstrap/src/lib.rs b/src/bootstrap/src/lib.rs
 | |
| index a8555b2c3673..70c41b51eb96 100644
 | |
| --- a/src/bootstrap/src/lib.rs
 | |
| +++ b/src/bootstrap/src/lib.rs
 | |
| @@ -1361,6 +1361,11 @@ fn no_std(&self, target: TargetSelection) -> Option<bool> {
 | |
|          self.config.target_config.get(&target).map(|t| t.no_std)
 | |
|      }
 | |
|  
 | |
| +    /// Returns `true` if this is a self-contained `target`, if defined
 | |
| +    fn self_contained(&self, target: TargetSelection) -> Option<bool> {
 | |
| +        self.config.target_config.get(&target).map(|t| t.self_contained)
 | |
| +    }
 | |
| +
 | |
|      /// Returns `true` if the target will be tested using the `remote-test-client`
 | |
|      /// and `remote-test-server` binaries.
 | |
|      fn remote_tested(&self, target: TargetSelection) -> bool {
 | |
| -- 
 | |
| 2.46.0
 | |
| 
 |