Browse Source

CMake: Pass `OpenMP` compiler and linker flags through CMake targets

Using `OpenMP::OpenMP_LANG` targets for CMake is less error-prone than
passing the compiler and linker flags manually. Furthermore, it allows
the user to customize those flags by setting `OpenMP_LANG_FLAGS`,
`OpenMP_LANG_LIB_NAMES`, and `OpenMP_omp_LIBRARY`.
tags/v0.3.30
Ruiyang Wu 6 months ago
parent
commit
02fd1df10b
10 changed files with 59 additions and 38 deletions
  1. +16
    -6
      CMakeLists.txt
  2. +0
    -11
      cmake/arch.cmake
  3. +12
    -12
      cmake/fc.cmake
  4. +8
    -9
      cmake/system.cmake
  5. +4
    -0
      driver/level2/CMakeLists.txt
  6. +4
    -0
      driver/level3/CMakeLists.txt
  7. +4
    -0
      driver/others/CMakeLists.txt
  8. +4
    -0
      interface/CMakeLists.txt
  9. +3
    -0
      kernel/CMakeLists.txt
  10. +4
    -0
      lapack/CMakeLists.txt

+ 16
- 6
CMakeLists.txt View File

@@ -119,10 +119,6 @@ endif()


message(WARNING "CMake support is experimental. It does not yet support all build options and may not produce the same Makefiles that OpenBLAS ships with.") message(WARNING "CMake support is experimental. It does not yet support all build options and may not produce the same Makefiles that OpenBLAS ships with.")


if (USE_OPENMP)
find_package(OpenMP REQUIRED)
endif ()

include("${PROJECT_SOURCE_DIR}/cmake/utils.cmake") include("${PROJECT_SOURCE_DIR}/cmake/utils.cmake")
include("${PROJECT_SOURCE_DIR}/cmake/system.cmake") include("${PROJECT_SOURCE_DIR}/cmake/system.cmake")


@@ -240,6 +236,12 @@ endif ()
# add objects to the openblas lib # add objects to the openblas lib
if(NOT NO_LAPACK) if(NOT NO_LAPACK)
add_library(LAPACK_OVERRIDES OBJECT ${LA_SOURCES}) add_library(LAPACK_OVERRIDES OBJECT ${LA_SOURCES})
if (USE_OPENMP AND (NOT NOFORTRAN))
# Disable OpenMP for LAPACK Fortran codes on Windows.
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
target_link_libraries(LAPACK_OVERRIDES OpenMP::OpenMP_Fortran)
endif()
endif()
list(APPEND TARGET_OBJS "$<TARGET_OBJECTS:LAPACK_OVERRIDES>") list(APPEND TARGET_OBJS "$<TARGET_OBJECTS:LAPACK_OVERRIDES>")
endif() endif()
if(NOT NO_LAPACKE) if(NOT NO_LAPACKE)
@@ -281,10 +283,18 @@ endif()


if (USE_OPENMP) if (USE_OPENMP)
if(BUILD_STATIC_LIBS) if(BUILD_STATIC_LIBS)
target_link_libraries(${OpenBLAS_LIBNAME}_static OpenMP::OpenMP_C)
if(NOFORTRAN)
target_link_libraries(${OpenBLAS_LIBNAME}_static OpenMP::OpenMP_C)
else()
target_link_libraries(${OpenBLAS_LIBNAME}_static OpenMP::OpenMP_C OpenMP::OpenMP_Fortran)
endif()
endif() endif()
if(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS)
target_link_libraries(${OpenBLAS_LIBNAME}_shared OpenMP::OpenMP_C)
if(NOFORTRAN)
target_link_libraries(${OpenBLAS_LIBNAME}_shared OpenMP::OpenMP_C)
else()
target_link_libraries(${OpenBLAS_LIBNAME}_shared OpenMP::OpenMP_C OpenMP::OpenMP_Fortran)
endif()
endif() endif()
endif() endif()




+ 0
- 11
cmake/arch.cmake View File

@@ -31,17 +31,6 @@ if (${CMAKE_C_COMPILER_ID} STREQUAL "Intel")
set(CCOMMON_OPT "${CCOMMON_OPT} -wd981") set(CCOMMON_OPT "${CCOMMON_OPT} -wd981")
endif () endif ()


if (USE_OPENMP)
# USE_SIMPLE_THREADED_LEVEL3 = 1
# NO_AFFINITY = 1
find_package(OpenMP REQUIRED)
if (OpenMP_FOUND)
set(CCOMMON_OPT "${CCOMMON_OPT} ${OpenMP_C_FLAGS} -DUSE_OPENMP")
set(FCOMMON_OPT "${FCOMMON_OPT} ${OpenMP_Fortran_FLAGS}")
endif()
endif ()


if (DYNAMIC_ARCH) if (DYNAMIC_ARCH)
if (ARM64) if (ARM64)
set(DYNAMIC_CORE ARMV8 CORTEXA53 CORTEXA57 THUNDERX THUNDERX2T99 TSV110 EMAG8180 NEOVERSEN1 THUNDERX3T110) set(DYNAMIC_CORE ARMV8 CORTEXA53 CORTEXA57 THUNDERX THUNDERX2T99 TSV110 EMAG8180 NEOVERSEN1 THUNDERX3T110)


+ 12
- 12
cmake/fc.cmake View File

@@ -7,7 +7,7 @@ if (${F_COMPILER} STREQUAL "FLANG" AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "L
# This is for classic Flang. LLVM Flang is handled with gfortran below. # This is for classic Flang. LLVM Flang is handled with gfortran below.
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FLANG") set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FLANG")
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp")
set(OpenMP_Fortran_FLAGS "-fopenmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
set(FCOMMON_OPT "${FCOMMON_OPT} -Mrecursive -Kieee") set(FCOMMON_OPT "${FCOMMON_OPT} -Mrecursive -Kieee")
endif () endif ()
@@ -117,7 +117,7 @@ if (${F_COMPILER} STREQUAL "GFORTRAN" OR ${F_COMPILER} STREQUAL "F95" OR CMAKE_F
endif () endif ()


if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp")
set(OpenMP_Fortran_FLAGS "-fopenmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -128,14 +128,14 @@ if (${F_COMPILER} STREQUAL "INTEL" OR CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
endif () endif ()
set(FCOMMON_OPT "${FCOMMON_OPT} -recursive -fp-model=consistent") set(FCOMMON_OPT "${FCOMMON_OPT} -recursive -fp-model=consistent")
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -openmp")
set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


if (${F_COMPILER} STREQUAL "FUJITSU") if (${F_COMPILER} STREQUAL "FUJITSU")
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FUJITSU") set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FUJITSU")
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -openmp")
set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -151,7 +151,7 @@ if (${F_COMPILER} STREQUAL "IBM")
set(FCOMMON_OPT "${FCOMMON_OPT} -q32") set(FCOMMON_OPT "${FCOMMON_OPT} -q32")
endif () endif ()
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -openmp")
set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -168,7 +168,7 @@ if (${F_COMPILER} STREQUAL "PGI" OR ${F_COMPILER} STREQUAL "PGF95")
endif () endif ()
set(FCOMMON_OPT "${FCOMMON_OPT} -Mrecursive") set(FCOMMON_OPT "${FCOMMON_OPT} -Mrecursive")
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -mp")
set(OpenMP_Fortran_FLAGS "-mp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -195,7 +195,7 @@ if (${F_COMPILER} STREQUAL "PATHSCALE")
endif () endif ()


if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -mp")
set(OpenMP_Fortran_FLAGS "-mp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -233,7 +233,7 @@ if (${F_COMPILER} STREQUAL "OPEN64")


if (USE_OPENMP) if (USE_OPENMP)
set(FEXTRALIB "${FEXTRALIB} -lstdc++") set(FEXTRALIB "${FEXTRALIB} -lstdc++")
set(FCOMMON_OPT "${FCOMMON_OPT} -mp")
set(OpenMP_Fortran_FLAGS "-mp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -245,14 +245,14 @@ if (${F_COMPILER} STREQUAL "SUN")
set(FCOMMON_OPT "${FCOMMON_OPT} -m64") set(FCOMMON_OPT "${FCOMMON_OPT} -m64")
endif () endif ()
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -xopenmp=parallel")
set(OpenMP_Fortran_FLAGS "-xopenmp=parallel" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


if (${F_COMPILER} STREQUAL "COMPAQ") if (${F_COMPILER} STREQUAL "COMPAQ")
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_COMPAQ") set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_COMPAQ")
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -openmp")
set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -265,7 +265,7 @@ if (${F_COMPILER} STREQUAL "CRAY")
if (NOT USE_OPENMP) if (NOT USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -fno-openmp") set(FCOMMON_OPT "${FCOMMON_OPT} -fno-openmp")
else () else ()
set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp")
set(OpenMP_Fortran_FLAGS "-fopenmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()


@@ -290,7 +290,7 @@ if (${F_COMPILER} STREQUAL "NAGFOR")
# -w=unused: Suppress warning messages about unused variables # -w=unused: Suppress warning messages about unused variables
set(FCOMMON_OPT "${FCOMMON_OPT} -w=x77 -w=ques -w=unused") set(FCOMMON_OPT "${FCOMMON_OPT} -w=x77 -w=ques -w=unused")
if (USE_OPENMP) if (USE_OPENMP)
set(FCOMMON_OPT "${FCOMMON_OPT} -openmp")
set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags")
endif () endif ()
endif () endif ()




+ 8
- 9
cmake/system.cmake View File

@@ -372,6 +372,14 @@ else ()
endif () endif ()
endif () endif ()


if (USE_OPENMP)
find_package(OpenMP COMPONENTS C REQUIRED)
set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_OPENMP")
if (NOT NOFORTRAN)
find_package(OpenMP COMPONENTS Fortran REQUIRED)
endif ()
endif ()

if (BINARY64) if (BINARY64)
if (INTERFACE64) if (INTERFACE64)
# CCOMMON_OPT += -DUSE64BITINT # CCOMMON_OPT += -DUSE64BITINT
@@ -655,15 +663,6 @@ if (LAPACK_STRLEN)
endif() endif()
set(LAPACK_FPFLAGS "${LAPACK_FPFLAGS} ${FPFLAGS}") set(LAPACK_FPFLAGS "${LAPACK_FPFLAGS} ${FPFLAGS}")


#Disable -fopenmp for LAPACK Fortran codes on Windows.
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parallel")
foreach (FILTER_FLAG ${FILTER_FLAGS})
string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS})
string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS})
endforeach ()
endif ()

if (CMAKE_Fortran_COMPILER) if (CMAKE_Fortran_COMPILER)
if ("${F_COMPILER}" STREQUAL "NAGFOR" OR "${F_COMPILER}" STREQUAL "CRAY" OR CMAKE_Fortran_COMPILER_ID MATCHES "LLVMFlang.*") if ("${F_COMPILER}" STREQUAL "NAGFOR" OR "${F_COMPILER}" STREQUAL "CRAY" OR CMAKE_Fortran_COMPILER_ID MATCHES "LLVMFlang.*")
set(FILTER_FLAGS "-msse3;-mssse3;-msse4.1;-mavx;-mavx2,-mskylake-avx512") set(FILTER_FLAGS "-msse3;-mssse3;-msse4.1;-mavx;-mavx2,-mskylake-avx512")


+ 4
- 0
driver/level2/CMakeLists.txt View File

@@ -223,3 +223,7 @@ if (USE_THREAD)
endif () endif ()


add_library(driver_level2 OBJECT ${OPENBLAS_SRC}) add_library(driver_level2 OBJECT ${OPENBLAS_SRC})

if (USE_OPENMP)
target_link_libraries(driver_level2 OpenMP::OpenMP_C)
endif()

+ 4
- 0
driver/level3/CMakeLists.txt View File

@@ -171,3 +171,7 @@ endforeach ()
# #


add_library(driver_level3 OBJECT ${OPENBLAS_SRC}) add_library(driver_level3 OBJECT ${OPENBLAS_SRC})

if (USE_OPENMP)
target_link_libraries(driver_level3 OpenMP::OpenMP_C)
endif()

+ 4
- 0
driver/others/CMakeLists.txt View File

@@ -88,3 +88,7 @@ endif ()
#endif #endif


add_library(driver_others OBJECT ${OPENBLAS_SRC} ${MEMORY} ${SMP_SOURCES} ${COMMON_SOURCES}) add_library(driver_others OBJECT ${OPENBLAS_SRC} ${MEMORY} ${SMP_SOURCES} ${COMMON_SOURCES})

if (USE_OPENMP)
target_link_libraries(driver_others OpenMP::OpenMP_C)
endif()

+ 4
- 0
interface/CMakeLists.txt View File

@@ -250,3 +250,7 @@ if ( BUILD_COMPLEX16 AND NOT BUILD_DOUBLE)
endif () endif ()


add_library(interface OBJECT ${OPENBLAS_SRC}) add_library(interface OBJECT ${OPENBLAS_SRC})

if (USE_OPENMP)
target_link_libraries(interface OpenMP::OpenMP_C)
endif()

+ 3
- 0
kernel/CMakeLists.txt View File

@@ -1364,6 +1364,9 @@ endif ()
if (USE_GEMM3M) if (USE_GEMM3M)
target_compile_definitions(kernel${TSUFFIX} PRIVATE USE_GEMM3M) target_compile_definitions(kernel${TSUFFIX} PRIVATE USE_GEMM3M)
endif() endif()
if (USE_OPENMP)
target_link_libraries(kernel${TSUFFIX} OpenMP::OpenMP_C)
endif()
endfunction () endfunction ()






+ 4
- 0
lapack/CMakeLists.txt View File

@@ -117,3 +117,7 @@ GenerateCombinationObjects("${UNIT_SOURCES}" "UNIT" "N" "" 4)
GenerateCombinationObjects("${UNIT_SOURCES2}" "UNIT" "N" "" 0 "" "" 3) GenerateCombinationObjects("${UNIT_SOURCES2}" "UNIT" "N" "" 0 "" "" 3)


add_library(lapack OBJECT ${OPENBLAS_SRC}) add_library(lapack OBJECT ${OPENBLAS_SRC})

if (USE_OPENMP)
target_link_libraries(lapack OpenMP::OpenMP_C)
endif()

Loading…
Cancel
Save