From ed3fd6a42b5dc6d6fd1740311d2dca3615efdeaf Mon Sep 17 00:00:00 2001 From: Jonathan Schwender Date: Sun, 25 Aug 2024 11:32:20 +0800 Subject: [PATCH 1/2] FindRust: Add support for detecting -gnullvm targets. Documentation: https://doc.rust-lang.org/rustc/platform-support/pc-windows-gnullvm.html --- cmake/FindRust.cmake | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/cmake/FindRust.cmake b/cmake/FindRust.cmake index 10b8b194..b2b1f309 100644 --- a/cmake/FindRust.cmake +++ b/cmake/FindRust.cmake @@ -686,13 +686,29 @@ if (NOT Rust_CARGO_TARGET_CACHED) set(_CARGO_ABI msvc) elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" - OR "${CMAKE_CXX_COMPILER_TARGET}" MATCHES "-gnu$" - OR "${CMAKE_C_COMPILER_TARGET}" MATCHES "-gnu$" - OR (NOT CMAKE_CROSSCOMPILING AND "${Rust_DEFAULT_HOST_TARGET}" MATCHES "-gnu$") + OR (NOT CMAKE_CROSSCOMPILING + AND NOT DEFINED CMAKE_CXX_COMPILER_ID + AND NOT DEFINED CMAKE_C_COMPILER_ID + AND "${Rust_DEFAULT_HOST_TARGET}" MATCHES "-gnu$" ) + ) set(_CARGO_ABI gnu) + elseif(("${CMAKE_C_COMPILER_ID}" MATCHES "Clang$" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang$") + AND ("${CMAKE_CXX_COMPILER_TARGET}" MATCHES "-gnu(llvm)?$" + OR "${CMAKE_C_COMPILER_TARGET}" MATCHES "-gnu(llvm)?$") + ) + if("${Rust_VERSION}" VERSION_GREATER_EQUAL "1.79") + set(_CARGO_ABI gnullvm) + else() + message(WARNING "Your selected C/C++ compilers suggest you want to use the -gnullvm" + " rust targets, however your Rust compiler version is ${Rust_VERSION}, which is" + " before the promotion of the gnullvm target to tier2." + " Please either use a more recent rust compiler or manually choose a target " + " triple by specifying `Rust_CARGO_TARGET` manually." + ) + endif() elseif(NOT "${CMAKE_CROSSCOMPILING}" AND "${Rust_DEFAULT_HOST_TARGET}" MATCHES "-msvc$") - # We first check if the gnu branch matches to ensure this fallback is only used + # We first check if the gnu branches match to ensure this fallback is only used # if no compiler is enabled. set(_CARGO_ABI msvc) else() From b5983d0d0877a2695fcfbbfd3c117f17fba15824 Mon Sep 17 00:00:00 2001 From: Jonathan Schwender Date: Sun, 25 Aug 2024 15:35:15 +0800 Subject: [PATCH 2/2] Treat windows gnullvm same as gnu for implib name The implib filename is exactly the same as for gnu targets. However, with current cargo versions, cargo will not expose the implib on gnullvm targets and instead leaves the implib in the `deps` subdirectory. --- cmake/Corrosion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Corrosion.cmake b/cmake/Corrosion.cmake index 3ad5bc17..f5132ead 100644 --- a/cmake/Corrosion.cmake +++ b/cmake/Corrosion.cmake @@ -355,7 +355,7 @@ function(_corrosion_add_library_target) set(is_windows TRUE) if(Rust_CARGO_TARGET_ENV STREQUAL "msvc") set(is_windows_msvc TRUE) - elseif(Rust_CARGO_TARGET_ENV STREQUAL "gnu") + elseif(Rust_CARGO_TARGET_ENV STREQUAL "gnu" OR Rust_CARGO_TARGET_ENV STREQUAL "gnullvm") set(is_windows_gnu TRUE) endif() elseif(Rust_CARGO_TARGET_OS STREQUAL "darwin")