Rollup merge of #133297 - DianQK:embed-bitcode-ios, r=nikic
Remove legacy bitcode for iOS Follow #117364.
This commit is contained in:
commit
8d20d71256
4 changed files with 8 additions and 35 deletions
|
@ -955,24 +955,7 @@ pub(crate) fn bitcode_section_name(cgcx: &CodegenContext<LlvmCodegenBackend>) ->
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Embed the bitcode of an LLVM module in the LLVM module itself.
|
/// Embed the bitcode of an LLVM module for LTO in the LLVM module itself.
|
||||||
///
|
|
||||||
/// This is done primarily for iOS where it appears to be standard to compile C
|
|
||||||
/// code at least with `-fembed-bitcode` which creates two sections in the
|
|
||||||
/// executable:
|
|
||||||
///
|
|
||||||
/// * __LLVM,__bitcode
|
|
||||||
/// * __LLVM,__cmdline
|
|
||||||
///
|
|
||||||
/// It appears *both* of these sections are necessary to get the linker to
|
|
||||||
/// recognize what's going on. A suitable cmdline value is taken from the
|
|
||||||
/// target spec.
|
|
||||||
///
|
|
||||||
/// Furthermore debug/O1 builds don't actually embed bitcode but rather just
|
|
||||||
/// embed an empty section.
|
|
||||||
///
|
|
||||||
/// Basically all of this is us attempting to follow in the footsteps of clang
|
|
||||||
/// on iOS. See #35968 for lots more info.
|
|
||||||
unsafe fn embed_bitcode(
|
unsafe fn embed_bitcode(
|
||||||
cgcx: &CodegenContext<LlvmCodegenBackend>,
|
cgcx: &CodegenContext<LlvmCodegenBackend>,
|
||||||
llcx: &llvm::Context,
|
llcx: &llvm::Context,
|
||||||
|
|
|
@ -432,11 +432,9 @@ struct CompiledModules {
|
||||||
|
|
||||||
fn need_bitcode_in_object(tcx: TyCtxt<'_>) -> bool {
|
fn need_bitcode_in_object(tcx: TyCtxt<'_>) -> bool {
|
||||||
let sess = tcx.sess;
|
let sess = tcx.sess;
|
||||||
let requested_for_rlib = sess.opts.cg.embed_bitcode
|
sess.opts.cg.embed_bitcode
|
||||||
&& tcx.crate_types().contains(&CrateType::Rlib)
|
&& tcx.crate_types().contains(&CrateType::Rlib)
|
||||||
&& sess.opts.output_types.contains_key(&OutputType::Exe);
|
&& sess.opts.output_types.contains_key(&OutputType::Exe)
|
||||||
let forced_by_target = sess.target.forces_embed_bitcode;
|
|
||||||
requested_for_rlib || forced_by_target
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn need_pre_lto_bitcode_for_incr_comp(sess: &Session) -> bool {
|
fn need_pre_lto_bitcode_for_incr_comp(sess: &Session) -> bool {
|
||||||
|
|
|
@ -2327,8 +2327,6 @@ pub struct TargetOptions {
|
||||||
/// If we give emcc .o files that are actually .bc files it
|
/// If we give emcc .o files that are actually .bc files it
|
||||||
/// will 'just work'.
|
/// will 'just work'.
|
||||||
pub obj_is_bitcode: bool,
|
pub obj_is_bitcode: bool,
|
||||||
/// Whether the target requires that emitted object code includes bitcode.
|
|
||||||
pub forces_embed_bitcode: bool,
|
|
||||||
/// Content of the LLVM cmdline section associated with embedded bitcode.
|
/// Content of the LLVM cmdline section associated with embedded bitcode.
|
||||||
pub bitcode_llvm_cmdline: StaticCow<str>,
|
pub bitcode_llvm_cmdline: StaticCow<str>,
|
||||||
|
|
||||||
|
@ -2671,7 +2669,6 @@ impl Default for TargetOptions {
|
||||||
allow_asm: true,
|
allow_asm: true,
|
||||||
has_thread_local: false,
|
has_thread_local: false,
|
||||||
obj_is_bitcode: false,
|
obj_is_bitcode: false,
|
||||||
forces_embed_bitcode: false,
|
|
||||||
bitcode_llvm_cmdline: "".into(),
|
bitcode_llvm_cmdline: "".into(),
|
||||||
min_atomic_width: None,
|
min_atomic_width: None,
|
||||||
max_atomic_width: None,
|
max_atomic_width: None,
|
||||||
|
@ -3412,7 +3409,6 @@ impl Target {
|
||||||
key!(main_needs_argc_argv, bool);
|
key!(main_needs_argc_argv, bool);
|
||||||
key!(has_thread_local, bool);
|
key!(has_thread_local, bool);
|
||||||
key!(obj_is_bitcode, bool);
|
key!(obj_is_bitcode, bool);
|
||||||
key!(forces_embed_bitcode, bool);
|
|
||||||
key!(bitcode_llvm_cmdline);
|
key!(bitcode_llvm_cmdline);
|
||||||
key!(max_atomic_width, Option<u64>);
|
key!(max_atomic_width, Option<u64>);
|
||||||
key!(min_atomic_width, Option<u64>);
|
key!(min_atomic_width, Option<u64>);
|
||||||
|
@ -3687,7 +3683,6 @@ impl ToJson for Target {
|
||||||
target_option_val!(main_needs_argc_argv);
|
target_option_val!(main_needs_argc_argv);
|
||||||
target_option_val!(has_thread_local);
|
target_option_val!(has_thread_local);
|
||||||
target_option_val!(obj_is_bitcode);
|
target_option_val!(obj_is_bitcode);
|
||||||
target_option_val!(forces_embed_bitcode);
|
|
||||||
target_option_val!(bitcode_llvm_cmdline);
|
target_option_val!(bitcode_llvm_cmdline);
|
||||||
target_option_val!(min_atomic_width);
|
target_option_val!(min_atomic_width);
|
||||||
target_option_val!(max_atomic_width);
|
target_option_val!(max_atomic_width);
|
||||||
|
|
|
@ -119,17 +119,14 @@ files. It takes one of the following values:
|
||||||
* `n`, `no`, `off` or `false`: omit bitcode from rlibs.
|
* `n`, `no`, `off` or `false`: omit bitcode from rlibs.
|
||||||
|
|
||||||
LLVM bitcode is required when rustc is performing link-time optimization (LTO).
|
LLVM bitcode is required when rustc is performing link-time optimization (LTO).
|
||||||
It is also required on some targets like iOS ones where vendors look for LLVM
|
Embedded bitcode will appear in rustc-generated object files inside of a section
|
||||||
bitcode. Embedded bitcode will appear in rustc-generated object files inside of
|
whose name is defined by the target platform. Most of the time this is `.llvmbc`.
|
||||||
a section whose name is defined by the target platform. Most of the time this is
|
|
||||||
`.llvmbc`.
|
|
||||||
|
|
||||||
The use of `-C embed-bitcode=no` can significantly improve compile times and
|
The use of `-C embed-bitcode=no` can significantly improve compile times and
|
||||||
reduce generated file sizes if your compilation does not actually need bitcode
|
reduce generated file sizes if your compilation does not actually need bitcode
|
||||||
(e.g. if you're not compiling for iOS or you're not performing LTO). For these
|
(e.g. if you're not performing LTO). For these reasons, Cargo uses `-C embed-bitcode=no`
|
||||||
reasons, Cargo uses `-C embed-bitcode=no` whenever possible. Likewise, if you
|
whenever possible. Likewise, if you are building directly with `rustc` we recommend
|
||||||
are building directly with `rustc` we recommend using `-C embed-bitcode=no`
|
using `-C embed-bitcode=no` whenever you are not using LTO.
|
||||||
whenever you are not using LTO.
|
|
||||||
|
|
||||||
If combined with `-C lto`, `-C embed-bitcode=no` will cause `rustc` to abort
|
If combined with `-C lto`, `-C embed-bitcode=no` will cause `rustc` to abort
|
||||||
at start-up, because the combination is invalid.
|
at start-up, because the combination is invalid.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue