]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - jacinto-ai/caffe-jacinto.git/blobdiff - Makefile
doc update
[jacinto-ai/caffe-jacinto.git] / Makefile
index e38e7cd426ce586fac0b05e49adb9d2feaadad19..858886cc775406dfa8782a3d20b822314e4c60d8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -28,15 +28,15 @@ THIRDPARTY_DIR := ./3rdparty
 
 # 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       := 3
+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)
@@ -90,6 +90,7 @@ EMPTY_LINT_REPORT := $(BUILD_DIR)/.$(LINT_EXT)
 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)
@@ -167,27 +168,38 @@ NONEMPTY_WARN_REPORT := $(BUILD_DIR)/$(WARNS_EXT)
 ##############################
 # Derive include and lib directories
 ##############################
+ifeq ($(shell uname -m),aarch64)
+    TEGRA=1
+    NO_NVML=1
+endif
+
 CUDA_INCLUDE_DIR := $(CUDA_DIR)/include
 
 CUDA_LIB_DIR :=
 # 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 += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
+# 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 += hdf5_hl hdf5
+endif
 
 # handle IO dependencies
 USE_LEVELDB ?= 1
@@ -201,14 +213,23 @@ ifeq ($(USE_LMDB), 1)
        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
 
 ##############################
@@ -271,7 +292,7 @@ ifeq ($(LINUX), 1)
        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
 
@@ -280,23 +301,21 @@ 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
@@ -357,20 +376,10 @@ ifeq ($(USE_LEVELDB), 1)
 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
@@ -433,7 +442,7 @@ 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
+MATLAB_CXXFLAGS := $(CXXFLAGS) -Wno-uninitialized -std=c++11
 LINKFLAGS += -pthread -fPIC $(COMMON_FLAGS) $(WARNINGS)
 
 USE_PKG_CONFIG ?= 0
@@ -522,10 +531,10 @@ py$(PROJECT): py
 
 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
@@ -552,7 +561,7 @@ runtest: $(TEST_ALL_BIN)
        $(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()'
@@ -704,6 +713,7 @@ $(DISTRIBUTE_DIR): all py | $(DISTRIBUTE_SUBDIRS)
        cp -r src/caffe/proto $(DISTRIBUTE_DIR)/
        # add include
        cp -r include $(DISTRIBUTE_DIR)/
+       cp -r 3rdparty/half_float $(DISTRIBUTE_DIR)/include
        mkdir -p $(DISTRIBUTE_DIR)/include/caffe/proto
        cp $(PROTO_GEN_HEADER_SRCS) $(DISTRIBUTE_DIR)/include/caffe/proto
        # add tool and example binaries