Makefile 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. cc := g++
  2. name := trtsahiyolo.so
  3. workdir := workspace
  4. srcdir := src
  5. objdir := objs
  6. stdcpp := c++17
  7. cuda_home := /usr/local/cuda-12
  8. cuda_arch := 8.6
  9. nvcc := $(cuda_home)/bin/nvcc -ccbin=$(cc)
  10. project_include_path := src
  11. opencv_include_path := /workspace/compile/__install/opencv490/include/opencv4
  12. trt_include_path := /usr/include/x86_64-linux-gnu/
  13. cuda_include_path := $(cuda_home)/include
  14. bt_include_path := src/3rd/ByteTrack/include
  15. eigen3_include_path := /usr/local/include/eigen3
  16. plog_include_path := src/3rd/plog
  17. ffmpeg_include_path :=
  18. python_include_path := /usr/include/python3.10
  19. include_paths := $(project_include_path) \
  20. $(opencv_include_path) \
  21. $(trt_include_path) \
  22. $(cuda_include_path) \
  23. $(python_include_path) \
  24. $(bt_include_path) \
  25. $(eigen3_include_path) \
  26. $(plog_include_path)
  27. opencv_library_path := /workspace/compile/__install/opencv490/lib/
  28. trt_library_path := /usr/lib/x86_64-linux-gnu/
  29. cuda_library_path := $(cuda_home)/lib64/
  30. python_library_path :=
  31. library_paths := $(opencv_library_path) \
  32. $(trt_library_path) \
  33. $(cuda_library_path) \
  34. $(cuda_library_path) \
  35. $(python_library_path)
  36. link_opencv := opencv_core opencv_imgproc opencv_videoio opencv_imgcodecs
  37. link_trt := nvinfer nvinfer_plugin nvonnxparser
  38. link_cuda := cuda cublas cudart cudnn nvcuvid nvidia-encode
  39. link_sys := stdc++ dl yaml-cpp
  40. link_ffmpeg := avcodec avformat swresample swscale avutil
  41. link_librarys := $(link_opencv) $(link_ffmpeg) $(link_trt) $(link_cuda) $(link_sys)
  42. empty :=
  43. library_path_export := $(subst $(empty) $(empty),:,$(library_paths))
  44. run_paths := $(foreach item,$(library_paths),-Wl,-rpath=$(item))
  45. include_paths := $(foreach item,$(include_paths),-I$(item))
  46. library_paths := $(foreach item,$(library_paths),-L$(item))
  47. link_librarys := $(foreach item,$(link_librarys),-l$(item))
  48. cpp_compile_flags := -std=$(stdcpp) -w -g -O0 -m64 -fPIC -fopenmp -pthread $(include_paths)
  49. cu_compile_flags := -Xcompiler "$(cpp_compile_flags)"
  50. link_flags := -pthread -fopenmp -Wl,-rpath='$$ORIGIN' $(library_paths) $(link_librarys)
  51. cpp_srcs := $(shell find $(srcdir) -name "*.cpp")
  52. cpp_objs := $(cpp_srcs:.cpp=.cpp.o)
  53. cpp_objs := $(cpp_objs:$(srcdir)/%=$(objdir)/%)
  54. cpp_mk := $(cpp_objs:.cpp.o=.cpp.mk)
  55. cu_srcs := $(shell find $(srcdir) -name "*.cu")
  56. cu_objs := $(cu_srcs:.cu=.cu.o)
  57. cu_objs := $(cu_objs:$(srcdir)/%=$(objdir)/%)
  58. cu_mk := $(cu_objs:.cu.o=.cu.mk)
  59. TRT_VERSION := 10
  60. # 根据 TRT_VERSION 设置不同的编译选项
  61. ifeq ($(TRT_VERSION), 8)
  62. CXXFLAGS = -DTRT8
  63. cpp_srcs := $(filter-out src/common/tensorrt.cpp, $(cpp_srcs))
  64. cpp_objs := $(filter-out objs/common/tensorrt.cpp.o, $(cpp_objs))
  65. else
  66. CXXFLAGS = -DTRT10
  67. cpp_srcs := $(filter-out src/common/tensorrt8.cpp, $(cpp_srcs))
  68. cpp_objs := $(filter-out objs/common/tensorrt8.cpp.o, $(cpp_objs))
  69. endif
  70. pro_cpp_objs := $(filter-out objs/interface.cpp.o, $(cpp_objs))
  71. ifneq ($(MAKECMDGOALS), clean)
  72. include $(mks)
  73. endif
  74. $(name) : $(workdir)/$(name)
  75. all : $(name)
  76. run : $(name)
  77. @cd $(workdir) && python3 test.py
  78. pro : $(workdir)/pro
  79. runpro : pro
  80. @export LD_LIBRARY_PATH=$(library_path_export)
  81. @cd $(workdir) && ./pro
  82. $(workdir)/$(name) : $(cpp_objs) $(cu_objs)
  83. @echo Link $@
  84. @mkdir -p $(dir $@)
  85. @$(cc) -shared $^ -o $@ $(link_flags)
  86. $(workdir)/pro : $(pro_cpp_objs) $(cu_objs)
  87. @echo Link $@
  88. @mkdir -p $(dir $@)
  89. @$(cc) $^ -o $@ $(link_flags)
  90. $(objdir)/%.cpp.o : $(srcdir)/%.cpp
  91. @echo Compile CXX $<
  92. @mkdir -p $(dir $@)
  93. @$(cc) $(CXXFLAGS) -c $< -o $@ $(cpp_compile_flags)
  94. $(objdir)/%.cu.o : $(srcdir)/%.cu
  95. @echo Compile CUDA $<
  96. @mkdir -p $(dir $@)
  97. @$(nvcc) $(CXXFLAGS) -c $< -o $@ $(cu_compile_flags)
  98. $(objdir)/%.cpp.mk : $(srcdir)/%.cpp
  99. @echo Compile depends C++ $<
  100. @mkdir -p $(dir $@)
  101. @$(cc) -M $< -MF $@ -MT $(@:.cpp.mk=.cpp.o) $(cpp_compile_flags)
  102. $(objdir)/%.cu.mk : $(srcdir)/%.cu
  103. @echo Compile depends CUDA $<
  104. @mkdir -p $(dir $@)
  105. @$(nvcc) -M $< -MF $@ -MT $(@:.cu.mk=.cu.o) $(cu_compile_flags)
  106. clean :
  107. @rm -rf $(objdir) $(workdir)/$(name) $(workdir)/pro $(workdir)/*.trtmodel $(workdir)/imgs
  108. .PHONY : clean run $(name) runpro jpg