Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:MaxxedSUSE:Compiler-Tools-15.6
llvm12
openmp-Remove-omptarget-soname.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File openmp-Remove-omptarget-soname.patch of Package llvm12
From f2f88f3e7a110b2d4d9da446e45f0dba040e62b2 Mon Sep 17 00:00:00 2001 From: Vyacheslav Zakharin <vyacheslav.p.zakharin@intel.com> Date: Fri, 7 May 2021 12:42:04 -0700 Subject: [PATCH] An attempt to abandon omptarget out-of-tree builds. I want to start using LLVM component libraries in libomptarget to stop duplicating implementations already available in LLVM (e.g. LLVMObject, LLVMSupport, etc.). Without relying on LLVM in all libomptarget builds one has to provide fallback implementation for each used LLVM feature. This is an attempt to stop supporting out-of-llvm-tree builds of libomptarget. I understand that I may need to revert this, if this affects downstream projects in a bad way. Differential Revision: https://reviews.llvm.org/D101509 NOTE: Rebased past e.g. https://reviews.llvm.org/D95572 and other changes. --- openmp/CMakeLists.txt | 16 ------- openmp/README.rst | 9 ++++ .../Modules/LibomptargetGetDependencies.cmake | 44 ++++++++--------- .../deviceRTLs/amdgcn/CMakeLists.txt | 47 +++++++------------ openmp/libomptarget/src/CMakeLists.txt | 32 +++++-------- 5 files changed, 57 insertions(+), 91 deletions(-) diff --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt index b8a2822877e3..45c400351f32 100644 --- a/openmp/CMakeLists.txt +++ b/openmp/CMakeLists.txt @@ -39,8 +39,6 @@ else() set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) endif() - - list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS ${LLVM_MAIN_INCLUDE_DIR} ${LLVM_BINARY_DIR}/include) endif() # Check and set up common compiler flags. @@ -63,20 +61,6 @@ if (APPLE OR WIN32 OR NOT OPENMP_HAVE_STD_CPP14_FLAG) set(ENABLE_LIBOMPTARGET OFF) endif() -# Attempt to locate LLVM source, required by libomptarget -if (NOT LIBOMPTARGET_LLVM_INCLUDE_DIRS) - if (LLVM_MAIN_INCLUDE_DIR) - list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS ${LLVM_MAIN_INCLUDE_DIR}) - elseif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../llvm/include) - list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../llvm/include) - endif() -endif() - -if (NOT LIBOMPTARGET_LLVM_INCLUDE_DIRS) - message(STATUS "Missing definition for LIBOMPTARGET_LLVM_INCLUDE_DIRS, disabling libomptarget") - set(ENABLE_LIBOMPTARGET OFF) -endif() - option(OPENMP_ENABLE_LIBOMPTARGET "Enable building libomptarget for offloading." ${ENABLE_LIBOMPTARGET}) option(OPENMP_ENABLE_LIBOMPTARGET_PROFILING "Enable time profiling for libomptarget." diff --git a/openmp/README.rst b/openmp/README.rst index 59301c513d59..bd8071f43f95 100644 --- a/openmp/README.rst +++ b/openmp/README.rst @@ -243,6 +243,15 @@ These flags are **appended**, they do not overwrite any of the preset flags. Options for ``libomptarget`` ---------------------------- +An installed LLVM package is a prerequisite for building ``libomptarget`` +library. So ``libomptarget`` may only be built in two cases: + +- As a project of a regular LLVM build via **LLVM_ENABLE_PROJECTS**, + **LLVM_EXTERNAL_PROJECTS**, or **LLVM_ENABLE_RUNTIMES** or +- as a standalone project build that uses a pre-installed LLVM package. + In this mode one has to make sure that the default CMake + ``find_package(LLVM)`` call `succeeds <https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure>`_. + **LIBOMPTARGET_OPENMP_HEADER_FOLDER** = ``""`` Path of the folder that contains ``omp.h``. This is required for testing out-of-tree builds. diff --git a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake index bc3c5d2d4a41..73ab8023773c 100644 --- a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake +++ b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake @@ -19,6 +19,25 @@ include (FindPackageHandleStandardArgs) +################################################################################ +# Looking for LLVM... +################################################################################ + +if (OPENMP_STANDALONE_BUILD) + # Complete LLVM package is required for building libomptarget + # in an out-of-tree mode. + find_package(LLVM REQUIRED) + message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") + message(STATUS "Using LLVM in: ${LLVM_DIR}") + list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS ${LLVM_INCLUDE_DIRS}) + list(APPEND CMAKE_MODULE_PATH ${LLVM_CMAKE_DIR}) + include(AddLLVM) +else() + list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS + ${LLVM_MAIN_INCLUDE_DIR} ${LLVM_BINARY_DIR}/include + ) +endif() + ################################################################################ # Looking for libelf... ################################################################################ diff --git a/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt b/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt index ce5e5b820d0f..c6183c56c9da 100644 --- a/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt +++ b/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt @@ -10,33 +10,20 @@ # ##===----------------------------------------------------------------------===## -find_package(LLVM QUIET CONFIG - PATHS - $ENV{AOMP} - $ENV{HOME}/rocm/aomp - /opt/rocm/aomp - /usr/lib/rocm/aomp - ${LIBOMPTARGET_NVPTX_CUDA_COMPILER_DIR} - ${LIBOMPTARGET_NVPTX_CUDA_LINKER_DIR} - ${CMAKE_CXX_COMPILER_DIR} - NO_DEFAULT_PATH) - -if (LLVM_DIR) - libomptarget_say("Found LLVM ${LLVM_PACKAGE_VERSION}. Configure: ${LLVM_DIR}/LLVMConfig.cmake") -else() - libomptarget_say("Not building AMDGCN device RTL: AOMP not found") - return() -endif() - -set(AOMP_INSTALL_PREFIX ${LLVM_INSTALL_PREFIX}) - -if (AOMP_INSTALL_PREFIX) - set(AOMP_BINDIR ${AOMP_INSTALL_PREFIX}/bin) -else() - set(AOMP_BINDIR ${LLVM_BUILD_BINARY_DIR}/bin) -endif() - -libomptarget_say("Building AMDGCN device RTL. LLVM_COMPILER_PATH=${AOMP_BINDIR}") +if (LLVM_DIR) + # Builds that use pre-installed LLVM have LLVM_DIR set. + find_program(CLANG_TOOL clang PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH) + find_program(LINK_TOOL llvm-link PATHS ${LLVM_TOOLS_BINARY_DIR} + NO_DEFAULT_PATH) + find_program(OPT_TOOL opt PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH) + libomptarget_say("Building AMDGCN device RTL. Using clang: ${CLANG_TOOL}") +else() + # LLVM in-tree builds may use CMake target names to discover the tools. + set(CLANG_TOOL $<TARGET_FILE:clang>) + set(LINK_TOOL $<TARGET_FILE:llvm-link>) + set(OPT_TOOL $<TARGET_FILE:opt>) + libomptarget_say("Building AMDGCN device RTL. Using clang from in-tree build") +endif() project(omptarget-amdgcn) @@ -109,7 +96,7 @@ if (DEFINED LIBOMPTARGET_AMDGCN_GFXLIST) endif() macro(add_cuda_bc_library) - set(cu_cmd ${AOMP_BINDIR}/clang++ + set(cu_cmd ${CLANG_TOOL} -std=c++14 -fcuda-rdc -fvisibility=default @@ -145,7 +132,7 @@ macro(add_cuda_bc_library) add_custom_command( OUTPUT linkout.cuda.${mcpu}.bc - COMMAND ${AOMP_BINDIR}/llvm-link ${bc1_files} -o linkout.cuda.${mcpu}.bc + COMMAND ${LINK_TOOL} ${bc1_files} -o linkout.cuda.${mcpu}.bc DEPENDS ${bc1_files}) list(APPEND bc_files linkout.cuda.${mcpu}.bc) @@ -160,7 +147,7 @@ foreach(mcpu ${mcpus}) set(bc_libname lib${libname}-${mcpu}.bc) add_custom_command( OUTPUT ${bc_libname} - COMMAND ${AOMP_BINDIR}/llvm-link ${bc_files} | ${AOMP_BINDIR}/opt --always-inline -o ${OUTPUTDIR}/${bc_libname} + COMMAND ${LINK_TOOL} ${bc_files} | ${OPT_TOOL} --always-inline -o ${OUTPUTDIR}/${bc_libname} DEPENDS ${bc_files}) add_custom_target(lib${libname}-${mcpu} ALL DEPENDS ${bc_libname}) diff --git a/openmp/libomptarget/src/CMakeLists.txt b/openmp/libomptarget/src/CMakeLists.txt index 15e6c3bbaf1f..46387e203bd0 100644 --- a/openmp/libomptarget/src/CMakeLists.txt +++ b/openmp/libomptarget/src/CMakeLists.txt @@ -24,29 +24,19 @@ set(LIBOMPTARGET_SRC_FILES ${LIBOMPTARGET_SRC_FILES} PARENT_SCOPE) include_directories(${LIBOMPTARGET_LLVM_INCLUDE_DIRS}) -# Build libomptarget library with libdl dependency. Add LLVMSupport -# dependency if building in-tree with profiling enabled. -if(OPENMP_STANDALONE_BUILD OR (NOT OPENMP_ENABLE_LIBOMPTARGET_PROFILING)) - add_library(omptarget SHARED ${LIBOMPTARGET_SRC_FILES}) - target_link_libraries(omptarget - ${CMAKE_DL_LIBS} - "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports") -else() - set(LLVM_LINK_COMPONENTS - Support - ) - add_llvm_library(omptarget SHARED ${LIBOMPTARGET_SRC_FILES} - LINK_LIBS ${CMAKE_DL_LIBS} - "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports" - ) +# Build libomptarget library with libdl dependency. +add_library(omptarget SHARED ${LIBOMPTARGET_SRC_FILES}) +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() - -# libomptarget needs to be set separately because add_llvm_library doesn't -# conform with location configuration of its parent scope. -set_target_properties(omptarget - PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${LIBOMPTARGET_LIBRARY_DIR}) +target_link_libraries(omptarget PRIVATE + ${CMAKE_DL_LIBS} + "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports") # Install libomptarget under the lib destination folder. install(TARGETS omptarget LIBRARY COMPONENT omptarget -- 2.37.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor