diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e0895bd..188d3fc 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -28,9 +28,9 @@ jobs: runs-on: ubuntu-latest env: LLVM_INSTALL_PATH: ~/llvm - LLVM_VERSION: "18" - LLVM_VERSION_IN_FEATURE: "18-1" - LLVM_LIB_NAME: "libLLVM.so.18.1" + LLVM_VERSION: "19" + LLVM_VERSION_IN_FEATURE: "19-1" + LLVM_LIB_NAME: "libLLVM.so.19.1" steps: - name: Checkout Repo uses: actions/checkout@v2 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 22d46f7..8075da2 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -15,7 +15,6 @@ jobs: strategy: matrix: llvm-version: - - ["10", "10-0", "v10.0.1-rust-1.46/llvm-10.0.1-rust-1.46-linux-x86_64.tar.gz", "libLLVM-10.so"] - ["11", "11-0", "v11.0.1-rust-1.51/llvm-lld-11.0.1-rust-1.51-linux-x86_64.tar.gz", "libLLVM-11.so"] - ["12", "12-0", "v12.0.1-rust-1.55/llvm-lld-12.0.1-rust-1.55-linux-x86_64.tar.gz", "libLLVM-12.so"] - ["13", "13-0", "v13.0.0-rust-1.59/llvm-lld-13.0.0-rust-1.59-linux-x86_64.tar.gz", "libLLVM-13.so"] @@ -24,6 +23,8 @@ jobs: - ["16", "16-0", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-linux-x86_64.tar.gz", "libLLVM-16.so"] - ["17", "17-0", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-linux-x86_64.tar.gz", "libLLVM-17.so"] - ["18", "18-1", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-linux-x86_64.tar.gz", "libLLVM.so.18.1"] + - ["19", "19-1", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-linux-x86_64.tar.gz", "libLLVM.so.19.1"] + - ["20", "20-1", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-linux-x86_64.tar.gz", "libLLVM.so.20.1"] steps: - name: Checkout Repo uses: actions/checkout@v2 @@ -114,6 +115,8 @@ jobs: - ["16", "16-0", "1.71", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-linux-x86_64.tar.gz", "libLLVM-16.so"] - ["17", "17-0", "1.75", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-linux-x86_64.tar.gz", "libLLVM-17.so"] - ["18", "18-1", "1.78", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-linux-x86_64.tar.gz", "libLLVM.so.18.1"] + - ["19", "19-1", "1.84", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-linux-x86_64.tar.gz", "libLLVM.so.19.1"] + - ["20", "20-1", "1.87", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-linux-x86_64.tar.gz", "libLLVM.so.20.1"] steps: - name: Checkout Repo uses: actions/checkout@v2 diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index ea2fd58..1b4463f 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -23,6 +23,8 @@ jobs: - ["16", "16-0", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-macos-x86_64.tar.gz", "macos-13"] - ["17", "17-0", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-macos-x86_64.tar.gz", "macos-13"] - ["18", "18-1", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-macos-arm64.tar.gz", "macos-latest"] + - ["19", "19-1", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-macos-arm64.tar.gz", "macos-latest"] + - ["20", "20-1", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-macos-arm64.tar.gz", "macos-latest"] steps: - name: Checkout Repo uses: actions/checkout@v2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 612647b..2942aff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,9 +36,9 @@ jobs: runs-on: ubuntu-latest env: LLVM_INSTALL_PATH: ~/llvm - LLVM_VERSION: "18" - LLVM_VERSION_IN_FEATURE: "18-1" - LLVM_LIB_NAME: "libLLVM.so.18.1" + LLVM_VERSION: "19" + LLVM_VERSION_IN_FEATURE: "19-1" + LLVM_LIB_NAME: "libLLVM.so.19.1" steps: - name: Checkout the repository uses: actions/checkout@v4 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c38f613..3780603 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -23,6 +23,8 @@ jobs: - ["16", "16-0", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-windows-x86_64.7z"] - ["17", "17-0", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-windows-x86_64.7z"] - ["18", "18-1", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-windows-x86_64.7z"] + - ["19", "19-1", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-windows-x86_64.7z"] + - ["20", "20-1", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-windows-x86_64.7z"] steps: - name: Checkout Repo uses: actions/checkout@v2 @@ -112,6 +114,8 @@ jobs: - ["16", "16-0", "1.71", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-windows-x86_64.7z"] - ["17", "17-0", "1.75", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-windows-x86_64.7z"] - ["18", "18-1", "1.78", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-windows-x86_64.7z"] + - ["19", "19-1", "1.84", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-windows-x86_64.7z"] + - ["20", "20-1", "1.87", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-windows-x86_64.7z"] steps: - name: Checkout Repo uses: actions/checkout@v2 diff --git a/Cargo.toml b/Cargo.toml index 3061bb4..5c2d779 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,6 @@ [workspace] resolver = "2" members = ["llvm-plugin", "llvm-plugin-macros"] + +[patch.crates-io] +inkwell = { git = "https://github.com/stevefan1999-personal/inkwell" } diff --git a/README.md b/README.md index 725a64c..b8a8f77 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ When importing this crate in your `Cargo.toml`, you will need to specify the LLV ```toml [dependencies] -llvm-plugin = { version = "0.6", features = ["llvm18-1"] } +llvm-plugin = { version = "0.6", features = ["llvm20-1"] } ``` -Supported versions: LLVM 10-18 mapping to a cargo feature flag `llvmX-Y` where `X` and `Y` are the LLVM major and minor versions. +Supported versions: LLVM 11-20 mapping to a cargo feature flag `llvmX-Y` where `X` and `Y` are the LLVM major and minor versions. ## Getting Started diff --git a/examples/README.md b/examples/README.md index b801c80..7a9cf5d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -9,7 +9,7 @@ achieved with simple LLVM passes. Execute the example ```shell - $ cargo b --example hello-world --features llvm10-0 + $ cargo b --example hello-world --features llvm20-1 $ opt --load-pass-plugin=target/debug/examples/libhello_world.so --passes=hello-world in.ll -S -o out.ll ``` @@ -21,7 +21,7 @@ achieved with simple LLVM passes. Execute the example ```shell - $ cargo b --example opcode-counter --features llvm10-0 + $ cargo b --example opcode-counter --features llvm20-1 $ opt --load-pass-plugin=target/debug/examples/libopcode_counter.so --passes=opcode-counter-printer in.ll -S -o out.ll ``` @@ -33,7 +33,7 @@ achieved with simple LLVM passes. Execute the example ```shell - $ cargo b --example inject-printf --features llvm10-0 + $ cargo b --example inject-printf --features llvm20-1 $ opt --load-pass-plugin=target/debug/examples/libinject_printf.so --passes=inject-func-call in.ll -S -o out.ll ``` @@ -45,7 +45,7 @@ achieved with simple LLVM passes. Execute the example ```shell - $ cargo b --example static-call-counter --features llvm10-0 + $ cargo b --example static-call-counter --features llvm20-1 $ opt --load-pass-plugin=target/debug/examples/libstatic_call_counter.so --passes=static-cc-printer in.ll -S -o out.ll ``` @@ -57,7 +57,7 @@ achieved with simple LLVM passes. Execute the example ```shell - $ cargo b --example string-obf --features llvm10-0 + $ cargo b --example string-obf --features llvm20-1 $ opt --load-pass-plugin=target/debug/examples/libstring_obf.so --passes=string-obfuscator-pass in.ll -S -o out.ll ``` diff --git a/examples/strings.rs b/examples/strings.rs index 7b8cfb8..265424c 100644 --- a/examples/strings.rs +++ b/examples/strings.rs @@ -71,12 +71,12 @@ fn encode_global_strings<'a>(module: &mut Module<'a>) -> Vec> { _ => None, }) .filter(|(_, _, arr)| { - // needs to be called before `get_string_constant`, otherwise it may crash + // needs to be called before `as_const_string`, otherwise it may crash arr.is_const_string() }) .filter_map(|(global, stru, arr)| { // we ignore non-UTF8 strings, since they are probably not human-readable - let s = arr.get_string_constant().and_then(|s| s.to_str().ok())?; + let s = arr.as_const_string().and_then(|s| str::from_utf8(s).ok())?; let encoded_str = s.bytes().map(|c| c + 1).collect::>(); Some((global, stru, encoded_str)) }) @@ -156,6 +156,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", )))] let var10 = unsafe { builder.build_gep( @@ -170,6 +172,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] let var10 = unsafe { builder.build_gep( @@ -185,6 +189,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", )))] let var11 = builder.build_load(phi1.as_basic_value().into_pointer_value(), ""); #[cfg(any( @@ -192,6 +198,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] let var11 = builder .build_load(cx.i8_type(), phi1.as_basic_value().into_pointer_value(), "") @@ -254,6 +262,8 @@ fn create_decode_stub<'a>( feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", )))] let s = builder .build_struct_gep(gs.as_pointer_value(), id, "") @@ -263,6 +273,8 @@ fn create_decode_stub<'a>( feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] let s = { let i8_ty_ptr = cx.i8_type().ptr_type(AddressSpace::default()); diff --git a/llvm-plugin/Cargo.toml b/llvm-plugin/Cargo.toml index ac49a8f..ef28b70 100644 --- a/llvm-plugin/Cargo.toml +++ b/llvm-plugin/Cargo.toml @@ -12,7 +12,7 @@ readme = "README.md" repository = "https://github.com/jamesmth/llvm-plugin-rs" [package.metadata.docs.rs] -features = ["llvm15-0"] # any version >10 will do +features = ["llvm15-0"] rustdoc-args = ["--cfg", "docsrs"] [features] @@ -24,7 +24,6 @@ macros = ["llvm-plugin-macros"] win-link-opt = [] win-link-lld = [] -llvm10-0 = ["inkwell/llvm10-0-no-llvm-linking"] llvm11-0 = ["inkwell/llvm11-0-no-llvm-linking"] llvm12-0 = ["inkwell/llvm12-0-no-llvm-linking"] llvm13-0 = ["inkwell/llvm13-0-no-llvm-linking"] @@ -32,7 +31,9 @@ llvm14-0 = ["inkwell/llvm14-0-no-llvm-linking"] llvm15-0 = ["inkwell/llvm15-0-no-llvm-linking"] llvm16-0 = ["inkwell/llvm16-0-no-llvm-linking"] llvm17-0 = ["inkwell/llvm17-0-no-llvm-linking"] -llvm18-1 = ["inkwell/llvm18-0-no-llvm-linking"] +llvm18-1 = ["inkwell/llvm18-1-no-llvm-linking"] +llvm19-1 = ["inkwell/llvm19-1-no-llvm-linking"] +llvm20-1 = ["inkwell/llvm20-1-no-llvm-linking"] target-x86 = ["inkwell/target-x86"] target-arm = ["inkwell/target-arm"] @@ -53,7 +54,7 @@ target-riscv = ["inkwell/target-riscv"] target-all = ["inkwell/target-all"] [dependencies] -inkwell = "0.5" +inkwell = "0.6" llvm-plugin-macros = { path = "../llvm-plugin-macros", version = "0.2", optional = true } [build-dependencies] diff --git a/llvm-plugin/build.rs b/llvm-plugin/build.rs index 6ca43b5..dbb4977 100644 --- a/llvm-plugin/build.rs +++ b/llvm-plugin/build.rs @@ -199,9 +199,7 @@ mod llvm_sys { } fn llvm_version_from_features() -> (u32, u32) { - if cfg!(feature = "llvm10-0") { - (10, 0) - } else if cfg!(feature = "llvm11-0") { + if cfg!(feature = "llvm11-0") { (11, 0) } else if cfg!(feature = "llvm12-0") { (12, 0) @@ -217,6 +215,10 @@ mod llvm_sys { (17, 0) } else if cfg!(feature = "llvm18-1") { (18, 1) + } else if cfg!(feature = "llvm19-1") { + (19, 1) + } else if cfg!(feature = "llvm20-1") { + (20, 1) } else { panic!("Missing llvm* feature") } diff --git a/llvm-plugin/cpp/.clang-tidy b/llvm-plugin/cpp/.clang-tidy index 33a45c9..51dc04f 100644 --- a/llvm-plugin/cpp/.clang-tidy +++ b/llvm-plugin/cpp/.clang-tidy @@ -1,5 +1,5 @@ # https://github.com/llvm/llvm-project/blob/main/.clang-tidy -Checks: '-*,clang-diagnostic-*,llvm-*,misc-*,-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-misc-no-recursion,readability-identifier-naming' +Checks: '-*,clang-diagnostic-*,llvm-*,misc-*,-misc-const-correctness,-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-misc-no-recursion,-misc-use-anonymous-namespace,readability-identifier-naming,-misc-include-cleaner' CheckOptions: - key: readability-identifier-naming.ClassCase value: CamelCase @@ -7,6 +7,10 @@ CheckOptions: value: CamelCase - key: readability-identifier-naming.FunctionCase value: camelBack + # Exclude from scanning as this is an exported symbol used for fuzzing + # throughout the code base. + - key: readability-identifier-naming.FunctionIgnoredRegexp + value: "LLVMFuzzerTestOneInput" - key: readability-identifier-naming.MemberCase value: CamelCase - key: readability-identifier-naming.ParameterCase diff --git a/llvm-plugin/cpp/ffi.cc b/llvm-plugin/cpp/ffi.cc index 39b3e6f..a52aae1 100644 --- a/llvm-plugin/cpp/ffi.cc +++ b/llvm-plugin/cpp/ffi.cc @@ -25,23 +25,6 @@ enum class OptimizationLevel { kO0, kO1, kO2, kO3, kOs, kOz }; namespace { auto getFFIOptimizationLevel(LlvmOptLevel Opt) -> OptimizationLevel { -#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR == 10) - if (Opt == LlvmOptLevel::O0) { - return OptimizationLevel::kO0; - } - if (Opt == LlvmOptLevel::O1) { - return OptimizationLevel::kO1; - } - if (Opt == LlvmOptLevel::O2) { - return OptimizationLevel::kO2; - } - if (Opt == LlvmOptLevel::O3) { - return OptimizationLevel::kO3; - } - if (Opt == LlvmOptLevel::Os) { - return OptimizationLevel::kOs; - } -#else // Starting from LLVM-11, llvm::OptimizationLevel::Ox is no longer // an enum but a global static. Using these global statics on Windows // would not compile, because an LLVM plugin links to opt.exe. The @@ -64,7 +47,6 @@ auto getFFIOptimizationLevel(LlvmOptLevel Opt) -> OptimizationLevel { if (Opt.getSpeedupLevel() == 2 && Opt.getSizeLevel() == 2) { return OptimizationLevel::kOz; } -#endif return OptimizationLevel::kOz; } } // namespace @@ -127,7 +109,6 @@ auto passBuilderAddFullLinkTimeOptimizationEarlyEPCallback( } #endif -#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 11) auto passBuilderAddOptimizerLastEPCallback( llvm::PassBuilder &Builder, const void *DataPtr, void (*Deleter)(const void *), @@ -137,12 +118,16 @@ auto passBuilderAddOptimizerLastEPCallback( Builder.registerOptimizerLastEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, +#if (LLVM_VERSION_MAJOR >= 20) + LlvmOptLevel Opt, + llvm::ThinOrFullLTOPhase) { +#else LlvmOptLevel Opt) { +#endif const auto OptFFI = getFFIOptimizationLevel(Opt); Callback(Data.get(), PassManager, OptFFI); }); } -#endif #if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 15) auto passBuilderAddOptimizerEarlyEPCallback( @@ -154,7 +139,12 @@ auto passBuilderAddOptimizerEarlyEPCallback( Builder.registerOptimizerEarlyEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, +#if (LLVM_VERSION_MAJOR >= 20) + LlvmOptLevel Opt, + llvm::ThinOrFullLTOPhase) { +#else LlvmOptLevel Opt) { +#endif const auto OptFFI = getFFIOptimizationLevel(Opt); Callback(Data.get(), PassManager, OptFFI); }); @@ -171,7 +161,12 @@ auto passBuilderAddPipelineEarlySimplificationEPCallback( Builder.registerPipelineEarlySimplificationEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, +#if (LLVM_VERSION_MAJOR >= 20) + LlvmOptLevel Opt, + llvm::ThinOrFullLTOPhase) { +#else LlvmOptLevel Opt) { +#endif const auto OptFFI = getFFIOptimizationLevel(Opt); Callback(Data.get(), PassManager, OptFFI); }); diff --git a/llvm-plugin/src/ffi.rs b/llvm-plugin/src/ffi.rs index 59d1f05..501d45a 100644 --- a/llvm-plugin/src/ffi.rs +++ b/llvm-plugin/src/ffi.rs @@ -9,6 +9,8 @@ extern "C" { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub(crate) fn passBuilderAddFullLinkTimeOptimizationLastEPCallback( builder: *mut c_void, @@ -22,6 +24,8 @@ extern "C" { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub(crate) fn passBuilderAddFullLinkTimeOptimizationEarlyEPCallback( builder: *mut c_void, @@ -35,6 +39,8 @@ extern "C" { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub(crate) fn passBuilderAddOptimizerEarlyEPCallback( builder: *mut c_void, @@ -43,16 +49,6 @@ extern "C" { cb_sys: extern "C" fn(*const c_void, *mut c_void, crate::OptimizationLevel), ); - #[cfg(any( - feature = "llvm11-0", - feature = "llvm12-0", - feature = "llvm13-0", - feature = "llvm14-0", - feature = "llvm15-0", - feature = "llvm16-0", - feature = "llvm17-0", - feature = "llvm18-1", - ))] pub(crate) fn passBuilderAddOptimizerLastEPCallback( builder: *mut c_void, cb: *const c_void, @@ -68,6 +64,8 @@ extern "C" { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub(crate) fn passBuilderAddPipelineEarlySimplificationEPCallback( builder: *mut c_void, @@ -84,6 +82,8 @@ extern "C" { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub(crate) fn passBuilderAddPipelineStartEPCallback( builder: *mut c_void, @@ -156,6 +156,8 @@ extern "C" { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub(crate) fn modulePassManagerIsEmpty(manager: *mut c_void) -> bool; @@ -174,6 +176,8 @@ extern "C" { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub(crate) fn functionPassManagerIsEmpty(manager: *mut c_void) -> bool; diff --git a/llvm-plugin/src/lib.rs b/llvm-plugin/src/lib.rs index 1fcc7ca..23bac64 100644 --- a/llvm-plugin/src/lib.rs +++ b/llvm-plugin/src/lib.rs @@ -308,10 +308,6 @@ pub struct PassPluginLibraryInfo { #[cfg(feature = "macros")] pub use llvm_plugin_macros::*; -// See https://github.com/jamesmth/llvm-plugin-rs/issues/3 -#[cfg(all(target_os = "windows", feature = "llvm10-0"))] -compile_error!("LLVM 10 not supported on Windows"); - #[cfg(all( target_os = "windows", any( diff --git a/llvm-plugin/src/pass_builder.rs b/llvm-plugin/src/pass_builder.rs index 86059ac..7bd863d 100644 --- a/llvm-plugin/src/pass_builder.rs +++ b/llvm-plugin/src/pass_builder.rs @@ -324,6 +324,8 @@ impl PassBuilder { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub fn add_pipeline_start_ep_callback(&mut self, cb: T) where @@ -375,6 +377,8 @@ impl PassBuilder { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub fn add_pipeline_early_simplification_ep_callback(&mut self, cb: T) where @@ -418,16 +422,6 @@ impl PassBuilder { /// /// This extension point allows adding passes that run after everything /// else. - #[cfg(any( - feature = "llvm11-0", - feature = "llvm12-0", - feature = "llvm13-0", - feature = "llvm14-0", - feature = "llvm15-0", - feature = "llvm16-0", - feature = "llvm17-0", - feature = "llvm18-1", - ))] pub fn add_optimizer_last_ep_callback(&mut self, cb: T) where T: Fn(&mut ModulePassManager, OptimizationLevel) + 'static, @@ -475,6 +469,8 @@ impl PassBuilder { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub fn add_full_lto_early_ep_callback(&mut self, cb: T) where @@ -523,6 +519,8 @@ impl PassBuilder { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub fn add_full_lto_last_ep_callback(&mut self, cb: T) where @@ -571,6 +569,8 @@ impl PassBuilder { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub fn add_optimizer_early_ep_callback(&mut self, cb: T) where diff --git a/llvm-plugin/src/pass_manager.rs b/llvm-plugin/src/pass_manager.rs index c3e6251..317c9b2 100644 --- a/llvm-plugin/src/pass_manager.rs +++ b/llvm-plugin/src/pass_manager.rs @@ -72,6 +72,8 @@ impl ModulePassManager { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub fn is_empty(&self) -> bool { unsafe { super::modulePassManagerIsEmpty(self.inner) } @@ -143,6 +145,8 @@ impl FunctionPassManager { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] pub fn is_empty(&self) -> bool { unsafe { super::functionPassManagerIsEmpty(self.inner) } diff --git a/tests/plugins/Cargo.toml b/tests/plugins/Cargo.toml index 719540d..ff67b0c 100644 --- a/tests/plugins/Cargo.toml +++ b/tests/plugins/Cargo.toml @@ -10,3 +10,6 @@ members = [ "plugin6", "plugin7", ] + +[patch.crates-io] +inkwell = { git = "https://github.com/stevefan1999-personal/inkwell" } diff --git a/tests/plugins/plugin1-lld/Cargo.toml b/tests/plugins/plugin1-lld/Cargo.toml index 1b4c90a..e29fcf7 100644 --- a/tests/plugins/plugin1-lld/Cargo.toml +++ b/tests/plugins/plugin1-lld/Cargo.toml @@ -18,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] diff --git a/tests/plugins/plugin1/Cargo.toml b/tests/plugins/plugin1/Cargo.toml index aa50e4d..377c6eb 100644 --- a/tests/plugins/plugin1/Cargo.toml +++ b/tests/plugins/plugin1/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] default = ["target-all"] win-link-opt = ["llvm-plugin/win-link-opt"] -llvm10-0 = ["llvm-plugin/llvm10-0"] llvm11-0 = ["llvm-plugin/llvm11-0"] llvm12-0 = ["llvm-plugin/llvm12-0"] llvm13-0 = ["llvm-plugin/llvm13-0"] @@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] diff --git a/tests/plugins/plugin2/Cargo.toml b/tests/plugins/plugin2/Cargo.toml index 11a2a9a..dc9ae68 100644 --- a/tests/plugins/plugin2/Cargo.toml +++ b/tests/plugins/plugin2/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] default = ["target-all"] win-link-opt = ["llvm-plugin/win-link-opt"] -llvm10-0 = ["llvm-plugin/llvm10-0"] llvm11-0 = ["llvm-plugin/llvm11-0"] llvm12-0 = ["llvm-plugin/llvm12-0"] llvm13-0 = ["llvm-plugin/llvm13-0"] @@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] diff --git a/tests/plugins/plugin3/Cargo.toml b/tests/plugins/plugin3/Cargo.toml index 246c5f6..54ddfde 100644 --- a/tests/plugins/plugin3/Cargo.toml +++ b/tests/plugins/plugin3/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] default = ["target-all"] win-link-opt = ["llvm-plugin/win-link-opt"] -llvm10-0 = ["llvm-plugin/llvm10-0"] llvm11-0 = ["llvm-plugin/llvm11-0"] llvm12-0 = ["llvm-plugin/llvm12-0"] llvm13-0 = ["llvm-plugin/llvm13-0"] @@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] diff --git a/tests/plugins/plugin4/Cargo.toml b/tests/plugins/plugin4/Cargo.toml index a024b40..ab7dfa1 100644 --- a/tests/plugins/plugin4/Cargo.toml +++ b/tests/plugins/plugin4/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] default = ["target-all"] win-link-opt = ["llvm-plugin/win-link-opt"] -llvm10-0 = ["llvm-plugin/llvm10-0"] llvm11-0 = ["llvm-plugin/llvm11-0"] llvm12-0 = ["llvm-plugin/llvm12-0"] llvm13-0 = ["llvm-plugin/llvm13-0"] @@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] diff --git a/tests/plugins/plugin5/Cargo.toml b/tests/plugins/plugin5/Cargo.toml index a10c583..3059bdb 100644 --- a/tests/plugins/plugin5/Cargo.toml +++ b/tests/plugins/plugin5/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] default = ["target-all"] win-link-opt = ["llvm-plugin/win-link-opt"] -llvm10-0 = ["llvm-plugin/llvm10-0"] llvm11-0 = ["llvm-plugin/llvm11-0"] llvm12-0 = ["llvm-plugin/llvm12-0"] llvm13-0 = ["llvm-plugin/llvm13-0"] @@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] diff --git a/tests/plugins/plugin6/Cargo.toml b/tests/plugins/plugin6/Cargo.toml index 3a34fc4..76594ca 100644 --- a/tests/plugins/plugin6/Cargo.toml +++ b/tests/plugins/plugin6/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] default = ["target-all"] win-link-opt = ["llvm-plugin/win-link-opt"] -llvm10-0 = ["llvm-plugin/llvm10-0"] llvm11-0 = ["llvm-plugin/llvm11-0"] llvm12-0 = ["llvm-plugin/llvm12-0"] llvm13-0 = ["llvm-plugin/llvm13-0"] @@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] diff --git a/tests/plugins/plugin6/src/lib.rs b/tests/plugins/plugin6/src/lib.rs index c1b54e6..ec4d129 100644 --- a/tests/plugins/plugin6/src/lib.rs +++ b/tests/plugins/plugin6/src/lib.rs @@ -30,6 +30,8 @@ fn plugin_registrar(builder: &mut PassBuilder) { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] builder.add_pipeline_start_ep_callback(|manager, opt| { assert!(matches!(opt, OptimizationLevel::O3)); @@ -44,22 +46,14 @@ fn plugin_registrar(builder: &mut PassBuilder) { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] builder.add_pipeline_early_simplification_ep_callback(|manager, opt| { assert!(matches!(opt, OptimizationLevel::O3)); manager.add_pass(PipelineEarlySimpPass); }); - #[cfg(any( - feature = "llvm11-0", - feature = "llvm12-0", - feature = "llvm13-0", - feature = "llvm14-0", - feature = "llvm15-0", - feature = "llvm16-0", - feature = "llvm17-0", - feature = "llvm18-1", - ))] builder.add_optimizer_last_ep_callback(|manager, opt| { assert!(matches!(opt, OptimizationLevel::O3)); manager.add_pass(OptimizerLastPass); @@ -70,6 +64,8 @@ fn plugin_registrar(builder: &mut PassBuilder) { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] builder.add_optimizer_early_ep_callback(|manager, opt| { assert!(matches!(opt, OptimizationLevel::O3)); diff --git a/tests/plugins/plugin7/Cargo.toml b/tests/plugins/plugin7/Cargo.toml index f9b5ab1..f77b30f 100644 --- a/tests/plugins/plugin7/Cargo.toml +++ b/tests/plugins/plugin7/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] default = ["target-all"] win-link-opt = ["llvm-plugin/win-link-opt"] -llvm10-0 = ["llvm-plugin/llvm10-0"] llvm11-0 = ["llvm-plugin/llvm11-0"] llvm12-0 = ["llvm-plugin/llvm12-0"] llvm13-0 = ["llvm-plugin/llvm13-0"] @@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"] llvm16-0 = ["llvm-plugin/llvm16-0"] llvm17-0 = ["llvm-plugin/llvm17-0"] llvm18-1 = ["llvm-plugin/llvm18-1"] +llvm19-1 = ["llvm-plugin/llvm19-1"] +llvm20-1 = ["llvm-plugin/llvm20-1"] target-x86 = ["llvm-plugin/target-x86"] target-arm = ["llvm-plugin/target-arm"] @@ -40,5 +41,5 @@ target-all = ["llvm-plugin/target-all"] [dependencies] llvm-plugin = { path = "../../../llvm-plugin", default-features = false, features = [ - "macros", + "macros", ] } diff --git a/tests/plugins/plugin7/src/lib.rs b/tests/plugins/plugin7/src/lib.rs index 9baa749..581fb7c 100644 --- a/tests/plugins/plugin7/src/lib.rs +++ b/tests/plugins/plugin7/src/lib.rs @@ -8,6 +8,8 @@ fn plugin_registrar(builder: &mut PassBuilder) { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] builder.add_full_lto_early_ep_callback(|manager, opt| { assert!(matches!(opt, llvm_plugin::OptimizationLevel::O3)); @@ -19,6 +21,8 @@ fn plugin_registrar(builder: &mut PassBuilder) { feature = "llvm16-0", feature = "llvm17-0", feature = "llvm18-1", + feature = "llvm19-1", + feature = "llvm20-1", ))] builder.add_full_lto_last_ep_callback(|manager, opt| { assert!(matches!(opt, llvm_plugin::OptimizationLevel::O3));