From 6391db001f30b03eb96c6eaf7e7b90f8832913aa Mon Sep 17 00:00:00 2001 From: Anders Kvellestad Date: Fri, 17 Nov 2023 22:10:29 +0100 Subject: [PATCH 1/2] Added -rdynamic and removed -fvisibility=hidden flags in CMakeLists.txt --- CMakeLists.txt | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b76498ef4f..04b27ef3c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -500,15 +500,18 @@ set(BACKEND_GNU99_FLAGS "${BACKEND_C_FLAGS} -std=gnu99") # Should we use pragmas to suppress common compiler warnings from external libraries? option(SUPPRESS_LIBRARY_WARNINGS "Suppress common compiler warnings due to external libraries" ON) -# Make symbols hidden by default when compiling GAMBIT source files only -if(${CMAKE_MAJOR_VERSION} MATCHES "2") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fvisibility=hidden") -else() - set(CMAKE_CXX_VISIBILITY_PRESET hidden) - set(CMAKE_Fortran_VISIBILITY_PRESET hidden) - set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE) -endif() + +# LUMI debug +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") +# # Make symbols hidden by default when compiling GAMBIT source files only +# if(${CMAKE_MAJOR_VERSION} MATCHES "2") +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") +# set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fvisibility=hidden") +# else() +# set(CMAKE_CXX_VISIBILITY_PRESET hidden) +# set(CMAKE_Fortran_VISIBILITY_PRESET hidden) +# set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE) +# endif() # Check for optional packages and disable sections of GAMBIT accordingly include(cmake/optional.cmake) From 8b963bf487dd4f47cd4afd05fb280dcf63f507dd Mon Sep 17 00:00:00 2001 From: Anders Kvellestad Date: Thu, 23 Nov 2023 22:46:22 +0100 Subject: [PATCH 2/2] Don't hide GAMBIT symbols if compiler/linker option "-rdynamic" or "-Wl,--export-dynamic" is set by the user. --- CMakeLists.txt | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04b27ef3c6..91df280836 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -500,18 +500,27 @@ set(BACKEND_GNU99_FLAGS "${BACKEND_C_FLAGS} -std=gnu99") # Should we use pragmas to suppress common compiler warnings from external libraries? option(SUPPRESS_LIBRARY_WARNINGS "Suppress common compiler warnings due to external libraries" ON) +# Unless "-rdynamic" or "-Wl,--export-dynamic" is set, make symbols hidden by default when compiling GAMBIT source files only +string(FIND ${CMAKE_CXX_FLAGS} "-rdynamic" FOUND_RDYNAMIC_CXX) +string(FIND ${CMAKE_CXX_FLAGS} "--export-dynamic" FOUND_EXPORT_DYNAMIC_CXX) +if(${FOUND_RDYNAMIC_CXX} EQUAL -1 AND ${FOUND_EXPORT_DYNAMIC_CXX} EQUAL -1) + if(${CMAKE_MAJOR_VERSION} MATCHES "2") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") + else() + set(CMAKE_CXX_VISIBILITY_PRESET hidden) + set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE) + endif() +endif() -# LUMI debug -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") -# # Make symbols hidden by default when compiling GAMBIT source files only -# if(${CMAKE_MAJOR_VERSION} MATCHES "2") -# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") -# set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fvisibility=hidden") -# else() -# set(CMAKE_CXX_VISIBILITY_PRESET hidden) -# set(CMAKE_Fortran_VISIBILITY_PRESET hidden) -# set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE) -# endif() +string(FIND ${CMAKE_Fortran_FLAGS} "-rdynamic" FOUND_RDYNAMIC_FORTRAN) +string(FIND ${CMAKE_Fortran_FLAGS} "--export-dynamic" FOUND_EXPORT_DYNAMIC_FORTRAN) +if(${FOUND_RDYNAMIC_FORTRAN} EQUAL -1 AND ${FOUND_EXPORT_DYNAMIC_FORTRAN} EQUAL -1) + if(${CMAKE_MAJOR_VERSION} MATCHES "2") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fvisibility=hidden") + else() + set(CMAKE_Fortran_VISIBILITY_PRESET hidden) + endif() +endif() # Check for optional packages and disable sections of GAMBIT accordingly include(cmake/optional.cmake)