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