Prevent mixed gomp/omp linking and enable INTERFACE64 for ARM64 and MIPS in CMAKE buildstags/v0.3.27
| @@ -64,6 +64,7 @@ else () | |||||
| "#define NEEDBUNDERSCORE 1\n") | "#define NEEDBUNDERSCORE 1\n") | ||||
| endif() | endif() | ||||
| if (CMAKE_Fortran_COMPILER) | |||||
| get_filename_component(F_COMPILER ${CMAKE_Fortran_COMPILER} NAME_WE) | get_filename_component(F_COMPILER ${CMAKE_Fortran_COMPILER} NAME_WE) | ||||
| string(TOUPPER ${F_COMPILER} F_COMPILER) | string(TOUPPER ${F_COMPILER} F_COMPILER) | ||||
| endif() | |||||
| @@ -6,9 +6,6 @@ | |||||
| if (${F_COMPILER} STREQUAL "FLANG" AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang") | if (${F_COMPILER} STREQUAL "FLANG" AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang") | ||||
| # 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 (BINARY64 AND INTERFACE64) | |||||
| set(FCOMMON_OPT "${FCOMMON_OPT} -i8") | |||||
| endif () | |||||
| if (USE_OPENMP) | if (USE_OPENMP) | ||||
| set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp") | set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp") | ||||
| endif () | endif () | ||||
| @@ -55,6 +52,9 @@ if (${F_COMPILER} STREQUAL "GFORTRAN" OR ${F_COMPILER} STREQUAL "F95" OR CMAKE_F | |||||
| if (MIPS64) | if (MIPS64) | ||||
| if (BINARY64) | if (BINARY64) | ||||
| set(FCOMMON_OPT "${FCOMMON_OPT} -mabi=64") | set(FCOMMON_OPT "${FCOMMON_OPT} -mabi=64") | ||||
| if (INTERFACE64) | |||||
| set(FCOMMON_OPT "${FCOMMON_OPT} -fdefault-integer-8") | |||||
| endif () | |||||
| else () | else () | ||||
| set(FCOMMON_OPT "${FCOMMON_OPT} -mabi=n32") | set(FCOMMON_OPT "${FCOMMON_OPT} -mabi=n32") | ||||
| endif () | endif () | ||||
| @@ -83,6 +83,9 @@ if (${F_COMPILER} STREQUAL "GFORTRAN" OR ${F_COMPILER} STREQUAL "F95" OR CMAKE_F | |||||
| endif () | endif () | ||||
| endif () | endif () | ||||
| endif () | endif () | ||||
| if (ARM64 AND INTERFACE64) | |||||
| set(FCOMMON_OPT "${FCOMMON_OPT} -fdefault-integer-8") | |||||
| endif () | |||||
| else () | else () | ||||
| if (BINARY64) | if (BINARY64) | ||||
| set(FCOMMON_OPT "${FCOMMON_OPT} -m64") | set(FCOMMON_OPT "${FCOMMON_OPT} -m64") | ||||
| @@ -40,6 +40,10 @@ else() | |||||
| c_${float_char}blas1.c) | c_${float_char}blas1.c) | ||||
| endif() | endif() | ||||
| target_link_libraries(x${float_char}cblat1 ${OpenBLAS_LIBNAME}) | 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") | 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) | target_link_libraries(x${float_char}cblat1 m) | ||||
| endif() | endif() | ||||
| @@ -65,6 +69,10 @@ else() | |||||
| constant.c) | constant.c) | ||||
| endif() | endif() | ||||
| target_link_libraries(x${float_char}cblat2 ${OpenBLAS_LIBNAME}) | 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") | 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) | target_link_libraries(x${float_char}cblat2 m) | ||||
| endif() | endif() | ||||
| @@ -90,6 +98,10 @@ else() | |||||
| constant.c) | constant.c) | ||||
| endif() | endif() | ||||
| target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME}) | 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") | 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) | target_link_libraries(x${float_char}cblat3 m) | ||||
| endif() | endif() | ||||
| @@ -107,6 +107,10 @@ set(ZDMDEIGTST zchkdmd.f90) | |||||
| macro(add_eig_executable name) | macro(add_eig_executable name) | ||||
| add_executable(${name} ${ARGN}) | add_executable(${name} ${ARGN}) | ||||
| target_link_libraries(${name} openblas${SUFFIX64_UNDERSCORE}) | target_link_libraries(${name} openblas${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}) | #${TMGLIB} ../${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) | ||||
| endmacro() | 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) | macro(add_lin_executable name) | ||||
| add_executable(${name} ${ARGN}) | add_executable(${name} ${ARGN}) | ||||
| target_link_libraries(${name} openblas${SUFFIX64_UNDERSCORE}) | target_link_libraries(${name} openblas${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}) | #${TMGLIB} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) | ||||
| endmacro() | endmacro() | ||||
| @@ -21,10 +21,14 @@ endif() | |||||
| if (BUILD_COMPLEX16) | if (BUILD_COMPLEX16) | ||||
| list (APPEND OpenBLAS_Tests zblat1 zblat2 zblat3) | list (APPEND OpenBLAS_Tests zblat1 zblat2 zblat3) | ||||
| endif() | endif() | ||||
| message (STATUS CCOMP ${CMAKE_C_COMPILER_ID} FCOMP ${CMAKE_Fortran_COMPILER_ID}) | |||||
| foreach(test_bin ${OpenBLAS_Tests}) | foreach(test_bin ${OpenBLAS_Tests}) | ||||
| add_executable(${test_bin} ${test_bin}.f) | add_executable(${test_bin} ${test_bin}.f) | ||||
| target_link_libraries(${test_bin} ${OpenBLAS_LIBNAME}) | 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() | endforeach() | ||||
| # $1 exec, $2 input, $3 output_result | # $1 exec, $2 input, $3 output_result | ||||