diff --git a/openmp/libomptarget/CMakeLists.txt b/openmp/libomptarget/CMakeLists.txt --- a/openmp/libomptarget/CMakeLists.txt +++ b/openmp/libomptarget/CMakeLists.txt @@ -86,7 +86,8 @@ "Path to folder containing omp.h") set(LIBOMPTARGET_OPENMP_HOST_RTL_FOLDER "${LIBOMP_LIBRARY_DIR}" CACHE STRING "Path to folder containing libomp.so, and libLLVMSupport.so with profiling enabled") - +set(LIBOMPTARGET_LLVM_LIBRARY_DIR "${LLVM_LIBRARY_DIR}" CACHE STRING + "Path to folder containing llvm library libomptarget.so") # Build offloading plugins and device RTLs if they are available. add_subdirectory(plugins) diff --git a/openmp/libomptarget/src/CMakeLists.txt b/openmp/libomptarget/src/CMakeLists.txt --- a/openmp/libomptarget/src/CMakeLists.txt +++ b/openmp/libomptarget/src/CMakeLists.txt @@ -12,35 +12,32 @@ 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 -set(LIBOMPTARGET_SRC_FILES ${LIBOMPTARGET_SRC_FILES} PARENT_SCOPE) + ADDITIONAL_HEADER_DIRS + ${LIBOMPTARGET_INCLUDE_DIR} -# 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" + NO_INSTALL_RPATH +) +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}") +# 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}/..") +install(TARGETS omptarget LIBRARY COMPONENT omptarget DESTINATION "${OPENMP_INSTALL_LIBDIR}") diff --git a/openmp/libomptarget/test/lit.cfg b/openmp/libomptarget/test/lit.cfg --- a/openmp/libomptarget/test/lit.cfg +++ b/openmp/libomptarget/test/lit.cfg @@ -98,6 +98,7 @@ else: # Unices config.test_flags += " -Wl,-rpath," + config.library_dir config.test_flags += " -Wl,-rpath," + config.omp_host_rtl_directory + config.test_flags += " -Wl,-rpath," + config.llvm_lib_directory if config.cuda_libdir: config.test_flags += " -Wl,-rpath," + config.cuda_libdir if config.libomptarget_current_target.startswith('amdgcn'): diff --git a/openmp/libomptarget/test/lit.site.cfg.in b/openmp/libomptarget/test/lit.site.cfg.in --- a/openmp/libomptarget/test/lit.site.cfg.in +++ b/openmp/libomptarget/test/lit.site.cfg.in @@ -12,6 +12,7 @@ config.library_dir = "@LIBOMPTARGET_LIBRARY_DIR@" config.omp_header_directory = "@LIBOMPTARGET_OPENMP_HEADER_FOLDER@" config.omp_host_rtl_directory = "@LIBOMPTARGET_OPENMP_HOST_RTL_FOLDER@" +config.llvm_lib_directory = "@LIBOMPTARGET_LLVM_LIBRARY_DIR@" config.operating_system = "@CMAKE_SYSTEM_NAME@" config.libomptarget_all_targets = "@LIBOMPTARGET_ALL_TARGETS@".split() config.libomptarget_current_target = "@CURRENT_TARGET@"