From 643dfd97d52e7b0c0dfbe7fd6046de9d43b3daa6 Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Fri, 15 Jul 2022 12:10:18 -0400 Subject: [PATCH] [Libomptarget] Make libomptarget an LLVM library This patch makes libomptarget depend on LLVM libraries to be built. The reason for this is because we already have an implicit dependency on LLVM headers for ELF identification and extraction as well as an optional dependenly on the LLVMSupport library for time tracing information. Furthermore, there are changes in the future that require using more LLVM libraries, and will heavily simplify some future code as well as open up the large amount of useful LLVM libraries to libomptarget. This will make "standalone" builds of `libomptarget' more difficult for vendors wishing to ship their own. This will require a sufficiently new version of LLVM to be installed on the system that should be picked up by the existing handling for the implicit headers. The things this patch changes are as follows: - `libomptarget.so` links against LLVMSupport and LLVMObject - `libomptarget.so` is a symbolic link to `libomptarget.so.15` - If using a shared library build, user applications will depend on LLVM libraries as well - We can now use LLVM resources in Libomptarget. Note that this patch only changes this to apply to libomptarget itself, not the plugins. Additional patches will be necessary for that. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D129875 --- .../Modules/LibomptargetGetDependencies.cmake | 2 +- openmp/libomptarget/src/CMakeLists.txt | 53 ++++++++++------------ 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake index 1f2a506..691822e 100644 --- a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake +++ b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake @@ -26,7 +26,7 @@ include (FindPackageHandleStandardArgs) if (OPENMP_STANDALONE_BUILD) # Complete LLVM package is required for building libomptarget # in an out-of-tree mode. - find_package(LLVM REQUIRED) + find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR}") message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") message(STATUS "Using LLVM in: ${LLVM_DIR}") list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS ${LLVM_INCLUDE_DIRS}) diff --git a/openmp/libomptarget/src/CMakeLists.txt b/openmp/libomptarget/src/CMakeLists.txt index 8de88e5..bc1c2a3 100644 --- a/openmp/libomptarget/src/CMakeLists.txt +++ b/openmp/libomptarget/src/CMakeLists.txt @@ -12,35 +12,30 @@ libomptarget_say("Building offloading runtime library libomptarget.") -set(LIBOMPTARGET_SRC_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/api.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/device.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/interface.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/interop.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/omptarget.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/rtl.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/LegacyAPI.cpp -) +add_llvm_library(omptarget + SHARED + + api.cpp + device.cpp + interface.cpp + interop.cpp + omptarget.cpp + rtl.cpp + LegacyAPI.cpp + + ADDITIONAL_HEADER_DIRS + ${LIBOMPTARGET_INCLUDE_DIR} -set(LIBOMPTARGET_SRC_FILES ${LIBOMPTARGET_SRC_FILES} PARENT_SCOPE) - -# Build libomptarget library with libdl dependency. -add_library(omptarget SHARED ${LIBOMPTARGET_SRC_FILES}) -set_target_properties(omptarget PROPERTIES INSTALL_RPATH "$ORIGIN" BUILD_RPATH "$ORIGIN") -if (OPENMP_ENABLE_LIBOMPTARGET_PROFILING) - # Add LLVMSupport dependency if profiling is enabled. - # Linking with LLVM component libraries also requires - # aligning the compile flags. - llvm_update_compile_flags(omptarget) - target_compile_definitions(omptarget PUBLIC OMPTARGET_PROFILE_ENABLED) - target_link_libraries(omptarget PRIVATE LLVMSupport) -endif() -target_include_directories(omptarget PRIVATE - ${LIBOMPTARGET_INCLUDE_DIR}) -target_link_libraries(omptarget PRIVATE + LINK_COMPONENTS + Support + Object + + LINK_LIBS ${CMAKE_DL_LIBS} - "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports") + "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports" +) + +target_include_directories(omptarget PRIVATE ${LIBOMPTARGET_INCLUDE_DIR}) -# Install libomptarget under the lib destination folder. -install(TARGETS omptarget LIBRARY COMPONENT omptarget - DESTINATION "${OPENMP_INSTALL_LIBDIR}") +# Also install plugin under the standard lib destination folder. +install(TARGETS omptarget LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}") -- 2.7.4