diff options
author | Joseph Huber <huberjn@outlook.com> | 2024-01-22 07:27:06 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-22 07:27:06 -0600 |
commit | b689b4fe55103a04eac847964e126b6048b89ae0 (patch) | |
tree | 3f980569b78f1254704505a7391e8d7e498974ba | |
parent | ab1b4991cfacfe04a579bf0b0ff4a704a6224d4a (diff) | |
download | llvm-b689b4fe55103a04eac847964e126b6048b89ae0.zip llvm-b689b4fe55103a04eac847964e126b6048b89ae0.tar.gz llvm-b689b4fe55103a04eac847964e126b6048b89ae0.tar.bz2 |
[LLVM][CMake] Add ffi_static target for the FFI static library (#78779)
Summary:
This patch is an attempt to make the `find_package(FFI)` support in LLVM
prefer to provide the static library version if present. This is
currently
an optional library for building `libffi`, and its presence implies that
it should likely be used. This patch is an attempt to fix some problems
observed with testing programs linked against `libffi` on many different
systems that could have conflicting paths. Linking it statically
prevents this.
This patch adds the `ffi_static` target for this library.
-rw-r--r-- | llvm/cmake/modules/FindFFI.cmake | 14 | ||||
-rw-r--r-- | openmp/libomptarget/plugins-nextgen/CMakeLists.txt | 13 |
2 files changed, 20 insertions, 7 deletions
diff --git a/llvm/cmake/modules/FindFFI.cmake b/llvm/cmake/modules/FindFFI.cmake index c9ba104..8e67c5d 100644 --- a/llvm/cmake/modules/FindFFI.cmake +++ b/llvm/cmake/modules/FindFFI.cmake @@ -15,6 +15,7 @@ # FFI_FOUND # FFI_INCLUDE_DIRS # FFI_LIBRARIES +# FFI_STATIC_LIBRARIES # HAVE_FFI_CALL # # HAVE_FFI_H or HAVE_FFI_FFI_H is defined depending on the ffi.h include path. @@ -34,7 +35,8 @@ else() endif() endif() -find_library(FFI_LIBRARIES ffi PATHS ${FFI_LIBRARY_DIR}) +find_library(FFI_LIBRARIES NAMES ffi PATHS ${FFI_LIBRARY_DIR}) +find_library(FFI_STATIC_LIBRARIES NAMES libffi.a PATHS ${FFI_LIBRARY_DIR}) if(FFI_LIBRARIES) include(CMakePushCheckState) @@ -76,6 +78,7 @@ find_package_handle_standard_args(FFI ${required_includes} HAVE_FFI_CALL) mark_as_advanced(FFI_LIBRARIES + FFI_STATIC_LIBRARIES FFI_INCLUDE_DIRS HAVE_FFI_CALL FFI_HEADER @@ -83,11 +86,18 @@ mark_as_advanced(FFI_LIBRARIES HAVE_FFI_FFI_H) if(FFI_FOUND) - if(NOT TARGET FFI::ffi) + if(NOT TARGET FFI::ffi AND FFI_LIBRARIES) add_library(FFI::ffi UNKNOWN IMPORTED) set_target_properties(FFI::ffi PROPERTIES IMPORTED_LOCATION "${FFI_LIBRARIES}") if(FFI_INCLUDE_DIRS) set_target_properties(FFI::ffi PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFI_INCLUDE_DIRS}") endif() endif() + if(NOT TARGET FFI::ffi_static AND FFI_STATIC_LIBRARIES) + add_library(FFI::ffi_static UNKNOWN IMPORTED) + set_target_properties(FFI::ffi_static PROPERTIES IMPORTED_LOCATION "${FFI_STATIC_LIBRARIES}") + if(FFI_INCLUDE_DIRS) + set_target_properties(FFI::ffi_static PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFI_INCLUDE_DIRS}") + endif() + endif() endif() diff --git a/openmp/libomptarget/plugins-nextgen/CMakeLists.txt b/openmp/libomptarget/plugins-nextgen/CMakeLists.txt index 9b4e945..f5fc3b6 100644 --- a/openmp/libomptarget/plugins-nextgen/CMakeLists.txt +++ b/openmp/libomptarget/plugins-nextgen/CMakeLists.txt @@ -49,11 +49,14 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$") ) if(LIBOMPTARGET_DEP_LIBFFI_FOUND) - libomptarget_say("Building ${tmachine_libname} plugin linked with libffi") - target_link_libraries("omptarget.rtl.${tmachine_libname}" PRIVATE - ${FFI_LIBRARIES}) - target_include_directories("omptarget.rtl.${tmachine_libname}" PRIVATE - ${FFI_INCLUDE_DIRS}) + libomptarget_say("Building ${tmachine_libname} plugin linked with libffi") + if(FFI_STATIC_LIBRARIES) + target_link_libraries( + "omptarget.rtl.${tmachine_libname}" PRIVATE FFI::ffi_static) + else() + target_link_libraries( + "omptarget.rtl.${tmachine_libname}" PRIVATE FFI::ffi) + endif() else() libomptarget_say("Building ${tmachine_libname} plugie for dlopened libffi") target_sources("omptarget.rtl.${tmachine_libname}" PRIVATE |