1# Copyright (c) 2017-2019, Lawrence Livermore National Security, LLC and
2# other BLT Project Developers. See the top-level COPYRIGHT file for details
3#
4# SPDX-License-Identifier: (BSD-3-Clause)
5
6#################################################
7# OpenMP
8# (OpenMP support is provided by the compiler)
9#################################################
10
11find_package(OpenMP REQUIRED)
12
13# check if the openmp flags used for C/C++ are different from the openmp flags
14# used by the Fortran compiler
15set(BLT_OPENMP_FLAGS_DIFFER FALSE CACHE BOOL "")
16if (ENABLE_FORTRAN)
17  string(COMPARE NOTEQUAL "${OpenMP_CXX_FLAGS}" "${OpenMP_Fortran_FLAGS}"
18         BLT_OPENMP_FLAGS_DIFFER )
19endif()
20
21# avoid generator expressions if possible, as generator expressions can be
22# passed as flags to downstream projects that might not be using the same
23# languages. See https://github.com/LLNL/blt/issues/205
24set(_compile_flags ${OpenMP_CXX_FLAGS})
25set(_link_flags  ${OpenMP_CXX_FLAGS})
26
27if(NOT COMPILER_FAMILY_IS_MSVC AND ENABLE_CUDA AND BLT_OPENMP_FLAGS_DIFFER)
28    set(_compile_flags
29        $<$<AND:$<NOT:$<COMPILE_LANGUAGE:CUDA>>,$<NOT:$<COMPILE_LANGUAGE:Fortran>>>:${OpenMP_CXX_FLAGS}>
30        $<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${OpenMP_CXX_FLAGS}>
31        $<$<COMPILE_LANGUAGE:Fortran>:${OpenMP_Fortran_FLAGS}>)
32elseif(NOT COMPILER_FAMILY_IS_MSVC AND ENABLE_CUDA)
33    set(_compile_flags
34        $<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:${OpenMP_CXX_FLAGS}>
35        $<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${OpenMP_CXX_FLAGS}>)
36elseif(NOT COMPILER_FAMILY_IS_MSVC AND BLT_OPENMP_FLAGS_DIFFER)
37    set(_compile_flags
38        $<$<NOT:$<COMPILE_LANGUAGE:Fortran>>:${OpenMP_CXX_FLAGS}>
39        $<$<COMPILE_LANGUAGE:Fortran>:${OpenMP_Fortran_FLAGS}>)
40endif()
41
42
43# Allow user to override
44if (BLT_OPENMP_COMPILE_FLAGS)
45    set(_compile_flags ${BLT_OPENMP_COMPILE_FLAGS})
46endif()
47if (BLT_OPENMP_LINK_FLAGS)
48    set(_link_flags ${BLT_OPENMP_LINK_FLAGS})
49endif()
50
51
52message(STATUS "OpenMP Compile Flags: ${_compile_flags}")
53message(STATUS "OpenMP Link Flags:    ${_link_flags}")
54
55blt_register_library(NAME openmp
56                     COMPILE_FLAGS ${_compile_flags}
57                     LINK_FLAGS    ${_link_flags})
58