From fec6d6c0f1645026503f0f26ab45320147fbcb54 Mon Sep 17 00:00:00 2001 From: Felix-El <50841330+felix-el@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:13:42 +0200 Subject: [PATCH] Improvements to corrosion_link_libraries() - Allow linking by full path and non-target library name Co-authored-by: Jonathan Schwender --- cmake/Corrosion.cmake | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/cmake/Corrosion.cmake b/cmake/Corrosion.cmake index 37f72725..0157968b 100644 --- a/cmake/Corrosion.cmake +++ b/cmake/Corrosion.cmake @@ -1141,7 +1141,6 @@ function(corrosion_link_libraries target_name) return() endif() endif() - add_dependencies(_cargo-build_${target_name} ${ARGN}) foreach(library ${ARGN}) set_property( TARGET _cargo-build_${target_name} @@ -1150,8 +1149,19 @@ function(corrosion_link_libraries target_name) $ ) - corrosion_add_target_local_rustflags(${target_name} "-L$") - corrosion_add_target_local_rustflags(${target_name} "-l$") + if (TARGET ${library}) + corrosion_add_target_local_rustflags(${target_name} + "-L$" + "-l$" + ) + add_dependencies(_cargo-build_${target_name} ${library}) + elseif(IS_ABSOLUTE ${library}) + # Linking via full path (See https://doc.rust-lang.org/rustc/command-line-arguments.html#linking-modifiers-verbatim) + corrosion_add_target_local_rustflags(${target_name} "-Clink-arg=${library}") + else() + # We have to assume ${library} is a non-CMake library name + corrosion_add_target_local_rustflags(${target_name} "-l${library}") + endif() endforeach() endfunction()