From 90d1191d2da8531ec479476bd4b38bd3fa2c4cdd Mon Sep 17 00:00:00 2001 From: Ethan Stewart Date: Fri, 24 Oct 2025 17:35:25 -0500 Subject: [PATCH] [openmp][offload] - Remove usage of OPENMP_STANDALONE_BUILD 'Standalone' builds will now utilize the llvm-project/runtimes cmake. --- offload/CMakeLists.txt | 189 ++++-------------- .../Modules/LibomptargetGetDependencies.cmake | 35 +--- offload/cmake/OpenMPTesting.cmake | 98 ++++----- offload/test/CMakeLists.txt | 2 +- openmp/CMakeLists.txt | 140 ++++--------- openmp/cmake/OpenMPTesting.cmake | 97 ++++----- openmp/libompd/test/ompt_plugin.h | 9 - openmp/runtime/CMakeLists.txt | 136 +++++-------- openmp/runtime/src/CMakeLists.txt | 8 +- openmp/tools/omptest/CMakeLists.txt | 2 +- 10 files changed, 210 insertions(+), 506 deletions(-) diff --git a/offload/CMakeLists.txt b/offload/CMakeLists.txt index 82ebdf84019a5..08fc30a70feec 100644 --- a/offload/CMakeLists.txt +++ b/offload/CMakeLists.txt @@ -12,14 +12,6 @@ if(DEFINED LIBOMP_INSTALL_RPATH) set(CMAKE_INSTALL_RPATH "${LIBOMP_INSTALL_RPATH}") endif() -# Permit redefining OPENMP_STANDALONE_BUILD when doing a runtimes build. -if (OPENMP_STANDALONE_BUILD OR "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") - set(OPENMP_STANDALONE_BUILD TRUE) - project(offload C CXX ASM) -else() - set(OPENMP_STANDALONE_BUILD FALSE) -endif() - if(LIBOMPTARGET_NO_SANITIZER_AMDGPU) set(SANITIZER_AMDGPU FALSE) endif() @@ -38,24 +30,15 @@ endif() set(OFFLOAD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -if(OPENMP_STANDALONE_BUILD) - set(OFFLOAD_LIBDIR_SUFFIX "" CACHE STRING - "Suffix of lib installation directory, e.g. 64 => lib64") - set(OFFLOAD_INSTALL_LIBDIR "lib${OFFLOAD_LIBDIR_SUFFIX}" CACHE STRING - "Path where built offload libraries should be installed.") - include(GNUInstallDirs) - set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}") +include(GetClangResourceDir) +get_clang_resource_dir(LIBOMP_HEADERS_INSTALL_PATH SUBDIR include) +# When building in tree we install the runtime according to the LLVM settings. +if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE) + set(OFFLOAD_INSTALL_LIBDIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE STRING + "Path where built offload libraries should be installed.") else() - include(GetClangResourceDir) - get_clang_resource_dir(LIBOMP_HEADERS_INSTALL_PATH SUBDIR include) - # When building in tree we install the runtime according to the LLVM settings. - if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE) - set(OFFLOAD_INSTALL_LIBDIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE STRING - "Path where built offload libraries should be installed.") - else() - set(OFFLOAD_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}" CACHE STRING - "Path where built offload libraries should be installed.") - endif() + set(OFFLOAD_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}" CACHE STRING + "Path where built offload libraries should be installed.") endif() set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) @@ -71,69 +54,38 @@ list(INSERT CMAKE_MODULE_PATH 0 "${LLVM_COMMON_CMAKE_UTILS}/Modules" ) -if (OPENMP_STANDALONE_BUILD) - # CMAKE_BUILD_TYPE was not set, default to Release. - if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) - endif() +set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR}) +# If building in tree, we honor the same install suffix LLVM uses. +set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}") - # Group common settings. - set(OPENMP_ENABLE_WERROR FALSE CACHE BOOL - "Enable -Werror flags to turn warnings into errors for supporting compilers.") - set(OPENMP_LIBDIR_SUFFIX "" CACHE STRING - "Suffix of lib installation directory, e.g. 64 => lib64") - # Do not use OPENMP_LIBDIR_SUFFIX directly, use OPENMP_INSTALL_LIBDIR. - set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}") - - # Used by llvm_add_tool() and tests. - set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}) - - # Group test settings. - set(OPENMP_TEST_C_COMPILER ${CMAKE_C_COMPILER} CACHE STRING - "C compiler to use for testing OpenMP runtime libraries.") - set(OPENMP_TEST_CXX_COMPILER ${CMAKE_CXX_COMPILER} CACHE STRING - "C++ compiler to use for testing OpenMP runtime libraries.") - set(OPENMP_TEST_Fortran_COMPILER ${CMAKE_Fortran_COMPILER} CACHE STRING - "FORTRAN compiler to use for testing OpenMP runtime libraries.") - set(OPENMP_LLVM_TOOLS_DIR "" CACHE PATH "Path to LLVM tools for testing.") - - set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") - set(CMAKE_CXX_STANDARD_REQUIRED NO) - set(CMAKE_CXX_EXTENSIONS NO) +if (NOT MSVC) + set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) else() - set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR}) - # If building in tree, we honor the same install suffix LLVM uses. - set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}") - - if (NOT MSVC) - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) - else() - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) - endif() - - # Check for flang - if (NOT MSVC) - set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang) - else() - set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang.exe) - endif() + set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) +endif() - # Set fortran test compiler if flang is found - if (EXISTS "${OPENMP_TEST_Fortran_COMPILER}") - message("Using local flang build at ${OPENMP_TEST_Fortran_COMPILER}") - else() - unset(OPENMP_TEST_Fortran_COMPILER) - endif() +# Check for flang +if (NOT MSVC) + set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang) +else() + set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang.exe) +endif() - # If not standalone, set CMAKE_CXX_STANDARD but don't set the global cache value, - # only set it locally for OpenMP. - set(CMAKE_CXX_STANDARD 17) - set(CMAKE_CXX_STANDARD_REQUIRED NO) - set(CMAKE_CXX_EXTENSIONS NO) +# Set fortran test compiler if flang is found +if (EXISTS "${OPENMP_TEST_Fortran_COMPILER}") + message("Using local flang build at ${OPENMP_TEST_Fortran_COMPILER}") +else() + unset(OPENMP_TEST_Fortran_COMPILER) endif() +# If not standalone, set CMAKE_CXX_STANDARD but don't set the global cache value, +# only set it locally for OpenMP. +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED NO) +set(CMAKE_CXX_EXTENSIONS NO) + # Emit a warning for people who haven't updated their build. if(NOT "openmp" IN_LIST RUNTIMES_amdgcn-amd-amdhsa_LLVM_ENABLE_RUNTIMES AND NOT "openmp" IN_LIST RUNTIMES_nvptx64-nvidia-cuda_LLVM_ENABLE_RUNTIMES) @@ -149,6 +101,10 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBOMPTARGET_LIBRARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBOMPTARGET_LIBRARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBOMPTARGET_LIBRARY_DIR}) +if(USE_LIBOMPTARGET_LIBRARY_DIR) + set(LLVM_LIBRARY_OUTPUT_INTDIR ${LIBOMPTARGET_LIBRARY_DIR}) +endif() + if(NOT LLVM_LIBRARY_OUTPUT_INTDIR) set(LIBOMPTARGET_INTDIR ${LIBOMPTARGET_LIBRARY_DIR}) else() @@ -296,65 +252,6 @@ if (LIBOMPTARGET_USE_LTO) list(APPEND offload_link_flags ${CMAKE_CXX_COMPILE_OPTIONS_IPO}) endif() -if(OPENMP_STANDALONE_BUILD) - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - execute_process( - OUTPUT_STRIP_TRAILING_WHITESPACE - COMMAND ${CMAKE_CXX_COMPILER} --print-resource-dir - RESULT_VARIABLE COMMAND_RETURN_CODE - OUTPUT_VARIABLE COMPILER_RESOURCE_DIR - ) - endif() - - set(LIBOMP_HAVE_OMPT_SUPPORT FALSE) - set(LIBOMP_OMPT_SUPPORT FALSE) - - find_path ( - LIBOMP_OMP_TOOLS_INCLUDE_DIR - NAMES - omp-tools.h - HINTS - ${COMPILER_RESOURCE_DIR}/include - ${CMAKE_INSTALL_PREFIX}/include - ) - - if(LIBOMP_OMP_TOOLS_INCLUDE_DIR) - set(LIBOMP_HAVE_OMPT_SUPPORT TRUE) - set(LIBOMP_OMPT_SUPPORT TRUE) - endif() - - # LLVM_LIBRARY_DIRS set by find_package(LLVM) in LibomptargetGetDependencies - find_library ( - LIBOMP_STANDALONE - NAMES - omp - HINTS - ${CMAKE_INSTALL_PREFIX}/lib - ${LLVM_LIBRARY_DIRS} - REQUIRED - ) - - find_path ( - LIBOMP_INCLUDE_DIR - NAMES - omp.h - HINTS - ${COMPILER_RESOURCE_DIR}/include - ${CMAKE_INSTALL_PREFIX}/include - ) - - get_filename_component(LIBOMP_LIBRARY_DIR ${LIBOMP_STANDALONE} DIRECTORY) - - set(OPENMP_TEST_FLAGS "" CACHE STRING - "Extra compiler flags to send to the test compiler.") - set(OPENMP_TEST_OPENMP_FLAGS ${OPENMP_TEST_COMPILER_OPENMP_FLAGS} CACHE STRING - "OpenMP compiler flag to use for testing OpenMP runtime libraries.") - set(LIBOMPTARGET_OPENMP_HEADER_FOLDER "${LIBOMP_INCLUDE_DIR}" CACHE STRING - "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") -endif() - macro(pythonize_bool var) if (${var}) set(${var} True) @@ -363,14 +260,6 @@ else() endif() endmacro() -if(OPENMP_STANDALONE_BUILD OR TARGET omp) - # Check LIBOMP_HAVE_VERSION_SCRIPT_FLAG - include(LLVMCheckCompilerLinkerFlag) - if(NOT APPLE) - llvm_check_compiler_linker_flag(C "-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/../openmp/runtime/src/exports_test_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG) - endif() -endif() - # OMPT support for libomptarget # Follow host OMPT support and check if host support has been requested. # LIBOMP_HAVE_OMPT_SUPPORT indicates whether host OMPT support has been implemented. @@ -418,7 +307,7 @@ if(LLVM_DIR) 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) -elseif (LLVM_TOOL_CLANG_BUILD AND NOT CMAKE_CROSSCOMPILING AND NOT OPENMP_STANDALONE_BUILD) +elseif (LLVM_TOOL_CLANG_BUILD AND NOT CMAKE_CROSSCOMPILING) # LLVM in-tree builds may use CMake target names to discover the tools. set(CLANG_TOOL $) set(CLANG_OFFLOAD_BUNDLER_TOOL $) diff --git a/offload/cmake/Modules/LibomptargetGetDependencies.cmake b/offload/cmake/Modules/LibomptargetGetDependencies.cmake index 456e926e68dc3..c75abec1905b9 100644 --- a/offload/cmake/Modules/LibomptargetGetDependencies.cmake +++ b/offload/cmake/Modules/LibomptargetGetDependencies.cmake @@ -10,31 +10,16 @@ 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) - if(TARGET omptarget) - message(FATAL_ERROR "CMake target 'omptarget' already exists. " - "Use an LLVM installation that doesn't expose its 'omptarget' target.") - endif() -else() - # Note that OPENMP_STANDALONE_BUILD is FALSE, when - # openmp is built with -DLLVM_ENABLE_RUNTIMES="openmp" vs - # -DLLVM_ENABLE_PROJECTS="openmp", but openmp build - # is actually done as a standalone project build with many - # LLVM CMake variables propagated to it. - list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS - ${LLVM_MAIN_INCLUDE_DIR} ${LLVM_BINARY_DIR}/include - ) - message(STATUS - "Using LLVM include directories: ${LIBOMPTARGET_LLVM_INCLUDE_DIRS}") -endif() +# Note that OPENMP_STANDALONE_BUILD is FALSE, when +# openmp is built with -DLLVM_ENABLE_RUNTIMES="openmp" vs +# -DLLVM_ENABLE_PROJECTS="openmp", but openmp build +# is actually done as a standalone project build with many +# LLVM CMake variables propagated to it. +list(APPEND LIBOMPTARGET_LLVM_INCLUDE_DIRS + ${LLVM_MAIN_INCLUDE_DIR} ${LLVM_BINARY_DIR}/include + ) +message(STATUS + "Using LLVM include directories: ${LIBOMPTARGET_LLVM_INCLUDE_DIRS}") ################################################################################ # Looking for libffi... diff --git a/offload/cmake/OpenMPTesting.cmake b/offload/cmake/OpenMPTesting.cmake index f8c892870a3d5..66efa34324867 100644 --- a/offload/cmake/OpenMPTesting.cmake +++ b/offload/cmake/OpenMPTesting.cmake @@ -60,29 +60,29 @@ function(find_standalone_test_dependencies) endif() endfunction() -if (${OPENMP_STANDALONE_BUILD}) - find_standalone_test_dependencies() - - # Set lit arguments. - set(DEFAULT_LIT_ARGS "-sv --show-unsupported --show-xfail") - if (MSVC OR XCODE) - set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --no-progress-bar") - endif() - if ("${CMAKE_SYSTEM_NAME}" MATCHES "AIX") - set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --time-tests --timeout=1800") - endif() - set(OPENMP_LIT_ARGS "${DEFAULT_LIT_ARGS}" CACHE STRING "Options for lit.") - separate_arguments(OPENMP_LIT_ARGS) +if(TARGET FileCheck) + set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck) + set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not) else() - if (NOT TARGET "FileCheck") + find_standalone_test_dependencies() + if(OPENMP_FILECHECK_EXECUTABLE) + # Set lit arguments. + set(DEFAULT_LIT_ARGS "-sv --show-unsupported --show-xfail") + if (MSVC OR XCODE) + set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --no-progress-bar") + endif() + if ("${CMAKE_SYSTEM_NAME}" MATCHES "AIX") + set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --time-tests --timeout=3000") + endif() + set(OPENMP_LIT_ARGS "${DEFAULT_LIT_ARGS}" CACHE STRING "Options for lit.") + separate_arguments(OPENMP_LIT_ARGS) + else() message(STATUS "Cannot find 'FileCheck'.") message(WARNING "The check targets will not be available!") set(ENABLE_CHECK_TARGETS FALSE) - else() - set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck) endif() - set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not) endif() + set(OFFLOAD_DEVICE_INFO_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-offload-device-info) set(OFFLOAD_TBLGEN_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/offload-tblgen) @@ -131,50 +131,28 @@ function(set_test_compiler_information dir) endif() endfunction() -if (${OPENMP_STANDALONE_BUILD}) - # Detect compiler that should be used for testing. - # We cannot use ExternalProject_Add() because its configuration runs when this - # project is built which is too late for detecting the compiler... - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler) - execute_process( - COMMAND ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} ${CMAKE_CURRENT_SOURCE_DIR}/../openmp/cmake/DetectTestCompiler - -DCMAKE_C_COMPILER=${OPENMP_TEST_C_COMPILER} - -DCMAKE_CXX_COMPILER=${OPENMP_TEST_CXX_COMPILER} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler - OUTPUT_VARIABLE DETECT_COMPILER_OUT - ERROR_VARIABLE DETECT_COMPILER_ERR - RESULT_VARIABLE DETECT_COMPILER_RESULT) - if (DETECT_COMPILER_RESULT) - message(STATUS "Could not detect test compilers.") - message(WARNING "The check targets will not be available!") - set(ENABLE_CHECK_TARGETS FALSE) - else() - set_test_compiler_information(${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler) - endif() +# Set the information that we know. +set(OPENMP_TEST_COMPILER_ID "Clang") +# Cannot use CLANG_VERSION because we are not guaranteed that this is already set. +set(OPENMP_TEST_COMPILER_VERSION "${LLVM_VERSION}") +set(OPENMP_TEST_COMPILER_VERSION_MAJOR "${LLVM_VERSION_MAJOR}") +set(OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") +# Unfortunately the top-level cmake/config-ix.cmake file mangles CMake's +# CMAKE_THREAD_LIBS_INIT variable from the FindThreads package, so work +# around that, until it is fixed there. +if("${CMAKE_THREAD_LIBS_INIT}" STREQUAL "-lpthread") + set(OPENMP_TEST_COMPILER_THREAD_FLAGS "-pthread") else() - # Set the information that we know. - set(OPENMP_TEST_COMPILER_ID "Clang") - # Cannot use CLANG_VERSION because we are not guaranteed that this is already set. - set(OPENMP_TEST_COMPILER_VERSION "${LLVM_VERSION}") - set(OPENMP_TEST_COMPILER_VERSION_MAJOR "${LLVM_VERSION_MAJOR}") - set(OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") - # Unfortunately the top-level cmake/config-ix.cmake file mangles CMake's - # CMAKE_THREAD_LIBS_INIT variable from the FindThreads package, so work - # around that, until it is fixed there. - if("${CMAKE_THREAD_LIBS_INIT}" STREQUAL "-lpthread") - set(OPENMP_TEST_COMPILER_THREAD_FLAGS "-pthread") - else() - set(OPENMP_TEST_COMPILER_THREAD_FLAGS "${CMAKE_THREAD_LIBS_INIT}") - endif() - if(TARGET tsan) - set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 1) - else() - set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 0) - endif() - set(OPENMP_TEST_COMPILER_HAS_OMP_H 1) - set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp ${OPENMP_TEST_COMPILER_THREAD_FLAGS}") - set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1) + set(OPENMP_TEST_COMPILER_THREAD_FLAGS "${CMAKE_THREAD_LIBS_INIT}") +endif() +if(TARGET tsan) + set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 1) +else() + set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 0) endif() +set(OPENMP_TEST_COMPILER_HAS_OMP_H 1) +set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp ${OPENMP_TEST_COMPILER_THREAD_FLAGS}") +set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1) # Function to set compiler features for use in lit. function(update_test_compiler_features) @@ -222,7 +200,7 @@ function(add_offload_testsuite target comment) set_property(GLOBAL APPEND PROPERTY OPENMP_LIT_DEPENDS ${ARG_DEPENDS}) endif() - if (${OPENMP_STANDALONE_BUILD}) + if (NOT TARGET Clang) set(LIT_ARGS ${OPENMP_LIT_ARGS} ${ARG_ARGS}) add_custom_target(${target} COMMAND ${Python3_EXECUTABLE} ${OPENMP_LLVM_LIT_EXECUTABLE} ${LIT_ARGS} ${ARG_UNPARSED_ARGUMENTS} diff --git a/offload/test/CMakeLists.txt b/offload/test/CMakeLists.txt index 531907098aaef..1bcf58d432b25 100644 --- a/offload/test/CMakeLists.txt +++ b/offload/test/CMakeLists.txt @@ -12,7 +12,7 @@ else() set(LIBOMPTARGET_DEBUG False) endif() -if (NOT OPENMP_STANDALONE_BUILD AND "compiler-rt" IN_LIST LLVM_ENABLE_RUNTIMES) +if ("compiler-rt" IN_LIST LLVM_ENABLE_RUNTIMES) set(LIBOMPTARGET_TEST_GPU_PGO True) else() set(LIBOMPTARGET_TEST_GPU_PGO False) diff --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt index dde29cbed47fe..ca7c789d3b2d1 100644 --- a/openmp/CMakeLists.txt +++ b/openmp/CMakeLists.txt @@ -19,119 +19,51 @@ list(INSERT CMAKE_MODULE_PATH 0 "${LLVM_COMMON_CMAKE_UTILS}/Modules" ) -# llvm/runtimes/ will set OPENMP_STANDALONE_BUILD. -if (OPENMP_STANDALONE_BUILD OR "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") - set(OPENMP_STANDALONE_BUILD TRUE) - project(openmp C CXX ASM) -else() - set(OPENMP_STANDALONE_BUILD FALSE) -endif() - # Must go below project(..) include(GNUInstallDirs) -if (OPENMP_STANDALONE_BUILD) - set(LLVM_TREE_AVAILABLE False) +# Usually /runtimes/CMakeLists.txt sets LLVM_TREE_AVAILABLE and +# we assume it is not available otherwise. The exception is that we are in an +# LLVM_ENABLE_PROJECTS=openmp build, the LLVM tree is actually available. +# Note that this build mode has been deprecated. +# See https://github.com/llvm/llvm-project/issues/124014 +if (NOT LLVM_RUNTIMES_BUILD AND "openmp" IN_LIST LLVM_ENABLE_PROJECTS) + set(LLVM_TREE_AVAILABLE True) +endif () - # CMAKE_BUILD_TYPE was not set, default to Release. - if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) - endif() +set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR}) - # Group common settings. - set(OPENMP_ENABLE_WERROR FALSE CACHE BOOL - "Enable -Werror flags to turn warnings into errors for supporting compilers.") - set(OPENMP_LIBDIR_SUFFIX "" CACHE STRING - "Suffix of lib installation directory, e.g. 64 => lib64") - # Do not use OPENMP_LIBDIR_SUFFIX directly, use OPENMP_INSTALL_LIBDIR. - set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}" CACHE STRING +# When building in tree we install the runtime according to the LLVM settings. +if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE) + set(OPENMP_INSTALL_LIBDIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE STRING + "Path where built openmp libraries should be installed.") +else() + set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}" CACHE STRING "Path where built OpenMP libraries should be installed.") +endif() +set(OPENMP_INSTALL_CFGDIR "lib/cmake" CACHE STRING + "Path where OpenMP config should be installed") - # Group test settings. - set(OPENMP_TEST_C_COMPILER ${CMAKE_C_COMPILER} CACHE STRING - "C compiler to use for testing OpenMP runtime libraries.") - set(OPENMP_TEST_CXX_COMPILER ${CMAKE_CXX_COMPILER} CACHE STRING - "C++ compiler to use for testing OpenMP runtime libraries.") - set(OPENMP_TEST_Fortran_COMPILER ${CMAKE_Fortran_COMPILER} CACHE STRING - "FORTRAN compiler to use for testing OpenMP runtime libraries.") - set(OPENMP_LLVM_TOOLS_DIR "" CACHE PATH "Path to LLVM tools for testing.") - - set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") - set(CMAKE_CXX_STANDARD_REQUIRED NO) - set(CMAKE_CXX_EXTENSIONS NO) +if (NOT MSVC) + set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) else() - # Usually /runtimes/CMakeLists.txt sets LLVM_TREE_AVAILABLE and - # we assume it is not available otherwise. The exception is that we are in an - # LLVM_ENABLE_PROJECTS=openmp build, the LLVM tree is actually available. - # Note that this build mode has been deprecated. - # See https://github.com/llvm/llvm-project/issues/124014 - if (NOT LLVM_RUNTIMES_BUILD AND "openmp" IN_LIST LLVM_ENABLE_PROJECTS) - set(LLVM_TREE_AVAILABLE True) - endif () - - set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR}) - - # When building in tree we install the runtime according to the LLVM settings. - if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE) - set(OPENMP_INSTALL_LIBDIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE STRING - "Path where built openmp libraries should be installed.") - else() - set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}" CACHE STRING - "Path where built OpenMP libraries should be installed.") - endif() - set(OPENMP_INSTALL_CFGDIR "lib/cmake" CACHE STRING - "Path where OpenMP config should be installed") - - if (NOT MSVC) - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) - else() - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) - endif() + set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) +endif() # Set fortran test compiler if flang is found - if (EXISTS "${OPENMP_TEST_Fortran_COMPILER}") - message("Using local flang build at ${OPENMP_TEST_Fortran_COMPILER}") - else() - unset(OPENMP_TEST_Fortran_COMPILER) - endif() - - # If not standalone, set CMAKE_CXX_STANDARD but don't set the global cache value, - # only set it locally for OpenMP. - set(CMAKE_CXX_STANDARD 17) - set(CMAKE_CXX_STANDARD_REQUIRED NO) - set(CMAKE_CXX_EXTENSIONS NO) +if (EXISTS "${OPENMP_TEST_Fortran_COMPILER}") + message("Using local flang build at ${OPENMP_TEST_Fortran_COMPILER}") +else() + unset(OPENMP_TEST_Fortran_COMPILER) endif() -if (OPENMP_STANDALONE_BUILD) - if((CMAKE_BUILD_TYPE MATCHES Debug) AND (${LIBOMPTARGET_NVPTX_DEBUG})) - if(SANITIZER_AMDGPU) - set(OPENMP_LIBDIR_SUFFIX "-debug/asan") - set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}") - else() - set(OPENMP_LIBDIR_SUFFIX "-debug") - set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}") - endif() - endif() - - if((CMAKE_BUILD_TYPE MATCHES Release) AND (${LIBOMPTARGET_PERF})) - if(SANITIZER_AMDGPU) - set(OPENMP_LIBDIR_SUFFIX "-perf/asan") - set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}") - else() - set(OPENMP_LIBDIR_SUFFIX "-perf") - set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}") - endif() - endif() - - if((CMAKE_BUILD_TYPE MATCHES Release) AND (NOT (${LIBOMPTARGET_PERF})) AND (${SANITIZER_AMDGPU})) - set(OPENMP_LIBDIR_SUFFIX "/asan") - set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}") - endif() - set(OPENMP_INSTALL_CFGDIR "${OPENMP_INSTALL_LIBDIR}/cmake" CACHE STRING - "Path where OpenMP config should be installed") -endif() +# If not standalone, set CMAKE_CXX_STANDARD but don't set the global cache value, +# only set it locally for OpenMP. +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED NO) +set(CMAKE_CXX_EXTENSIONS NO) # Check and set up common compiler flags. include(config-ix) @@ -197,10 +129,8 @@ else() endif() # Propagate OMPT support to offload - if(NOT ${OPENMP_STANDALONE_BUILD}) - set(LIBOMP_HAVE_OMPT_SUPPORT ${LIBOMP_HAVE_OMPT_SUPPORT} PARENT_SCOPE) - set(LIBOMP_OMP_TOOLS_INCLUDE_DIR ${LIBOMP_OMP_TOOLS_INCLUDE_DIR} PARENT_SCOPE) - endif() + set(LIBOMP_HAVE_OMPT_SUPPORT ${LIBOMP_HAVE_OMPT_SUPPORT} PARENT_SCOPE) + set(LIBOMP_OMP_TOOLS_INCLUDE_DIR ${LIBOMP_OMP_TOOLS_INCLUDE_DIR} PARENT_SCOPE) option(OPENMP_MSVC_NAME_SCHEME "Build dll with MSVC naming scheme." OFF) diff --git a/openmp/cmake/OpenMPTesting.cmake b/openmp/cmake/OpenMPTesting.cmake index 60280b7ed4893..92d07f69563ba 100644 --- a/openmp/cmake/OpenMPTesting.cmake +++ b/openmp/cmake/OpenMPTesting.cmake @@ -49,28 +49,27 @@ function(find_standalone_test_dependencies) endif() endfunction() -if (${OPENMP_STANDALONE_BUILD}) - find_standalone_test_dependencies() - - # Set lit arguments. - set(DEFAULT_LIT_ARGS "-sv --show-unsupported --show-xfail") - if (MSVC OR XCODE) - set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --no-progress-bar") - endif() - if ("${CMAKE_SYSTEM_NAME}" MATCHES "AIX") - set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --time-tests --timeout=3000") - endif() - set(OPENMP_LIT_ARGS "${DEFAULT_LIT_ARGS}" CACHE STRING "Options for lit.") - separate_arguments(OPENMP_LIT_ARGS) +if(TARGET FileCheck) + set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck) + set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not) else() - if (NOT TARGET "FileCheck") + find_standalone_test_dependencies() + if(OPENMP_FILECHECK_EXECUTABLE) + # Set lit arguments. + set(DEFAULT_LIT_ARGS "-sv --show-unsupported --show-xfail") + if (MSVC OR XCODE) + set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --no-progress-bar") + endif() + if ("${CMAKE_SYSTEM_NAME}" MATCHES "AIX") + set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --time-tests --timeout=3000") + endif() + set(OPENMP_LIT_ARGS "${DEFAULT_LIT_ARGS}" CACHE STRING "Options for lit.") + separate_arguments(OPENMP_LIT_ARGS) + else() message(STATUS "Cannot find 'FileCheck'.") message(WARNING "The check targets will not be available!") set(ENABLE_CHECK_TARGETS FALSE) - else() - set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck) endif() - set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not) endif() # Macro to extract information about compiler from file. (no own scope) @@ -118,50 +117,28 @@ function(set_test_compiler_information dir) endif() endfunction() -if (${OPENMP_STANDALONE_BUILD}) - # Detect compiler that should be used for testing. - # We cannot use ExternalProject_Add() because its configuration runs when this - # project is built which is too late for detecting the compiler... - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler) - execute_process( - COMMAND ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} ${CMAKE_CURRENT_LIST_DIR}/DetectTestCompiler - -DCMAKE_C_COMPILER=${OPENMP_TEST_C_COMPILER} - -DCMAKE_CXX_COMPILER=${OPENMP_TEST_CXX_COMPILER} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler - OUTPUT_VARIABLE DETECT_COMPILER_OUT - ERROR_VARIABLE DETECT_COMPILER_ERR - RESULT_VARIABLE DETECT_COMPILER_RESULT) - if (DETECT_COMPILER_RESULT) - message(STATUS "Could not detect test compilers.") - message(WARNING "The check targets will not be available!") - set(ENABLE_CHECK_TARGETS FALSE) - else() - set_test_compiler_information(${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler) - endif() +# Set the information that we know. +set(OPENMP_TEST_COMPILER_ID "Clang") +# Cannot use CLANG_VERSION because we are not guaranteed that this is already set. +set(OPENMP_TEST_COMPILER_VERSION "${LLVM_VERSION}") +set(OPENMP_TEST_COMPILER_VERSION_MAJOR "${LLVM_VERSION_MAJOR}") +set(OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") +# Unfortunately the top-level cmake/config-ix.cmake file mangles CMake's +# CMAKE_THREAD_LIBS_INIT variable from the FindThreads package, so work +# around that, until it is fixed there. +if("${CMAKE_THREAD_LIBS_INIT}" STREQUAL "-lpthread") + set(OPENMP_TEST_COMPILER_THREAD_FLAGS "-pthread") else() - # Set the information that we know. - set(OPENMP_TEST_COMPILER_ID "Clang") - # Cannot use CLANG_VERSION because we are not guaranteed that this is already set. - set(OPENMP_TEST_COMPILER_VERSION "${LLVM_VERSION}") - set(OPENMP_TEST_COMPILER_VERSION_MAJOR "${LLVM_VERSION_MAJOR}") - set(OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") - # Unfortunately the top-level cmake/config-ix.cmake file mangles CMake's - # CMAKE_THREAD_LIBS_INIT variable from the FindThreads package, so work - # around that, until it is fixed there. - if("${CMAKE_THREAD_LIBS_INIT}" STREQUAL "-lpthread") - set(OPENMP_TEST_COMPILER_THREAD_FLAGS "-pthread") - else() - set(OPENMP_TEST_COMPILER_THREAD_FLAGS "${CMAKE_THREAD_LIBS_INIT}") - endif() - if(TARGET tsan) - set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 1) - else() - set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 0) - endif() - set(OPENMP_TEST_COMPILER_HAS_OMP_H 1) - set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp ${OPENMP_TEST_COMPILER_THREAD_FLAGS}") - set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1) + set(OPENMP_TEST_COMPILER_THREAD_FLAGS "${CMAKE_THREAD_LIBS_INIT}") +endif() +if(TARGET tsan) + set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 1) +else() + set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 0) endif() +set(OPENMP_TEST_COMPILER_HAS_OMP_H 1) +set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp ${OPENMP_TEST_COMPILER_THREAD_FLAGS}") +set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1) set(OPENMP_TEST_ENABLE_TSAN "${OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS}" CACHE BOOL "Whether to enable tests using tsan") @@ -212,7 +189,7 @@ function(add_openmp_testsuite target comment) set_property(GLOBAL APPEND PROPERTY OPENMP_LIT_DEPENDS ${ARG_DEPENDS}) endif() - if (${OPENMP_STANDALONE_BUILD}) + if (NOT TARGET Clang) set(LIT_ARGS ${OPENMP_LIT_ARGS} ${ARG_ARGS}) add_custom_target(${target} COMMAND ${Python3_EXECUTABLE} ${OPENMP_LLVM_LIT_EXECUTABLE} ${LIT_ARGS} ${ARG_UNPARSED_ARGUMENTS} diff --git a/openmp/libompd/test/ompt_plugin.h b/openmp/libompd/test/ompt_plugin.h index 7405ba63ee297..aa333d849726f 100644 --- a/openmp/libompd/test/ompt_plugin.h +++ b/openmp/libompd/test/ompt_plugin.h @@ -153,15 +153,6 @@ ompt_start_tool_result_t *ompt_start_tool(unsigned int omp_version, return &ompt_start_tool_result; } -ompt_start_tool_result_t *ompt_start_tool( - unsigned int omp_version, - const char *runtime_version -) -{ - static ompt_start_tool_result_t ompt_start_tool_result = {&ompt_initialize,&ompt_finalize, 0}; - return &ompt_start_tool_result; -} - void collectParallelData(omp_t_data_t * data) { data->omp_num_threads = omp_get_num_threads(); diff --git a/openmp/runtime/CMakeLists.txt b/openmp/runtime/CMakeLists.txt index f282dc6cba011..d8d668298edda 100644 --- a/openmp/runtime/CMakeLists.txt +++ b/openmp/runtime/CMakeLists.txt @@ -25,64 +25,52 @@ include(LibompGetArchitecture) include(LibompHandleFlags) include(LibompDefinitions) -# Determine the target architecture -if(${OPENMP_STANDALONE_BUILD}) - # If adding a new architecture, take a look at cmake/LibompGetArchitecture.cmake - libomp_get_architecture(LIBOMP_DETECTED_ARCH) - set(LIBOMP_ARCH ${LIBOMP_DETECTED_ARCH} CACHE STRING - "The architecture to build for (x86_64/i386/arm/ppc/ppc64/ppc64le/aarch64/aarch64_32/mic/mips/mips64/riscv64/loongarch64/ve/s390x/sparc/sparcv9/wasm32).") - # Should assertions be enabled? They are on by default. - set(LIBOMP_ENABLE_ASSERTIONS TRUE CACHE BOOL - "enable assertions?") - string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) -else() # Part of LLVM build - # Determine the native architecture from LLVM. - string(TOLOWER "${LLVM_TARGET_ARCH}" LIBOMP_NATIVE_ARCH) - if( LIBOMP_NATIVE_ARCH STREQUAL "host" ) - string(REGEX MATCH "^[^-]*" LIBOMP_NATIVE_ARCH ${LLVM_HOST_TRIPLE}) - endif () - if(LIBOMP_NATIVE_ARCH MATCHES "i[2-6]86") - set(LIBOMP_ARCH i386) - elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86") - set(LIBOMP_ARCH i386) - elseif(LIBOMP_NATIVE_ARCH STREQUAL "amd64") - set(LIBOMP_ARCH x86_64) - elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86_64") - set(LIBOMP_ARCH x86_64) - elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc64le") - set(LIBOMP_ARCH ppc64le) - elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc64") - set(LIBOMP_ARCH ppc64) - elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc") - set(LIBOMP_ARCH ppc) - elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64_32") - set(LIBOMP_ARCH aarch64_32) - elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64") - set(LIBOMP_ARCH aarch64) - elseif(LIBOMP_NATIVE_ARCH MATCHES "arm64") - set(LIBOMP_ARCH aarch64) - elseif(LIBOMP_NATIVE_ARCH MATCHES "arm") - set(LIBOMP_ARCH arm) - elseif(LIBOMP_NATIVE_ARCH MATCHES "riscv64") - set(LIBOMP_ARCH riscv64) - elseif(LIBOMP_NATIVE_ARCH MATCHES "loongarch64") - set(LIBOMP_ARCH loongarch64) - elseif(LIBOMP_NATIVE_ARCH MATCHES "ve") - set(LIBOMP_ARCH ve) - elseif(LIBOMP_NATIVE_ARCH MATCHES "s390x") - set(LIBOMP_ARCH s390x) - elseif(LIBOMP_NATIVE_ARCH MATCHES "sparcv9") - set(LIBOMP_ARCH sparcv9) - elseif(LIBOMP_NATIVE_ARCH MATCHES "sparc") - set(LIBOMP_ARCH sparc) - elseif(LIBOMP_NATIVE_ARCH MATCHES "wasm") - set(LIBOMP_ARCH wasm32) - else() - # last ditch effort - libomp_get_architecture(LIBOMP_ARCH) - endif () - set(LIBOMP_ENABLE_ASSERTIONS ${LLVM_ENABLE_ASSERTIONS}) -endif() +# Determine the native architecture from LLVM. +string(TOLOWER "${LLVM_TARGET_ARCH}" LIBOMP_NATIVE_ARCH) +if( LIBOMP_NATIVE_ARCH STREQUAL "host" ) + string(REGEX MATCH "^[^-]*" LIBOMP_NATIVE_ARCH ${LLVM_HOST_TRIPLE}) +endif () +if(LIBOMP_NATIVE_ARCH MATCHES "i[2-6]86") + set(LIBOMP_ARCH i386) +elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86") + set(LIBOMP_ARCH i386) +elseif(LIBOMP_NATIVE_ARCH STREQUAL "amd64") + set(LIBOMP_ARCH x86_64) +elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86_64") + set(LIBOMP_ARCH x86_64) +elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc64le") + set(LIBOMP_ARCH ppc64le) +elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc64") + set(LIBOMP_ARCH ppc64) +elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc") + set(LIBOMP_ARCH ppc) +elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64_32") + set(LIBOMP_ARCH aarch64_32) +elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64") + set(LIBOMP_ARCH aarch64) +elseif(LIBOMP_NATIVE_ARCH MATCHES "arm64") + set(LIBOMP_ARCH aarch64) +elseif(LIBOMP_NATIVE_ARCH MATCHES "arm") + set(LIBOMP_ARCH arm) +elseif(LIBOMP_NATIVE_ARCH MATCHES "riscv64") + set(LIBOMP_ARCH riscv64) +elseif(LIBOMP_NATIVE_ARCH MATCHES "loongarch64") + set(LIBOMP_ARCH loongarch64) +elseif(LIBOMP_NATIVE_ARCH MATCHES "ve") + set(LIBOMP_ARCH ve) +elseif(LIBOMP_NATIVE_ARCH MATCHES "s390x") + set(LIBOMP_ARCH s390x) +elseif(LIBOMP_NATIVE_ARCH MATCHES "sparcv9") + set(LIBOMP_ARCH sparcv9) +elseif(LIBOMP_NATIVE_ARCH MATCHES "sparc") + set(LIBOMP_ARCH sparc) +elseif(LIBOMP_NATIVE_ARCH MATCHES "wasm") + set(LIBOMP_ARCH wasm32) +else() + # last ditch effort + libomp_get_architecture(LIBOMP_ARCH) +endif () +set(LIBOMP_ENABLE_ASSERTIONS ${LLVM_ENABLE_ASSERTIONS}) # Time profiling support set(LIBOMP_PROFILING_SUPPORT ${OPENMP_ENABLE_LIBOMP_PROFILING}) @@ -435,38 +423,6 @@ set(LIBOMP_LIB_FILE ${LIBOMP_LIB_NAME}${LIBOMP_LIBRARY_SUFFIX}) set(LIBOMP_INSTALL_ALIASES TRUE CACHE BOOL "Install libgomp and libiomp5 library aliases for backwards compatibility") -# Print configuration after all variables are set. -if(${OPENMP_STANDALONE_BUILD}) - libomp_say("Operating System -- ${CMAKE_SYSTEM_NAME}") - libomp_say("Target Architecture -- ${LIBOMP_ARCH}") - if(${MIC}) - libomp_say("Intel(R) MIC Architecture -- ${LIBOMP_MIC_ARCH}") - endif() - libomp_say("Build Type -- ${CMAKE_BUILD_TYPE}") - libomp_say("Library Kind -- ${LIBOMP_LIBRARY_KIND}") - libomp_say("Library Type -- ${LIBOMP_LIB_TYPE}") - libomp_say("Fortran Modules -- ${LIBOMP_FORTRAN_MODULES}") - # will say development if all zeros - if(${LIBOMP_VERSION_BUILD} STREQUAL 00000000) - set(LIBOMP_BUILD Development) - else() - set(LIBOMP_BUILD ${LIBOMP_VERSION_BUILD}) - endif() - libomp_say("Build -- ${LIBOMP_BUILD}") - libomp_say("Use Stats-gathering -- ${LIBOMP_STATS}") - libomp_say("Use Debugger-support -- ${LIBOMP_USE_DEBUGGER}") - libomp_say("Use ITT notify -- ${LIBOMP_USE_ITT_NOTIFY}") - libomp_say("Use OMPT-support -- ${LIBOMP_OMPT_SUPPORT}") - if(${LIBOMP_OMPT_SUPPORT}) - libomp_say("Use OMPT-optional -- ${LIBOMP_OMPT_OPTIONAL}") - endif() - libomp_say("Use OMPD-support -- ${LIBOMP_OMPD_SUPPORT}") - libomp_say("Use Adaptive locks -- ${LIBOMP_USE_ADAPTIVE_LOCKS}") - libomp_say("Use quad precision -- ${LIBOMP_USE_QUAD_PRECISION}") - libomp_say("Use Hwloc library -- ${LIBOMP_USE_HWLOC}") - libomp_say("Use OMPX-taskgraph -- ${LIBOMP_OMPX_TASKGRAPH}") -endif() - add_subdirectory(src) add_subdirectory(test) diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt index aa77290e597e8..c23dddca5d63e 100644 --- a/openmp/runtime/src/CMakeLists.txt +++ b/openmp/runtime/src/CMakeLists.txt @@ -184,7 +184,7 @@ libomp_get_ldflags(LIBOMP_CONFIGURED_LDFLAGS) libomp_get_libflags(LIBOMP_CONFIGURED_LIBFLAGS) # Build libomp library. Add LLVMSupport dependency if building in-tree with libomptarget profiling enabled. -if(OPENMP_STANDALONE_BUILD OR (NOT OPENMP_ENABLE_LIBOMP_PROFILING)) +if(NOT OPENMP_ENABLE_LIBOMP_PROFILING) add_library(omp ${LIBOMP_LIBRARY_KIND} ${LIBOMP_SOURCE_FILES}) set_property(TARGET omp PROPERTY FOLDER "OpenMP/Libraries") # Linking command will include libraries in LIBOMP_CONFIGURED_LIBFLAGS @@ -438,10 +438,8 @@ add_dependencies(libomp-micro-tests libomp-test-deps) # `omp` needs to be exported if in-tree build. set(export_to_llvmexports) -if (NOT OPENMP_STANDALONE_BUILD) - get_target_export_arg(omp LLVM export_to_llvmexports) - set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS omp) -endif() +get_target_export_arg(omp LLVM export_to_llvmexports) +set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS omp) # Install rules # We want to install libomp in ${DESTDIR}/${CMAKE_INSTALL_FULL_LIBDIR} diff --git a/openmp/tools/omptest/CMakeLists.txt b/openmp/tools/omptest/CMakeLists.txt index b313f223c354c..b04cb3a056cf5 100644 --- a/openmp/tools/omptest/CMakeLists.txt +++ b/openmp/tools/omptest/CMakeLists.txt @@ -9,7 +9,7 @@ project(omptest LANGUAGES CXX) option(LIBOMPTEST_BUILD_STANDALONE "Build ompTest 'standalone', i.e. w/o GoogleTest." - ${OPENMP_STANDALONE_BUILD}) + OFF) option(LIBOMPTEST_BUILD_UNITTESTS "Build ompTest's unit tests, requires GoogleTest." OFF) option(LIBOMPTEST_INSTALL_COMPONENTS