File: CMakeLists.txt

package info (click to toggle)
cmake 4.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 152,336 kB
  • sloc: ansic: 403,896; cpp: 303,920; sh: 4,105; python: 3,583; yacc: 3,106; lex: 1,279; f90: 538; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 111; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (99 lines) | stat: -rw-r--r-- 3,766 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
cmake_minimum_required(VERSION 4.0)
project(TestFindOpenMP NONE)
include(CTest)

macro(source_code_mapper_helper LANG_NAME SRC_FILE_NAME)
  if("${LANG_NAME}" STREQUAL "C")
    set(OpenMPTEST_SOURCE_FILE "${SRC_FILE_NAME}.c")
  elseif("${LANG_NAME}" STREQUAL "CXX")
    configure_file("${SRC_FILE_NAME}.c" "${SRC_FILE_NAME}.cxx" COPYONLY)
    set(OpenMPTEST_SOURCE_FILE "${SRC_FILE_NAME}.cxx")
  elseif("${LANG_NAME}" STREQUAL "CUDA")
    configure_file("${SRC_FILE_NAME}.c" "${SRC_FILE_NAME}.cu" COPYONLY)
    set(OpenMPTEST_SOURCE_FILE "${SRC_FILE_NAME}.cu")
  elseif("${LANG_NAME}" STREQUAL "Fortran")
    set(OpenMPTEST_SOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE_NAME}.f90")
    if(OpenMP_Fortran_HAVE_OMPLIB_MODULE)
      set(OpenMP_Fortran_INCLUDE_LINE "use omp_lib\n      implicit none")
    else()
      set(OpenMP_Fortran_INCLUDE_LINE "implicit none\n      include 'omp_lib.h'")
    endif()
    configure_file("${SRC_FILE_NAME}.f90.in" "${OpenMPTEST_SOURCE_FILE}" @ONLY)
  endif()
endmacro()

foreach(c C CXX CUDA Fortran)
  if("${OpenMP_TEST_${c}}")
    message("Testing ${c}")
    enable_language(${c})
  endif()
endforeach()

if(CMAKE_C_COMPILER_ID STREQUAL "MSVC"
    AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.30
    AND NOT CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "ARM64")
  set(test_msvc_runtime 1)
  set(OpenMP_RUNTIME_MSVC "llvm")
endif()

find_package(OpenMP REQUIRED)

if(test_msvc_runtime)
  if(NOT OpenMP_C_FLAGS STREQUAL "-openmp:llvm")
    message(FATAL_ERROR "OpenMP_RUNTIME_MSVC='${OpenMP_RUNTIME_MSVC}' not honored: '${OpenMP_C_FLAGS}'")
  endif()
endif()

# FIXME(#26701) Needed to check target offload conditions
foreach(c C CXX Fortran)
  if(NOT "${OpenMP_TEST_${c}}")
    continue()
  endif()
  if(CMAKE_${c}_COMPILER_ID MATCHES "^(Cray|CrayClang)$")
    get_target_property(link_options OpenMP::OpenMP_${c} INTERFACE_LINK_OPTIONS)
    if(NOT link_options)
      message(FATAL_ERROR "OpenMP_${c} Interface Link Options not set for Cray Compiler")
    endif()
  endif()
endforeach()

foreach(c C CXX CUDA Fortran)
  if(NOT "${OpenMP_TEST_${c}}")
    continue()
  endif()
  source_code_mapper_helper(${c} main)
  add_executable(test_tgt_${c} ${OpenMPTEST_SOURCE_FILE})
  target_link_libraries(test_tgt_${c} PRIVATE OpenMP::OpenMP_${c})
  set_property(TARGET test_tgt_${c} PROPERTY LINKER_LANGUAGE ${c})
  add_test(NAME test_tgt_${c} COMMAND test_tgt_${c})

  add_executable(test_var_${c} ${OpenMPTEST_SOURCE_FILE})
  separate_arguments(_OpenMP_${c}_OPTIONS NATIVE_COMMAND "${OpenMP_${c}_FLAGS}")
  target_compile_options(test_var_${c} PRIVATE "${_OpenMP_${c}_OPTIONS}")
  target_link_libraries(test_var_${c} PRIVATE ${OpenMP_${c}_LIBRARIES})
  target_include_directories(test_var_${c} PRIVATE ${OpenMP_${c}_INCLUDE_DIRS})
  set_property(TARGET test_var_${c} PROPERTY LINKER_LANGUAGE ${c})
  add_test(NAME test_var_${c} COMMAND test_var_${c})

  source_code_mapper_helper(${c} scalprod)
  add_library(scalprod_${c} STATIC ${OpenMPTEST_SOURCE_FILE})
  target_link_libraries(scalprod_${c} PRIVATE OpenMP::OpenMP_${c})
  set_property(TARGET scalprod_${c} PROPERTY LINKER_LANGUAGE ${c})
endforeach()

foreach(c C CXX CUDA Fortran)
  if(NOT "${OpenMP_TEST_${c}}")
    continue()
  endif()
  foreach(d C CXX CUDA Fortran)
    if(NOT "${OpenMP_TEST_${d}}")
      continue()
    endif()
    source_code_mapper_helper(${c} scaltest)
    add_executable(scaltest_${c}_${d} ${OpenMPTEST_SOURCE_FILE})
    target_link_libraries(scaltest_${c}_${d} PRIVATE scalprod_${d})
    set_property(TARGET scaltest_${c}_${d} PROPERTY LINKER_LANGUAGE ${c})
    add_test(NAME test_omp_${c}_${d} COMMAND scaltest_${c}_${d})
    set_property(TEST test_omp_${c}_${d} PROPERTY PASS_REGULAR_EXPRESSION "^[ \t]*70\\.?0*")
  endforeach()
endforeach()