Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit f7d78fb

Browse files
ferdonlinepramodk
authored andcommitted
Fixing soname/install_name mac linking probs (#177)
- When creating libnrnmech in mac the subsequent link would bring part of the original output dir into the link entry. That is because mac writes all outpyt libname in the install_name (similar to soname). Further, to be foundable via rpath, @rpath had to be in the name. - This patch fixes both issues and special-core now works in MAC - Fix lib soname in linux and _mod_func regen
1 parent 5af3a6f commit f7d78fb

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

extra/nrnivmodl_core_makefile.in

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ datadir_mod2c := @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_DATADIR@/mod2c
2424
LDFLAGS = $(LINKFLAGS) @CORENRN_LINK_DEFS@
2525
CORENRNLIB_FLAGS = -L$(libdir) -lcoreneuron
2626
OS_NAME := $(shell uname)
27+
_cm =,
2728

2829
# We rebuild the include dirs since a lot of stuff changes place
2930
INCLUDES = $(INCFLAGS) -I$(incdir) -I$(incdir)/coreneuron/utils/randoms
@@ -57,11 +58,12 @@ dimplic_o = $(OBJS_DIR)/_dimplic.o
5758

5859
special = $(OUTPUT)/special-core
5960
LIB_SUFFIX_ = $(if $(MECH_NAME),_$(MECH_NAME),)
60-
coremech_libname = corenrnmech$(LIB_SUFFIX_)-$(MECH_VERSION)
61+
coremech_libname = corenrnmech$(LIB_SUFFIX_).$(MECH_VERSION)
6162
coremech_lib = $(OUTPUT)/lib$(coremech_libname)@CMAKE_SHARED_LIBRARY_SUFFIX@
6263

6364
# If no DESTDIR (we are probably just building) we use $ORIGIN (@loader_path in OSX)
6465
_ORIGIN := $(if $(filter Darwin,$(OS_NAME)),@loader_path,$$ORIGIN)
66+
_SONAME := -Wl,$(if $(filter Darwin,$(OS_NAME)),-install_name${_cm}@rpath/,-soname${_cm})$(notdir ${coremech_lib})
6567
DESTDIR_RPATH = $(if $(DESTDIR),$(DESTDIR)/lib,$(_ORIGIN))
6668

6769
C_RESET := \033[0m
@@ -78,9 +80,9 @@ $(special): $(coremech_lib)
7880
-L $(OUTPUT) -l$(coremech_libname) $(CORENRNLIB_FLAGS) -Wl,-rpath,'$(DESTDIR_RPATH)' -Wl,-rpath,$(libdir) $(LDFLAGS)
7981

8082

81-
$(coremech_lib): $(mod_func_o) $(dimplic_o) $(mod_objs)
83+
$(coremech_lib): $(mod_func_o) $(dimplic_o) $(mod_objs) build_always
8284
@printf " => $(C_GREEN)LINKING$(C_RESET) library $(coremech_lib) Mod files: $(mod_files) (+ $(OPTMODS))\n"
83-
$(CXX_LINK_SHARED) -I $(incdir) -DADDITIONAL_MECHS $(datadir)/enginemech.cpp -o ${coremech_lib} \
85+
$(CXX_LINK_SHARED) -I $(incdir) -DADDITIONAL_MECHS $(datadir)/enginemech.cpp -o ${coremech_lib} ${_SONAME} \
8486
$(mod_func_o) $(dimplic_o) $(mod_objs) $(datadir)/libscopmath.a $(CORENRNLIB_FLAGS) -Wl,-rpath,$(libdir) $(LDFLAGS)
8587

8688

@@ -105,7 +107,7 @@ $(MODC_DIR)/%.cpp: $(datadir_mod2c)/%.cpp | $(MODC_DIR)
105107
$(mod_func_c): build_always | $(MODC_DIR)
106108
@printf " -> $(C_GREEN)Generating$(C_RESET) $(mod_func_c)\n"
107109
perl $(datadir)/mod_func.c.pl $(OPTMODS) $(mod_files) > $(mod_func_c).tmp
108-
diff -q $(mod_func_c).tmp $(mod_func_c) || echo "Replacing mod_func.c" && mv $(mod_func_c).tmp $(mod_func_c)
110+
diff -q $(mod_func_c).tmp $(mod_func_c) || { echo "Replacing mod_func.c"; mv $(mod_func_c).tmp $(mod_func_c); }
109111

110112

111113
# Header to avoid function callbacks using function pointers

0 commit comments

Comments
 (0)