Browse Source

创建Makefile

leon 2 months ago
parent
commit
66a99ae4ee
2 changed files with 136 additions and 0 deletions
  1. 136 0
      Makefile
  2. 0 0
      src/main.cpp

+ 136 - 0
Makefile

@@ -0,0 +1,136 @@
+cc        := g++
+name      := trtsahiyolo.so
+workdir   := workspace
+srcdir    := src
+objdir    := objs
+stdcpp    := c++17
+cuda_home := /usr/local/cuda-12
+cuda_arch := 8.6
+nvcc      := $(cuda_home)/bin/nvcc -ccbin=$(cc)
+
+
+project_include_path := src
+opencv_include_path  := /usr/include/opencv4/
+trt_include_path     := /usr/include/x86_64-linux-gnu/
+cuda_include_path    := $(cuda_home)/include
+ffmpeg_include_path  := 
+
+python_include_path  := /usr/include/python3.10
+
+
+include_paths        := $(project_include_path) \
+						$(opencv_include_path) \
+						$(trt_include_path) \
+						$(cuda_include_path) \
+						$(python_include_path)
+
+
+opencv_library_path  := /workspace/__install/opencv490/lib
+trt_library_path     := /usr/lib/x86_64-linux-gnu/
+cuda_library_path    := $(cuda_home)/lib64/
+python_library_path  := 
+
+library_paths        := $(opencv_library_path) \
+						$(trt_library_path) \
+						$(cuda_library_path) \
+						$(cuda_library_path) \
+						$(python_library_path)
+
+link_opencv       := opencv_core opencv_imgproc opencv_videoio opencv_imgcodecs
+link_trt          := nvinfer nvinfer_plugin nvonnxparser
+link_cuda         := cuda cublas cudart cudnn
+link_sys          := stdc++ dl
+
+link_librarys     := $(link_opencv) $(link_trt) $(link_cuda) $(link_sys)
+
+
+empty := 
+library_path_export := $(subst $(empty) $(empty),:,$(library_paths))
+
+run_paths     := $(foreach item,$(library_paths),-Wl,-rpath=$(item))
+include_paths := $(foreach item,$(include_paths),-I$(item))
+library_paths := $(foreach item,$(library_paths),-L$(item))
+link_librarys := $(foreach item,$(link_librarys),-l$(item))
+
+cpp_compile_flags := -std=$(stdcpp) -w -g -O0 -m64 -fPIC -fopenmp -pthread $(include_paths)
+cu_compile_flags  := -Xcompiler "$(cpp_compile_flags)"
+link_flags        := -pthread -fopenmp -Wl,-rpath='$$ORIGIN' $(library_paths) $(link_librarys)
+
+cpp_srcs := $(shell find $(srcdir) -name "*.cpp")
+cpp_objs := $(cpp_srcs:.cpp=.cpp.o)
+cpp_objs := $(cpp_objs:$(srcdir)/%=$(objdir)/%)
+cpp_mk   := $(cpp_objs:.cpp.o=.cpp.mk)
+
+cu_srcs := $(shell find $(srcdir) -name "*.cu")
+cu_objs := $(cu_srcs:.cu=.cu.o)
+cu_objs := $(cu_objs:$(srcdir)/%=$(objdir)/%)
+cu_mk   := $(cu_objs:.cu.o=.cu.mk)
+
+TRT_VERSION := 10
+
+# 根据 TRT_VERSION 设置不同的编译选项
+ifeq ($(TRT_VERSION), 8)
+    CXXFLAGS = -DTRT8
+    cpp_srcs := $(filter-out src/common/tensorrt.cpp, $(cpp_srcs))
+    cpp_objs := $(filter-out objs/common/tensorrt.cpp.o, $(cpp_objs))
+else
+    CXXFLAGS = -DTRT10
+    cpp_srcs := $(filter-out src/common/tensorrt8.cpp, $(cpp_srcs))
+    cpp_objs := $(filter-out objs/common/tensorrt8.cpp.o, $(cpp_objs))
+endif
+
+pro_cpp_objs := $(filter-out objs/interface.cpp.o, $(cpp_objs))
+
+ifneq ($(MAKECMDGOALS), clean)
+include $(mks)
+endif
+
+
+$(name)   : $(workdir)/$(name)
+
+all       : $(name)
+
+run       : $(name)
+	@cd $(workdir) && python3 test.py
+
+pro       : $(workdir)/pro
+
+runpro    : pro
+	@export LD_LIBRARY_PATH=$(library_path_export)
+	@cd $(workdir) && ./pro
+
+$(workdir)/$(name) : $(cpp_objs) $(cu_objs)
+	@echo Link $@
+	@mkdir -p $(dir $@)
+	@$(cc) -shared $^ -o $@ $(link_flags)
+
+$(workdir)/pro : $(pro_cpp_objs) $(cu_objs)
+	@echo Link $@
+	@mkdir -p $(dir $@)
+	@$(cc) $^ -o $@ $(link_flags)
+
+$(objdir)/%.cpp.o : $(srcdir)/%.cpp
+	@echo Compile CXX $<
+	@mkdir -p $(dir $@)
+	@$(cc) $(CXXFLAGS) -c $< -o $@ $(cpp_compile_flags)
+
+$(objdir)/%.cu.o : $(srcdir)/%.cu
+	@echo Compile CUDA $<
+	@mkdir -p $(dir $@)
+	@$(nvcc) $(CXXFLAGS) -c $< -o $@ $(cu_compile_flags)
+
+$(objdir)/%.cpp.mk : $(srcdir)/%.cpp
+	@echo Compile depends C++ $<
+	@mkdir -p $(dir $@)
+	@$(cc) -M $< -MF $@ -MT $(@:.cpp.mk=.cpp.o) $(cpp_compile_flags)
+
+$(objdir)/%.cu.mk : $(srcdir)/%.cu
+	@echo Compile depends CUDA $<
+	@mkdir -p $(dir $@)
+	@$(nvcc) -M $< -MF $@ -MT $(@:.cu.mk=.cu.o) $(cu_compile_flags)
+
+
+clean :
+	@rm -rf $(objdir) $(workdir)/$(name) $(workdir)/pro $(workdir)/*.trtmodel $(workdir)/imgs
+
+.PHONY : clean run $(name) runpro

+ 0 - 0
main.cpp → src/main.cpp