From 52909b777b7030a9fe8d458e47ccd27e6a24a768 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Thu, 9 Jul 2020 11:22:13 -0700 Subject: [PATCH 1/2] FORTLINK: Guess of Unknown Guess the FORTLINK API convention is `UNDERSCORE` for unknown values, unless it's the classic (non-clang) IBM Fortran compiler, where it's `LOWERCASE`. --- Tools/CMake/AMReX_Defines.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Tools/CMake/AMReX_Defines.cmake b/Tools/CMake/AMReX_Defines.cmake index 3e58cbdf630..05d982c65da 100644 --- a/Tools/CMake/AMReX_Defines.cmake +++ b/Tools/CMake/AMReX_Defines.cmake @@ -105,7 +105,13 @@ function ( set_amrex_defines ) set(FORTLINK "UNDERSCORE") message(STATUS "Fortran name mangling scheme: ${FORTLINK} (lower case, append underscore)") else () - message(AUTHOR_WARNING "Fortran to C mangling not compatible with AMReX code") + # now we have to guess + if (CMAKE_Fortran_COMPILER_ID MATCHES XL) # old IBM prior to XLClang + set(FORTLINK "LOWERCASE") + else () + set(FORTLINK "UNDERSCORE") + endif() + message(WARNING "Fortran to C mangling not compatible with AMReX code, assuming '${FORTLINK}'") endif () add_amrex_define( BL_FORT_USE_${FORTLINK} ) # Only legacy form From 5f226adedebe1b219af795a87555ac18f4e59922 Mon Sep 17 00:00:00 2001 From: Johannes Blaschke Date: Sat, 11 Jul 2020 23:28:18 -0700 Subject: [PATCH 2/2] add edge case where FORTLINK couldn't be determined by CMake --- Tools/CMake/AMReX_Defines.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tools/CMake/AMReX_Defines.cmake b/Tools/CMake/AMReX_Defines.cmake index 05d982c65da..c77efaa1b79 100644 --- a/Tools/CMake/AMReX_Defines.cmake +++ b/Tools/CMake/AMReX_Defines.cmake @@ -97,7 +97,8 @@ function ( set_amrex_defines ) set( FORTLINK "" ) - if ( FortranCInterface_GLOBAL_SUFFIX STREQUAL "" ) + if ( (FortranCInterface_GLOBAL_SUFFIX STREQUAL "" ) AND NOT + (FortranCInterface_GLOBAL_CASE STREQUAL "") ) set(FORTLINK "${FortranCInterface_GLOBAL_CASE}CASE" ) message(STATUS "Fortran name mangling scheme: ${FORTLINK} (no append underscore)") elseif ( (FortranCInterface_GLOBAL_SUFFIX STREQUAL "_") AND