| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
52792f6da7
|
Revert "CMake: Pass `OpenMP` compiler and linker flags through CMake targets" | 6 months ago |
| @@ -108,7 +108,6 @@ jobs: | |||
| mkdir build && cd build | |||
| cmake -DDYNAMIC_ARCH=1 \ | |||
| -DUSE_OPENMP=${{matrix.openmp}} \ | |||
| -DOpenMP_Fortran_LIB_NAMES=omp \ | |||
| -DINTERFACE64=${{matrix.ilp64}} \ | |||
| -DNOFORTRAN=0 \ | |||
| -DBUILD_WITHOUT_LAPACK=0 \ | |||
| @@ -121,6 +121,10 @@ 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.") | |||
| if (USE_OPENMP) | |||
| find_package(OpenMP REQUIRED) | |||
| endif () | |||
| include("${PROJECT_SOURCE_DIR}/cmake/utils.cmake") | |||
| include("${PROJECT_SOURCE_DIR}/cmake/system.cmake") | |||
| @@ -246,12 +250,6 @@ endif () | |||
| # add objects to the openblas lib | |||
| if(NOT NO_LAPACK) | |||
| 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>") | |||
| endif() | |||
| if(NOT NO_LAPACKE) | |||
| @@ -293,18 +291,10 @@ endif() | |||
| if (USE_OPENMP) | |||
| if(BUILD_STATIC_LIBS) | |||
| 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() | |||
| target_link_libraries(${OpenBLAS_LIBNAME}_static OpenMP::OpenMP_C) | |||
| endif() | |||
| if(BUILD_SHARED_LIBS) | |||
| 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() | |||
| target_link_libraries(${OpenBLAS_LIBNAME}_shared OpenMP::OpenMP_C) | |||
| endif() | |||
| endif() | |||
| @@ -31,6 +31,17 @@ if (${CMAKE_C_COMPILER_ID} STREQUAL "Intel") | |||
| set(CCOMMON_OPT "${CCOMMON_OPT} -wd981") | |||
| 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 (ARM64) | |||
| set(DYNAMIC_CORE ARMV8 CORTEXA53 CORTEXA57 THUNDERX THUNDERX2T99 TSV110 EMAG8180 NEOVERSEN1 THUNDERX3T110) | |||
| @@ -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. | |||
| set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FLANG") | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-fopenmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp") | |||
| endif () | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -Mrecursive -Kieee") | |||
| endif () | |||
| @@ -117,7 +117,7 @@ if (${F_COMPILER} STREQUAL "GFORTRAN" OR ${F_COMPILER} STREQUAL "F95" OR CMAKE_F | |||
| endif () | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-fopenmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp") | |||
| endif () | |||
| endif () | |||
| @@ -128,14 +128,14 @@ if (${F_COMPILER} STREQUAL "INTEL" OR CMAKE_Fortran_COMPILER_ID MATCHES "Intel") | |||
| endif () | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -recursive -fp-model=consistent") | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -openmp") | |||
| endif () | |||
| endif () | |||
| if (${F_COMPILER} STREQUAL "FUJITSU") | |||
| set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FUJITSU") | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -openmp") | |||
| endif () | |||
| endif () | |||
| @@ -151,7 +151,7 @@ if (${F_COMPILER} STREQUAL "IBM") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -q32") | |||
| endif () | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -openmp") | |||
| endif () | |||
| endif () | |||
| @@ -168,7 +168,7 @@ if (${F_COMPILER} STREQUAL "PGI" OR ${F_COMPILER} STREQUAL "PGF95") | |||
| endif () | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -Mrecursive") | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-mp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -mp") | |||
| endif () | |||
| endif () | |||
| @@ -195,7 +195,7 @@ if (${F_COMPILER} STREQUAL "PATHSCALE") | |||
| endif () | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-mp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -mp") | |||
| endif () | |||
| endif () | |||
| @@ -233,7 +233,7 @@ if (${F_COMPILER} STREQUAL "OPEN64") | |||
| if (USE_OPENMP) | |||
| set(FEXTRALIB "${FEXTRALIB} -lstdc++") | |||
| set(OpenMP_Fortran_FLAGS "-mp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -mp") | |||
| endif () | |||
| endif () | |||
| @@ -245,14 +245,14 @@ if (${F_COMPILER} STREQUAL "SUN") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -m64") | |||
| endif () | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-xopenmp=parallel" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -xopenmp=parallel") | |||
| endif () | |||
| endif () | |||
| if (${F_COMPILER} STREQUAL "COMPAQ") | |||
| set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_COMPAQ") | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -openmp") | |||
| endif () | |||
| endif () | |||
| @@ -265,7 +265,7 @@ if (${F_COMPILER} STREQUAL "CRAY") | |||
| if (NOT USE_OPENMP) | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -fno-openmp") | |||
| else () | |||
| set(OpenMP_Fortran_FLAGS "-fopenmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp") | |||
| endif () | |||
| endif () | |||
| @@ -290,7 +290,7 @@ if (${F_COMPILER} STREQUAL "NAGFOR") | |||
| # -w=unused: Suppress warning messages about unused variables | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -w=x77 -w=ques -w=unused") | |||
| if (USE_OPENMP) | |||
| set(OpenMP_Fortran_FLAGS "-openmp" CACHE STRING "OpenMP Fortran compiler flags") | |||
| set(FCOMMON_OPT "${FCOMMON_OPT} -openmp") | |||
| endif () | |||
| endif () | |||
| @@ -412,20 +412,6 @@ else () | |||
| 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) | |||
| # Avoid mixed OpenMP linkage | |||
| get_target_property(OMP_C_LIB OpenMP::OpenMP_C INTERFACE_LINK_LIBRARIES) | |||
| get_target_property(OMP_Fortran_LIB OpenMP::OpenMP_Fortran INTERFACE_LINK_LIBRARIES) | |||
| if (NOT OMP_C_LIB STREQUAL OMP_Fortran_LIB) | |||
| message(FATAL_ERROR "Multiple OpenMP runtime libraries detected. Mixed OpenMP runtime linkage is dangerous. You may pass -DOpenMP_LANG_LIB_NAMES and -DOpenMP_omp_LIBRARY to manually choose the OpenMP library.") | |||
| endif() | |||
| endif () | |||
| endif () | |||
| if (BINARY64) | |||
| if (INTERFACE64) | |||
| # CCOMMON_OPT += -DUSE64BITINT | |||
| @@ -724,6 +710,15 @@ if (LAPACK_STRLEN) | |||
| endif() | |||
| 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 ("${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") | |||
| @@ -44,6 +44,10 @@ else() | |||
| c_${float_char}blas1.c) | |||
| endif() | |||
| target_link_libraries(x${float_char}cblat1 ${OpenBLAS_LIBNAME}) | |||
| if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) | |||
| string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") | |||
| target_link_libraries(x${float_char}cblat1 omp pthread) | |||
| endif() | |||
| if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX") | |||
| target_link_libraries(x${float_char}cblat1 m) | |||
| endif() | |||
| @@ -69,6 +73,10 @@ else() | |||
| constant.c) | |||
| endif() | |||
| target_link_libraries(x${float_char}cblat2 ${OpenBLAS_LIBNAME}) | |||
| if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) | |||
| string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") | |||
| target_link_libraries(x${float_char}cblat2 omp pthread) | |||
| endif() | |||
| if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX") | |||
| target_link_libraries(x${float_char}cblat2 m) | |||
| endif() | |||
| @@ -116,12 +124,20 @@ else() | |||
| endif() | |||
| endif() | |||
| target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME}) | |||
| if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) | |||
| string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") | |||
| target_link_libraries(x${float_char}cblat3 omp pthread) | |||
| endif() | |||
| if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX") | |||
| target_link_libraries(x${float_char}cblat3 m) | |||
| endif() | |||
| if (USE_GEMM3M) | |||
| if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z")) | |||
| target_link_libraries(x${float_char}cblat3_3m ${OpenBLAS_LIBNAME}) | |||
| if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) | |||
| string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") | |||
| target_link_libraries(x${float_char}cblat3 omp pthread) | |||
| endif() | |||
| if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX") | |||
| target_link_libraries(x${float_char}cblat3_3m m) | |||
| endif() | |||
| @@ -223,7 +223,3 @@ if (USE_THREAD) | |||
| endif () | |||
| add_library(driver_level2 OBJECT ${OPENBLAS_SRC}) | |||
| if (USE_OPENMP) | |||
| target_link_libraries(driver_level2 OpenMP::OpenMP_C) | |||
| endif() | |||
| @@ -178,7 +178,3 @@ endforeach () | |||
| # | |||
| add_library(driver_level3 OBJECT ${OPENBLAS_SRC}) | |||
| if (USE_OPENMP) | |||
| target_link_libraries(driver_level3 OpenMP::OpenMP_C) | |||
| endif() | |||
| @@ -88,7 +88,3 @@ endif () | |||
| #endif | |||
| add_library(driver_others OBJECT ${OPENBLAS_SRC} ${MEMORY} ${SMP_SOURCES} ${COMMON_SOURCES}) | |||
| if (USE_OPENMP) | |||
| target_link_libraries(driver_others OpenMP::OpenMP_C) | |||
| endif() | |||
| @@ -289,7 +289,3 @@ if ( BUILD_BFLOAT16 AND NO_FBLAS ) | |||
| endif() | |||
| add_library(interface OBJECT ${OPENBLAS_SRC}) | |||
| if (USE_OPENMP) | |||
| target_link_libraries(interface OpenMP::OpenMP_C) | |||
| endif() | |||
| @@ -1470,9 +1470,6 @@ endif () | |||
| if (USE_GEMM3M) | |||
| target_compile_definitions(kernel${TSUFFIX} PRIVATE USE_GEMM3M) | |||
| endif() | |||
| if (USE_OPENMP) | |||
| target_link_libraries(kernel${TSUFFIX} OpenMP::OpenMP_C) | |||
| endif() | |||
| endfunction () | |||
| @@ -107,6 +107,12 @@ set(ZDMDEIGTST zchkdmd.f90) | |||
| macro(add_eig_executable name) | |||
| add_executable(${name} ${ARGN}) | |||
| target_link_libraries(${name} ${LIBNAMEPREFIX}openblas${LIBNAMESUFFIX}${SUFFIX64_UNDERSCORE}) | |||
| if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) | |||
| string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") | |||
| target_link_libraries(${name} omp pthread) | |||
| endif() | |||
| #${TMGLIB} ../${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) | |||
| endmacro() | |||
| @@ -240,6 +240,10 @@ set(ZLINTSTRFP zchkrfp.f zdrvrfp.f zdrvrf1.f zdrvrf2.f zdrvrf3.f zdrvrf4.f zerrr | |||
| macro(add_lin_executable name) | |||
| add_executable(${name} ${ARGN}) | |||
| target_link_libraries(${name} ${LIBNAMEPREFIX}openblas${LIBNAMESUFFIX}${SUFFIX64_UNDERSCORE}) | |||
| if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) | |||
| string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") | |||
| target_link_libraries(${name} omp pthread) | |||
| endif() | |||
| #${TMGLIB} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) | |||
| endmacro() | |||
| @@ -120,7 +120,3 @@ GenerateCombinationObjects("${UNIT_SOURCES}" "UNIT" "N" "" 4) | |||
| GenerateCombinationObjects("${UNIT_SOURCES2}" "UNIT" "N" "" 0 "" "" 3) | |||
| add_library(lapack OBJECT ${OPENBLAS_SRC}) | |||
| if (USE_OPENMP) | |||
| target_link_libraries(lapack OpenMP::OpenMP_C) | |||
| endif() | |||
| @@ -34,6 +34,10 @@ endif () | |||
| foreach(test_bin ${OpenBLAS_Tests}) | |||
| add_executable(${test_bin} ${test_bin}.f) | |||
| target_link_libraries(${test_bin} ${OpenBLAS_LIBNAME}) | |||
| if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) | |||
| string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") | |||
| target_link_libraries(${test_bin} omp pthread) | |||
| endif() | |||
| endforeach() | |||
| # $1 exec, $2 input, $3 output_result | |||