Skip to content

Commit a63e186

Browse files
committed
Move /openmp/libomptarget to /offload
In a nutshell, this moves our libomptarget code to create the offload subproject. For now, we allow LLVM/Offload only as runtime. Tests and other components still depend on OpenMP and have also not been renamed. The results below are for a build in which OpenMP and Offload are enabled runtimes. In addition to the pure `git mv`, I needed to adjust some CMake files. Nothing is intended to change semantics but some of the things likely broke other build configurations. Testers are needed. ``` ninja -C build/llvm/runtimes/runtimes-bins check-libomptarget ``` Works with the X86 and AMDGPU offload tests ``` ninja -C /build/llvm/ check-openmp ``` Still works but doesn't build offload tests anymore. ``` ls install/lib ``` Shows all expected libraries, incl. - `libomptarget.devicertl.a` - `libomptarget-nvptx-sm_90.bc` - `libomptarget.rtl.amdgpu.so` -> `libomptarget.rtl.amdgpu.so.19git` - `libomptarget.so` -> `libomptarget.so.19git` Fixes: #75124
1 parent d5a277d commit a63e186

File tree

351 files changed

+355
-32
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

351 files changed

+355
-32
lines changed

llvm/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ endif()
147147
# As we migrate runtimes to using the bootstrapping build, the set of default runtimes
148148
# should grow as we remove those runtimes from LLVM_ENABLE_PROJECTS above.
149149
set(LLVM_DEFAULT_RUNTIMES "libcxx;libcxxabi;libunwind")
150-
set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc")
150+
set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload")
151151
set(LLVM_ENABLE_RUNTIMES "" CACHE STRING
152152
"Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.")
153153
if(LLVM_ENABLE_RUNTIMES STREQUAL "all")

openmp/libomptarget/CMakeLists.txt renamed to offload/CMakeLists.txt

Lines changed: 93 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,98 @@
1010
#
1111
##===----------------------------------------------------------------------===##
1212

13-
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
14-
message(FATAL_ERROR "Direct configuration not supported, please use parent directory!")
13+
set(ENABLE_LIBOMPTARGET ON)
14+
# Currently libomptarget cannot be compiled on Windows or MacOS X.
15+
# Since the device plugins are only supported on Linux anyway,
16+
# there is no point in trying to compile libomptarget on other OSes.
17+
# 32-bit systems are not supported either.
18+
if (APPLE OR WIN32 OR NOT "cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
19+
set(ENABLE_LIBOMPTARGET OFF)
1520
endif()
1621

17-
# Add cmake directory to search for custom cmake functions.
18-
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules ${CMAKE_MODULE_PATH})
22+
option(OPENMP_ENABLE_LIBOMPTARGET "Enable building libomptarget for offloading."
23+
${ENABLE_LIBOMPTARGET})
24+
if (OPENMP_ENABLE_LIBOMPTARGET)
25+
# Check that the library can actually be built.
26+
if (APPLE OR WIN32)
27+
message(FATAL_ERROR "libomptarget cannot be built on Windows and MacOS X!")
28+
elseif (NOT "cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
29+
message(FATAL_ERROR "Host compiler must support C++17 to build libomptarget!")
30+
elseif (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
31+
message(FATAL_ERROR "libomptarget on 32-bit systems are not supported!")
32+
endif()
33+
endif()
34+
35+
# TODO: Leftover from the move, could probably be just LLVM_LIBDIR_SUFFIX everywhere.
36+
set(OFFLOAD_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}")
37+
38+
set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
39+
40+
# Add path for custom modules
41+
list(INSERT CMAKE_MODULE_PATH 0
42+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
43+
"${LLVM_COMMON_CMAKE_UTILS}/Modules"
44+
)
45+
46+
if (OPENMP_STANDALONE_BUILD)
47+
# CMAKE_BUILD_TYPE was not set, default to Release.
48+
if (NOT CMAKE_BUILD_TYPE)
49+
set(CMAKE_BUILD_TYPE Release)
50+
endif()
51+
52+
# Group common settings.
53+
set(OPENMP_ENABLE_WERROR FALSE CACHE BOOL
54+
"Enable -Werror flags to turn warnings into errors for supporting compilers.")
55+
set(OPENMP_LIBDIR_SUFFIX "" CACHE STRING
56+
"Suffix of lib installation directory, e.g. 64 => lib64")
57+
# Do not use OPENMP_LIBDIR_SUFFIX directly, use OPENMP_INSTALL_LIBDIR.
58+
set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}")
59+
60+
# Group test settings.
61+
set(OPENMP_TEST_C_COMPILER ${CMAKE_C_COMPILER} CACHE STRING
62+
"C compiler to use for testing OpenMP runtime libraries.")
63+
set(OPENMP_TEST_CXX_COMPILER ${CMAKE_CXX_COMPILER} CACHE STRING
64+
"C++ compiler to use for testing OpenMP runtime libraries.")
65+
set(OPENMP_TEST_Fortran_COMPILER ${CMAKE_Fortran_COMPILER} CACHE STRING
66+
"FORTRAN compiler to use for testing OpenMP runtime libraries.")
67+
set(OPENMP_LLVM_TOOLS_DIR "" CACHE PATH "Path to LLVM tools for testing.")
68+
69+
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
70+
set(CMAKE_CXX_STANDARD_REQUIRED NO)
71+
set(CMAKE_CXX_EXTENSIONS NO)
72+
else()
73+
set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR})
74+
# If building in tree, we honor the same install suffix LLVM uses.
75+
set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}")
76+
77+
if (NOT MSVC)
78+
set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
79+
set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++)
80+
else()
81+
set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe)
82+
set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe)
83+
endif()
84+
85+
# Check for flang
86+
if (NOT MSVC)
87+
set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang-new)
88+
else()
89+
set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang-new.exe)
90+
endif()
91+
92+
# Set fortran test compiler if flang is found
93+
if (EXISTS "${OPENMP_TEST_Fortran_COMPILER}")
94+
message("Using local flang build at ${OPENMP_TEST_Fortran_COMPILER}")
95+
else()
96+
unset(OPENMP_TEST_Fortran_COMPILER)
97+
endif()
98+
99+
# If not standalone, set CMAKE_CXX_STANDARD but don't set the global cache value,
100+
# only set it locally for OpenMP.
101+
set(CMAKE_CXX_STANDARD 17)
102+
set(CMAKE_CXX_STANDARD_REQUIRED NO)
103+
set(CMAKE_CXX_EXTENSIONS NO)
104+
endif()
19105

20106
# Set the path of all resulting libraries to a unified location so that it can
21107
# be used for testing.
@@ -36,6 +122,9 @@ include(LibomptargetUtils)
36122
# Get dependencies for the different components of the project.
37123
include(LibomptargetGetDependencies)
38124

125+
# Set up testing infrastructure.
126+
include(OpenMPTesting)
127+
39128
# LLVM source tree is required at build time for libomptarget
40129
if (NOT LIBOMPTARGET_LLVM_INCLUDE_DIRS)
41130
message(FATAL_ERROR "Missing definition for LIBOMPTARGET_LLVM_INCLUDE_DIRS")
@@ -129,11 +218,6 @@ set(LIBOMPTARGET_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
129218
message(STATUS "OpenMP tools dir in libomptarget: ${LIBOMP_OMP_TOOLS_INCLUDE_DIR}")
130219
include_directories(${LIBOMP_OMP_TOOLS_INCLUDE_DIR})
131220

132-
# Definitions for testing, for reuse when testing libomptarget-nvptx.
133-
set(LIBOMPTARGET_OPENMP_HEADER_FOLDER "${LIBOMP_INCLUDE_DIR}" CACHE STRING
134-
"Path to folder containing omp.h")
135-
set(LIBOMPTARGET_OPENMP_HOST_RTL_FOLDER "${LIBOMP_LIBRARY_DIR}" CACHE STRING
136-
"Path to folder containing libomp.so, and libLLVMSupport.so with profiling enabled")
137221
set(LIBOMPTARGET_LLVM_LIBRARY_DIR "${LLVM_LIBRARY_DIR}" CACHE STRING
138222
"Path to folder containing llvm library libomptarget.so")
139223
set(LIBOMPTARGET_LLVM_LIBRARY_INTDIR "${LIBOMPTARGET_INTDIR}" CACHE STRING

openmp/libomptarget/DeviceRTL/CMakeLists.txt renamed to offload/DeviceRTL/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ function(compileDeviceRTLLibrary target_cpu target_name target_triple)
228228
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${bclib_name} ${LIBOMPTARGET_LIBRARY_DIR}/${bclib_name})
229229

230230
# Install bitcode library under the lib destination folder.
231-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} DESTINATION "${OPENMP_INSTALL_LIBDIR}")
231+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} DESTINATION "${OFFLOAD_INSTALL_LIBDIR}")
232232

233233
set(target_feature "")
234234
if("${target_triple}" STREQUAL "nvptx64-nvidia-cuda")
@@ -307,4 +307,4 @@ set_target_properties(omptarget.devicertl PROPERTIES
307307
)
308308
target_link_libraries(omptarget.devicertl PRIVATE omptarget.devicertl.all_objs)
309309

310-
install(TARGETS omptarget.devicertl ARCHIVE DESTINATION ${OPENMP_INSTALL_LIBDIR})
310+
install(TARGETS omptarget.devicertl ARCHIVE DESTINATION ${OFFLOAD_INSTALL_LIBDIR})
File renamed without changes.

offload/cmake/OpenMPTesting.cmake

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
# Keep track if we have all dependencies.
2+
set(ENABLE_CHECK_TARGETS TRUE)
3+
4+
# Function to find required dependencies for testing.
5+
function(find_standalone_test_dependencies)
6+
find_package (Python3 COMPONENTS Interpreter)
7+
8+
if (NOT Python3_Interpreter_FOUND)
9+
message(STATUS "Could not find Python.")
10+
message(WARNING "The check targets will not be available!")
11+
set(ENABLE_CHECK_TARGETS FALSE PARENT_SCOPE)
12+
return()
13+
else()
14+
set(Python3_EXECUTABLE ${Python3_EXECUTABLE} PARENT_SCOPE)
15+
endif()
16+
17+
# Find executables.
18+
find_program(OPENMP_LLVM_LIT_EXECUTABLE
19+
NAMES llvm-lit.py llvm-lit lit.py lit
20+
PATHS ${OPENMP_LLVM_TOOLS_DIR})
21+
if (NOT OPENMP_LLVM_LIT_EXECUTABLE)
22+
message(STATUS "Cannot find llvm-lit.")
23+
message(STATUS "Please put llvm-lit in your PATH, set OPENMP_LLVM_LIT_EXECUTABLE to its full path, or point OPENMP_LLVM_TOOLS_DIR to its directory.")
24+
message(WARNING "The check targets will not be available!")
25+
set(ENABLE_CHECK_TARGETS FALSE PARENT_SCOPE)
26+
return()
27+
endif()
28+
29+
find_program(OPENMP_FILECHECK_EXECUTABLE
30+
NAMES FileCheck
31+
PATHS ${OPENMP_LLVM_TOOLS_DIR})
32+
if (NOT OPENMP_FILECHECK_EXECUTABLE)
33+
message(STATUS "Cannot find FileCheck.")
34+
message(STATUS "Please put FileCheck in your PATH, set OPENMP_FILECHECK_EXECUTABLE to its full path, or point OPENMP_LLVM_TOOLS_DIR to its directory.")
35+
message(WARNING "The check targets will not be available!")
36+
set(ENABLE_CHECK_TARGETS FALSE PARENT_SCOPE)
37+
return()
38+
endif()
39+
40+
find_program(OPENMP_NOT_EXECUTABLE
41+
NAMES not
42+
PATHS ${OPENMP_LLVM_TOOLS_DIR})
43+
if (NOT OPENMP_NOT_EXECUTABLE)
44+
message(STATUS "Cannot find 'not'.")
45+
message(STATUS "Please put 'not' in your PATH, set OPENMP_NOT_EXECUTABLE to its full path, or point OPENMP_LLVM_TOOLS_DIR to its directory.")
46+
message(WARNING "The check targets will not be available!")
47+
set(ENABLE_CHECK_TARGETS FALSE PARENT_SCOPE)
48+
return()
49+
endif()
50+
endfunction()
51+
52+
if (${OPENMP_STANDALONE_BUILD})
53+
find_standalone_test_dependencies()
54+
55+
# Set lit arguments.
56+
set(DEFAULT_LIT_ARGS "-sv --show-unsupported --show-xfail")
57+
if (MSVC OR XCODE)
58+
set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --no-progress-bar")
59+
endif()
60+
if (${CMAKE_SYSTEM_NAME} MATCHES "AIX")
61+
set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --time-tests --timeout=1800")
62+
endif()
63+
set(OPENMP_LIT_ARGS "${DEFAULT_LIT_ARGS}" CACHE STRING "Options for lit.")
64+
separate_arguments(OPENMP_LIT_ARGS)
65+
else()
66+
if (NOT TARGET "FileCheck")
67+
message(STATUS "Cannot find 'FileCheck'.")
68+
message(WARNING "The check targets will not be available!")
69+
set(ENABLE_CHECK_TARGETS FALSE)
70+
else()
71+
set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck)
72+
endif()
73+
set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not)
74+
endif()
75+
76+
# Macro to extract information about compiler from file. (no own scope)
77+
macro(extract_test_compiler_information lang file)
78+
file(READ ${file} information)
79+
list(GET information 0 path)
80+
list(GET information 1 id)
81+
list(GET information 2 version)
82+
list(GET information 3 openmp_flags)
83+
list(GET information 4 has_tsan_flags)
84+
list(GET information 5 has_omit_frame_pointer_flags)
85+
list(GET information 6 has_omp_h)
86+
87+
set(OPENMP_TEST_${lang}_COMPILER_PATH ${path})
88+
set(OPENMP_TEST_${lang}_COMPILER_ID ${id})
89+
set(OPENMP_TEST_${lang}_COMPILER_VERSION ${version})
90+
set(OPENMP_TEST_${lang}_COMPILER_OPENMP_FLAGS ${openmp_flags})
91+
set(OPENMP_TEST_${lang}_COMPILER_HAS_TSAN_FLAGS ${has_tsan_flags})
92+
set(OPENMP_TEST_${lang}_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS ${has_omit_frame_pointer_flags})
93+
set(OPENMP_TEST_${lang}_COMPILER_HAS_OMP_H ${has_omp_h})
94+
endmacro()
95+
96+
# Function to set variables with information about the test compiler.
97+
function(set_test_compiler_information dir)
98+
extract_test_compiler_information(C ${dir}/CCompilerInformation.txt)
99+
extract_test_compiler_information(CXX ${dir}/CXXCompilerInformation.txt)
100+
if (NOT("${OPENMP_TEST_C_COMPILER_ID}" STREQUAL "${OPENMP_TEST_CXX_COMPILER_ID}" AND
101+
"${OPENMP_TEST_C_COMPILER_VERSION}" STREQUAL "${OPENMP_TEST_CXX_COMPILER_VERSION}"))
102+
message(STATUS "Test compilers for C and C++ don't match.")
103+
message(WARNING "The check targets will not be available!")
104+
set(ENABLE_CHECK_TARGETS FALSE PARENT_SCOPE)
105+
else()
106+
set(OPENMP_TEST_COMPILER_ID "${OPENMP_TEST_C_COMPILER_ID}" PARENT_SCOPE)
107+
set(OPENMP_TEST_COMPILER_VERSION "${OPENMP_TEST_C_COMPILER_VERSION}" PARENT_SCOPE)
108+
set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "${OPENMP_TEST_C_COMPILER_OPENMP_FLAGS}" PARENT_SCOPE)
109+
set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS "${OPENMP_TEST_C_COMPILER_HAS_TSAN_FLAGS}" PARENT_SCOPE)
110+
set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS "${OPENMP_TEST_C_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS}" PARENT_SCOPE)
111+
set(OPENMP_TEST_COMPILER_HAS_OMP_H "${OPENMP_TEST_C_COMPILER_HAS_OMP_H}" PARENT_SCOPE)
112+
113+
# Determine major version.
114+
string(REGEX MATCH "[0-9]+" major "${OPENMP_TEST_C_COMPILER_VERSION}")
115+
string(REGEX MATCH "[0-9]+\\.[0-9]+" majorminor "${OPENMP_TEST_C_COMPILER_VERSION}")
116+
set(OPENMP_TEST_COMPILER_VERSION_MAJOR "${major}" PARENT_SCOPE)
117+
set(OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR "${majorminor}" PARENT_SCOPE)
118+
endif()
119+
endfunction()
120+
121+
if (${OPENMP_STANDALONE_BUILD})
122+
# Detect compiler that should be used for testing.
123+
# We cannot use ExternalProject_Add() because its configuration runs when this
124+
# project is built which is too late for detecting the compiler...
125+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler)
126+
execute_process(
127+
COMMAND ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} ${CMAKE_CURRENT_LIST_DIR}/DetectTestCompiler
128+
-DCMAKE_C_COMPILER=${OPENMP_TEST_C_COMPILER}
129+
-DCMAKE_CXX_COMPILER=${OPENMP_TEST_CXX_COMPILER}
130+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler
131+
OUTPUT_VARIABLE DETECT_COMPILER_OUT
132+
ERROR_VARIABLE DETECT_COMPILER_ERR
133+
RESULT_VARIABLE DETECT_COMPILER_RESULT)
134+
if (DETECT_COMPILER_RESULT)
135+
message(STATUS "Could not detect test compilers.")
136+
message(WARNING "The check targets will not be available!")
137+
set(ENABLE_CHECK_TARGETS FALSE)
138+
else()
139+
set_test_compiler_information(${CMAKE_CURRENT_BINARY_DIR}/DetectTestCompiler)
140+
endif()
141+
else()
142+
# Set the information that we know.
143+
set(OPENMP_TEST_COMPILER_ID "Clang")
144+
# Cannot use CLANG_VERSION because we are not guaranteed that this is already set.
145+
set(OPENMP_TEST_COMPILER_VERSION "${LLVM_VERSION}")
146+
set(OPENMP_TEST_COMPILER_VERSION_MAJOR "${LLVM_VERSION_MAJOR}")
147+
set(OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}")
148+
# Unfortunately the top-level cmake/config-ix.cmake file mangles CMake's
149+
# CMAKE_THREAD_LIBS_INIT variable from the FindThreads package, so work
150+
# around that, until it is fixed there.
151+
if("${CMAKE_THREAD_LIBS_INIT}" STREQUAL "-lpthread")
152+
set(OPENMP_TEST_COMPILER_THREAD_FLAGS "-pthread")
153+
else()
154+
set(OPENMP_TEST_COMPILER_THREAD_FLAGS "${CMAKE_THREAD_LIBS_INIT}")
155+
endif()
156+
if(TARGET tsan)
157+
set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 1)
158+
else()
159+
set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 0)
160+
endif()
161+
set(OPENMP_TEST_COMPILER_HAS_OMP_H 1)
162+
set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp ${OPENMP_TEST_COMPILER_THREAD_FLAGS}")
163+
set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1)
164+
endif()
165+
166+
# Function to set compiler features for use in lit.
167+
function(update_test_compiler_features)
168+
set(FEATURES "[")
169+
set(first TRUE)
170+
foreach(feat IN LISTS OPENMP_TEST_COMPILER_FEATURE_LIST)
171+
if (NOT first)
172+
string(APPEND FEATURES ", ")
173+
endif()
174+
set(first FALSE)
175+
string(APPEND FEATURES "'${feat}'")
176+
endforeach()
177+
string(APPEND FEATURES "]")
178+
set(OPENMP_TEST_COMPILER_FEATURES ${FEATURES} PARENT_SCOPE)
179+
endfunction()
180+
181+
function(set_test_compiler_features)
182+
if ("${OPENMP_TEST_COMPILER_ID}" STREQUAL "GNU")
183+
set(comp "gcc")
184+
elseif ("${OPENMP_TEST_COMPILER_ID}" STREQUAL "Intel")
185+
set(comp "icc")
186+
else()
187+
# Just use the lowercase of the compiler ID as fallback.
188+
string(TOLOWER "${OPENMP_TEST_COMPILER_ID}" comp)
189+
endif()
190+
set(OPENMP_TEST_COMPILER_FEATURE_LIST ${comp} ${comp}-${OPENMP_TEST_COMPILER_VERSION_MAJOR} ${comp}-${OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR} ${comp}-${OPENMP_TEST_COMPILER_VERSION} PARENT_SCOPE)
191+
endfunction()
192+
set_test_compiler_features()
193+
update_test_compiler_features()
194+
195+
# Function to add a testsuite for an OpenMP runtime library.
196+
function(add_openmp_testsuite target comment)
197+
if (NOT ENABLE_CHECK_TARGETS)
198+
add_custom_target(${target}
199+
COMMAND ${CMAKE_COMMAND} -E echo "${target} does nothing, dependencies not found.")
200+
message(STATUS "${target} does nothing.")
201+
return()
202+
endif()
203+
204+
cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "DEPENDS;ARGS" ${ARGN})
205+
# EXCLUDE_FROM_CHECK_ALL excludes the test ${target} out of check-openmp.
206+
if (NOT ARG_EXCLUDE_FROM_CHECK_ALL)
207+
# Register the testsuites and depends for the check-openmp rule.
208+
set_property(GLOBAL APPEND PROPERTY OPENMP_LIT_TESTSUITES ${ARG_UNPARSED_ARGUMENTS})
209+
set_property(GLOBAL APPEND PROPERTY OPENMP_LIT_DEPENDS ${ARG_DEPENDS})
210+
endif()
211+
212+
if (${OPENMP_STANDALONE_BUILD})
213+
set(LIT_ARGS ${OPENMP_LIT_ARGS} ${ARG_ARGS})
214+
add_custom_target(${target}
215+
COMMAND ${Python3_EXECUTABLE} ${OPENMP_LLVM_LIT_EXECUTABLE} ${LIT_ARGS} ${ARG_UNPARSED_ARGUMENTS}
216+
COMMENT ${comment}
217+
DEPENDS ${ARG_DEPENDS}
218+
USES_TERMINAL
219+
)
220+
else()
221+
if (ARG_EXCLUDE_FROM_CHECK_ALL)
222+
add_lit_testsuite(${target}
223+
${comment}
224+
${ARG_UNPARSED_ARGUMENTS}
225+
EXCLUDE_FROM_CHECK_ALL
226+
DEPENDS clang FileCheck not ${ARG_DEPENDS}
227+
ARGS ${ARG_ARGS}
228+
)
229+
else()
230+
add_lit_testsuite(${target}
231+
${comment}
232+
${ARG_UNPARSED_ARGUMENTS}
233+
DEPENDS clang FileCheck not ${ARG_DEPENDS}
234+
ARGS ${ARG_ARGS}
235+
)
236+
endif()
237+
endif()
238+
endfunction()
239+
240+
function(construct_check_openmp_target)
241+
get_property(OPENMP_LIT_TESTSUITES GLOBAL PROPERTY OPENMP_LIT_TESTSUITES)
242+
get_property(OPENMP_LIT_DEPENDS GLOBAL PROPERTY OPENMP_LIT_DEPENDS)
243+
244+
# We already added the testsuites themselves, no need to do that again.
245+
add_openmp_testsuite(check-openmp "Running OpenMP tests" ${OPENMP_LIT_TESTSUITES} EXCLUDE_FROM_CHECK_ALL DEPENDS ${OPENMP_LIT_DEPENDS})
246+
endfunction()
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)