mirror of
https://github.com/gosticks/openpose.git
synced 2026-08-12 04:10:28 +00:00
516 lines
15 KiB
Makefile
516 lines
15 KiB
Makefile
PROJECT := openpose
|
|
|
|
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' | 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 := 7
|
|
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 += -DOPEN_POSE_VERSION=$(DYNAMIC_VERSION_MAJOR).$(DYNAMIC_VERSION_MINOR).$(DYNAMIC_VERSION_REVISION)
|
|
|
|
|
|
##############################
|
|
# Enable profiler
|
|
##############################
|
|
PROFILER_ENABLED ?= 0
|
|
ifneq ($(PROFILER_ENABLED), 0)
|
|
COMMON_FLAGS += -DPROFILER_ENABLED=$(PROFILER_ENABLED)
|
|
endif
|
|
|
|
|
|
##############################
|
|
# Deep net selection
|
|
##############################
|
|
DEEP_NET ?= caffe
|
|
# TensorFlow
|
|
ifeq ($(DEEP_NET), tensorflow)
|
|
# COMMON_FLAGS += -DUSE_TENSOR_FLOW
|
|
# Torch
|
|
else ifeq ($(DEEP_NET), torch)
|
|
# COMMON_FLAGS += -DUSE_TORCH
|
|
# Caffe
|
|
else
|
|
COMMON_FLAGS += -DUSE_CAFFE
|
|
LIBRARIES += caffe
|
|
LDFLAGS += -Wl,-rpath=$(CAFFE_DIR)/lib
|
|
INCLUDE_DIRS += $(CAFFE_DIR)/include
|
|
LIBRARY_DIRS += $(CAFFE_DIR)/lib
|
|
endif
|
|
|
|
|
|
# Faster GUI display
|
|
WITH_OPENCV_WITH_OPENGL ?= 0
|
|
ifneq ($(WITH_OPENCV_WITH_OPENGL), 0)
|
|
COMMON_FLAGS += -DUSE_OPENCV_WITH_OPENGL
|
|
# FreeGLUT
|
|
LIBRARIES += glut
|
|
# LIBRARIES += GLU GL glut
|
|
endif
|
|
|
|
# 3-D
|
|
# 3-D renderer
|
|
WITH_3D_RENDERER ?= 0
|
|
ifneq ($(WITH_3D_RENDERER), 0)
|
|
COMMON_FLAGS += -DUSE_3D_RENDERER
|
|
# FreeGLUT
|
|
LIBRARIES += glut
|
|
# LIBRARIES += GLU GL glut
|
|
endif
|
|
# Ceres support
|
|
WITH_CERES ?= 0
|
|
ifneq ($(WITH_CERES), 0)
|
|
COMMON_FLAGS += -DUSE_CERES
|
|
# Ceres
|
|
LIBRARIES += ceres
|
|
INCLUDE_DIRS += $(EIGEN_DIR)
|
|
# If Ceres was built with Suitesparse:
|
|
LIBRARIES += lapack camd amd ccolamd colamd cholmod
|
|
# If Ceres was built with CXSparse:
|
|
LIBRARIES += cxsparse
|
|
# If Ceres was built with OpenMP:
|
|
LIBRARIES += pthread gomp m
|
|
CXXFLAGS += -fopenmp
|
|
LINKFLAGS += -fopenmp
|
|
endif
|
|
# Eigen support
|
|
WITH_EIGEN ?= 0
|
|
ifneq ($(WITH_EIGEN), 0)
|
|
COMMON_FLAGS += -DUSE_EIGEN
|
|
INCLUDE_DIRS += $(EIGEN_DIR)
|
|
endif
|
|
# Spinnaker SDK
|
|
WITH_FLIR_CAMERA ?= 0
|
|
ifneq ($(WITH_FLIR_CAMERA), 0)
|
|
COMMON_FLAGS += -DUSE_FLIR_CAMERA
|
|
# Spinnaker SDK
|
|
LIBRARIES += Spinnaker
|
|
# INCLUDE_DIRS += $(SPINNAKER_DIR)
|
|
COMMON_FLAGS += -isystem $(SPINNAKER_DIR) # Remove warnings from this library
|
|
endif
|
|
|
|
##############################
|
|
# 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")
|
|
CXX_SRCS := $(shell find src ! -name "test_*.cpp" -name "*.cpp")
|
|
# CU_SRCS are the cuda source files
|
|
# CU_SRCS := $(shell find src/$(PROJECT) ! -name "test_*.cu" -name "*.cu")
|
|
CU_SRCS := $(shell find src ! -name "test_*.cu" -name "*.cu")
|
|
# 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
|
|
# NONGEN_CXX_SRCS includes all source/header files except those generated
|
|
# automatically (e.g., by proto).
|
|
NONGEN_CXX_SRCS := $(shell find \
|
|
src/$(PROJECT) \
|
|
include/$(PROJECT) \
|
|
examples \
|
|
-name "*.cpp" -or -name "*.hpp" -or -name "*.cu" -or -name "*.cuh")
|
|
LINT_SCRIPT := scripts/cpp_lint.py
|
|
LINT_OUTPUT_DIR := $(BUILD_DIR)/.lint
|
|
LINT_EXT := lint.txt
|
|
LINT_OUTPUTS := $(addsuffix .$(LINT_EXT), $(addprefix $(LINT_OUTPUT_DIR)/, $(NONGEN_CXX_SRCS)))
|
|
EMPTY_LINT_REPORT := $(BUILD_DIR)/.$(LINT_EXT)
|
|
NONEMPTY_LINT_REPORT := $(BUILD_DIR)/$(LINT_EXT)
|
|
|
|
##############################
|
|
# Derive generated files
|
|
##############################
|
|
# The objects corresponding to the source files
|
|
# These objects will be linked into the final shared library, so we
|
|
# exclude the example objects.
|
|
CXX_OBJS := $(addprefix $(BUILD_DIR)/, ${CXX_SRCS:.cpp=.o})
|
|
CU_OBJS := $(addprefix $(BUILD_DIR)/cuda/, ${CU_SRCS:.cu=.o})
|
|
OBJS := $(CXX_OBJS) $(CU_OBJS)
|
|
# example objects
|
|
EXAMPLE_OBJS := $(addprefix $(BUILD_DIR)/, ${EXAMPLE_SRCS:.cpp=.o})
|
|
# Output files for automatic dependency generation
|
|
DEPS := ${EXAMPLE_OBJS:.o=.d} ${CXX_OBJS:.o=.d} ${CU_OBJS:.o=.d}
|
|
EXAMPLE_BINS := ${EXAMPLE_OBJS:.o=.bin}
|
|
|
|
##############################
|
|
# Derive compiler warning dump locations
|
|
##############################
|
|
WARNS_EXT := warnings.txt
|
|
CXX_WARNS := $(addprefix $(BUILD_DIR)/, ${CXX_SRCS:.cpp=.o.$(WARNS_EXT)})
|
|
CU_WARNS := $(addprefix $(BUILD_DIR)/cuda/, ${CU_SRCS:.cu=.o.$(WARNS_EXT)})
|
|
EXAMPLE_WARNS := $(addprefix $(BUILD_DIR)/, ${EXAMPLE_SRCS:.cpp=.o.$(WARNS_EXT)})
|
|
ALL_CXX_WARNS := $(CXX_WARNS) $(EXAMPLE_WARNS)
|
|
ALL_CU_WARNS := $(CU_WARNS)
|
|
ALL_WARNS := $(ALL_CXX_WARNS) $(ALL_CU_WARNS)
|
|
|
|
EMPTY_WARN_REPORT := $(BUILD_DIR)/.$(WARNS_EXT)
|
|
NONEMPTY_WARN_REPORT := $(BUILD_DIR)/$(WARNS_EXT)
|
|
|
|
##############################
|
|
# Derive include and lib directories
|
|
##############################
|
|
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
|
|
endif
|
|
CUDA_LIB_DIR += $(CUDA_DIR)/lib
|
|
|
|
INCLUDE_DIRS += $(BUILD_INCLUDE_DIR) ./src ./include
|
|
ifeq ($(USE_CUDA), 1)
|
|
INCLUDE_DIRS += $(CUDA_INCLUDE_DIR)
|
|
LIBRARY_DIRS += $(CUDA_LIB_DIR)
|
|
LIBRARIES += cudart cublas curand
|
|
endif
|
|
|
|
LIBRARIES += glog gflags m hdf5_hl hdf5
|
|
|
|
# handle IO dependencies
|
|
USE_LEVELDB ?= 1
|
|
USE_LMDB ?= 1
|
|
USE_OPENCV ?= 1
|
|
|
|
ifeq ($(USE_LEVELDB), 1)
|
|
LIBRARIES += leveldb snappy
|
|
endif
|
|
ifeq ($(USE_LMDB), 1)
|
|
LIBRARIES += lmdb
|
|
endif
|
|
ifeq ($(USE_OPENCV), 1)
|
|
LIBRARIES += opencv_core opencv_highgui opencv_imgproc opencv_objdetect opencv_video opencv_calib3d
|
|
|
|
ifeq ($(OPENCV_VERSION), 3)
|
|
LIBRARIES += opencv_imgcodecs opencv_videoio
|
|
# Cuda warping removed for TX2 compatibility (PR #989)
|
|
# LIBRARIES += opencv_imgcodecs opencv_videoio opencv_cudawarping
|
|
else
|
|
LIBRARIES += opencv_contrib opencv_gpu
|
|
endif
|
|
|
|
endif
|
|
##############################
|
|
# OpenPose extra code: commented
|
|
##############################
|
|
# WARNINGS := -Wall -Wno-sign-compare
|
|
|
|
##############################
|
|
# Set build directories
|
|
##############################
|
|
|
|
DISTRIBUTE_DIR ?= distribute
|
|
DISTRIBUTE_SUBDIRS := $(DISTRIBUTE_DIR)/bin $(DISTRIBUTE_DIR)/lib
|
|
DIST_ALIASES := dist
|
|
ifneq ($(strip $(DISTRIBUTE_DIR)),distribute)
|
|
DIST_ALIASES += distribute
|
|
endif
|
|
|
|
ALL_BUILD_DIRS := $(sort $(BUILD_DIR) $(addprefix $(BUILD_DIR)/, $(SRC_DIRS)) \
|
|
$(addprefix $(BUILD_DIR)/cuda/, $(SRC_DIRS)) \
|
|
$(LIB_BUILD_DIR) $(LINT_OUTPUT_DIR))
|
|
|
|
##############################
|
|
# Set directory for Doxygen-generated documentation
|
|
##############################
|
|
DOXYGEN_CONFIG_FILE ?= ./.Doxyfile
|
|
# should be the same as OUTPUT_DIRECTORY in the .Doxyfile
|
|
DOXYGEN_OUTPUT_DIR ?= ./doxygen
|
|
DOXYGEN_COMMAND ?= doxygen
|
|
# All the files that might have Doxygen documentation.
|
|
DOXYGEN_SOURCES := $(shell find \
|
|
src/$(PROJECT) \
|
|
include/$(PROJECT) \
|
|
examples \
|
|
-name "*.cpp" -or -name "*.hpp" -or -name "*.cu" -or -name "*.cuh")
|
|
DOXYGEN_SOURCES += $(DOXYGEN_CONFIG_FILE)
|
|
|
|
|
|
##############################
|
|
# OpenPose extra code: added flags
|
|
##############################
|
|
# Automatic dependency generation (nvcc is handled separately)
|
|
CXXFLAGS += -march=native
|
|
|
|
# Complete build flags.
|
|
CXXFLAGS += -fopenmp -Wpedantic -Wall -Wextra
|
|
CXXFLAGS += -Wfatal-errors
|
|
COMMON_FLAGS += -std=c++11
|
|
LINKFLAGS += -fopenmp
|
|
|
|
|
|
##############################
|
|
# Configure build
|
|
##############################
|
|
|
|
# Determine platform
|
|
UNAME := $(shell uname -s)
|
|
ifeq ($(UNAME), Linux)
|
|
LINUX := 1
|
|
else ifeq ($(UNAME), Darwin)
|
|
OSX := 1
|
|
OSX_MAJOR_VERSION := $(shell sw_vers -productVersion | cut -f 1 -d .)
|
|
OSX_MINOR_VERSION := $(shell sw_vers -productVersion | cut -f 2 -d .)
|
|
endif
|
|
|
|
# Linux
|
|
ifeq ($(LINUX), 1)
|
|
CXX ?= /usr/bin/g++
|
|
GCCVERSION := $(shell $(CXX) -dumpversion | cut -f1,2 -d.)
|
|
# We will also explicitly add stdc++ to the link target.
|
|
LIBRARIES += stdc++
|
|
VERSIONFLAGS += -Wl,-soname,$(DYNAMIC_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../lib
|
|
endif
|
|
|
|
# OS X:
|
|
# clang++ instead of g++
|
|
# libstdc++ for NVCC compatibility on OS X >= 10.9 with CUDA < 7.0
|
|
ifeq ($(OSX), 1)
|
|
CXX := /usr/bin/clang++
|
|
ifeq ($(USE_CUDA), 1)
|
|
CUDA_VERSION := $(shell $(CUDA_DIR)/bin/nvcc -V | grep -o 'release [0-9.]*' | tr -d '[a-z ]')
|
|
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
|
|
# we need to explicitly ask for the rpath to be obeyed
|
|
ORIGIN := @loader_path
|
|
VERSIONFLAGS += -Wl,-install_name,@rpath/$(DYNAMIC_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../../build/lib
|
|
else
|
|
ORIGIN := \$$ORIGIN
|
|
endif
|
|
|
|
# Custom compiler
|
|
ifdef CUSTOM_CXX
|
|
CXX := $(CUSTOM_CXX)
|
|
endif
|
|
|
|
# Static linking
|
|
ifneq (,$(findstring clang++,$(CXX)))
|
|
STATIC_LINK_COMMAND := -Wl,-force_load $(STATIC_NAME)
|
|
else ifneq (,$(findstring g++,$(CXX)))
|
|
STATIC_LINK_COMMAND := -Wl,--whole-archive $(STATIC_NAME) -Wl,--no-whole-archive
|
|
else
|
|
# The following line must not be indented with a tab, since we are not inside a target
|
|
$(error Cannot static link with the $(CXX) compiler)
|
|
endif
|
|
|
|
# Debugging
|
|
ifeq ($(DEBUG), 1)
|
|
COMMON_FLAGS += -DDEBUG -g -O0
|
|
NVCCFLAGS += -G
|
|
else
|
|
COMMON_FLAGS += -DNDEBUG -O3
|
|
endif
|
|
|
|
# configure IO libraries
|
|
ifeq ($(USE_OPENCV), 1)
|
|
COMMON_FLAGS += -DUSE_OPENCV
|
|
endif
|
|
ifeq ($(USE_LEVELDB), 1)
|
|
COMMON_FLAGS += -DUSE_LEVELDB
|
|
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 ($(USE_CUDA), 1)
|
|
COMMON_FLAGS += -DUSE_CUDA
|
|
else
|
|
COMMON_FLAGS += -DCPU_ONLY # For Caffe
|
|
COMMON_FLAGS += -DUSE_CPU_ONLY
|
|
endif
|
|
|
|
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)
|
|
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))
|
|
|
|
##############################
|
|
# Define build targets
|
|
##############################
|
|
.PHONY: all lib clean docs linecount lint lintclean examples $(DIST_ALIASES) \
|
|
warn everything
|
|
|
|
all: lib examples
|
|
|
|
lib: $(STATIC_NAME) $(DYNAMIC_NAME)
|
|
|
|
everything: $(EVERYTHING_TARGETS)
|
|
|
|
linecount:
|
|
cloc --read-lang-def=$(PROJECT).cloc \
|
|
src/$(PROJECT) include/$(PROJECT) examples
|
|
|
|
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
|
|
|
|
examples: $(EXAMPLE_BINS)
|
|
|
|
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 $(LIB_BUILD_DIR); 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 | $(ALL_BUILD_DIRS)
|
|
@ 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)
|
|
|
|
$(EXAMPLE_BINS): %.bin : %.o | $(DYNAMIC_NAME)
|
|
@ echo CXX/LD -o $@
|
|
$(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS) \
|
|
-Wl,-rpath,$(ORIGIN)/../../lib
|
|
|
|
clean:
|
|
@- $(RM) -rf $(ALL_BUILD_DIRS)
|
|
@- $(RM) -rf $(OTHER_BUILD_DIR)
|
|
@- $(RM) -rf $(BUILD_DIR_LINK)
|
|
@- $(RM) -rf $(DISTRIBUTE_DIR)
|
|
|
|
$(DIST_ALIASES): $(DISTRIBUTE_DIR)
|
|
|
|
$(DISTRIBUTE_DIR): all
|
|
@ mkdir -p $(DISTRIBUTE_SUBDIRS)
|
|
# add include
|
|
cp -r include $(DISTRIBUTE_DIR)/
|
|
# add example binaries
|
|
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)
|
|
|
|
-include $(DEPS)
|