mirror of https://github.com/rust-lang/rust.git
Rollup merge of #76158 - mati865:self-contained-option, r=petrochenkov
Stabilise link-self-contained option MCP has been accepted: https://github.com/rust-lang/compiler-team/issues/343 I'll add improved heuristic in next PR.
This commit is contained in:
commit
4a6aa350c7
|
@ -1084,7 +1084,7 @@ fn get_crt_libs_path(sess: &Session) -> Option<PathBuf> {
|
|||
|
||||
fn get_object_file_path(sess: &Session, name: &str, self_contained: bool) -> PathBuf {
|
||||
// prefer system {,dll}crt2.o libs, see get_crt_libs_path comment for more details
|
||||
if sess.opts.debugging_opts.link_self_contained.is_none()
|
||||
if sess.opts.cg.link_self_contained.is_none()
|
||||
&& sess.target.target.llvm_target.contains("windows-gnu")
|
||||
{
|
||||
if let Some(compiler_libs_path) = get_crt_libs_path(sess) {
|
||||
|
@ -1289,7 +1289,7 @@ fn link_output_kind(sess: &Session, crate_type: CrateType) -> LinkOutputKind {
|
|||
/// Whether we link to our own CRT objects instead of relying on gcc to pull them.
|
||||
/// We only provide such support for a very limited number of targets.
|
||||
fn crt_objects_fallback(sess: &Session, crate_type: CrateType) -> bool {
|
||||
if let Some(self_contained) = sess.opts.debugging_opts.link_self_contained {
|
||||
if let Some(self_contained) = sess.opts.cg.link_self_contained {
|
||||
return self_contained;
|
||||
}
|
||||
|
||||
|
@ -1499,7 +1499,7 @@ fn link_local_crate_native_libs_and_dependent_crate_libs<'a, B: ArchiveBuilder<'
|
|||
/// Add sysroot and other globally set directories to the directory search list.
|
||||
fn add_library_search_dirs(cmd: &mut dyn Linker, sess: &Session, self_contained: bool) {
|
||||
// Prefer system mingw-w64 libs, see get_crt_libs_path comment for more details.
|
||||
if sess.opts.debugging_opts.link_self_contained.is_none()
|
||||
if sess.opts.cg.link_self_contained.is_none()
|
||||
&& cfg!(windows)
|
||||
&& sess.target.target.llvm_target.contains("windows-gnu")
|
||||
{
|
||||
|
|
|
@ -402,6 +402,7 @@ fn test_codegen_options_tracking_hash() {
|
|||
// `link_arg` is omitted because it just forwards to `link_args`.
|
||||
untracked!(link_args, vec![String::from("abc"), String::from("def")]);
|
||||
untracked!(link_dead_code, Some(true));
|
||||
untracked!(link_self_contained, Some(true));
|
||||
untracked!(linker, Some(PathBuf::from("linker")));
|
||||
untracked!(linker_flavor, Some(LinkerFlavor::Gcc));
|
||||
untracked!(no_stack_check, true);
|
||||
|
|
|
@ -750,6 +750,9 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
|
|||
"extra arguments to append to the linker invocation (space separated)"),
|
||||
link_dead_code: Option<bool> = (None, parse_opt_bool, [UNTRACKED],
|
||||
"keep dead code at link time (useful for code coverage) (default: no)"),
|
||||
link_self_contained: Option<bool> = (None, parse_opt_bool, [UNTRACKED],
|
||||
"control whether to link Rust provided C objects/libraries or rely
|
||||
on C toolchain installed in the system"),
|
||||
linker: Option<PathBuf> = (None, parse_opt_pathbuf, [UNTRACKED],
|
||||
"system linker to link outputs with"),
|
||||
linker_flavor: Option<LinkerFlavor> = (None, parse_linker_flavor, [UNTRACKED],
|
||||
|
@ -930,9 +933,6 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
|||
"keep hygiene data after analysis (default: no)"),
|
||||
link_native_libraries: bool = (true, parse_bool, [UNTRACKED],
|
||||
"link native libraries in the linker invocation (default: yes)"),
|
||||
link_self_contained: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||
"control whether to link Rust provided C objects/libraries or rely
|
||||
on C toolchain installed in the system"),
|
||||
link_only: bool = (false, parse_bool, [TRACKED],
|
||||
"link the `.rlink` file generated by `-Z no-link` (default: no)"),
|
||||
llvm_time_trace: bool = (false, parse_bool, [UNTRACKED],
|
||||
|
|
|
@ -44,13 +44,13 @@ incremental builds the default is 256 which allows caching to be more granular.
|
|||
|
||||
## control-flow-guard
|
||||
|
||||
This flag controls whether LLVM enables the Windows [Control Flow
|
||||
Guard](https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard)
|
||||
platform security feature. This flag is currently ignored for non-Windows targets.
|
||||
This flag controls whether LLVM enables the Windows [Control Flow
|
||||
Guard](https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard)
|
||||
platform security feature. This flag is currently ignored for non-Windows targets.
|
||||
It takes one of the following values:
|
||||
|
||||
* `y`, `yes`, `on`, `checks`, or no value: enable Control Flow Guard.
|
||||
* `nochecks`: emit Control Flow Guard metadata without runtime enforcement checks (this
|
||||
* `nochecks`: emit Control Flow Guard metadata without runtime enforcement checks (this
|
||||
should only be used for testing purposes as it does not provide security enforcement).
|
||||
* `n`, `no`, `off`: do not enable Control Flow Guard (the default).
|
||||
|
||||
|
@ -200,6 +200,18 @@ the following values:
|
|||
An example of when this flag might be useful is when trying to construct code coverage
|
||||
metrics.
|
||||
|
||||
## link-self-contained
|
||||
|
||||
On targets that support it this flag controls whether the linker will use libraries and objects
|
||||
shipped with Rust instead or those in the system.
|
||||
It takes one of the following values:
|
||||
|
||||
* no value: rustc will use heuristic to disable self-contained mode if system has necessary tools.
|
||||
* `y`, `yes`, `on`: use only libraries/objects shipped with Rust.
|
||||
* `n`, `no`, or `off`: rely on the user or the linker to provide non-Rust libraries/objects.
|
||||
|
||||
This allows overriding cases when detection fails or user wants to use shipped libraries.
|
||||
|
||||
## linker
|
||||
|
||||
This flag controls which linker `rustc` invokes to link your code. It takes a
|
||||
|
|
Loading…
Reference in New Issue