Advertisement
Guest User

Untitled

a guest
Nov 15th, 2021
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.10 KB | None | 0 0
  1. .SUFFIXES:
  2. CUDA_TRIPLE ?= x86_64-linux
  3. CUBLAS_TRIPLE ?= x86_64-linux-gnu
  4. DLSW_TRIPLE ?= x86_64-linux-gnu
  5. SAFE_PDK ?= 0
  6. TARGET ?= $(shell uname -m)
  7.  
  8. ifeq ($(CUDA_INSTALL_DIR),)
  9. CUDA_INSTALL_DIR ?= /usr/local/cuda
  10. $(warning CUDA_INSTALL_DIR variable is not specified, using $(CUDA_INSTALL_DIR) by default, use CUDA_INSTALL_DIR=<cuda_directory> to change.)
  11. endif
  12.  
  13. ifeq ($(CUDNN_INSTALL_DIR),)
  14. CUDNN_INSTALL_DIR ?= $(CUDA_INSTALL_DIR)
  15. $(warning CUDNN_INSTALL_DIR variable is not specified, using $(CUDA_INSTALL_DIR) by default, use CUDNN_INSTALL_DIR=<cudnn_directory> to change.)
  16. endif
  17.  
  18. ifeq ($(ENABLE_DLA), 1)
  19. ifeq ($(PDK_DIR),)
  20. $(error DLA is enabled and PDK_DIR is not specified but it is required by some samples, use PDK_DIR=<pdk_directory> to specify.)
  21. endif
  22. PDK_LIB_DIR := $(PDK_DIR)/lib-target
  23. PDK_INC_DIR := $(PDK_DIR)/include
  24. endif
  25.  
  26. ifeq ($(TRT_LIB_DIR),)
  27. TRT_LIB_DIR ?= ../../lib
  28. $(warning TRT_LIB_DIR is not specified, searching $(TRT_LIB_DIR), ../../lib, ../lib by default, use TRT_LIB_DIR=<trt_lib_directory> to change.)
  29. endif
  30.  
  31. CUDA_LIBDIR = lib
  32. CUDNN_LIBDIR = lib64
  33. ifeq ($(TARGET), aarch64)
  34. ifeq ($(shell uname -m), aarch64)
  35. CUDA_LIBDIR = lib64
  36. CC = g++
  37. else
  38. CC = aarch64-linux-gnu-g++
  39. endif
  40. CUCC = $(CUDA_INSTALL_DIR)/bin/nvcc -m64 -ccbin $(CC)
  41. else ifeq ($(TARGET), x86_64)
  42. CUDA_LIBDIR = lib64
  43. CC = g++
  44. CUCC = $(CUDA_INSTALL_DIR)/bin/nvcc -m64
  45. else ifeq ($(TARGET), ppc64le)
  46. CUDA_LIBDIR = lib64
  47. CC = g++
  48. CUCC = $(CUDA_INSTALL_DIR)/bin/nvcc -m64
  49. else ifeq ($(TARGET), qnx)
  50. CC = ${QNX_HOST}/usr/bin/aarch64-unknown-nto-qnx7.0.0-g++
  51. CUCC = $(CUDA_INSTALL_DIR)/bin/nvcc -m64 -ccbin $(CC)
  52. else ifeq ($(TARGET), android64)
  53. ifeq ($(ANDROID_CC),)
  54. $(error ANDROID_CC must be set to the clang compiler to build for android 64bit, for example /path/to/my-toolchain/bin/aarch64-linux-android-clang++)
  55. endif
  56. CUDA_LIBDIR = lib
  57. ANDROID_FLAGS = -DANDROID -D_GLIBCXX_USE_C99=1 -Wno-sign-compare -D__aarch64__ -Wno-strict-aliasing -Werror -pie -fPIE -Wno-unused-command-line-argument
  58. COMMON_FLAGS += $(ANDROID_FLAGS)
  59. COMMON_LD_FLAGS += $(ANDROID_FLAGS)
  60. CC = $(ANDROID_CC)
  61. CUCC = $(CUDA_INSTALL_DIR)/bin/nvcc -m64 -ccbin $(CC) --compiler-options="-DANDROID -D_GLIBCXX_USE_C99=1 -Wno-sign-compare"
  62. ANDROID = 1
  63. else ########
  64. $(error Auto-detection of platform failed. Please specify one of the following arguments to make: TARGET=[aarch64|x86_64|qnx|android64])
  65. endif
  66.  
  67. ifdef VERBOSE
  68. AT=
  69. else
  70. AT=@
  71. endif
  72.  
  73. AR = ar cr
  74. ECHO = @echo
  75.  
  76. SHELL = /bin/sh
  77.  
  78. ROOT_PATH = ../..
  79. ifeq ($(SAFE_PDK), 1)
  80. OUT_PATH = $(ROOT_PATH)/bin/safety
  81. else
  82. OUT_PATH = $(ROOT_PATH)/bin
  83. endif
  84. OUTDIR = $(OUT_PATH)
  85.  
  86. define concat
  87. $1$2$3$4$5$6$7$8
  88. endef
  89.  
  90. ifneq ($(USE_QCC),1)
  91. # Usage: $(call make-depend,source-file,object-file,depend-file)
  92. define make-depend
  93. $(AT)$(CC) -MM -MF $3 -MP -MT $2 $(COMMON_FLAGS) $1
  94. endef
  95. # Usage: $(call make-cuda-depend,source-file,object-file,depend-file,flags)
  96. define make-cuda-depend
  97. $(AT)$(CUCC) -M -MT $2 $4 $1 > $3
  98. endef
  99. endif
  100.  
  101. # When TRT_STATIC is set, pick the static libraries for all components. Samples are compiled with static libraries
  102. ifeq ($(TRT_STATIC), 1)
  103. CUDART_LIB = -lcudart_static
  104. CUDNN_LIB = -lcudnn_static
  105. CUBLAS_LIB = -lcublas_static
  106. MYELIN_LIB = -lmyelin_compiler_static -lmyelin_executor_static -lmyelin_pattern_library_static -lmyelin_pattern_runtime_static
  107. NVINFER_LIB = -lnvinfer_static
  108. NVPARSERS_LIB = -lnvparsers_static
  109. NVINFER_PLUGIN_LIB = -lnvinfer_plugin_static
  110. NVONNXPARSERS_LIB = -lnvonnxparser_static
  111. NVRTC_LIB = -lnvrtc_static
  112. PROTO_LIB = -lprotobuf -lonnx_proto
  113. STUBS_DIR = -L"$(TRT_LIB_DIR)/stubs" -Wl,-rpath-link="$(TRT_LIB_DIR)/stubs"
  114. else
  115. CUDART_LIB = -lcudart
  116. CUDNN_LIB = -lcudnn
  117. CUBLAS_LIB = -lcublas
  118. MYELIN_LIB = -lmyelin
  119. NVINFER_LIB = -lnvinfer
  120. NVPARSERS_LIB = -lnvparsers
  121. NVINFER_PLUGIN_LIB = -lnvinfer_plugin
  122. NVONNXPARSERS_LIB = -lnvonnxparser
  123. NVRTC_LIB = -lnvrtc
  124. PROTO_LIBDIR =
  125. STUBS_DIR =
  126. endif
  127.  
  128. #########################
  129. INCPATHS=
  130. LIBPATHS=
  131. COMMON_LIBS=
  132.  
  133. # Add extra libraries if TRT_STATIC is enabled
  134. ifeq ($(TRT_STATIC), 1)
  135. COMMON_LIBS += -lculibos -lcublasLt_static
  136. endif
  137.  
  138. # add cross compile directories
  139. ifneq ($(shell uname -m), $(TARGET))
  140. INCPATHS += -I"/usr/include/$(DLSW_TRIPLE)" -I"/usr/include/$(CUBLAS_TRIPLE)"
  141. LIBPATHS += -L"../lib/stubs" -L"../../lib/stubs" -L"/usr/lib/$(DLSW_TRIPLE)/stubs" -L"/usr/lib/$(DLSW_TRIPLE)" -L"/usr/lib/$(CUBLAS_TRIPLE)/stubs" -L"/usr/lib/$(CUBLAS_TRIPLE)"
  142. LIBPATHS += -L"$(CUDA_INSTALL_DIR)/targets/$(CUDA_TRIPLE)/$(CUDA_LIBDIR)/stubs" -L"$(CUDA_INSTALL_DIR)/targets/$(CUDA_TRIPLE)/$(CUDA_LIBDIR)"
  143. endif
  144. INCPATHS += -I"../common" -I"$(CUDA_INSTALL_DIR)/include" -I"$(CUDNN_INSTALL_DIR)/include" -I"../include" -I"../../include" -I"../../parsers/onnxOpenSource"
  145. LIBPATHS += -L"$(CUDA_INSTALL_DIR)/$(CUDA_LIBDIR)" -Wl,-rpath-link="$(CUDA_INSTALL_DIR)/$(CUDA_LIBDIR)"
  146. LIBPATHS += -L"$(CUDNN_INSTALL_DIR)/$(CUDNN_LIBDIR)" -Wl,-rpath-link="$(CUDNN_INSTALL_DIR)/$(CUDNN_LIBDIR)"
  147. LIBPATHS += -L"../lib" -L"../../lib" -L"$(TRT_LIB_DIR)" -Wl,-rpath-link="$(TRT_LIB_DIR)" $(STUBS_DIR)
  148.  
  149. # libnvinfer_safe.so links to neither standard nor safe PDK, while libnvinfer.so depends on standard PDK when DLA is enabled.
  150. ifeq ($(SAFE_PDK), 0)
  151. ifneq ($(ENABLE_DLA), 0)
  152. LIBPATHS += -L"$(PDK_LIB_DIR)" -Wl,-rpath-link="$(PDK_LIB_DIR)"
  153. endif
  154. endif
  155.  
  156. # delimiter ; is to avoid the issue caused by the case that one keyword is the substr of another keyword
  157. USE_PDK_LISTS := dla_safety_runtime; sample_nvmedia;
  158.  
  159. # add required PDK headers/libraries
  160. ifeq ($(ENABLE_DLA), 1)
  161. ifeq ($(TARGET), qnx)
  162. LIBPATHS += -L"$(QNX_TARGET)/aarch64le/lib"
  163. LIBPATHS += -L"$(QNX_TARGET)/aarch64le/lib/gcc/5.4.0"
  164. LIBPATHS += -L"$(QNX_TARGET)/aarch64le/usr/lib"
  165. INCPATHS += -I"$(QNX_TARGET)/usr/include"
  166. endif
  167.  
  168. PDK_LISTS_FILTER := $(OUTNAME_RELEASE);
  169. ifneq ($(findstring $(PDK_LISTS_FILTER),$(USE_PDK_LISTS)),)
  170. HAS_NVSCIBUF_LIB=$(shell ls ${PDK_LIB_DIR}/libnvscibuf.so 2> /dev/null | wc -l)
  171. ifeq ($(HAS_NVSCIBUF_LIB), 1)
  172. LIBLIST += -lnvscibuf
  173. endif
  174. HAS_NVMEDIA_LIB=$(shell ls ${PDK_LIB_DIR}/libnvmedia.so 2> /dev/null | wc -l)
  175. ifeq ($(HAS_NVMEDIA_LIB), 1)
  176. LIBLIST += -lnvmedia
  177. endif
  178. HAS_NVMEDIA_CORE_LIB=$(shell ls ${PDK_LIB_DIR}/libnvmedia_core.so 2> /dev/null | wc -l)
  179. ifeq ($(HAS_NVMEDIA_CORE_LIB), 1)
  180. LIBLIST += -lnvmedia_core
  181. endif
  182. HAS_NVMEDIA_TENSOR_LIB=$(shell ls ${PDK_LIB_DIR}/libnvmedia_tensor.so 2> /dev/null | wc -l)
  183. ifeq ($(HAS_NVMEDIA_TENSOR_LIB), 1)
  184. LIBLIST += -lnvmedia_tensor
  185. endif
  186. HAS_NVMEDIA_DLA_LIB=$(shell ls ${PDK_LIB_DIR}/libnvmedia_dla.so 2> /dev/null | wc -l)
  187. ifeq ($(HAS_NVMEDIA_DLA_LIB), 1)
  188. LIBLIST += -lnvmedia_dla
  189. endif
  190. COMMON_LIBS += ${LIBLIST}
  191. LIBPATHS += -L"$(PDK_LIB_DIR)" -Wl,-rpath-link=$(PDK_LIB_DIR) -Wl,--unresolved-symbols=ignore-in-shared-libs
  192. INCPATHS += -I"$(PDK_INC_DIR)"
  193. endif
  194. endif
  195.  
  196. # Add myelin libraries if applicable
  197. ENABLE_MYELIN := 0
  198. ifeq ($(TARGET), x86_64)
  199. ENABLE_MYELIN = 1
  200. else ifeq ($(TARGET), ppc64le)
  201. ifeq ($(CUDA), $(filter $(CUDA), cuda-10.2))
  202. ENABLE_MYELIN = 1
  203. endif
  204. else ifeq ($(TARGET), aarch64)
  205. ifeq ($(CUDA), $(filter $(CUDA), cuda-10.2))
  206. ENABLE_MYELIN = 1
  207. endif
  208. endif
  209. ifeq ($(ENABLE_MYELIN), 1)
  210. COMMON_LIBS += $(MYELIN_LIB) $(NVRTC_LIB)
  211. endif
  212.  
  213. .SUFFIXES:
  214. vpath %.h $(EXTRA_DIRECTORIES)
  215. vpath %.cpp $(EXTRA_DIRECTORIES)
  216.  
  217. COMMON_FLAGS += -Wall -Wno-deprecated-declarations -std=c++11 $(INCPATHS)
  218. ifneq ($(ANDROID),1)
  219. COMMON_FLAGS += -D_REENTRANT
  220. endif
  221.  
  222. ifeq ($(TARGET), qnx)
  223. COMMON_FLAGS += -D_POSIX_C_SOURCE=200112L -D_QNX_SOURCE -D_FILE_OFFSET_BITS=64 -fpermissive
  224. endif
  225.  
  226. COMMON_LD_FLAGS += $(LIBPATHS) -L$(OUTDIR)
  227.  
  228. OBJDIR = $(call concat,$(OUTDIR),/chobj)
  229. DOBJDIR = $(call concat,$(OUTDIR),/dchobj)
  230.  
  231. COMMON_LIBS += $(CUDART_LIB)
  232. ifneq ($(SAFE_PDK),1)
  233. COMMON_LIBS += $(CUBLAS_LIB) $(CUDNN_LIB)
  234. endif
  235.  
  236. ifneq ($(TARGET), qnx)
  237. ifneq ($(ANDROID), 1)
  238. COMMON_LIBS += -lrt -ldl -lpthread
  239. endif
  240. endif
  241. ifeq ($(ANDROID),1)
  242. COMMON_LIBS += -lculibos -llog
  243. endif
  244.  
  245. COMMON_LIBS_FOR_EXECUTABLE := $(filter-out -lcudart_static ,$(COMMON_LIBS))
  246. ifeq ($(USE_CUDART_STATIC), 1)
  247. COMMON_LIBS_FOR_EXECUTABLE += $(CUDART_LIB)
  248. endif
  249.  
  250. ifeq ($(SAFE_PDK),1)
  251. LIBS = $(COMMON_LIBS_FOR_EXECUTABLE) $(PROTO_LIB)
  252. DLIBS = $(COMMON_LIBS_FOR_EXECUTABLE) $(PROTO_LIB)
  253. else
  254. LIBS = $(NVINFER_LIB) $(NVPARSERS_LIB) $(NVINFER_PLUGIN_LIB) $(NVONNXPARSERS_LIB) $(COMMON_LIBS_FOR_EXECUTABLE) $(PROTO_LIB)
  255. DLIBS = $(NVINFER_LIB) $(NVPARSERS_LIB) $(NVINFER_PLUGIN_LIB) $(NVONNXPARSERS_LIB) $(COMMON_LIBS_FOR_EXECUTABLE) $(PROTO_LIB)
  256. endif
  257.  
  258. OBJS = $(patsubst %.cpp, $(OBJDIR)/%.o, $(wildcard *.cpp $(addsuffix /*.cpp, $(EXTRA_DIRECTORIES))))
  259. DOBJS = $(patsubst %.cpp, $(DOBJDIR)/%.o, $(wildcard *.cpp $(addsuffix /*.cpp, $(EXTRA_DIRECTORIES))))
  260. CUOBJS = $(patsubst %.cu, $(OBJDIR)/%.o, $(wildcard *.cu $(addsuffix /*.cu, $(EXTRA_DIRECTORIES))))
  261. CUDOBJS = $(patsubst %.cu, $(DOBJDIR)/%.o, $(wildcard *.cu $(addsuffix /*.cu, $(EXTRA_DIRECTORIES))))
  262.  
  263. CFLAGS = $(COMMON_FLAGS)
  264. CFLAGSD = $(COMMON_FLAGS) -g
  265. LFLAGS = $(COMMON_LD_FLAGS)
  266. LFLAGSD = $(COMMON_LD_FLAGS)
  267.  
  268. all: debug release
  269.  
  270. release : $(OUTDIR)/$(OUTNAME_RELEASE)
  271.  
  272. debug : $(OUTDIR)/$(OUTNAME_DEBUG)
  273.  
  274. test: test_debug test_release
  275.  
  276. test_debug:
  277. $(AT)cd $(OUTDIR) && ./$(OUTNAME_DEBUG)
  278.  
  279. test_release:
  280. $(AT)cd $(OUTDIR) && ./$(OUTNAME_RELEASE)
  281.  
  282. ifdef MAC
  283. $(OUTDIR)/$(OUTNAME_RELEASE) : $(OBJS) $(CUOBJS)
  284. $(ECHO) Linking: $@
  285. $(AT)$(CC) -o $@ $^ $(LFLAGS) $(LIBS)
  286. # Copy every EXTRA_FILE of this sample to bin dir
  287. $(foreach EXTRA_FILE,$(EXTRA_FILES), cp -f $(EXTRA_FILE) $(OUTDIR)/$(EXTRA_FILE); )
  288.  
  289. $(OUTDIR)/$(OUTNAME_DEBUG) : $(DOBJS) $(CUDOBJS)
  290. $(ECHO) Linking: $@
  291. $(AT)$(CC) -o $@ $^ $(LFLAGSD) $(DLIBS)
  292. else
  293. $(OUTDIR)/$(OUTNAME_RELEASE) : $(OBJS) $(CUOBJS)
  294. $(ECHO) Linking: $@
  295. $(AT)$(CC) -o $@ $^ $(LFLAGS) -Wl,--start-group $(LIBS) -Wl,--end-group
  296. # Copy every EXTRA_FILE of this sample to bin dir
  297. $(foreach EXTRA_FILE,$(EXTRA_FILES), cp -f $(EXTRA_FILE) $(OUTDIR)/$(EXTRA_FILE); )
  298.  
  299. $(OUTDIR)/$(OUTNAME_DEBUG) : $(DOBJS) $(CUDOBJS)
  300. $(ECHO) Linking: $@
  301. $(AT)$(CC) -o $@ $^ $(LFLAGSD) -Wl,--start-group $(DLIBS) -Wl,--end-group
  302. endif
  303.  
  304. $(OBJDIR)/%.o: %.cpp
  305. $(AT)if [ ! -d $(OBJDIR) ]; then mkdir -p $(OBJDIR); fi
  306. $(foreach XDIR,$(EXTRA_DIRECTORIES), if [ ! -d $(OBJDIR)/$(XDIR) ]; then mkdir -p $(OBJDIR)/$(XDIR); fi;) :
  307. $(call make-depend,$<,$@,$(subst .o,.d,$@))
  308. $(ECHO) Compiling: $<
  309. $(AT)$(CC) $(CFLAGS) -c -o $@ $<
  310.  
  311. $(DOBJDIR)/%.o: %.cpp
  312. $(AT)if [ ! -d $(DOBJDIR) ]; then mkdir -p $(DOBJDIR); fi
  313. $(foreach XDIR,$(EXTRA_DIRECTORIES), if [ ! -d $(OBJDIR)/$(XDIR) ]; then mkdir -p $(DOBJDIR)/$(XDIR); fi;) :
  314. $(call make-depend,$<,$@,$(subst .o,.d,$@))
  315. $(ECHO) Compiling: $<
  316. $(AT)$(CC) $(CFLAGSD) -c -o $@ $<
  317.  
  318. ######################################################################### CU
  319. $(OBJDIR)/%.o: %.cu
  320. $(AT)if [ ! -d $(OBJDIR) ]; then mkdir -p $(OBJDIR); fi
  321. $(foreach XDIR,$(EXTRA_DIRECTORIES), if [ ! -d $(OBJDIR)/$(XDIR) ]; then mkdir -p $(OBJDIR)/$(XDIR); fi;) :
  322. $(call make-cuda-depend,$<,$@,$(subst .o,.d,$@))
  323. $(ECHO) Compiling CUDA release: $<
  324. $(AT)$(CUCC) $(CUFLAGS) -c -o $@ $<
  325.  
  326. $(DOBJDIR)/%.o: %.cu
  327. $(AT)if [ ! -d $(DOBJDIR) ]; then mkdir -p $(DOBJDIR); fi
  328. $(foreach XDIR,$(EXTRA_DIRECTORIES), if [ ! -d $(DOBJDIR)/$(XDIR) ]; then mkdir -p $(DOBJDIR)/$(XDIR); fi;) :
  329. $(call make-cuda-depend,$<,$@,$(subst .o,.d,$@))
  330. $(ECHO) Compiling CUDA debug: $<
  331. $(AT)$(CUCC) $(CUFLAGSD) -c -o $@ $<
  332.  
  333. clean:
  334. $(ECHO) Cleaning...
  335. $(foreach XDIR,$(EXTRA_DIRECTORIES), if [ -d $(OBJDIR)/$(XDIR) ]; then rm -rf $(OBJDIR)/$(XDIR); fi;) :
  336. $(foreach XDIR,$(EXTRA_DIRECTORIES), if [ -d $(DOBJDIR)/$(XDIR) ]; then rm -rf $(DOBJDIR)/$(XDIR); fi;) :
  337. $(AT)rm -rf $(OBJDIR) $(DOBJDIR) $(OUTDIR)/$(OUTNAME_RELEASE) $(OUTDIR)/$(OUTNAME_DEBUG)
  338. $(foreach EXTRA_FILE,$(EXTRA_FILES), if [ -f $(OUTDIR)/$(EXTRA_FILE) ]; then rm -f $(OUTDIR)/$(EXTRA_FILE); fi;) :
  339.  
  340. ifneq "$(MAKECMDGOALS)" "clean"
  341. -include $(OBJDIR)/*.d $(DOBJDIR)/*.d
  342. endif # ifneq "$(MAKECMDGOALS)" "clean"
  343.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement