mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
Stabilise link-self-contained option
This commit is contained in:
parent
8bfe289886
commit
23f0ccfe5d
@ -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 {
|
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
|
// 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")
|
&& sess.target.target.llvm_target.contains("windows-gnu")
|
||||||
{
|
{
|
||||||
if let Some(compiler_libs_path) = get_crt_libs_path(sess) {
|
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.
|
/// 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.
|
/// We only provide such support for a very limited number of targets.
|
||||||
fn crt_objects_fallback(sess: &Session, crate_type: CrateType) -> bool {
|
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;
|
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.
|
/// 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) {
|
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.
|
// 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)
|
&& cfg!(windows)
|
||||||
&& sess.target.target.llvm_target.contains("windows-gnu")
|
&& 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`.
|
// `link_arg` is omitted because it just forwards to `link_args`.
|
||||||
untracked!(link_args, vec![String::from("abc"), String::from("def")]);
|
untracked!(link_args, vec![String::from("abc"), String::from("def")]);
|
||||||
untracked!(link_dead_code, Some(true));
|
untracked!(link_dead_code, Some(true));
|
||||||
|
untracked!(link_self_contained, Some(true));
|
||||||
untracked!(linker, Some(PathBuf::from("linker")));
|
untracked!(linker, Some(PathBuf::from("linker")));
|
||||||
untracked!(linker_flavor, Some(LinkerFlavor::Gcc));
|
untracked!(linker_flavor, Some(LinkerFlavor::Gcc));
|
||||||
untracked!(no_stack_check, true);
|
untracked!(no_stack_check, true);
|
||||||
|
@ -719,6 +719,9 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
|
|||||||
"extra arguments to append to the linker invocation (space separated)"),
|
"extra arguments to append to the linker invocation (space separated)"),
|
||||||
link_dead_code: Option<bool> = (None, parse_opt_bool, [UNTRACKED],
|
link_dead_code: Option<bool> = (None, parse_opt_bool, [UNTRACKED],
|
||||||
"keep dead code at link time (useful for code coverage) (default: no)"),
|
"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],
|
linker: Option<PathBuf> = (None, parse_opt_pathbuf, [UNTRACKED],
|
||||||
"system linker to link outputs with"),
|
"system linker to link outputs with"),
|
||||||
linker_flavor: Option<LinkerFlavor> = (None, parse_linker_flavor, [UNTRACKED],
|
linker_flavor: Option<LinkerFlavor> = (None, parse_linker_flavor, [UNTRACKED],
|
||||||
@ -894,9 +897,6 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
|||||||
"keep hygiene data after analysis (default: no)"),
|
"keep hygiene data after analysis (default: no)"),
|
||||||
link_native_libraries: bool = (true, parse_bool, [UNTRACKED],
|
link_native_libraries: bool = (true, parse_bool, [UNTRACKED],
|
||||||
"link native libraries in the linker invocation (default: yes)"),
|
"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_only: bool = (false, parse_bool, [TRACKED],
|
||||||
"link the `.rlink` file generated by `-Z no-link` (default: no)"),
|
"link the `.rlink` file generated by `-Z no-link` (default: no)"),
|
||||||
llvm_time_trace: bool = (false, parse_bool, [UNTRACKED],
|
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
|
## control-flow-guard
|
||||||
|
|
||||||
This flag controls whether LLVM enables the Windows [Control Flow
|
This flag controls whether LLVM enables the Windows [Control Flow
|
||||||
Guard](https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard)
|
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.
|
platform security feature. This flag is currently ignored for non-Windows targets.
|
||||||
It takes one of the following values:
|
It takes one of the following values:
|
||||||
|
|
||||||
* `y`, `yes`, `on`, `checks`, or no value: enable Control Flow Guard.
|
* `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).
|
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).
|
* `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
|
An example of when this flag might be useful is when trying to construct code coverage
|
||||||
metrics.
|
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
|
## linker
|
||||||
|
|
||||||
This flag controls which linker `rustc` invokes to link your code. It takes a
|
This flag controls which linker `rustc` invokes to link your code. It takes a
|
||||||
|
Loading…
Reference in New Issue
Block a user