| 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) |
|
|