Skip to content

Commit 9cf6511

Browse files
committed
[OpenMP][libomp] Detect if test compiler has omp.h
omp50_taskdep_depobj.c relies on the test compiler's omp.h file. If the test compiler does not have an omp.h file, then use the one within the build tree. Fixes: llvm#56820 Differential Revision: https://reviews.llvm.org/D131000
1 parent ee4d815 commit 9cf6511

File tree

5 files changed

+17
-2
lines changed

5 files changed

+17
-2
lines changed

openmp/cmake/DetectTestCompiler/CMakeLists.txt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ project(DetectTestCompiler C CXX)
33

44
include(CheckCCompilerFlag)
55
include(CheckCXXCompilerFlag)
6+
include(CheckIncludeFile)
7+
include(CheckIncludeFileCXX)
68

79
function(write_compiler_information lang)
810
set(information "${CMAKE_${lang}_COMPILER}")
@@ -11,6 +13,7 @@ function(write_compiler_information lang)
1113
set(information "${information}\\;${${lang}_FLAGS}")
1214
set(information "${information}\\;${${lang}_HAS_TSAN_FLAG}")
1315
set(information "${information}\\;${${lang}_HAS_OMIT_FRAME_POINTER}")
16+
set(information "${information}\\;${${lang}_HAS_OMP_H}")
1417
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${lang}CompilerInformation.txt ${information})
1518
endfunction(write_compiler_information)
1619

@@ -44,9 +47,15 @@ endif()
4447
check_c_compiler_flag("-fno-omit-frame-pointer" C_HAS_OMIT_FRAME_POINTER)
4548
check_cxx_compiler_flag("-fno-omit-frame-pointer" CXX_HAS_OMIT_FRAME_POINTER)
4649

47-
SET(CMAKE_REQUIRED_FLAGS "-fsanitize=thread")
50+
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
51+
set(CMAKE_REQUIRED_FLAGS "-fsanitize=thread")
4852
check_c_compiler_flag("" C_HAS_TSAN_FLAG)
4953
check_cxx_compiler_flag("" CXX_HAS_TSAN_FLAG)
54+
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
55+
56+
# Check if omp.h header exists for the test compiler
57+
check_include_file_cxx(omp.h CXX_HAS_OMP_H)
58+
check_include_file(omp.h C_HAS_OMP_H)
5059

5160
write_compiler_information(C)
5261
write_compiler_information(CXX)

openmp/cmake/OpenMPTesting.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,15 @@ macro(extract_test_compiler_information lang file)
7777
list(GET information 3 openmp_flags)
7878
list(GET information 4 has_tsan_flags)
7979
list(GET information 5 has_omit_frame_pointer_flags)
80+
list(GET information 6 has_omp_h)
8081

8182
set(OPENMP_TEST_${lang}_COMPILER_PATH ${path})
8283
set(OPENMP_TEST_${lang}_COMPILER_ID ${id})
8384
set(OPENMP_TEST_${lang}_COMPILER_VERSION ${version})
8485
set(OPENMP_TEST_${lang}_COMPILER_OPENMP_FLAGS ${openmp_flags})
8586
set(OPENMP_TEST_${lang}_COMPILER_HAS_TSAN_FLAGS ${has_tsan_flags})
8687
set(OPENMP_TEST_${lang}_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS ${has_omit_frame_pointer_flags})
88+
set(OPENMP_TEST_${lang}_COMPILER_HAS_OMP_H ${has_omp_h})
8789
endmacro()
8890

8991
# Function to set variables with information about the test compiler.
@@ -101,6 +103,7 @@ function(set_test_compiler_information dir)
101103
set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "${OPENMP_TEST_C_COMPILER_OPENMP_FLAGS}" PARENT_SCOPE)
102104
set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS "${OPENMP_TEST_C_COMPILER_HAS_TSAN_FLAGS}" PARENT_SCOPE)
103105
set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS "${OPENMP_TEST_C_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS}" PARENT_SCOPE)
106+
set(OPENMP_TEST_COMPILER_HAS_OMP_H "${OPENMP_TEST_C_COMPILER_HAS_OMP_H}" PARENT_SCOPE)
104107

105108
# Determine major version.
106109
string(REGEX MATCH "[0-9]+" major "${OPENMP_TEST_C_COMPILER_VERSION}")
@@ -150,6 +153,7 @@ else()
150153
else()
151154
set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 0)
152155
endif()
156+
set(OPENMP_TEST_COMPILER_HAS_OMP_H 1)
153157
# TODO: Implement blockaddress in GlobalISel and remove this flag!
154158
set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp ${OPENMP_TEST_COMPILER_THREAD_FLAGS} -fno-experimental-isel")
155159
set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1)

openmp/runtime/test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ pythonize_bool(LIBOMP_HAVE_LIBM)
3131
pythonize_bool(LIBOMP_HAVE_LIBATOMIC)
3232
pythonize_bool(OPENMP_STANDALONE_BUILD)
3333
pythonize_bool(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS)
34+
pythonize_bool(OPENMP_TEST_COMPILER_HAS_OMP_H)
3435

3536
add_library(ompt-print-callback INTERFACE)
3637
target_include_directories(ompt-print-callback INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/ompt)

openmp/runtime/test/lit.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ config.substitutions.append(("%clang", config.test_c_compiler))
140140
config.substitutions.append(("%openmp_flags", config.test_openmp_flags))
141141
# %flags-use-compiler-omp-h allows us to use the test compiler's omp.h file which
142142
# may have different definitions of structures than our omp.h file.
143-
if config.is_standalone_build:
143+
if config.is_standalone_build and config.test_compiler_has_omp_h:
144144
config.substitutions.append(("%flags-use-compiler-omp-h",
145145
config.test_flags_use_compiler_omp_h))
146146
else:

openmp/runtime/test/lit.site.cfg.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
config.test_c_compiler = "@OPENMP_TEST_C_COMPILER@"
44
config.test_cxx_compiler = "@OPENMP_TEST_CXX_COMPILER@"
55
config.test_compiler_features = @OPENMP_TEST_COMPILER_FEATURES@
6+
config.test_compiler_has_omp_h = @OPENMP_TEST_COMPILER_HAS_OMP_H@
67
config.test_filecheck = "@OPENMP_FILECHECK_EXECUTABLE@"
78
config.test_not = "@OPENMP_NOT_EXECUTABLE@"
89
config.test_openmp_flags = "@OPENMP_TEST_OPENMP_FLAGS@"

0 commit comments

Comments
 (0)