From bbed7dcbeee876de74941b8b123b3c2cf28d0874 Mon Sep 17 00:00:00 2001 From: Pramod Kumbhar Date: Wed, 22 Jun 2022 09:56:59 +0200 Subject: [PATCH 1/2] Respect CMAKE_EXE_LINKER_FLAGS/CMAKE_SHARED_LINKER_FLAGS flags set via CLI In case of Clang, we were always overriding the above mentioned flags and hence cmake args were ignored (resuliting in link errors) --- CMake/config/CompilerFlagsHelpers.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMake/config/CompilerFlagsHelpers.cmake b/CMake/config/CompilerFlagsHelpers.cmake index dcbeb049c..d11a63672 100644 --- a/CMake/config/CompilerFlagsHelpers.cmake +++ b/CMake/config/CompilerFlagsHelpers.cmake @@ -113,8 +113,8 @@ foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST}) # Force same ld behavior as when called from gcc --as-needed forces the linker to check whether # a dynamic library mentioned in the command line is actually needed by the objects being # linked. Symbols needed in shared objects are already linked when building that library. - set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_SHARED_LINKER_FLAGS}") # rest of the world else() From 6f9c31e54f65ead9165e43fe268144873a37c0c1 Mon Sep 17 00:00:00 2001 From: Pramod Kumbhar Date: Wed, 22 Jun 2022 10:17:30 +0200 Subject: [PATCH 2/2] Add linker flags after coreneuron library (clang and -Wl,--as-needed effect) --- extra/nrnivmodl_core_makefile.in | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/extra/nrnivmodl_core_makefile.in b/extra/nrnivmodl_core_makefile.in index 62daa7dd8..565cefa84 100644 --- a/extra/nrnivmodl_core_makefile.in +++ b/extra/nrnivmodl_core_makefile.in @@ -84,7 +84,8 @@ endif CXXFLAGS = @CORENRN_CXX_FLAGS@ CXX_COMPILE_CMD = $(CXX) $(CXXFLAGS) @CMAKE_CXX_COMPILE_OPTIONS_PIC@ @CORENRN_COMMON_COMPILE_DEFS@ $(INCLUDES) -CXX_LINK_EXE_CMD = $(CXX) $(CXXFLAGS) @CMAKE_EXE_LINKER_FLAGS@ +CXX_LINK_EXE_CMD = $(CXX) $(CXXFLAGS) +CXX_LINK_EXE_FLAGS = @CMAKE_EXE_LINKER_FLAGS@ CXX_SHARED_LIB_CMD = $(CXX) $(CXXFLAGS) @CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS@ @CMAKE_SHARED_LIBRARY_CXX_FLAGS@ @CMAKE_SHARED_LINKER_FLAGS@ # ISPC compilation and link commands @@ -210,9 +211,9 @@ endif # main target to build binary $(SPECIAL_EXE): coremech_lib_target @printf " => $(C_GREEN)Binary$(C_RESET) creating $(SPECIAL_EXE)\n" - $(CXX_LINK_EXE_CMD) -o $(SPECIAL_EXE) $(CORENRN_SHARE_CORENRN_DIR)/coreneuron.cpp \ + $(CXX_LINK_EXE_CMD) -o $(SPECIAL_EXE) $(CORENRN_SHARE_CORENRN_DIR)/coreneuron.cpp \ -I$(CORENRN_INC_DIR) $(INCFLAGS) \ - -L$(OUTPUT_DIR) -l$(COREMECH_LIB_NAME) $(CORENRNLIB_FLAGS) $(LDFLAGS) \ + -L$(OUTPUT_DIR) -l$(COREMECH_LIB_NAME) $(CORENRNLIB_FLAGS) $(LDFLAGS) $(CXX_LINK_EXE_FLAGS) \ -Wl,-rpath,'$(LIB_RPATH)' -Wl,-rpath,$(CORENRN_LIB_DIR) -Wl,-rpath,'$(INSTALL_LIB_RPATH)' coremech_lib_target: $(corenrnmech_lib_target)