Mark de Wever | cbaa359 | 2023-05-24 16:12:32 | [diff] [blame] | 1 | cmake_minimum_required(VERSION 3.20.0) |
Michael Kruse | 8bdc577 | 2024-05-25 15:34:28 | [diff] [blame] | 2 | set(LLVM_SUBPROJECT_TITLE "OpenMP") |
Jonas Hahnfeld | 6659499 | 2016-02-05 07:00:13 | [diff] [blame] | 3 | |
John Ericson | 28e665f | 2022-01-16 05:52:22 | [diff] [blame] | 4 | set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) |
| 5 | |
| 6 | # Add path for custom modules |
| 7 | list(INSERT CMAKE_MODULE_PATH 0 |
| 8 | "${CMAKE_CURRENT_SOURCE_DIR}/cmake" |
| 9 | "${LLVM_COMMON_CMAKE_UTILS}/Modules" |
| 10 | ) |
Jonas Hahnfeld | 5af381a | 2017-11-29 19:31:48 | [diff] [blame] | 11 | |
Jonas Hahnfeld | 3e921d3 | 2017-11-29 19:31:43 | [diff] [blame] | 12 | # llvm/runtimes/ will set OPENMP_STANDALONE_BUILD. |
| 13 | if (OPENMP_STANDALONE_BUILD OR "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") |
| 14 | set(OPENMP_STANDALONE_BUILD TRUE) |
Mark de Wever | cbaa359 | 2023-05-24 16:12:32 | [diff] [blame] | 15 | project(openmp C CXX ASM) |
estewart08 | 89c92b0 | 2024-06-07 20:37:42 | [diff] [blame] | 16 | else() |
| 17 | set(OPENMP_STANDALONE_BUILD FALSE) |
John Ericson | 0a6b425 | 2022-01-22 06:33:49 | [diff] [blame] | 18 | endif() |
Jonas Hahnfeld | 3e921d3 | 2017-11-29 19:31:43 | [diff] [blame] | 19 | |
John Ericson | 0a6b425 | 2022-01-22 06:33:49 | [diff] [blame] | 20 | # Must go below project(..) |
| 21 | include(GNUInstallDirs) |
| 22 | |
| 23 | if (OPENMP_STANDALONE_BUILD) |
Jonas Hahnfeld | 3e921d3 | 2017-11-29 19:31:43 | [diff] [blame] | 24 | # CMAKE_BUILD_TYPE was not set, default to Release. |
| 25 | if (NOT CMAKE_BUILD_TYPE) |
| 26 | set(CMAKE_BUILD_TYPE Release) |
| 27 | endif() |
| 28 | |
Jonas Hahnfeld | 5af381a | 2017-11-29 19:31:48 | [diff] [blame] | 29 | # Group common settings. |
| 30 | set(OPENMP_ENABLE_WERROR FALSE CACHE BOOL |
| 31 | "Enable -Werror flags to turn warnings into errors for supporting compilers.") |
John Ericson | e941b03 | 2022-08-19 02:44:46 | [diff] [blame] | 32 | set(OPENMP_LIBDIR_SUFFIX "" CACHE STRING |
| 33 | "Suffix of lib installation directory, e.g. 64 => lib64") |
| 34 | # Do not use OPENMP_LIBDIR_SUFFIX directly, use OPENMP_INSTALL_LIBDIR. |
Martin Storsjö | 14435a2 | 2024-01-10 09:24:19 | [diff] [blame] | 35 | set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}" CACHE STRING |
| 36 | "Path where built OpenMP libraries should be installed.") |
Jonas Hahnfeld | 5af381a | 2017-11-29 19:31:48 | [diff] [blame] | 37 | |
Jonas Hahnfeld | 18bec60 | 2017-11-29 19:31:52 | [diff] [blame] | 38 | # Group test settings. |
| 39 | set(OPENMP_TEST_C_COMPILER ${CMAKE_C_COMPILER} CACHE STRING |
| 40 | "C compiler to use for testing OpenMP runtime libraries.") |
| 41 | set(OPENMP_TEST_CXX_COMPILER ${CMAKE_CXX_COMPILER} CACHE STRING |
| 42 | "C++ compiler to use for testing OpenMP runtime libraries.") |
Ethan Luis McDonough | 9e3d59e | 2023-08-29 21:27:30 | [diff] [blame] | 43 | set(OPENMP_TEST_Fortran_COMPILER ${CMAKE_Fortran_COMPILER} CACHE STRING |
| 44 | "FORTRAN compiler to use for testing OpenMP runtime libraries.") |
Jonas Hahnfeld | 3e921d3 | 2017-11-29 19:31:43 | [diff] [blame] | 45 | set(OPENMP_LLVM_TOOLS_DIR "" CACHE PATH "Path to LLVM tools for testing.") |
Martin Storsjö | d187cee | 2023-05-03 06:57:22 | [diff] [blame] | 46 | |
| 47 | set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") |
| 48 | set(CMAKE_CXX_STANDARD_REQUIRED NO) |
| 49 | set(CMAKE_CXX_EXTENSIONS NO) |
Jonas Hahnfeld | 5af381a | 2017-11-29 19:31:48 | [diff] [blame] | 50 | else() |
| 51 | set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR}) |
Joseph Huber | 1977404 | 2024-02-28 21:39:27 | [diff] [blame] | 52 | |
| 53 | # When building in tree we install the runtime according to the LLVM settings. |
| 54 | if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE) |
| 55 | set(OPENMP_INSTALL_LIBDIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE STRING |
| 56 | "Path where built openmp libraries should be installed.") |
| 57 | else() |
| 58 | set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}" CACHE STRING |
| 59 | "Path where built OpenMP libraries should be installed.") |
| 60 | endif() |
Jonas Hahnfeld | 18bec60 | 2017-11-29 19:31:52 | [diff] [blame] | 61 | |
| 62 | if (NOT MSVC) |
| 63 | set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) |
| 64 | set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) |
| 65 | else() |
| 66 | set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) |
| 67 | set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) |
| 68 | endif() |
Martin Storsjö | d187cee | 2023-05-03 06:57:22 | [diff] [blame] | 69 | |
Ethan Luis McDonough | 2b6ba8c7 | 2023-09-01 18:57:28 | [diff] [blame] | 70 | # Check for flang |
| 71 | if (NOT MSVC) |
Brad Richardson | 06eb10d | 2024-10-10 08:26:04 | [diff] [blame] | 72 | set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang) |
Ethan Luis McDonough | 2b6ba8c7 | 2023-09-01 18:57:28 | [diff] [blame] | 73 | else() |
Brad Richardson | 06eb10d | 2024-10-10 08:26:04 | [diff] [blame] | 74 | set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang.exe) |
Ethan Luis McDonough | 2b6ba8c7 | 2023-09-01 18:57:28 | [diff] [blame] | 75 | endif() |
| 76 | |
| 77 | # Set fortran test compiler if flang is found |
| 78 | if (EXISTS "${OPENMP_TEST_Fortran_COMPILER}") |
| 79 | message("Using local flang build at ${OPENMP_TEST_Fortran_COMPILER}") |
| 80 | else() |
| 81 | unset(OPENMP_TEST_Fortran_COMPILER) |
Ethan Luis McDonough | 9e3d59e | 2023-08-29 21:27:30 | [diff] [blame] | 82 | endif() |
| 83 | |
Martin Storsjö | d187cee | 2023-05-03 06:57:22 | [diff] [blame] | 84 | # If not standalone, set CMAKE_CXX_STANDARD but don't set the global cache value, |
| 85 | # only set it locally for OpenMP. |
| 86 | set(CMAKE_CXX_STANDARD 17) |
| 87 | set(CMAKE_CXX_STANDARD_REQUIRED NO) |
| 88 | set(CMAKE_CXX_EXTENSIONS NO) |
Jonas Hahnfeld | 3e921d3 | 2017-11-29 19:31:43 | [diff] [blame] | 89 | endif() |
Jonas Hahnfeld | 6659499 | 2016-02-05 07:00:13 | [diff] [blame] | 90 | |
Jonas Hahnfeld | 5af381a | 2017-11-29 19:31:48 | [diff] [blame] | 91 | # Check and set up common compiler flags. |
| 92 | include(config-ix) |
| 93 | include(HandleOpenMPOptions) |
| 94 | |
Jonas Hahnfeld | 18bec60 | 2017-11-29 19:31:52 | [diff] [blame] | 95 | # Set up testing infrastructure. |
| 96 | include(OpenMPTesting) |
| 97 | |
| 98 | set(OPENMP_TEST_FLAGS "" CACHE STRING |
| 99 | "Extra compiler flags to send to the test compiler.") |
Jonas Hahnfeld | fc473de | 2017-11-30 17:08:31 | [diff] [blame] | 100 | set(OPENMP_TEST_OPENMP_FLAGS ${OPENMP_TEST_COMPILER_OPENMP_FLAGS} CACHE STRING |
Jonas Hahnfeld | 18bec60 | 2017-11-29 19:31:52 | [diff] [blame] | 101 | "OpenMP compiler flag to use for testing OpenMP runtime libraries.") |
| 102 | |
Joseph Huber | 2ec8571 | 2024-05-15 16:57:48 | [diff] [blame] | 103 | set(ENABLE_LIBOMPTARGET ON) |
| 104 | # Currently libomptarget cannot be compiled on Windows or MacOS X. |
| 105 | # Since the device plugins are only supported on Linux anyway, |
| 106 | # there is no point in trying to compile libomptarget on other OSes. |
| 107 | # 32-bit systems are not supported either. |
| 108 | if (APPLE OR WIN32 OR WASM OR NOT "cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES |
| 109 | OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8 OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") |
| 110 | set(ENABLE_LIBOMPTARGET OFF) |
| 111 | endif() |
| 112 | |
| 113 | option(OPENMP_ENABLE_LIBOMPTARGET "Enable building libomptarget for offloading." |
| 114 | ${ENABLE_LIBOMPTARGET}) |
Shilei Tian | c571b16 | 2021-01-28 12:24:19 | [diff] [blame] | 115 | option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF) |
Giorgis Georgakoudis | bb40e67 | 2021-01-25 22:10:50 | [diff] [blame] | 116 | |
serge-sans-paille | 6f2ed8f | 2022-09-07 12:48:10 | [diff] [blame] | 117 | # Header install location |
| 118 | if(${OPENMP_STANDALONE_BUILD}) |
David Tenty | 144091b | 2024-05-06 21:12:38 | [diff] [blame] | 119 | set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}") |
serge-sans-paille | 6f2ed8f | 2022-09-07 12:48:10 | [diff] [blame] | 120 | else() |
paperchalice | 0beffb8 | 2023-06-03 06:29:44 | [diff] [blame] | 121 | include(GetClangResourceDir) |
| 122 | get_clang_resource_dir(LIBOMP_HEADERS_INSTALL_PATH SUBDIR include) |
serge-sans-paille | 6f2ed8f | 2022-09-07 12:48:10 | [diff] [blame] | 123 | endif() |
| 124 | |
Giorgis Georgakoudis | bb40e67 | 2021-01-25 22:10:50 | [diff] [blame] | 125 | # Build host runtime library, after LIBOMPTARGET variables are set since they are needed |
| 126 | # to enable time profiling support in the OpenMP runtime. |
| 127 | add_subdirectory(runtime) |
| 128 | |
[email protected] | 2b8115b | 2019-11-18 00:23:31 | [diff] [blame] | 129 | set(ENABLE_OMPT_TOOLS ON) |
| 130 | # Currently tools are not tested well on Windows or MacOS X. |
| 131 | if (APPLE OR WIN32) |
| 132 | set(ENABLE_OMPT_TOOLS OFF) |
| 133 | endif() |
| 134 | |
| 135 | option(OPENMP_ENABLE_OMPT_TOOLS "Enable building ompt based tools for OpenMP." |
| 136 | ${ENABLE_OMPT_TOOLS}) |
| 137 | if (OPENMP_ENABLE_OMPT_TOOLS) |
| 138 | add_subdirectory(tools) |
| 139 | endif() |
| 140 | |
Johannes Doerfert | 330d898 | 2024-04-22 16:51:33 | [diff] [blame] | 141 | # Propagate OMPT support to offload |
Joachim | ff77f67 | 2024-06-06 14:13:50 | [diff] [blame] | 142 | if(NOT ${OPENMP_STANDALONE_BUILD}) |
| 143 | set(LIBOMP_HAVE_OMPT_SUPPORT ${LIBOMP_HAVE_OMPT_SUPPORT} PARENT_SCOPE) |
| 144 | set(LIBOMP_OMP_TOOLS_INCLUDE_DIR ${LIBOMP_OMP_TOOLS_INCLUDE_DIR} PARENT_SCOPE) |
| 145 | endif() |
Johannes Doerfert | 330d898 | 2024-04-22 16:51:33 | [diff] [blame] | 146 | |
Bran Hagger | 9f15cac | 2021-11-11 19:08:25 | [diff] [blame] | 147 | option(OPENMP_MSVC_NAME_SCHEME "Build dll with MSVC naming scheme." OFF) |
Joseph Huber | 1c4c214 | 2020-09-16 21:15:56 | [diff] [blame] | 148 | |
Vignesh Balasubramanian | ae1507d | 2022-12-14 04:36:30 | [diff] [blame] | 149 | # Build libompd.so |
| 150 | add_subdirectory(libompd) |
| 151 | |
Joseph Huber | 1c4c214 | 2020-09-16 21:15:56 | [diff] [blame] | 152 | # Build documentation |
| 153 | add_subdirectory(docs) |
| 154 | |
Kazuaki Ishizaki | 4201679 | 2020-04-04 03:06:29 | [diff] [blame] | 155 | # Now that we have seen all testsuites, create the check-openmp target. |
Jonas Hahnfeld | 18bec60 | 2017-11-29 19:31:52 | [diff] [blame] | 156 | construct_check_openmp_target() |