diff --git a/Makefile b/Makefile
index d6951fd68ec660125e634aa4f78738fdfa324209..858886cc775406dfa8782a3d20b822314e4c60d8 100644 (file)
--- a/Makefile
+++ b/Makefile
# 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)
+ \( -name '*.cpp' -o -name '*.proto' \) | grep -q ." \; -print 2>/dev/null)
# The target shared library name
LIBRARY_NAME := $(PROJECT)$(LIBRARY_NAME_SUFFIX)
LIB_BUILD_DIR := $(BUILD_DIR)/lib
STATIC_NAME := $(LIB_BUILD_DIR)/lib$(LIBRARY_NAME).a
DYNAMIC_VERSION_MAJOR := 0
-DYNAMIC_VERSION_MINOR := 16
-DYNAMIC_VERSION_REVISION := 4
+DYNAMIC_VERSION_MINOR := 17
+DYNAMIC_VERSION_REVISION := 0
DYNAMIC_NAME_SHORT := lib$(LIBRARY_NAME).so
DYNAMIC_SONAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR).$(DYNAMIC_VERSION_MINOR)
DYNAMIC_VERSIONED_NAME_SHORT := $(DYNAMIC_SONAME_SHORT).$(DYNAMIC_VERSION_REVISION)
NONEMPTY_LINT_REPORT := $(BUILD_DIR)/$(LINT_EXT)
# PY$(PROJECT)_SRC is the python wrapper for $(PROJECT)
PY$(PROJECT)_SRC := python/$(PROJECT)/_$(PROJECT).cpp
+PY$(PROJECT)_OBJ := $(BUILD_DIR)/src/$(PROJECT)/layers/python_layer.o
PY$(PROJECT)_SO := python/$(PROJECT)/_$(PROJECT).so
PY$(PROJECT)_HXX := include/$(PROJECT)/layers/python_layer.hpp
# MAT$(PROJECT)_SRC is the mex entrance point of matlab package for $(PROJECT)
# add <cuda>/lib64 only if it exists
ifneq ("$(wildcard $(CUDA_DIR)/lib64)","")
CUDA_LIB_DIR += $(CUDA_DIR)/lib64
- CUDA_LIB_DIR += /usr/lib/nvidia-384 /usr/lib/nvidia-381 /usr/lib/nvidia-375 /usr/lib/nvidia-367 /usr/lib/nvidia-361 /usr/lib/nvidia-352
+ CUDA_LIB_DIR += /usr/lib/nvidia-396 /usr/lib/nvidia-390 /usr/lib/nvidia-387 /usr/lib/nvidia-384 /usr/lib/nvidia-381 /usr/lib/nvidia-375 /usr/lib/nvidia-367 /usr/lib/nvidia-361 /usr/lib/nvidia-352
endif
CUDA_LIB_DIR += $(CUDA_DIR)/lib
-INCLUDE_DIRS += $(BUILD_INCLUDE_DIR) ./src ./include $(THIRDPARTY_DIR)
-ifneq ($(CPU_ONLY), 1)
- INCLUDE_DIRS += $(CUDA_INCLUDE_DIR)
- LIBRARY_DIRS += $(CUDA_LIB_DIR)
- LIBRARIES := cudart cublas curand
+INCLUDE_DIRS += $(BUILD_INCLUDE_DIR) ./src ./include $(THIRDPARTY_DIR) /usr/include/hdf5/serial
+INCLUDE_DIRS += $(CUDA_INCLUDE_DIR)
+LIBRARY_DIRS += $(CUDA_LIB_DIR)
+LIBRARIES := cudart cublas curand
ifneq ($(NO_NVML), 1)
LIBRARIES += nvidia-ml
endif
-endif
-LIBRARIES += boost_system glog gflags protobuf boost_filesystem m
+# Note: libturbojpeg has a packaging bug. Workaround:
+# $ sudo ln -s /usr/lib/x86_64-linux-gnu/libturbojpeg.so.0 /usr/lib/x86_64-linux-gnu/libturbojpeg.so
+
+LIBRARIES += boost_system glog gflags protobuf boost_filesystem m turbojpeg
ifeq ($(TEGRA), 1)
LIBRARIES += hdf5_serial_hl hdf5_serial
else
LIBRARIES += lmdb
endif
ifeq ($(USE_OPENCV), 1)
- LIBRARIES += opencv_core opencv_highgui opencv_imgproc
+ LIBRARIES += opencv_core opencv_highgui opencv_imgproc
ifeq ($(OPENCV_VERSION), 3)
- LIBRARIES += opencv_imgcodecs
+ LIBRARIES += opencv_imgcodecs opencv_videoio
endif
endif
-PYTHON_LIBRARIES ?= boost_python python2.7
+
+python_version_full := $(wordlist 2,4,$(subst ., ,$(shell python --version 2>&1)))
+python_version_major := $(word 1,${python_version_full})
+python_version_minor := $(word 2,${python_version_full})
+python_version_patch := $(word 3,${python_version_full})
+ifeq ($(python_version_major), 3)
+ python_lib_suffix := m
+endif
+
+PYTHON_LIBRARIES ?= boost_python-py${python_version_major}${python_version_minor} python${python_version_major}.${python_version_minor}${python_lib_suffix} boost_regex
WARNINGS := -Wall -Wno-sign-compare
##############################
endif
# boost::thread is reasonably called boost_thread (compare OS X)
# We will also explicitly add stdc++ to the link target.
- LIBRARIES += boost_thread stdc++
+ LIBRARIES += boost_thread boost_regex stdc++
VERSIONFLAGS += -Wl,-soname,$(DYNAMIC_SONAME_SHORT) -Wl,-rpath,$(ORIGIN)/../lib
endif
# libstdc++ for NVCC compatibility on OS X >= 10.9 with CUDA < 7.0
ifeq ($(OSX), 1)
CXX := /usr/bin/clang++
- ifneq ($(CPU_ONLY), 1)
- CUDA_VERSION := $(shell $(CUDA_DIR)/bin/nvcc -V | grep -o 'release [0-9.]*' | grep -o '[0-9.]*')
- ifeq ($(shell echo | awk '{exit $(CUDA_VERSION) < 7.0;}'), 1)
- CXXFLAGS += -stdlib=libstdc++
- LINKFLAGS += -stdlib=libstdc++
- endif
- # clang throws this warning for cuda headers
- WARNINGS += -Wno-unneeded-internal-declaration
- # 10.11 strips DYLD_* env vars so link CUDA (rpath is available on 10.5+)
- OSX_10_OR_LATER := $(shell [ $(OSX_MAJOR_VERSION) -ge 10 ] && echo true)
- OSX_10_5_OR_LATER := $(shell [ $(OSX_MINOR_VERSION) -ge 5 ] && echo true)
- ifeq ($(OSX_10_OR_LATER),true)
- ifeq ($(OSX_10_5_OR_LATER),true)
- LDFLAGS += -Wl,-rpath,$(CUDA_LIB_DIR)
- endif
- endif
- endif
+ CUDA_VERSION := $(shell $(CUDA_DIR)/bin/nvcc -V | grep -o 'release [0-9.]*' | grep -o '[0-9.]*')
+ ifeq ($(shell echo | awk '{exit $(CUDA_VERSION) < 7.0;}'), 1)
+ CXXFLAGS += -stdlib=libstdc++
+ LINKFLAGS += -stdlib=libstdc++
+ endif
+ # clang throws this warning for cuda headers
+ WARNINGS += -Wno-unneeded-internal-declaration
+ # 10.11 strips DYLD_* env vars so link CUDA (rpath is available on 10.5+)
+ OSX_10_OR_LATER := $(shell [ $(OSX_MAJOR_VERSION) -ge 10 ] && echo true)
+ OSX_10_5_OR_LATER := $(shell [ $(OSX_MINOR_VERSION) -ge 5 ] && echo true)
+ ifeq ($(OSX_10_OR_LATER),true)
+ ifeq ($(OSX_10_5_OR_LATER),true)
+ LDFLAGS += -Wl,-rpath,$(CUDA_LIB_DIR)
+ endif
+ endif
# gtest needs to use its own tuple to not conflict with clang
COMMON_FLAGS += -DGTEST_USE_OWN_TR1_TUPLE=1
# boost::thread is called boost_thread-mt to mark multithreading on OS X
endif
ifeq ($(USE_LMDB), 1)
COMMON_FLAGS += -DUSE_LMDB
-ifeq ($(ALLOW_LMDB_NOLOCK), 1)
- COMMON_FLAGS += -DALLOW_LMDB_NOLOCK
-endif
endif
-# CPU-only configuration
-ifeq ($(CPU_ONLY), 1)
- OBJS := $(PROTO_OBJS) $(CXX_OBJS)
- TEST_OBJS := $(TEST_CXX_OBJS)
- TEST_BINS := $(TEST_CXX_BINS)
- ALL_WARNS := $(ALL_CXX_WARNS)
- TEST_FILTER := --gtest_filter="-*GPU*"
- COMMON_FLAGS += -DCPU_ONLY
-endif
+# New place for HDF5
+LIBRARY_DIRS += /usr/lib/x86_64-linux-gnu/hdf5/serial
ifeq ($(NO_NVML), 1)
COMMON_FLAGS += -DNO_NVML=1
py: $(PY$(PROJECT)_SO) $(PROTO_GEN_PY)
-$(PY$(PROJECT)_SO): $(PY$(PROJECT)_SRC) $(PY$(PROJECT)_HXX) | $(DYNAMIC_NAME)
+$(PY$(PROJECT)_SO): $(PY$(PROJECT)_OBJ) $(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) \
+ $(Q)$(CXX) -shared -o $@ $(PY$(PROJECT)_SRC) $(PY$(PROJECT)_OBJ) \
+ $(LINKFLAGS) -l$(LIBRARY_NAME) $(PYTHON_LDFLAGS) \
-Wl,-rpath,$(ORIGIN)/../../build/lib
mat$(PROJECT): mat
$(TEST_ALL_BIN) $(TEST_GPUID) --gtest_shuffle $(TEST_FILTER)
pytest: py
- cd python; python -m unittest discover -s caffe/test
+ cd python; python -u -m unittest discover -s caffe/test
mattest: mat
cd matlab; $(MATLAB_DIR)/bin/matlab -nodisplay -r 'caffe.run_tests(), exit()'