-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
123 lines (97 loc) · 2.9 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
CONFIG := ./config/Makefile.config
include $(CONFIG)
BUILD_PATH := build
SRC_PATH := src
INC_PATH := include
CUDA_DIR := /usr/local/cuda-$(CUDA_VER)
CXX_SRC := $(wildcard $(SRC_PATH)/*.cpp)
KERNELS_SRC := $(wildcard $(SRC_PATH)/*.cu)
APP_OBJS := $(patsubst $(SRC_PATH)%, $(BUILD_PATH)%, $(CXX_SRC:.cpp=.cpp.o))
APP_OBJS += $(patsubst $(SRC_PATH)%, $(BUILD_PATH)%, $(KERNELS_SRC:.cu=.cu.o))
APP_MKS := $(APP_OBJS:.o=.mk)
APP_DEPS := $(CXX_SRC)
APP_DEPS += $(KERNELS_SRC)
APP_DEPS += $(wildcard $(SRC_PATH)/*.h)
CUCC := $(CUDA_DIR)/bin/nvcc
CXXFLAGS := -std=c++17 -pthread -fPIC
CUDAFLAGS := --shared -Xcompiler -fPIC
INCS := -I $(CUDA_DIR)/include \
-I $(SRC_PATH) \
-I $(OPENCV_INSTALL_DIR) \
-I $(TENSORRT_INSTALL_DIR)/include \
-I $(INC_PATH) \
-I $(LIBYUV_INSTALL_DIR)/include
LIBS := -L "$(CUDA_DIR)/lib64" \
-L "$(TENSORRT_INSTALL_DIR)/lib" \
-L $(LIBYUV_INSTALL_DIR)/lib \
-lcudart -lcublas -lcudnn -lfmt -lyuv\
-lnvinfer -lnvonnxparser\
-lstdc++fs \
`pkg-config --libs opencv4`
ifeq ($(DEBUG),1)
CUDAFLAGS += -g -O0
CXXFLAGS += -g -O0
else
CUDAFLAGS += -O3
CXXFLAGS += -O3
endif
ifeq ($(SHOW_WARNING),1)
CUDAFLAGS += -Wall -Wunused-function -Wunused-variable -Wfatal-errors
CXXFLAGS += -Wall -Wunused-function -Wunused-variable -Wfatal-errors
else
CUDAFLAGS += -w
CXXFLAGS += -w
endif
ifeq (, $(shell which bear))
BEARCMD :=
else
ifeq (bear 3.1.3, $(shell bear --version))
BEARCMD := bear --output config/compile_commands.json --
else
BEARCMD := bear -o config/compile_commands.json
endif
endif
all:
@mkdir -p bin
@$(BEARCMD) $(MAKE) -j16 --no-print-directory $(APP)
@echo finished building $@. Have fun!!
run:
@$(MAKE) --no-print-directory update
@./bin/$(APP)
update: $(APP)
@echo finished updating $<
$(APP): $(APP_DEPS) $(APP_OBJS)
@$(CXX) $(APP_OBJS) -o bin/$@ $(LIBS) $(INCS)
show:
@echo $(BUILD_PATH)
@echo $(APP_DEPS)
@echo $(INCS)
@echo $(APP_OBJS)
@echo $(APP_MKS)
clean:
rm -rf $(APP)
rm -rf build
rm -rf config/compile_commands.json
rm -rf bin
ifneq ($(MAKECMDGOALS), clean)
-include $(APP_MKS)
endif
# Compile CXX
$(BUILD_PATH)/%.cpp.o: $(SRC_PATH)/%.cpp
@echo Compile CXX $@
@mkdir -p $(BUILD_PATH)
@$(CXX) -o $@ -c $< $(CXXFLAGS) $(INCS)
$(BUILD_PATH)/%.cpp.mk: $(SRC_PATH)/%.cpp
@echo Compile Dependence CXX $@
@mkdir -p $(BUILD_PATH)
@$(CXX) -M $< -MF $@ -MT $(@:.cpp.mk=.cpp.o) $(CXXFLAGS) $(INCS)
# Compile CUDA
$(BUILD_PATH)/%.cu.o: $(SRC_PATH)/%.cu
@echo Compile CUDA $@
@mkdir -p $(BUILD_PATH)
@$(CUCC) -o $@ -c $< $(CUDAFLAGS) $(INCS)
$(BUILD_PATH)/%.cu.mk: $(SRC_PATH)%.cu
@echo Compile Dependence CUDA $@
@mkdir -p $(BUILD_PATH)
@$(CUCC) -M $< -MF $@ -MT $(@:.cu.mk=.cu.o) $(CUDAFLAGS)
.PHONY: all update show clean