Skip to content
Snippets Groups Projects
Commit a782bb6f authored by Giovanni Bussi's avatar Giovanni Bussi
Browse files

Fixed installed libraries on Linux

Now linux installation is similar os OSX installation
(after b05560df).
In particular:
- plumed is linked to libplumed
- libplumed is linked to libplumedKernel
avoiding redundancies.

Notice that this will require LD_LIBRARY_PATH to be set correctly for
the Linux executable to work correctly.

Notice that I also use install_name with a command line flag
rather than with install_name_tool in order to make clear that the
two procedure are almost identical.
parent e571f9c9
No related branches found
No related tags found
No related merge requests found
...@@ -70,17 +70,23 @@ PLUMED_SCRIPTS_SH := $(shell cd ../../scripts/ ; ls *.sh 2>/dev/null) ...@@ -70,17 +70,23 @@ PLUMED_SCRIPTS_SH := $(shell cd ../../scripts/ ; ls *.sh 2>/dev/null)
PLUMED_SCRIPTS := $(PLUMED_SCRIPTS_SH:.sh=) PLUMED_SCRIPTS := $(PLUMED_SCRIPTS_SH:.sh=)
PLUMED_SCRIPTS_EXE := $(addprefix $(PLUMED_LIBDIR)plumed-,$(PLUMED_SCRIPTS)) PLUMED_SCRIPTS_EXE := $(addprefix $(PLUMED_LIBDIR)plumed-,$(PLUMED_SCRIPTS))
# plumed main exec # use shared executable by default when possible
ifeq ($(SOEXT),dylib) ifdef SOEXT
# on OSX, use shared executable by default
PLUMED_MAIN_STATIC := $(PLUMED_LIBDIR)$(PLUMED_NAME)-static PLUMED_MAIN_STATIC := $(PLUMED_LIBDIR)$(PLUMED_NAME)-static
PLUMED_MAIN_SHARED := $(PLUMED_LIBDIR)$(PLUMED_NAME) PLUMED_MAIN_SHARED := $(PLUMED_LIBDIR)$(PLUMED_NAME)
PLUMED_MAIN_RUNTIME := $(PLUMED_LIBDIR)$(PLUMED_NAME)-runtime
else else
PLUMED_MAIN_STATIC := $(PLUMED_LIBDIR)$(PLUMED_NAME) PLUMED_MAIN_STATIC := $(PLUMED_LIBDIR)$(PLUMED_NAME)
PLUMED_MAIN_SHARED := $(PLUMED_LIBDIR)$(PLUMED_NAME)-shared PLUMED_MAIN_SHARED :=
PLUMED_MAIN_RUNTIME :=
endif endif
PLUMED_MAIN_RUNTIME := $(PLUMED_LIBDIR)$(PLUMED_NAME)-runtime
# check if bindir and libdir are consistent.
# notice that this is not required yet but if we later we want
# to use $ORIGIN based rpaths this would be needed
ifneq ($(dir $(bindir)),$(dir $(libdir)))
$(error bindir and libdir are not consistent, please set them as subdirectories of the same directory)
endif
.PHONY: all links $(DIRS) $(DIRSLINKS) all-static $(PLUMED_LIBDIR)Plumed.cmake $(PLUMED_LIBDIR)Plumed.inc install $(PLUMED_SCRIPTS_EXE) install-html .PHONY: all links $(DIRS) $(DIRSLINKS) all-static $(PLUMED_LIBDIR)Plumed.cmake $(PLUMED_LIBDIR)Plumed.inc install $(PLUMED_SCRIPTS_EXE) install-html
all: all:
...@@ -439,36 +445,40 @@ else ...@@ -439,36 +445,40 @@ else
endif endif
chmod a+x $@ chmod a+x $@
# the only difference between OSX and Linux is that on OSX we hardcode full paths
# whereas on Linux we use the file name only. For Linux, this implies
# that LD_LIBRARY_PATH must be set correctly.
$(PLUMED_KERNEL):$(OBJ_KERNEL) $(PLUMED_KERNEL):$(OBJ_KERNEL)
ifeq ($(PLUMED_INSTALL),Install) ifeq ($(PLUMED_INSTALL),Install)
mkdir -p install mkdir -p install
cd install && $(LDSHARED) -o lib$(program_name)Kernel.$(SOEXT) $(addprefix ../,$(OBJ_KERNEL)) $(DYNAMIC_LIBS)
ifeq ($(SOEXT),dylib) ifeq ($(SOEXT),dylib)
install_name_tool -id "$(libdir)/lib$(program_name)Kernel.$(SOEXT)" $@ $(LDSHARED) -o $@ $^ -Wl,-install_name,"$(libdir)/lib$(program_name)Kernel.$(SOEXT)" $(DYNAMIC_LIBS)
else
$(LDSHARED) -o $@ $^ -Wl,-soname,"$(notdir $(PLUMED_KERNEL))" $(DYNAMIC_LIBS)
endif endif
else else
$(LDSHARED) -o $@ $^ $(DYNAMIC_LIBS)
ifeq ($(SOEXT),dylib) ifeq ($(SOEXT),dylib)
install_name_tool -id "$(realpath .)/libplumedKernel.$(SOEXT)" $@ $(LDSHARED) -o $@ $^ -Wl,-install_name,"$(realpath .)/libplumedKernel.$(SOEXT)" $(DYNAMIC_LIBS)
else
$(LDSHARED) -o $@ $^ -Wl,-soname,"$(notdir $(PLUMED_KERNEL))" $(DYNAMIC_LIBS)
endif endif
endif endif
# dependence on PLUMED_KERNEL is required for build on OSX to work correctly: # dependence on PLUMED_KERNEL is required for build on OSX to work correctly:
# dependence on OBJ_KERNEL is required on linux
$(PLUMED_SHARED_OBJ): $(OBJ_KERNEL) $(OBJ_WRAPPER) $(PLUMED_KERNEL) $(PLUMED_SHARED_OBJ): $(OBJ_KERNEL) $(OBJ_WRAPPER) $(PLUMED_KERNEL)
ifeq ($(PLUMED_INSTALL),Install) ifeq ($(PLUMED_INSTALL),Install)
mkdir -p install mkdir -p install
ifeq ($(SOEXT),dylib) ifeq ($(SOEXT),dylib)
cd install && $(LDSHARED) -o lib$(program_name).$(SOEXT) lib$(program_name)Kernel.dylib $(addprefix ../,$(OBJ_WRAPPER)) $(LIBS) $(LDSHARED) -o $@ $(OBJ_WRAPPER) $(PLUMED_KERNEL) -Wl,-install_name,"$(libdir)/lib$(program_name).$(SOEXT)" $(LIBS)
install_name_tool -id "$(libdir)/lib$(program_name).$(SOEXT)" $@
else else
cd install && $(LDSHARED) -o lib$(program_name).$(SOEXT) $(addprefix ../,$(OBJ_KERNEL)) $(addprefix ../,$(OBJ_WRAPPER)) $(DYNAMIC_LIBS) $(LDSHARED) -o $@ $(OBJ_WRAPPER) $(PLUMED_KERNEL) -Wl,-soname,"$(notdir $(PLUMED_SHARED_OBJ))" $(LIBS)
endif endif
else else
ifeq ($(SOEXT),dylib) ifeq ($(SOEXT),dylib)
$(LDSHARED) -o $@ $(OBJ_WRAPPER) libplumedKernel.dylib $(LIBS) $(LDSHARED) -o $@ $(OBJ_WRAPPER) $(PLUMED_KERNEL) -Wl,-install_name,"$(realpath .)/libplumed.$(SOEXT)" $(LIBS)
install_name_tool -id "$(realpath .)/libplumed.$(SOEXT)" $@
else else
$(LDSHARED) -o $@ $(OBJ_KERNEL) $(OBJ_WRAPPER) $(DYNAMIC_LIBS) $(LDSHARED) -o $@ $(OBJ_WRAPPER) $(PLUMED_KERNEL) -Wl,-soname,"$(notdir $(PLUMED_SHARED_OBJ))" $(LIBS)
endif endif
endif endif
...@@ -476,17 +486,19 @@ ifdef AR_CR ...@@ -476,17 +486,19 @@ ifdef AR_CR
$(PLUMED_WRAPPER_LIB): $(OBJ_DYNAMIC_WRAPPER) $(PLUMED_WRAPPER_LIB): $(OBJ_DYNAMIC_WRAPPER)
ifeq ($(PLUMED_INSTALL),Install) ifeq ($(PLUMED_INSTALL),Install)
mkdir -p install mkdir -p install
cd install && $(AR_CR) lib$(program_name)Wrapper.a $(addprefix ../,$(OBJ_DYNAMIC_WRAPPER))
else
$(AR_CR) $@ $(OBJ_DYNAMIC_WRAPPER)
endif endif
$(AR_CR) $@ $^
endif endif
$(PLUMED_MAIN_STATIC): $(OBJ_MAIN) $(OBJ_KERNEL) $(OBJ_WRAPPER) $(PLUMED_MAIN_STATIC): $(OBJ_MAIN) $(OBJ_KERNEL) $(OBJ_WRAPPER)
$(LD) $(LDFLAGS) $^ -o $@ $(LIBS) $(DYNAMIC_LIBS) $(LD) $(LDFLAGS) $^ -o $@ $(LIBS) $(DYNAMIC_LIBS)
$(PLUMED_MAIN_SHARED): $(OBJ_MAIN) $(PLUMED_SHARED_OBJ) $(PLUMED_MAIN_SHARED): $(OBJ_MAIN) $(PLUMED_SHARED_OBJ)
$(LD) $(LDFLAGS) $(OBJ_MAIN) "$(realpath $(PLUMED_SHARED_OBJ))" -o $@ $(LIBS) ifeq ($(SOEXT),dylib)
$(LD) $(LDFLAGS) $^ -o $@ $(LIBS)
else
$(LD) $(LDFLAGS) $^ -o $@ -Wl,-rpath-link,"$(dir $@)" $(LIBS)
endif
$(PLUMED_MAIN_RUNTIME): $(OBJ_MAIN) $(OBJ_DYNAMIC_WRAPPER) $(PLUMED_MAIN_RUNTIME): $(OBJ_MAIN) $(OBJ_DYNAMIC_WRAPPER)
$(LD) $(LDFLAGS) $^ -o $@ $(LIBS) $(LD) $(LDFLAGS) $^ -o $@ $(LIBS)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment