diff options
author | Evan Shelhamer <shelhamer@imaginarynumber.net> | 2016-01-22 18:54:17 -0800 |
---|---|---|
committer | Evan Shelhamer <shelhamer@imaginarynumber.net> | 2016-01-22 18:54:17 -0800 |
commit | 19ee69d3d2df1aa5af5a0e81b5678c9ebfb2dbfb (patch) | |
tree | 2bc029081827f08e8a873c0bdabeb2024eeedc63 | |
parent | a97300c85a0e2171c2f5744877a1682cd467ae79 (diff) | |
parent | 67b497d4ec70018b168639df1e4342f78fb44bb0 (diff) | |
download | caffe-19ee69d3d2df1aa5af5a0e81b5678c9ebfb2dbfb.tar.gz caffe-19ee69d3d2df1aa5af5a0e81b5678c9ebfb2dbfb.tar.bz2 caffe-19ee69d3d2df1aa5af5a0e81b5678c9ebfb2dbfb.zip |
Merge pull request #3311 from lukeyeager/bvlc/versioning
Add versioning to build and mark version 1.0.0-rc3
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rw-r--r-- | Makefile | 30 | ||||
-rw-r--r-- | cmake/Summary.cmake | 2 | ||||
-rw-r--r-- | include/caffe/common.hpp | 4 | ||||
-rw-r--r-- | python/caffe/__init__.py | 1 | ||||
-rw-r--r-- | python/caffe/_caffe.cpp | 3 | ||||
-rw-r--r-- | src/caffe/CMakeLists.txt | 4 | ||||
-rw-r--r-- | tools/caffe.cpp | 3 |
8 files changed, 42 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c446c608..32cc42ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,11 @@ endif() # ---[ Caffe project project(Caffe C CXX) +# ---[ Caffe version +set(CAFFE_TARGET_VERSION "1.0.0-rc3") +set(CAFFE_TARGET_SOVERSION "1.0.0-rc3") +add_definitions(-DCAFFE_VERSION=${CAFFE_TARGET_VERSION}) + # ---[ Using cmake scripts and modules list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) @@ -29,9 +29,17 @@ 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) 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 := 1 +DYNAMIC_VERSION_MINOR := 0 +DYNAMIC_VERSION_REVISION := 0-rc3 +DYNAMIC_NAME_SHORT := lib$(LIBRARY_NAME).so +#DYNAMIC_SONAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR) +DYNAMIC_VERSIONED_NAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR).$(DYNAMIC_VERSION_MINOR).$(DYNAMIC_VERSION_REVISION) +DYNAMIC_NAME := $(LIB_BUILD_DIR)/$(DYNAMIC_VERSIONED_NAME_SHORT) +COMMON_FLAGS += -DCAFFE_VERSION=$(DYNAMIC_VERSION_MAJOR).$(DYNAMIC_VERSION_MINOR).$(DYNAMIC_VERSION_REVISION) ############################## # Get all source files @@ -253,6 +261,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_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../lib endif # OS X: @@ -276,6 +285,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_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../../build/lib else ORIGIN := \$$ORIGIN endif @@ -478,7 +488,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 @@ -542,7 +552,8 @@ $(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_NAME_SHORT); ln -s $(DYNAMIC_VERSIONED_NAME_SHORT) $(DYNAMIC_NAME_SHORT) $(STATIC_NAME): $(OBJS) | $(LIB_BUILD_DIR) @ echo AR -o $@ @@ -573,19 +584,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) @@ -594,12 +605,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) @@ -661,6 +672,7 @@ $(DISTRIBUTE_DIR): all py | $(DISTRIBUTE_SUBDIRS) # add libraries cp $(STATIC_NAME) $(DISTRIBUTE_DIR)/lib install -m 644 $(DYNAMIC_NAME) $(DISTRIBUTE_DIR)/lib + cd $(DISTRIBUTE_DIR)/lib; rm -f $(DYNAMIC_NAME_SHORT); ln -s $(DYNAMIC_VERSIONED_NAME_SHORT) $(DYNAMIC_NAME_SHORT) # add python - it's not the standard way, indeed... cp -r python $(DISTRIBUTE_DIR)/python diff --git a/cmake/Summary.cmake b/cmake/Summary.cmake index 557a6f04..ba025cf8 100644 --- a/cmake/Summary.cmake +++ b/cmake/Summary.cmake @@ -101,7 +101,7 @@ function(caffe_print_configuration_summary) caffe_status("") caffe_status("******************* Caffe Configuration Summary *******************") caffe_status("General:") - caffe_status(" Version : ${Caffe_VERSION}") + caffe_status(" Version : ${CAFFE_TARGET_VERSION}") caffe_status(" Git : ${Caffe_GIT_VERSION}") caffe_status(" System : ${CMAKE_SYSTEM_NAME}") caffe_status(" C++ compiler : ${CMAKE_CXX_COMPILER}") diff --git a/include/caffe/common.hpp b/include/caffe/common.hpp index 1df6b9a1..6b902a42 100644 --- a/include/caffe/common.hpp +++ b/include/caffe/common.hpp @@ -18,6 +18,10 @@ #include "caffe/util/device_alternate.hpp" +// Convert macro to string +#define STRINGIFY(m) #m +#define AS_STRING(m) STRINGIFY(m) + // gflags 2.1 issue: namespace google was changed to gflags without warning. // Luckily we will be able to use GFLAGS_GFLAGS_H_ to detect if it is version // 2.1. If yes, we will add a temporary solution to redirect the namespace. diff --git a/python/caffe/__init__.py b/python/caffe/__init__.py index ccda1bca..e2881b89 100644 --- a/python/caffe/__init__.py +++ b/python/caffe/__init__.py @@ -1,5 +1,6 @@ from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver from ._caffe import set_mode_cpu, set_mode_gpu, set_device, Layer, get_solver, layer_type_list +from ._caffe import __version__ from .proto.caffe_pb2 import TRAIN, TEST from .classifier import Classifier from .detector import Detector diff --git a/python/caffe/_caffe.cpp b/python/caffe/_caffe.cpp index 4ea2ec60..12a57455 100644 --- a/python/caffe/_caffe.cpp +++ b/python/caffe/_caffe.cpp @@ -212,6 +212,9 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(SolveOverloads, Solve, 0, 1); BOOST_PYTHON_MODULE(_caffe) { // below, we prepend an underscore to methods that will be replaced // in Python + + bp::scope().attr("__version__") = AS_STRING(CAFFE_VERSION); + // Caffe utility functions bp::def("set_mode_cpu", &set_mode_cpu); bp::def("set_mode_gpu", &set_mode_gpu); diff --git a/src/caffe/CMakeLists.txt b/src/caffe/CMakeLists.txt index 40e6c11f..8a80c940 100644 --- a/src/caffe/CMakeLists.txt +++ b/src/caffe/CMakeLists.txt @@ -20,6 +20,10 @@ endif() add_library(caffe ${srcs}) target_link_libraries(caffe proto ${Caffe_LINKER_LIBS}) caffe_default_properties(caffe) +set_target_properties(caffe PROPERTIES + VERSION ${CAFFE_TARGET_VERSION} + SOVERSION ${CAFFE_TARGET_SOVERSION} + ) # ---[ Tests add_subdirectory(test) diff --git a/tools/caffe.cpp b/tools/caffe.cpp index 6b342ace..470165ad 100644 --- a/tools/caffe.cpp +++ b/tools/caffe.cpp @@ -3,6 +3,7 @@ namespace bp = boost::python; #endif +#include <gflags/gflags.h> #include <glog/logging.h> #include <cstring> @@ -378,6 +379,8 @@ RegisterBrewFunction(time); int main(int argc, char** argv) { // Print output to stderr (while still logging). FLAGS_alsologtostderr = 1; + // Set version + gflags::SetVersionString(AS_STRING(CAFFE_VERSION)); // Usage message. gflags::SetUsageMessage("command line brew\n" "usage: caffe <command> <args>\n\n" |