Skip to content

Commit

Permalink
[OpenMP] Only enable version script if supported
Browse files Browse the repository at this point in the history
The linker flag `--version-script` may not be supported by all linkers, such as
macOS's linker. `libomp` is already capable of detecting whether the linker supports
it and append the linker flag accordingly. Since currently we assume `libomptarget`
only works on Linux, we don't do the check accordingly. This patch simply adds
the check before adding it to linker flag. This will be the first patch to make
OpenMP target offloading work on macOS. Note that CMake files in `plugins` are
not touched before they are going to be removed pretty soon anyway.

Reviewed By: jhuber6

Differential Revision: https://reviews.llvm.org/D149555
  • Loading branch information
shiltian committed May 1, 2023
1 parent e876ba5 commit fb53a70
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 6 deletions.
6 changes: 5 additions & 1 deletion openmp/libomptarget/plugins-nextgen/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,15 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$")
PluginInterface
${LIBOMPTARGET_DEP_LIBFFI_LIBRARIES}
${OPENMP_PTHREAD_LIB}
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports"

NO_INSTALL_RPATH
)

if (LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
target_link_libraries("omptarget.rtl.${tmachine_libname}.nextgen" PRIVATE
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports")
endif()

# Install plugin under the lib destination folder.
install(TARGETS "omptarget.rtl.${tmachine_libname}.nextgen"
LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}")
Expand Down
6 changes: 5 additions & 1 deletion openmp/libomptarget/plugins-nextgen/amdgpu/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,16 @@ add_llvm_library(omptarget.rtl.amdgpu.nextgen SHARED
PluginInterface
${LIBOMPTARGET_DEP_LIBRARIES}
${OPENMP_PTHREAD_LIB}
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports"
${LDFLAGS_UNDEFINED}

NO_INSTALL_RPATH
)

if (LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
target_link_libraries(omptarget.rtl.amdgpu.nextgen PRIVATE
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports")
endif()

target_include_directories(
omptarget.rtl.amdgpu.nextgen
PRIVATE
Expand Down
7 changes: 6 additions & 1 deletion openmp/libomptarget/plugins-nextgen/cuda/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,16 @@ add_llvm_library(omptarget.rtl.cuda.nextgen SHARED
MemoryManager
PluginInterface
${OPENMP_PTHREAD_LIB}
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports,-z,defs"

NO_INSTALL_RPATH
)

if (LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
target_link_libraries(omptarget.rtl.cuda.nextgen PRIVATE
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports,-z,defs")
endif()


if(LIBOMPTARGET_DEP_CUDA_FOUND AND NOT LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA)
libomptarget_say("Building CUDA plugin linked against libcuda")
target_link_libraries(omptarget.rtl.cuda.nextgen PRIVATE CUDA::cuda_driver)
Expand Down
8 changes: 5 additions & 3 deletions openmp/libomptarget/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@ add_llvm_library(omptarget
Support
Object

LINK_LIBS
PRIVATE
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports"
NO_INSTALL_RPATH
)
target_include_directories(omptarget PRIVATE ${LIBOMPTARGET_INCLUDE_DIR})

if (LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
target_link_libraries(omptarget PRIVATE
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports")
endif()

# libomptarget.so needs to be aware of where the plugins live as they
# are now separated in the build directory.
set_target_properties(omptarget PROPERTIES INSTALL_RPATH "$ORIGIN" BUILD_RPATH "$ORIGIN:${CMAKE_CURRENT_BINARY_DIR}/..")
Expand Down

0 comments on commit fb53a70

Please sign in to comment.