Makefile 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. GPU=1
  2. CUDNN=1
  3. CUDNN_HALF=0
  4. OPENCV=0
  5. AVX=0
  6. OPENMP=0
  7. LIBSO=0
  8. ZED_CAMERA=0
  9. # set GPU=1 and CUDNN=1 to speedup on GPU
  10. # set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
  11. # set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
  12. USE_CPP=0
  13. DEBUG=0
  14. ARCH= -gencode arch=compute_30,code=sm_30 \
  15. -gencode arch=compute_35,code=sm_35 \
  16. -gencode arch=compute_50,code=[sm_50,compute_50] \
  17. -gencode arch=compute_52,code=[sm_52,compute_52] \
  18. -gencode arch=compute_61,code=[sm_61,compute_61]
  19. OS := $(shell uname)
  20. # Tesla V100
  21. # ARCH= -gencode arch=compute_70,code=[sm_70,compute_70]
  22. # GeForce RTX 2080 Ti, RTX 2080, RTX 2070, Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Tesla T4, XNOR Tensor Cores
  23. # ARCH= -gencode arch=compute_75,code=[sm_75,compute_75]
  24. # Jetson XAVIER
  25. # ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]
  26. # GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4
  27. # ARCH= -gencode arch=compute_61,code=sm_61 -gencode arch=compute_61,code=compute_61
  28. # GP100/Tesla P100 - DGX-1
  29. # ARCH= -gencode arch=compute_60,code=sm_60
  30. # For Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX - uncomment:
  31. # ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]
  32. # For Jetson Tx2 or Drive-PX2 uncomment:
  33. # ARCH= -gencode arch=compute_62,code=[sm_62,compute_62]
  34. VPATH=./src/
  35. EXEC=darknet
  36. OBJDIR=./obj/
  37. ifeq ($(LIBSO), 1)
  38. LIBNAMESO=libdarknet.so
  39. APPNAMESO=uselib
  40. endif
  41. ifeq ($(USE_CPP), 1)
  42. CC=g++
  43. else
  44. CC=gcc
  45. endif
  46. CPP=g++
  47. NVCC=nvcc
  48. OPTS=-Ofast
  49. LDFLAGS= -lm -pthread
  50. COMMON= -Iinclude/ -I3rdparty/stb/include
  51. CFLAGS=-Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -std=c99
  52. ifeq ($(DEBUG), 1)
  53. #OPTS= -O0 -g
  54. #OPTS= -Og -g
  55. COMMON+= -DDEBUG
  56. CFLAGS+= -DDEBUG
  57. else
  58. ifeq ($(AVX), 1)
  59. CFLAGS+= -ffp-contract=fast -mavx -mavx2 -msse3 -msse4.1 -msse4.2 -msse4a
  60. endif
  61. endif
  62. CFLAGS+=$(OPTS)
  63. ifneq (,$(findstring MSYS_NT,$(OS)))
  64. LDFLAGS+=-lws2_32
  65. endif
  66. ifeq ($(OPENCV), 1)
  67. COMMON+= -DOPENCV
  68. CFLAGS+= -DOPENCV
  69. LDFLAGS+= `pkg-config --libs opencv`
  70. COMMON+= `pkg-config --cflags opencv`
  71. endif
  72. ifeq ($(OPENMP), 1)
  73. CFLAGS+= -fopenmp
  74. LDFLAGS+= -lgomp
  75. endif
  76. ifeq ($(GPU), 1)
  77. COMMON+= -DGPU -I/usr/local/cuda/include/
  78. CFLAGS+= -DGPU
  79. ifeq ($(OS),Darwin) #MAC
  80. LDFLAGS+= -L/usr/local/cuda/lib -lcuda -lcudart -lcublas -lcurand
  81. else
  82. LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand
  83. endif
  84. endif
  85. ifeq ($(CUDNN), 1)
  86. COMMON+= -DCUDNN
  87. ifeq ($(OS),Darwin) #MAC
  88. CFLAGS+= -DCUDNN -I/usr/local/cuda/include
  89. LDFLAGS+= -L/usr/local/cuda/lib -lcudnn
  90. else
  91. CFLAGS+= -DCUDNN -I/usr/local/cudnn/include
  92. LDFLAGS+= -L/usr/local/cudnn/lib64 -lcudnn
  93. endif
  94. endif
  95. ifeq ($(CUDNN_HALF), 1)
  96. COMMON+= -DCUDNN_HALF
  97. CFLAGS+= -DCUDNN_HALF
  98. ARCH+= -gencode arch=compute_70,code=[sm_70,compute_70]
  99. endif
  100. ifeq ($(ZED_CAMERA), 1)
  101. CFLAGS+= -DZED_STEREO -I/usr/local/zed/include
  102. LDFLAGS+= -L/usr/local/zed/lib -lsl_core -lsl_input -lsl_zed
  103. #-lstdc++ -D_GLIBCXX_USE_CXX11_ABI=0
  104. endif
  105. OBJ=image_opencv.o http_stream.o gemm.o utils.o dark_cuda.o convolutional_layer.o list.o image.o activations.o im2col.o col2im.o blas.o crop_layer.o dropout_layer.o maxpool_layer.o softmax_layer.o data.o matrix.o network.o connected_layer.o cost_layer.o parser.o option_list.o darknet.o detection_layer.o captcha.o route_layer.o writing.o box.o nightmare.o normalization_layer.o avgpool_layer.o coco.o dice.o yolo.o detector.o layer.o compare.o classifier.o local_layer.o swag.o shortcut_layer.o activation_layer.o rnn_layer.o gru_layer.o rnn.o rnn_vid.o crnn_layer.o demo.o tag.o cifar.o go.o batchnorm_layer.o art.o region_layer.o reorg_layer.o reorg_old_layer.o super.o voxel.o tree.o yolo_layer.o gaussian_yolo_layer.o upsample_layer.o lstm_layer.o conv_lstm_layer.o scale_channels_layer.o sam_layer.o
  106. ifeq ($(GPU), 1)
  107. LDFLAGS+= -lstdc++
  108. OBJ+=convolutional_kernels.o activation_kernels.o im2col_kernels.o col2im_kernels.o blas_kernels.o crop_layer_kernels.o dropout_layer_kernels.o maxpool_layer_kernels.o network_kernels.o avgpool_layer_kernels.o
  109. endif
  110. OBJS = $(addprefix $(OBJDIR), $(OBJ))
  111. DEPS = $(wildcard src/*.h) Makefile include/darknet.h
  112. all: $(OBJDIR) backup results setchmod $(EXEC) $(LIBNAMESO) $(APPNAMESO)
  113. ifeq ($(LIBSO), 1)
  114. CFLAGS+= -fPIC
  115. $(LIBNAMESO): $(OBJDIR) $(OBJS) include/yolo_v2_class.hpp src/yolo_v2_class.cpp
  116. $(CPP) -shared -std=c++11 -fvisibility=hidden -DLIB_EXPORTS $(COMMON) $(CFLAGS) $(OBJS) src/yolo_v2_class.cpp -o $@ $(LDFLAGS)
  117. $(APPNAMESO): $(LIBNAMESO) include/yolo_v2_class.hpp src/yolo_console_dll.cpp
  118. $(CPP) -std=c++11 $(COMMON) $(CFLAGS) -o $@ src/yolo_console_dll.cpp $(LDFLAGS) -L ./ -l:$(LIBNAMESO)
  119. endif
  120. $(EXEC): $(OBJS)
  121. $(CPP) -std=c++11 $(COMMON) $(CFLAGS) $^ -o $@ $(LDFLAGS)
  122. $(OBJDIR)%.o: %.c $(DEPS)
  123. $(CC) $(COMMON) $(CFLAGS) -c $< -o $@
  124. $(OBJDIR)%.o: %.cpp $(DEPS)
  125. $(CPP) -std=c++11 $(COMMON) $(CFLAGS) -c $< -o $@
  126. $(OBJDIR)%.o: %.cu $(DEPS)
  127. $(NVCC) $(ARCH) $(COMMON) --compiler-options "$(CFLAGS)" -c $< -o $@
  128. $(OBJDIR):
  129. mkdir -p $(OBJDIR)
  130. backup:
  131. mkdir -p backup
  132. results:
  133. mkdir -p results
  134. setchmod:
  135. chmod +x *.sh
  136. .PHONY: clean
  137. clean:
  138. rm -rf $(OBJS) $(EXEC) $(LIBNAMESO) $(APPNAMESO)