From 6df18dd59319fef4b8a8f4d33225aa96391575a4 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 21 Dec 2024 22:50:26 +0100 Subject: [PATCH] The Windows version of Intel ifx does not add trailing underlines to symbols --- cmake/f_check.cmake | 144 +++++++++++++++++++++++--------------------- 1 file changed, 74 insertions(+), 70 deletions(-) diff --git a/cmake/f_check.cmake b/cmake/f_check.cmake index 4c4f5ac04..f64277d71 100644 --- a/cmake/f_check.cmake +++ b/cmake/f_check.cmake @@ -1,70 +1,74 @@ -## -## Author: Hank Anderson -## Copyright: (c) Stat-Ease, Inc. -## Created: 12/29/14 -## Last Modified: 12/29/14 -## Description: Ported from the OpenBLAS/f_check perl script. -## This is triggered by prebuild.cmake and runs before any of the code is built. -## Appends Fortran information to config.h and Makefile.conf. - -# CMake vars set by this file: -# F_COMPILER -# FC -# BU -# NOFORTRAN -# NEED2UNDERSCORES -# FEXTRALIB - -# Defines set by this file: -# BUNDERSCORE -# NEEDBUNDERSCORE -# NEED2UNDERSCORES - -include(CheckLanguage) -check_language(Fortran) -if(CMAKE_Fortran_COMPILER) - enable_language(Fortran) -else() - set (NOFORTRAN 1) - if (NOT NO_LAPACK) - if (NOT XXXXX) - message(STATUS "No Fortran compiler found, can build only BLAS and f2c-converted LAPACK") - set(C_LAPACK 1) - if (INTERFACE64) - set (CCOMMON_OPT "${CCOMMON_OPT} -DLAPACK_ILP64") - endif () - set(TIMER "NONE") - else () - message(STATUS "No Fortran compiler found, can build only BLAS") - endif() - endif() -endif() - -if (NOT ONLY_CBLAS) - # run f_check (appends to TARGET files) - - # TODO: detect whether underscore needed, set #defines and BU appropriately - use try_compile - # TODO: set FEXTRALIB flags a la f_check? - - set(BU "_") - file(APPEND ${TARGET_CONF_TEMP} - "#define BUNDERSCORE _\n" - "#define NEEDBUNDERSCORE 1\n" - "#define NEED2UNDERSCORES 0\n") - -else () - - #When we only build CBLAS, we set NOFORTRAN=2 - set(NOFORTRAN 2) - set(NO_FBLAS 1) - #set(F_COMPILER GFORTRAN) # CMake handles the fortran compiler - set(BU "_") - file(APPEND ${TARGET_CONF_TEMP} - "#define BUNDERSCORE _\n" - "#define NEEDBUNDERSCORE 1\n") -endif() - -if (CMAKE_Fortran_COMPILER) -get_filename_component(F_COMPILER ${CMAKE_Fortran_COMPILER} NAME_WE) -string(TOUPPER ${F_COMPILER} F_COMPILER) -endif() +## +## Author: Hank Anderson +## Copyright: (c) Stat-Ease, Inc. +## Created: 12/29/14 +## Last Modified: 12/29/14 +## Description: Ported from the OpenBLAS/f_check perl script. +## This is triggered by prebuild.cmake and runs before any of the code is built. +## Appends Fortran information to config.h and Makefile.conf. + +# CMake vars set by this file: +# F_COMPILER +# FC +# BU +# NOFORTRAN +# NEED2UNDERSCORES +# FEXTRALIB + +# Defines set by this file: +# BUNDERSCORE +# NEEDBUNDERSCORE +# NEED2UNDERSCORES + +include(CheckLanguage) +check_language(Fortran) +if(CMAKE_Fortran_COMPILER) + enable_language(Fortran) +else() + set (NOFORTRAN 1) + if (NOT NO_LAPACK) + if (NOT XXXXX) + message(STATUS "No Fortran compiler found, can build only BLAS and f2c-converted LAPACK") + set(C_LAPACK 1) + if (INTERFACE64) + set (CCOMMON_OPT "${CCOMMON_OPT} -DLAPACK_ILP64") + endif () + set(TIMER "NONE") + else () + message(STATUS "No Fortran compiler found, can build only BLAS") + endif() + endif() +endif() + +if (NOT ONLY_CBLAS) + # run f_check (appends to TARGET files) + + # TODO: detect whether underscore needed, set #defines and BU appropriately - use try_compile + # TODO: set FEXTRALIB flags a la f_check? + if (NOT (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND ${CMAKE_Fortran_COMPILER_ID} MATCHES "IntelLLVM")) + set(BU "_") + file(APPEND ${TARGET_CONF_TEMP} + "#define BUNDERSCORE _\n" + "#define NEEDBUNDERSCORE 1\n" + "#define NEED2UNDERSCORES 0\n") + else () + file(APPEND ${TARGET_CONF_TEMP} + "#define NEEDBUNDERSCORE 0\n" + "#define NEED2UNDERSCORES 0\n") + endif() +else () + + #When we only build CBLAS, we set NOFORTRAN=2 + set(NOFORTRAN 2) + set(NO_FBLAS 1) + #set(F_COMPILER GFORTRAN) # CMake handles the fortran compiler + set(BU "_") + file(APPEND ${TARGET_CONF_TEMP} + "#define BUNDERSCORE _\n" + "#define NEEDBUNDERSCORE 1\n") +endif() + +if (CMAKE_Fortran_COMPILER) +get_filename_component(F_COMPILER ${CMAKE_Fortran_COMPILER} NAME_WE) +string(TOUPPER ${F_COMPILER} F_COMPILER) +endif()