allow LTO on proc-macro
crates with -Zdylib-lto
Signed-off-by: onur-ozkan <work@onurozkan.dev>
This commit is contained in:
parent
af78bae565
commit
bdd66b3f98
3 changed files with 18 additions and 3 deletions
|
@ -37,6 +37,8 @@ codegen_llvm_lto_disallowed = lto can only be run for executables, cdylibs and s
|
||||||
|
|
||||||
codegen_llvm_lto_dylib = lto cannot be used for `dylib` crate type without `-Zdylib-lto`
|
codegen_llvm_lto_dylib = lto cannot be used for `dylib` crate type without `-Zdylib-lto`
|
||||||
|
|
||||||
|
codegen_llvm_lto_proc_macro = lto cannot be used for `proc-macro` crate type without `-Zdylib-lto`
|
||||||
|
|
||||||
codegen_llvm_missing_features =
|
codegen_llvm_missing_features =
|
||||||
add the missing features in a `target_feature` attribute
|
add the missing features in a `target_feature` attribute
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ use crate::back::write::{
|
||||||
self, bitcode_section_name, save_temp_bitcode, CodegenDiagnosticsStage, DiagnosticHandlers,
|
self, bitcode_section_name, save_temp_bitcode, CodegenDiagnosticsStage, DiagnosticHandlers,
|
||||||
};
|
};
|
||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
DynamicLinkingWithLTO, LlvmError, LtoBitcodeFromRlib, LtoDisallowed, LtoDylib,
|
DynamicLinkingWithLTO, LlvmError, LtoBitcodeFromRlib, LtoDisallowed, LtoDylib, LtoProcMacro,
|
||||||
};
|
};
|
||||||
use crate::llvm::{self, build_string};
|
use crate::llvm::{self, build_string};
|
||||||
use crate::{LlvmCodegenBackend, ModuleLlvm};
|
use crate::{LlvmCodegenBackend, ModuleLlvm};
|
||||||
|
@ -36,8 +36,12 @@ pub const THIN_LTO_KEYS_INCR_COMP_FILE_NAME: &str = "thin-lto-past-keys.bin";
|
||||||
|
|
||||||
pub fn crate_type_allows_lto(crate_type: CrateType) -> bool {
|
pub fn crate_type_allows_lto(crate_type: CrateType) -> bool {
|
||||||
match crate_type {
|
match crate_type {
|
||||||
CrateType::Executable | CrateType::Dylib | CrateType::Staticlib | CrateType::Cdylib => true,
|
CrateType::Executable
|
||||||
CrateType::Rlib | CrateType::ProcMacro => false,
|
| CrateType::Dylib
|
||||||
|
| CrateType::Staticlib
|
||||||
|
| CrateType::Cdylib
|
||||||
|
| CrateType::ProcMacro => true,
|
||||||
|
CrateType::Rlib => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,6 +91,11 @@ fn prepare_lto(
|
||||||
diag_handler.emit_err(LtoDylib);
|
diag_handler.emit_err(LtoDylib);
|
||||||
return Err(FatalError);
|
return Err(FatalError);
|
||||||
}
|
}
|
||||||
|
} else if *crate_type == CrateType::ProcMacro {
|
||||||
|
if !cgcx.opts.unstable_opts.dylib_lto {
|
||||||
|
diag_handler.emit_err(LtoProcMacro);
|
||||||
|
return Err(FatalError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,10 @@ pub(crate) struct LtoDisallowed;
|
||||||
#[diag(codegen_llvm_lto_dylib)]
|
#[diag(codegen_llvm_lto_dylib)]
|
||||||
pub(crate) struct LtoDylib;
|
pub(crate) struct LtoDylib;
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(codegen_llvm_lto_proc_macro)]
|
||||||
|
pub(crate) struct LtoProcMacro;
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(codegen_llvm_lto_bitcode_from_rlib)]
|
#[diag(codegen_llvm_lto_bitcode_from_rlib)]
|
||||||
pub(crate) struct LtoBitcodeFromRlib {
|
pub(crate) struct LtoBitcodeFromRlib {
|
||||||
|
|
Loading…
Add table
Reference in a new issue