]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - jacinto-ai/caffe-jacinto.git/commitdiff
Add versioning to shared objects
authorLuke Yeager <luke.yeager@gmail.com>
Thu, 12 Mar 2015 21:18:55 +0000 (14:18 -0700)
committerLuke Yeager <luke.yeager@gmail.com>
Thu, 12 Mar 2015 21:18:55 +0000 (14:18 -0700)
Start at 0.10.0
Add a LIBRARY_NAME_SUFFIX for differentiating builds from different
branches (defaults to -nv)

Makefile
Makefile.config.example

index cb396794e37eed7c59f364bf00fc6b5ed02fcf11..b9dfb8c167ffce51033123d92a530d19b8e17839 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -21,9 +21,16 @@ SRC_DIRS := $(shell find * -type d -exec bash -c "find {} -maxdepth 1 \
        \( -name '*.cpp' -o -name '*.proto' \) | grep -q ." \; -print)
 
 # The target shared library name
+LIBRARY_NAME := $(PROJECT)$(LIBRARY_NAME_SUFFIX)
 LIB_BUILD_DIR := $(BUILD_DIR)/lib
-STATIC_NAME := $(LIB_BUILD_DIR)/lib$(PROJECT).a
-DYNAMIC_NAME := $(LIB_BUILD_DIR)/lib$(PROJECT).so
+STATIC_NAME := $(LIB_BUILD_DIR)/lib$(LIBRARY_NAME).a
+DYNAMIC_VERSION_MAJOR          := 0
+DYNAMIC_VERSION_MINOR          := 10
+DYNAMIC_VERSION_REVISION       := 0
+DYNAMIC_NAME_SHORT := lib$(LIBRARY_NAME).so
+DYNAMIC_SONAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR)
+DYNAMIC_VERSIONED_NAME_SHORT := $(DYNAMIC_SONAME_SHORT).$(DYNAMIC_VERSION_MINOR).$(DYNAMIC_VERSION_REVISION)
+DYNAMIC_NAME := $(LIB_BUILD_DIR)/$(DYNAMIC_VERSIONED_NAME_SHORT)
 
 ##############################
 # Get all source files
@@ -225,6 +232,7 @@ ifeq ($(LINUX), 1)
        # boost::thread is reasonably called boost_thread (compare OS X)
        # We will also explicitly add stdc++ to the link target.
        LIBRARIES += boost_thread stdc++
+       VERSIONFLAGS += -Wl,-soname,$(DYNAMIC_SONAME_SHORT) -Wl,-rpath,$(ORIGIN)/../lib
 endif
 
 # OS X:
@@ -246,6 +254,7 @@ ifeq ($(OSX), 1)
        # we need to explicitly ask for the rpath to be obeyed
        DYNAMIC_FLAGS := -install_name @rpath/libcaffe.so
        ORIGIN := @loader_path
+       VERSIONFLAGS += -Wl,-install_name,$(DYNAMIC_SONAME_SHORT) -Wl,-rpath,$(ORIGIN)/../../build/lib
 else
        ORIGIN := \$$ORIGIN
 endif
@@ -431,7 +440,7 @@ py: $(PY$(PROJECT)_SO) $(PROTO_GEN_PY)
 $(PY$(PROJECT)_SO): $(PY$(PROJECT)_SRC) $(PY$(PROJECT)_HXX) | $(DYNAMIC_NAME)
        @ echo CXX/LD -o $@ $<
        $(Q)$(CXX) -shared -o $@ $(PY$(PROJECT)_SRC) \
-               -o $@ $(LINKFLAGS) -l$(PROJECT) $(PYTHON_LDFLAGS) \
+               -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(PYTHON_LDFLAGS) \
                -Wl,-rpath,$(ORIGIN)/../../build/lib
 
 mat$(PROJECT): mat
@@ -489,7 +498,9 @@ $(ALL_BUILD_DIRS): | $(BUILD_DIR_LINK)
 
 $(DYNAMIC_NAME): $(OBJS) | $(LIB_BUILD_DIR)
        @ echo LD -o $@
-       $(Q)$(CXX) -shared -o $@ $(OBJS) $(LINKFLAGS) $(LDFLAGS) $(DYNAMIC_FLAGS)
+       $(Q)$(CXX) -shared -o $@ $(OBJS) $(VERSIONFLAGS) $(LINKFLAGS) $(LDFLAGS) $(DYNAMIC_FLAGS)
+       @ cd $(BUILD_DIR)/lib; rm -f $(DYNAMIC_SONAME_SHORT); ln -s $(DYNAMIC_VERSIONED_NAME_SHORT) $(DYNAMIC_SONAME_SHORT)
+       @ cd $(BUILD_DIR)/lib; rm -f $(DYNAMIC_NAME_SHORT);   ln -s $(DYNAMIC_SONAME_SHORT) $(DYNAMIC_NAME_SHORT)
 
 $(STATIC_NAME): $(OBJS) | $(LIB_BUILD_DIR)
        @ echo AR -o $@
@@ -520,19 +531,19 @@ $(TEST_ALL_BIN): $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) \
                | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
        @ echo CXX/LD -o $@ $<
        $(Q)$(CXX) $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) \
-               -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(PROJECT) -Wl,-rpath,$(ORIGIN)/../lib
+               -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
 
 $(TEST_CU_BINS): $(TEST_BIN_DIR)/%.testbin: $(TEST_CU_BUILD_DIR)/%.o \
        $(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
        @ echo LD $<
        $(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
-               -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(PROJECT) -Wl,-rpath,$(ORIGIN)/../lib
+               -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
 
 $(TEST_CXX_BINS): $(TEST_BIN_DIR)/%.testbin: $(TEST_CXX_BUILD_DIR)/%.o \
        $(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
        @ echo LD $<
        $(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
-               -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(PROJECT) -Wl,-rpath,$(ORIGIN)/../lib
+               -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
 
 # Target for extension-less symlinks to tool binaries with extension '*.bin'.
 $(TOOL_BUILD_DIR)/%: $(TOOL_BUILD_DIR)/%.bin | $(TOOL_BUILD_DIR)
@@ -541,12 +552,12 @@ $(TOOL_BUILD_DIR)/%: $(TOOL_BUILD_DIR)/%.bin | $(TOOL_BUILD_DIR)
 
 $(TOOL_BINS): %.bin : %.o | $(DYNAMIC_NAME)
        @ echo CXX/LD -o $@
-       $(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(PROJECT) $(LDFLAGS) \
+       $(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS) \
                -Wl,-rpath,$(ORIGIN)/../lib
 
 $(EXAMPLE_BINS): %.bin : %.o | $(DYNAMIC_NAME)
        @ echo CXX/LD -o $@
-       $(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(PROJECT) $(LDFLAGS) \
+       $(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS) \
                -Wl,-rpath,$(ORIGIN)/../../lib
 
 proto: $(PROTO_GEN_CC) $(PROTO_GEN_HEADER)
@@ -608,6 +619,8 @@ $(DISTRIBUTE_DIR): all py | $(DISTRIBUTE_SUBDIRS)
        # add libraries
        cp $(STATIC_NAME) $(DISTRIBUTE_DIR)/lib
        cp $(DYNAMIC_NAME) $(DISTRIBUTE_DIR)/lib
+       cd $(DISTRIBUTE_DIR)/lib; rm -f $(DYNAMIC_SONAME_SHORT); ln -s $(DYNAMIC_VERSIONED_NAME_SHORT) $(DYNAMIC_SONAME_SHORT)
+       cd $(DISTRIBUTE_DIR)/lib; rm -f $(DYNAMIC_NAME_SHORT);   ln -s $(DYNAMIC_SONAME_SHORT) $(DYNAMIC_NAME_SHORT)
        # add python - it's not the standard way, indeed...
        cp -r python $(DISTRIBUTE_DIR)/python
 
index 7a8aafd7c9f9169d600f0095f14b48c50ecf436a..8124b49512acb23af8921e5d5b0c3213dc0d2756 100644 (file)
@@ -1,8 +1,8 @@
 ## Refer to http://caffe.berkeleyvision.org/installation.html
 # Contributions simplifying and improving our build system are welcome!
 
-# cuDNN acceleration switch (uncomment to build with cuDNN).
-USE_CUDNN := 1
+# cuDNN acceleration switch (comment to build without cuDNN).
+USE_CUDNN := 1
 
 # CPU-only switch (uncomment to build without GPU support).
 # CPU_ONLY := 1
@@ -45,7 +45,8 @@ BLAS := atlas
 # NOTE: this is required only if you will compile the python interface.
 # We need to be able to find Python.h and numpy/arrayobject.h.
 PYTHON_INCLUDE := /usr/include/python2.7 \
-               /usr/lib/python2.7/dist-packages/numpy/core/include
+               /usr/lib/python2.7/dist-packages/numpy/core/include \
+               /usr/local/lib/python2.7/dist-packages/numpy/core/include
 # Anaconda Python distribution is quite popular. Include path:
 # Verify anaconda location, sometimes it's in root.
 # ANACONDA_HOME := $(HOME)/anaconda
@@ -79,3 +80,6 @@ TEST_GPUID := 0
 
 # enable pretty build (comment to see full commands)
 Q ?= @
+
+# shared object suffix name to differentiate branches
+LIBRARY_NAME_SUFFIX := -nv