| PROJECT := caffe |
|
|
| CONFIG_FILE := Makefile.config |
| # Explicitly check for the config file, otherwise make -k will proceed anyway. |
| ifeq ($(wildcard $(CONFIG_FILE)),) |
| $(error $(CONFIG_FILE) not found. See $(CONFIG_FILE).example.) |
| endif |
| include $(CONFIG_FILE) |
|
|
| BUILD_DIR_LINK := $(BUILD_DIR) |
| ifeq ($(RELEASE_BUILD_DIR),) |
| RELEASE_BUILD_DIR := .$(BUILD_DIR)_release |
| endif |
| ifeq ($(DEBUG_BUILD_DIR),) |
| DEBUG_BUILD_DIR := .$(BUILD_DIR)_debug |
| endif |
|
|
| DEBUG ?= 0 |
| ifeq ($(DEBUG), 1) |
| BUILD_DIR := $(DEBUG_BUILD_DIR) |
| OTHER_BUILD_DIR := $(RELEASE_BUILD_DIR) |
| else |
| BUILD_DIR := $(RELEASE_BUILD_DIR) |
| OTHER_BUILD_DIR := $(DEBUG_BUILD_DIR) |
| endif |
|
|
| # All of the directories containing code. |
| 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$(LIBRARY_NAME).a |
| DYNAMIC_VERSION_MAJOR := 1 |
| DYNAMIC_VERSION_MINOR := 0 |
| 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_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) |
| # OpenPose: added C++11 flag to avoid crashing in some old GCC compilers |
| COMMON_FLAGS += -std=c++11 |
| # OpenPose: end modified |
|
|
| ############################## |
| # Get all source files |
| ############################## |
| # CXX_SRCS are the source files excluding the test ones. |
| CXX_SRCS := $(shell find src/$(PROJECT) ! -name "test_*.cpp" -name "*.cpp") |
| # CU_SRCS are the cuda source files |
| CU_SRCS := $(shell find src/$(PROJECT) ! -name "test_*.cu" -name "*.cu") |
| # TEST_SRCS are the test source files |
| TEST_MAIN_SRC := src/$(PROJECT)/test/test_caffe_main.cpp |
| TEST_SRCS := $(shell find src/$(PROJECT) -name "test_*.cpp") |
| TEST_SRCS := $(filter-out $(TEST_MAIN_SRC), $(TEST_SRCS)) |
| TEST_CU_SRCS := $(shell find src/$(PROJECT) -name "test_*.cu") |
| GTEST_SRC := src/gtest/gtest-all.cpp |
| # TOOL_SRCS are the source files for the tool binaries |
| TOOL_SRCS := $(shell find tools -name "*.cpp") |
| # EXAMPLE_SRCS are the source files for the example binaries |
| EXAMPLE_SRCS := $(shell find examples -name "*.cpp") |
| # BUILD_INCLUDE_DIR contains any generated header files we want to include. |
| BUILD_INCLUDE_DIR := $(BUILD_DIR)/src |
| # PROTO_SRCS are the protocol buffer definitions |
| PROTO_SRC_DIR := src/$(PROJECT)/proto |
| PROTO_SRCS := $(wildcard $(PROTO_SRC_DIR) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| \1/') |
| XCODE_CLT_GEQ_7 := $(shell [ $(XCODE_CLT_VER) -gt 6 ] && echo 1) |
| XCODE_CLT_GEQ_6 := $(shell [ $(XCODE_CLT_VER) -gt 5 ] && echo 1) |
| ifeq ($(XCODE_CLT_GEQ_7), 1) |
| BLAS_INCLUDE ?= /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/$(shell ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ | sort | tail -1)/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/Headers |
| else ifeq ($(XCODE_CLT_GEQ_6), 1) |
| BLAS_INCLUDE ?= /System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Headers/ |
| LDFLAGS += -framework Accelerate |
| else |
| BLAS_INCLUDE ?= /System/Library/Frameworks/vecLib.framework/Versions/Current/Headers/ |
| LDFLAGS += -framework vecLib |
| endif |
| endif |
| endif |
| INCLUDE_DIRS += $(BLAS_INCLUDE) |
| LIBRARY_DIRS += $(BLAS_LIB) |
| |
| LIBRARY_DIRS += $(LIB_BUILD_DIR) |
| |
| # Automatic dependency generation (nvcc is handled separately) |
| CXXFLAGS += -MMD -MP |
| |
| # Complete build flags. |
| COMMON_FLAGS += $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir)) |
| CXXFLAGS += -pthread -fPIC $(COMMON_FLAGS) $(WARNINGS) |
| NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) |
| # mex may invoke an older gcc that is too liberal with -Wuninitalized |
| MATLAB_CXXFLAGS := $(CXXFLAGS) -Wno-uninitialized |
| LINKFLAGS += -pthread -fPIC $(COMMON_FLAGS) $(WARNINGS) |
| |
| USE_PKG_CONFIG ?= 0 |
| ifeq ($(USE_PKG_CONFIG), 1) |
| PKG_CONFIG := $(shell pkg-config opencv --libs) |
| else |
| PKG_CONFIG := |
| endif |
| LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(PKG_CONFIG) \ |
| $(foreach library,$(LIBRARIES),-l$(library)) |
| PYTHON_LDFLAGS := $(LDFLAGS) $(foreach library,$(PYTHON_LIBRARIES),-l$(library)) |
| |
| # 'superclean' target recursively* deletes all files ending with an extension |
| # in $(SUPERCLEAN_EXTS) below. This may be useful if you've built older |
| # versions of Caffe that do not place all generated files in a location known |
| # to the 'clean' target. |
| # |
| # 'supercleanlist' will list the files to be deleted by make superclean. |
| # |
| # * Recursive with the exception that symbolic links are never followed, per the |
| # default behavior of 'find'. |
| SUPERCLEAN_EXTS := .so .a .o .bin .testbin .pb.cc .pb.h _pb2.py .cuo |
|
|
| # Set the sub-targets of the 'everything' target. |
| EVERYTHING_TARGETS := all py$(PROJECT) test warn lint |
| # Only build matcaffe as part of "everything" if MATLAB_DIR is specified. |
| ifneq ($(MATLAB_DIR),) |
| EVERYTHING_TARGETS += mat$(PROJECT) |
| endif |
|
|
| ############################## |
| # Define build targets |
| ############################## |
| .PHONY: all lib test clean docs linecount lint lintclean tools examples $(DIST_ALIASES) \ |
| py mat py$(PROJECT) mat$(PROJECT) proto runtest \ |
| superclean supercleanlist supercleanfiles warn everything |
|
|
| all: lib tools examples |
|
|
| lib: $(STATIC_NAME) $(DYNAMIC_NAME) |
|
|
| everything: $(EVERYTHING_TARGETS) |
|
|
| linecount: |
| cloc --read-lang-def=$(PROJECT).cloc \ |
| src/$(PROJECT) include/$(PROJECT) tools examples \ |
| python matlab |
|
|
| lint: $(EMPTY_LINT_REPORT) |
|
|
| lintclean: |
| @ $(RM) -r $(LINT_OUTPUT_DIR) $(EMPTY_LINT_REPORT) $(NONEMPTY_LINT_REPORT) |
|
|
| docs: $(DOXYGEN_OUTPUT_DIR) |
| @ cd ./docs ; ln -sfn ../$(DOXYGEN_OUTPUT_DIR)/html doxygen |
|
|
| $(DOXYGEN_OUTPUT_DIR): $(DOXYGEN_CONFIG_FILE) $(DOXYGEN_SOURCES) |
| $(DOXYGEN_COMMAND) $(DOXYGEN_CONFIG_FILE) |
|
|
| $(EMPTY_LINT_REPORT): $(LINT_OUTPUTS) | $(BUILD_DIR) |
| @ cat $(LINT_OUTPUTS) > $@ |
| @ if [ -s "$@" ]; then \ |
| cat $@; \ |
| mv $@ $(NONEMPTY_LINT_REPORT); \ |
| echo "Found one or more lint errors."; \ |
| exit 1; \ |
| fi; \ |
| $(RM) $(NONEMPTY_LINT_REPORT); \ |
| echo "No lint errors!"; |
|
|
| $(LINT_OUTPUTS): $(LINT_OUTPUT_DIR)/%.lint.txt : % $(LINT_SCRIPT) | $(LINT_OUTPUT_DIR) |
| @ mkdir -p $(dir $@) |
| @ python $(LINT_SCRIPT) $< 2>&1 \ |
| | grep -v "^Done processing " \ |
| | grep -v "^Total errors found: 0" \ |
| > $@ \ |
| || true |
|
|
| test: $(TEST_ALL_BIN) $(TEST_ALL_DYNLINK_BIN) $(TEST_BINS) |
|
|
| tools: $(TOOL_BINS) $(TOOL_BIN_LINKS) |
|
|
| examples: $(EXAMPLE_BINS) |
|
|
| py$(PROJECT): py |
|
|
| 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$(LIBRARY_NAME) $(PYTHON_LDFLAGS) \ |
| -Wl,-rpath,$(ORIGIN)/../../build/lib |
|
|
| mat$(PROJECT): mat |
|
|
| mat: $(MAT$(PROJECT)_SO) |
|
|
| $(MAT$(PROJECT)_SO): $(MAT$(PROJECT)_SRC) $(STATIC_NAME) |
| @ if [ -z "$(MATLAB_DIR)" ]; then \ |
| echo "MATLAB_DIR must be specified in $(CONFIG_FILE)" \ |
| "to build mat$(PROJECT)."; \ |
| exit 1; \ |
| fi |
| @ echo MEX $< |
| $(Q)$(MATLAB_DIR)/bin/mex $(MAT$(PROJECT)_SRC) \ |
| CXX="$(CXX)" \ |
| CXXFLAGS="\$$CXXFLAGS $(MATLAB_CXXFLAGS)" \ |
| CXXLIBS="\$$CXXLIBS $(STATIC_LINK_COMMAND) $(LDFLAGS)" -output $@ |
| @ if [ -f "$(PROJECT)_.d" ]; then \ |
| mv -f $(PROJECT)_.d $(BUILD_DIR)/${MAT$(PROJECT)_SO:.$(MAT_SO_EXT)=.d}; \ |
| fi |
|
|
| runtest: $(TEST_ALL_BIN) |
| $(TOOL_BUILD_DIR)/caffe |
| $(TEST_ALL_BIN) $(TEST_GPUID) --gtest_shuffle $(TEST_FILTER) |
|
|
| pytest: py |
| cd python; python -m unittest discover -s caffe/test |
|
|
| mattest: mat |
| cd matlab; $(MATLAB_DIR)/bin/matlab -nodisplay -r 'caffe.run_tests(), exit()' |
|
|
| warn: $(EMPTY_WARN_REPORT) |
|
|
| $(EMPTY_WARN_REPORT): $(ALL_WARNS) | $(BUILD_DIR) |
| @ cat $(ALL_WARNS) > $@ |
| @ if [ -s "$@" ]; then \ |
| cat $@; \ |
| mv $@ $(NONEMPTY_WARN_REPORT); \ |
| echo "Compiler produced one or more warnings."; \ |
| exit 1; \ |
| fi; \ |
| $(RM) $(NONEMPTY_WARN_REPORT); \ |
| echo "No compiler warnings!"; |
|
|
| $(ALL_WARNS): %.o.$(WARNS_EXT) : %.o |
|
|
| $(BUILD_DIR_LINK): $(BUILD_DIR)/.linked |
|
|
| # Create a target ".linked" in this BUILD_DIR to tell Make that the "build" link |
| # is currently correct, then delete the one in the OTHER_BUILD_DIR in case it |
| # exists and $(DEBUG) is toggled later. |
| $(BUILD_DIR)/.linked: |
| @ mkdir -p $(BUILD_DIR) |
| @ $(RM) $(OTHER_BUILD_DIR)/.linked |
| @ $(RM) -r $(BUILD_DIR_LINK) |
| @ ln -s $(BUILD_DIR) $(BUILD_DIR_LINK) |
| @ touch $@ |
|
|
| $(ALL_BUILD_DIRS): | $(BUILD_DIR_LINK) |
| @ mkdir -p $@ |
|
|
| $(DYNAMIC_NAME): $(OBJS) | $(LIB_BUILD_DIR) |
| @ echo LD -o $@ |
| $(Q)$(CXX) -shared -o $@ $(OBJS) $(VERSIONFLAGS) $(LINKFLAGS) $(LDFLAGS) |
| @ 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 $@ |
| $(Q)ar rcs $@ $(OBJS) |
|
|
| $(BUILD_DIR)/%.o: %.cpp $(PROTO_GEN_HEADER) | $(ALL_BUILD_DIRS) |
| @ echo CXX $< |
| $(Q)$(CXX) $< $(CXXFLAGS) -c -o $@ 2> $@.$(WARNS_EXT) \ |
| || (cat $@.$(WARNS_EXT); exit 1) |
| @ cat $@.$(WARNS_EXT) |
|
|
| $(PROTO_BUILD_DIR)/%.pb.o: $(PROTO_BUILD_DIR)/%.pb.cc $(PROTO_GEN_HEADER) \ |
| | $(PROTO_BUILD_DIR) |
| @ echo CXX $< |
| $(Q)$(CXX) $< $(CXXFLAGS) -c -o $@ 2> $@.$(WARNS_EXT) \ |
| || (cat $@.$(WARNS_EXT); exit 1) |
| @ cat $@.$(WARNS_EXT) |
|
|
| $(BUILD_DIR)/cuda/%.o: %.cu | $(ALL_BUILD_DIRS) |
| @ echo NVCC $< |
| $(Q)$(CUDA_DIR)/bin/nvcc $(NVCCFLAGS) $(CUDA_ARCH) -M $< -o ${@:.o=.d} \ |
| -odir $(@D) |
| $(Q)$(CUDA_DIR)/bin/nvcc $(NVCCFLAGS) $(CUDA_ARCH) -c $< -o $@ 2> $@.$(WARNS_EXT) \ |
| || (cat $@.$(WARNS_EXT); exit 1) |
| @ cat $@.$(WARNS_EXT) |
|
|
| $(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$(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$(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$(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) |
| @ $(RM) $@ |
| @ ln -s $(notdir $<) $@ |
|
|
| $(TOOL_BINS): %.bin : %.o | $(DYNAMIC_NAME) |
| @ echo CXX/LD -o $@ |
| $(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$(LIBRARY_NAME) $(LDFLAGS) \ |
| -Wl,-rpath,$(ORIGIN)/../../lib |
|
|
| proto: $(PROTO_GEN_CC) $(PROTO_GEN_HEADER) |
|
|
| $(PROTO_BUILD_DIR)/%.pb.cc $(PROTO_BUILD_DIR)/%.pb.h : \ |
| $(PROTO_SRC_DIR)/%.proto | $(PROTO_BUILD_DIR) |
| @ echo PROTOC $< |
| $(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $< |
|
|
| $(PY_PROTO_BUILD_DIR)/%_pb2.py : $(PROTO_SRC_DIR)/%.proto \ |
| $(PY_PROTO_INIT) | $(PY_PROTO_BUILD_DIR) |
| @ echo PROTOC \(python\) $< |
| $(Q)protoc --proto_path=src --python_out=python $< |
|
|
| $(PY_PROTO_INIT): | $(PY_PROTO_BUILD_DIR) |
| touch $(PY_PROTO_INIT) |
|
|
| clean: |
| @- $(RM) -rf $(ALL_BUILD_DIRS) |
| @- $(RM) -rf $(OTHER_BUILD_DIR) |
| @- $(RM) -rf $(BUILD_DIR_LINK) |
| @- $(RM) -rf $(DISTRIBUTE_DIR) |
| @- $(RM) $(PY$(PROJECT)_SO) |
| @- $(RM) $(MAT$(PROJECT)_SO) |
|
|
| supercleanfiles: |
| $(eval SUPERCLEAN_FILES := $(strip \ |
| $(foreach ext,$(SUPERCLEAN_EXTS), $(shell find . -name '*$(ext)' \ |
| -not -path './data/*')))) |
|
|
| supercleanlist: supercleanfiles |
| @ \ |
| if [ -z "$(SUPERCLEAN_FILES)" ]; then \ |
| echo "No generated files found."; \ |
| else \ |
| echo $(SUPERCLEAN_FILES) | tr ' ' '\n'; \ |
| fi |
|
|
| superclean: clean supercleanfiles |
| @ \ |
| if [ -z "$(SUPERCLEAN_FILES)" ]; then \ |
| echo "No generated files found."; \ |
| else \ |
| echo "Deleting the following generated files:"; \ |
| echo $(SUPERCLEAN_FILES) | tr ' ' '\n'; \ |
| $(RM) $(SUPERCLEAN_FILES); \ |
| fi |
|
|
| $(DIST_ALIASES): $(DISTRIBUTE_DIR) |
|
|
| $(DISTRIBUTE_DIR): all py | $(DISTRIBUTE_SUBDIRS) |
| # add proto |
| cp -r src/caffe/proto $(DISTRIBUTE_DIR)/ |
| # add include |
| cp -r include $(DISTRIBUTE_DIR)/ |
| mkdir -p $(DISTRIBUTE_DIR)/include/caffe/proto |
| cp $(PROTO_GEN_HEADER_SRCS) $(DISTRIBUTE_DIR)/include/caffe/proto |
| # add tool and example binaries |
| cp $(TOOL_BINS) $(DISTRIBUTE_DIR)/bin |
| cp $(EXAMPLE_BINS) $(DISTRIBUTE_DIR)/bin |
| # 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)/ |
| |
| -include $(DEPS) |
| |