mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
added cmakefile
This commit is contained in:
parent
61c9d02ec4
commit
0490bc5d55
225
CMakeLists.txt
Normal file
225
CMakeLists.txt
Normal file
@ -0,0 +1,225 @@
|
||||
cmake_minimum_required(VERSION 3.8)
|
||||
|
||||
set(GPU ON)
|
||||
set(CUDNN ON)
|
||||
set(OPENCV ON)
|
||||
set(DEBUG ON)
|
||||
|
||||
#add_definitions(-DOPENMP)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
cmake_policy(SET CMP0071 NEW)
|
||||
cmake_policy(SET CMP0046 NEW)
|
||||
|
||||
project(darknet)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
set(CMAKE_C_COMPILER /usr/bin/gcc)
|
||||
|
||||
# Find includes in corresponding build directories
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE TYPE INTERNAL FORCE)
|
||||
|
||||
include_directories(${PROJECT_SOURCE_DIR}/include)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/install)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/install)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/install)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/install)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/install)
|
||||
|
||||
include(CMakeParseArguments)
|
||||
|
||||
# gather_flags
|
||||
# Gathers all lists of flags for printing or manipulation
|
||||
macro (gather_flags with_linker result)
|
||||
set(${result} "")
|
||||
# add the main flags without a config
|
||||
list(APPEND ${result} CMAKE_C_FLAGS)
|
||||
list(APPEND ${result} CMAKE_CXX_FLAGS)
|
||||
if(${with_linker})
|
||||
list(APPEND ${result} CMAKE_EXE_LINKER_FLAGS)
|
||||
list(APPEND ${result} CMAKE_MODULE_LINKER_FLAGS)
|
||||
list(APPEND ${result} CMAKE_SHARED_LINKER_FLAGS)
|
||||
list(APPEND ${result} CMAKE_STATIC_LINKER_FLAGS)
|
||||
endif()
|
||||
|
||||
if("${CMAKE_CONFIGURATION_TYPES}" STREQUAL "" AND NOT "${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||
# handle single config generators - like makefiles/ninja - when CMAKE_BUILD_TYPE is set
|
||||
string(TOUPPER ${CMAKE_BUILD_TYPE} config)
|
||||
list(APPEND ${result} CMAKE_C_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_CXX_FLAGS_${config})
|
||||
if(${with_linker})
|
||||
list(APPEND ${result} CMAKE_EXE_LINKER_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_MODULE_LINKER_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_SHARED_LINKER_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_STATIC_LINKER_FLAGS_${config})
|
||||
endif()
|
||||
else()
|
||||
# handle multi config generators (like msvc, xcode)
|
||||
foreach(config ${CMAKE_CONFIGURATION_TYPES})
|
||||
string(TOUPPER ${config} config)
|
||||
list(APPEND ${result} CMAKE_C_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_CXX_FLAGS_${config})
|
||||
if(${with_linker})
|
||||
list(APPEND ${result} CMAKE_EXE_LINKER_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_MODULE_LINKER_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_SHARED_LINKER_FLAGS_${config})
|
||||
list(APPEND ${result} CMAKE_STATIC_LINKER_FLAGS_${config})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# set_runtime
|
||||
# Sets the runtime (static/dynamic) for msvc/gcc
|
||||
macro (set_runtime)
|
||||
cmake_parse_arguments(ARG "STATIC;DYNAMIC" "" "" ${ARGN})
|
||||
|
||||
if(ARG_UNPARSED_ARGUMENTS)
|
||||
message(FATAL_ERROR "unrecognized arguments: ${ARG_UNPARSED_ARGUMENTS}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" STREQUAL "")
|
||||
message(AUTHOR_WARNING "set_runtime() does not support clang yet!")
|
||||
endif()
|
||||
|
||||
gather_flags(0 flags_configs)
|
||||
|
||||
# add/replace the flags
|
||||
# note that if the user has messed with the flags directly this function might fail
|
||||
# - for example if with MSVC and the user has removed the flags - here we just switch/replace them
|
||||
if("${ARG_STATIC}")
|
||||
foreach(flags ${flags_configs})
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
if(NOT ${flags} MATCHES "-static-libstdc\\+\\+")
|
||||
set(${flags} "${${flags}} -static-libstdc++")
|
||||
endif()
|
||||
if(NOT ${flags} MATCHES "-static-libgcc")
|
||||
set(${flags} "${${flags}} -static-libgcc")
|
||||
endif()
|
||||
elseif(MSVC)
|
||||
if(${flags} MATCHES "/MD")
|
||||
string(REGEX REPLACE "/MD" "/MT" ${flags} "${${flags}}")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
elseif("${ARG_DYNAMIC}")
|
||||
foreach(flags ${flags_configs})
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
if(${flags} MATCHES "-static-libstdc\\+\\+")
|
||||
string(REGEX REPLACE "-static-libstdc\\+\\+" "" ${flags} "${${flags}}")
|
||||
endif()
|
||||
if(${flags} MATCHES "-static-libgcc")
|
||||
string(REGEX REPLACE "-static-libgcc" "" ${flags} "${${flags}}")
|
||||
endif()
|
||||
elseif(MSVC)
|
||||
if(${flags} MATCHES "/MT")
|
||||
string(REGEX REPLACE "/MT" "/MD" ${flags} "${${flags}}")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# foreach(flags ${flags_configs})
|
||||
# message(STATUS "${flags}: ${${flags}}")
|
||||
# endforeach()
|
||||
endmacro()
|
||||
|
||||
set(CompilerFlags
|
||||
CMAKE_CXX_FLAGS
|
||||
CMAKE_CXX_FLAGS_DEBUG
|
||||
CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_C_FLAGS
|
||||
CMAKE_C_FLAGS_DEBUG
|
||||
CMAKE_C_FLAGS_RELEASE
|
||||
)
|
||||
|
||||
foreach(CompilerFlag ${CompilerFlags})
|
||||
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
|
||||
endforeach()
|
||||
|
||||
file(GLOB C_SOURCES "src/*.c" "src/*.h")
|
||||
file(GLOB CPP_SOURCES "src/*.cpp")
|
||||
file(GLOB APP_SOURCES "examples/*.c")
|
||||
file(GLOB CUDA_SOURCES "src/*.cu")
|
||||
|
||||
list(REMOVE_ITEM C_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/compare.c)
|
||||
|
||||
list(REMOVE_ITEM APP_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/attention.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/rnn_vid.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/swag.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/dice.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/voxel.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/writing.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/darknet.c
|
||||
)
|
||||
|
||||
if (GPU AND CUDNN)
|
||||
add_definitions(-DCUDNN)
|
||||
include(FindCUDNN.cmake)
|
||||
add_definitions(${CUDNN_DEFINITIONS})
|
||||
include_directories(${CUDNN_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if (GPU)
|
||||
add_definitions(-DGPU)
|
||||
find_package(CUDA REQUIRED)
|
||||
include_directories(${CUDA_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if (OPENCV)
|
||||
add_definitions(-DOPENCV)
|
||||
set(OpenCV_STATIC ON)
|
||||
find_package(OpenCV REQUIRED)
|
||||
include_directories(${OpenCV_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if (OPENCV AND GPU)
|
||||
set(OpenCV_CUDA ON)
|
||||
endif()
|
||||
|
||||
if (DEBUG)
|
||||
add_definitions(-DDEBUG)
|
||||
endif()
|
||||
|
||||
set_runtime(STATIC)
|
||||
|
||||
add_library(darknet_cpp STATIC ${CPP_SOURCES})
|
||||
add_library(darknet_app STATIC ${APP_SOURCES})
|
||||
|
||||
add_executable(${PROJECT_NAME} ${C_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/examples/darknet.c)
|
||||
#CUDA_ADD_CUBLAS_TO_TARGET(${PROJECT_NAME})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
darknet_cpp
|
||||
darknet_app
|
||||
pthread
|
||||
)
|
||||
|
||||
if (OPENCV)
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
${OpenCV_LIBS}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (GPU)
|
||||
cuda_add_library(darknet_cuda STATIC ${CUDA_SOURCES})
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
darknet_cuda
|
||||
cublas
|
||||
curand
|
||||
${CUDA_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (CUDNN)
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
${CUDNN_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
|
181
FindCUDNN.cmake
Normal file
181
FindCUDNN.cmake
Normal file
@ -0,0 +1,181 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
#.rst:
|
||||
# FindCUDNN
|
||||
# -------
|
||||
#
|
||||
# Find CUDNN library
|
||||
#
|
||||
# Valiables that affect result:
|
||||
# <VERSION>, <REQUIRED>, <QUIETLY>: as usual
|
||||
#
|
||||
# <EXACT> : as usual, plus we do find '5.1' version if you wanted '5'
|
||||
# (not if you wanted '5.0', as usual)
|
||||
#
|
||||
# Result variables
|
||||
# ^^^^^^^^^^^^^^^^
|
||||
#
|
||||
# This module will set the following variables in your project:
|
||||
#
|
||||
# ``CUDNN_INCLUDE``
|
||||
# where to find cudnn.h.
|
||||
# ``CUDNN_LIBRARY``
|
||||
# the libraries to link against to use CUDNN.
|
||||
# ``CUDNN_FOUND``
|
||||
# If false, do not try to use CUDNN.
|
||||
# ``CUDNN_VERSION``
|
||||
# Version of the CUDNN library we looked for
|
||||
#
|
||||
# Exported functions
|
||||
# ^^^^^^^^^^^^^^^^
|
||||
# function(CUDNN_INSTALL version __dest_libdir [__dest_incdir])
|
||||
# This function will try to download and install CUDNN.
|
||||
# CUDNN5 and CUDNN6 are supported.
|
||||
#
|
||||
#
|
||||
|
||||
function(CUDNN_INSTALL version dest_libdir dest_incdir dest_bindir)
|
||||
message(STATUS "CUDNN_INSTALL: Installing CUDNN ${version}, lib:${dest_libdir}, inc:${dest_incdir}, bin:${dest_bindir}")
|
||||
string(REGEX REPLACE "-rc$" "" version_base "${version}")
|
||||
set(tar_libdir cuda/lib64)
|
||||
set(tar_incdir cuda/include)
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
set(url_extension tgz)
|
||||
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
|
||||
set(url_arch_name linux-x64 )
|
||||
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "ppc")
|
||||
set(url_arch_name linux-ppc64le )
|
||||
# TX1 has to be installed via JetPack
|
||||
endif()
|
||||
elseif (APPLE)
|
||||
set(url_extension tgz)
|
||||
set(tar_libdir cuda/lib)
|
||||
set(url_arch_name osx-x64)
|
||||
elseif(WIN32)
|
||||
set(url_extension zip)
|
||||
set(tar_bindir cuda/bin)
|
||||
set(tar_libdir cuda/lib/x64)
|
||||
if(CMAKE_SYSTEM_VERSION MATCHES "10")
|
||||
set(url_arch_name windows10-x64)
|
||||
else()
|
||||
set(url_arch_name windows7-x64)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Download and install CUDNN locally if not found on the system
|
||||
if(url_arch_name)
|
||||
set(download_dir ${CMAKE_CURRENT_BINARY_DIR}/downloads/cudnn${version})
|
||||
file(MAKE_DIRECTORY ${download_dir})
|
||||
set(cudnn_filename cudnn-${CUDA_VERSION}-${url_arch_name}-v${version}.${url_extension})
|
||||
set(base_url http://developer.download.nvidia.com/compute/redist/cudnn)
|
||||
set(cudnn_url ${base_url}/v${version_base}/${cudnn_filename})
|
||||
set(cudnn_file ${download_dir}/${cudnn_filename})
|
||||
|
||||
if(NOT EXISTS ${cudnn_file})
|
||||
message(STATUS "Downloading CUDNN library from NVIDIA...")
|
||||
file(DOWNLOAD ${cudnn_url} ${cudnn_file}
|
||||
SHOW_PROGRESS STATUS cudnn_status
|
||||
)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzvf ${cudnn_file} WORKING_DIRECTORY ${download_dir} RESULT_VARIABLE cudnn_status)
|
||||
|
||||
if(NOT "${cudnn_status}" MATCHES "0")
|
||||
message(STATUS "Was not able to download CUDNN from ${cudnn_url}. Please install CuDNN manually from https://developer.nvidia.com/cuDNN")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(dest_bindir AND tar_bindir)
|
||||
file(COPY ${download_dir}/${tar_bindir}/ DESTINATION ${dest_bindir})
|
||||
endif()
|
||||
|
||||
if(dest_incdir)
|
||||
file(COPY ${download_dir}/${tar_incdir}/ DESTINATION ${dest_incdir})
|
||||
endif()
|
||||
|
||||
file(COPY ${download_dir}/${tar_libdir}/ DESTINATION ${dest_libdir} )
|
||||
|
||||
get_filename_component(dest_dir ${dest_libdir} DIRECTORY)
|
||||
|
||||
set(CUDNN_ROOT_DIR ${dest_dir} PARENT_SCOPE)
|
||||
unset(CUDNN_LIBRARY CACHE)
|
||||
unset(CUDNN_INCLUDE_DIR CACHE)
|
||||
|
||||
endif(url_arch_name)
|
||||
endfunction()
|
||||
|
||||
#####################################################
|
||||
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PC_CUDNN QUIET CUDNN)
|
||||
|
||||
get_filename_component(__libpath_cudart "${CUDA_CUDART_LIBRARY}" PATH)
|
||||
|
||||
# We use major only in library search as major/minor is not entirely consistent among platforms.
|
||||
# Also, looking for exact minor version of .so is in general not a good idea.
|
||||
# More strict enforcement of minor/patch version is done if/when the header file is examined.
|
||||
if(CUDNN_FIND_VERSION_EXACT)
|
||||
SET(__cudnn_ver_suffix ".${CUDNN_FIND_VERSION_MAJOR}")
|
||||
SET(__cudnn_lib_win_name cudnn64_${CUDNN_FIND_VERSION_MAJOR})
|
||||
else()
|
||||
SET(__cudnn_lib_win_name cudnn64)
|
||||
endif()
|
||||
|
||||
find_library(CUDNN_LIBRARY
|
||||
NAMES libcudnn.so${__cudnn_ver_suffix} libcudnn${__cudnn_ver_suffix}.dylib ${__cudnn_lib_win_name}
|
||||
PATHS $ENV{LD_LIBRARY_PATH} ${__libpath_cudart} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}
|
||||
PATH_SUFFIXES lib lib64 bin
|
||||
DOC "CUDNN library." )
|
||||
|
||||
if(CUDNN_LIBRARY)
|
||||
SET(CUDNN_MAJOR_VERSION ${CUDNN_FIND_VERSION_MAJOR})
|
||||
set(CUDNN_VERSION ${CUDNN_MAJOR_VERSION})
|
||||
get_filename_component(__found_cudnn_root ${CUDNN_LIBRARY} PATH)
|
||||
find_path(CUDNN_INCLUDE_DIR
|
||||
NAMES cudnn.h
|
||||
HINTS ${PC_CUDNN_INCLUDE_DIRS} ${CUDNN_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} ${__found_cudnn_root}
|
||||
PATH_SUFFIXES include
|
||||
DOC "Path to CUDNN include directory." )
|
||||
endif()
|
||||
|
||||
if(CUDNN_LIBRARY AND CUDNN_INCLUDE_DIR)
|
||||
file(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_VERSION_FILE_CONTENTS)
|
||||
string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)"
|
||||
CUDNN_MAJOR_VERSION "${CUDNN_VERSION_FILE_CONTENTS}")
|
||||
string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1"
|
||||
CUDNN_MAJOR_VERSION "${CUDNN_MAJOR_VERSION}")
|
||||
string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)"
|
||||
CUDNN_MINOR_VERSION "${CUDNN_VERSION_FILE_CONTENTS}")
|
||||
string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1"
|
||||
CUDNN_MINOR_VERSION "${CUDNN_MINOR_VERSION}")
|
||||
string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)"
|
||||
CUDNN_PATCH_VERSION "${CUDNN_VERSION_FILE_CONTENTS}")
|
||||
string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1"
|
||||
CUDNN_PATCH_VERSION "${CUDNN_PATCH_VERSION}")
|
||||
set(CUDNN_VERSION ${CUDNN_MAJOR_VERSION}.${CUDNN_MINOR_VERSION})
|
||||
endif()
|
||||
|
||||
if(CUDNN_MAJOR_VERSION)
|
||||
## Fixing the case where 5.1 does not fit 'exact' 5.
|
||||
if(CUDNN_FIND_VERSION_EXACT AND NOT CUDNN_FIND_VERSION_MINOR)
|
||||
if("${CUDNN_MAJOR_VERSION}" STREQUAL "${CUDNN_FIND_VERSION_MAJOR}")
|
||||
set(CUDNN_VERSION ${CUDNN_FIND_VERSION})
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
# Try to set CUDNN version from config file
|
||||
set(CUDNN_VERSION ${PC_CUDNN_CFLAGS_OTHER})
|
||||
endif()
|
||||
|
||||
find_package_handle_standard_args(
|
||||
CUDNN
|
||||
FOUND_VAR CUDNN_FOUND
|
||||
REQUIRED_VARS CUDNN_LIBRARY
|
||||
VERSION_VAR CUDNN_VERSION
|
||||
)
|
||||
|
||||
if(CUDNN_FOUND)
|
||||
set(CUDNN_LIBRARIES ${CUDNN_LIBRARY})
|
||||
set(CUDNN_INCLUDE_DIRS ${CUDNN_INCLUDE_DIR})
|
||||
set(CUDNN_DEFINITIONS ${PC_CUDNN_CFLAGS_OTHER})
|
||||
endif()
|
||||
|
105
Makefile
105
Makefile
@ -1,105 +0,0 @@
|
||||
GPU=0
|
||||
CUDNN=0
|
||||
OPENCV=0
|
||||
OPENMP=0
|
||||
DEBUG=0
|
||||
|
||||
ARCH= -gencode arch=compute_30,code=sm_30 \
|
||||
-gencode arch=compute_35,code=sm_35 \
|
||||
-gencode arch=compute_50,code=[sm_50,compute_50] \
|
||||
-gencode arch=compute_52,code=[sm_52,compute_52]
|
||||
# -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?
|
||||
|
||||
# This is what I use, uncomment if you know your arch and want to specify
|
||||
# ARCH= -gencode arch=compute_52,code=compute_52
|
||||
|
||||
VPATH=./src/:./examples
|
||||
SLIB=libdarknet.so
|
||||
ALIB=libdarknet.a
|
||||
EXEC=darknet
|
||||
OBJDIR=./obj/
|
||||
|
||||
CC=gcc
|
||||
CPP=g++
|
||||
NVCC=nvcc
|
||||
AR=ar
|
||||
ARFLAGS=rcs
|
||||
OPTS=-Ofast
|
||||
LDFLAGS= -lm -pthread
|
||||
COMMON= -Iinclude/ -Isrc/
|
||||
CFLAGS=-Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC
|
||||
|
||||
ifeq ($(OPENMP), 1)
|
||||
CFLAGS+= -fopenmp
|
||||
endif
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
OPTS=-O0 -g
|
||||
endif
|
||||
|
||||
CFLAGS+=$(OPTS)
|
||||
|
||||
ifeq ($(OPENCV), 1)
|
||||
COMMON+= -DOPENCV
|
||||
CFLAGS+= -DOPENCV
|
||||
LDFLAGS+= `pkg-config --libs opencv` -lstdc++
|
||||
COMMON+= `pkg-config --cflags opencv`
|
||||
endif
|
||||
|
||||
ifeq ($(GPU), 1)
|
||||
COMMON+= -DGPU -I/usr/local/cuda/include/
|
||||
CFLAGS+= -DGPU
|
||||
LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand
|
||||
endif
|
||||
|
||||
ifeq ($(CUDNN), 1)
|
||||
COMMON+= -DCUDNN
|
||||
CFLAGS+= -DCUDNN
|
||||
LDFLAGS+= -lcudnn
|
||||
endif
|
||||
|
||||
OBJ=gemm.o utils.o cuda.o deconvolutional_layer.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 detection_layer.o route_layer.o upsample_layer.o box.o normalization_layer.o avgpool_layer.o layer.o local_layer.o shortcut_layer.o logistic_layer.o activation_layer.o rnn_layer.o gru_layer.o crnn_layer.o demo.o batchnorm_layer.o region_layer.o reorg_layer.o tree.o lstm_layer.o l2norm_layer.o yolo_layer.o iseg_layer.o image_opencv.o
|
||||
EXECOBJA=captcha.o lsd.o super.o art.o tag.o cifar.o go.o rnn.o segmenter.o regressor.o classifier.o coco.o yolo.o detector.o nightmare.o instance-segmenter.o darknet.o
|
||||
ifeq ($(GPU), 1)
|
||||
LDFLAGS+= -lstdc++
|
||||
OBJ+=convolutional_kernels.o deconvolutional_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 avgpool_layer_kernels.o
|
||||
endif
|
||||
|
||||
EXECOBJ = $(addprefix $(OBJDIR), $(EXECOBJA))
|
||||
OBJS = $(addprefix $(OBJDIR), $(OBJ))
|
||||
DEPS = $(wildcard src/*.h) Makefile include/darknet.h
|
||||
|
||||
all: obj backup results $(SLIB) $(ALIB) $(EXEC)
|
||||
#all: obj results $(SLIB) $(ALIB) $(EXEC)
|
||||
|
||||
|
||||
$(EXEC): $(EXECOBJ) $(ALIB)
|
||||
$(CC) $(COMMON) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(ALIB)
|
||||
|
||||
$(ALIB): $(OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $^
|
||||
|
||||
$(SLIB): $(OBJS)
|
||||
$(CC) $(CFLAGS) -shared $^ -o $@ $(LDFLAGS)
|
||||
|
||||
$(OBJDIR)%.o: %.cpp $(DEPS)
|
||||
$(CPP) $(COMMON) $(CFLAGS) -c $< -o $@
|
||||
|
||||
$(OBJDIR)%.o: %.c $(DEPS)
|
||||
$(CC) $(COMMON) $(CFLAGS) -c $< -o $@
|
||||
|
||||
$(OBJDIR)%.o: %.cu $(DEPS)
|
||||
$(NVCC) $(ARCH) $(COMMON) --compiler-options "$(CFLAGS)" -c $< -o $@
|
||||
|
||||
obj:
|
||||
mkdir -p obj
|
||||
backup:
|
||||
mkdir -p backup
|
||||
results:
|
||||
mkdir -p results
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
clean:
|
||||
rm -rf $(OBJS) $(SLIB) $(ALIB) $(EXEC) $(EXECOBJ) $(OBJDIR)/*
|
||||
|
@ -229,7 +229,8 @@ void time_gpu(int TA, int TB, int m, int k, int n)
|
||||
clock_t start = clock(), end;
|
||||
for(i = 0; i<iter; ++i){
|
||||
gemm_gpu(TA,TB,m,n,k,1,a_cl,lda,b_cl,ldb,1,c_cl,n);
|
||||
cudaThreadSynchronize();
|
||||
//cudaThreadSynchronize();
|
||||
cudaDeviceSynchronize();
|
||||
}
|
||||
double flop = ((double)m)*n*(2.*k + 2.)*iter;
|
||||
double gflop = flop/pow(10., 9);
|
||||
|
@ -2,7 +2,13 @@
|
||||
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "opencv2/opencv.hpp"
|
||||
#include "opencv2/video.hpp"
|
||||
#include "opencv2/imgproc/imgproc_c.h"
|
||||
#include "opencv2/videoio/videoio_c.h"
|
||||
#include "opencv2/highgui/highgui_c.h"
|
||||
#include "opencv2/videoio.hpp"
|
||||
#include "opencv2/imgproc.hpp"
|
||||
#include "opencv2/highgui.hpp"
|
||||
#include "image.h"
|
||||
|
||||
using namespace cv;
|
||||
|
Loading…
Reference in New Issue
Block a user