create cmake targets for proper lib export

This commit is contained in:
Stefano Sinigardi
2019-03-04 15:15:19 +01:00
parent ef803e05df
commit 2c8ff8db0d
11 changed files with 299 additions and 88 deletions

8
.gitignore vendored
View File

@ -4,6 +4,7 @@
*.out *.out
*.png *.png
*.so *.so
*.exe
mnist/ mnist/
data/ data/
caffe/ caffe/
@ -15,8 +16,10 @@ decaf/
submission/ submission/
cfg/ cfg/
build/darknet/* build/darknet/*
build_*/
!build/darknet/YoloWrapper.cs !build/darknet/YoloWrapper.cs
.fuse* .fuse*
*.weights
# OS Generated # # OS Generated #
.DS_Store* .DS_Store*
@ -24,3 +27,8 @@ ehthumbs.db
Icon? Icon?
Thumbs.db Thumbs.db
*.swp *.swp
lib/
include/
share/

View File

@ -410,5 +410,5 @@ before_script:
- cd .. - cd ..
script: script:
- cd build_debug && cmake --build . --target install && cd .. - cd build_debug && cmake --build . --target install -- -j8 && cd ..
- cd build_release && cmake --build . --target install && cd .. - cd build_release && cmake --build . --target install -- -j8 && cd ..

View File

@ -1,14 +1,17 @@
# To use your libs, launch cmake with -DUSE_INTEGRATED_LIBS:BOOL=FALSE
cmake_minimum_required(VERSION 3.4) cmake_minimum_required(VERSION 3.4)
#set(CMAKE_VERBOSE_MAKEFILE 1) set(Darknet_MAJOR_VERSION 1)
set(Darknet_MINOR_VERSION 0)
set(Darknet_PATCH_VERSION 0)
set(Darknet_VERSION ${Darknet_MAJOR_VERSION}.${Darknet_MINOR_VERSION}.${Darknet_PATCH_VERSION})
set(CMAKE_VERBOSE_MAKEFILE "FALSE" CACHE BOOL "Create verbose makefile")
if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "") set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
endif() endif()
project(darknet) project(Darknet VERSION ${Darknet_VERSION})
if(WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) if(WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(USE_INTEGRATED_LIBS "TRUE" CACHE BOOL "Use libs distributed with this repo") set(USE_INTEGRATED_LIBS "TRUE" CACHE BOOL "Use libs distributed with this repo")
@ -21,10 +24,20 @@ enable_language(CXX)
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 11)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/" ${CMAKE_MODULE_PATH}) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/" ${CMAKE_MODULE_PATH})
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
include_directories(${CMAKE_CURRENT_LIST_DIR}/src)
set(SKIP_USELIB_TRACK "FALSE" CACHE BOOL "Skip building uselib_track" FORCE) set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "Install prefix" FORCE)
set(INSTALL_BIN_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "Path where exe and dll will be installed" FORCE)
set(INSTALL_LIB_DIR "lib" CACHE PATH "Path where lib will be installed")
set(INSTALL_INCLUDE_DIR "include" CACHE PATH "Path where headers will be installed")
set(INSTALL_CMAKE_DIR "share/darknet" CACHE PATH "Path where cmake configs will be installed")
# Make relative paths absolute (needed later on)
foreach(p LIB BIN INCLUDE CMAKE)
set(var INSTALL_${p}_DIR)
if(NOT IS_ABSOLUTE "${${var}}")
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif()
endforeach()
set(ENABLE_CUDA "TRUE" CACHE BOOL "Enable CUDA build") set(ENABLE_CUDA "TRUE" CACHE BOOL "Enable CUDA build")
if(${CMAKE_VERSION} VERSION_LESS "3.8.0") if(${CMAKE_VERSION} VERSION_LESS "3.8.0")
set(ENABLE_CUDA "FALSE" CACHE BOOL "Enable CUDA build" FORCE) set(ENABLE_CUDA "FALSE" CACHE BOOL "Enable CUDA build" FORCE)
@ -61,17 +74,12 @@ endif()
if(USE_INTEGRATED_LIBS) if(USE_INTEGRATED_LIBS)
include_directories(${CMAKE_CURRENT_LIST_DIR}/3rdparty/include) include_directories(${CMAKE_CURRENT_LIST_DIR}/3rdparty/include)
set(PTHREADS_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/3rdparty/include) set(PThreads_windows_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/3rdparty/include)
set(PTHREADS_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/3rdparty/lib/x64/pthreadVC2.lib) set(PThreads_windows_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/3rdparty/lib/x64/pthreadVC2.lib)
add_definitions(-D_TIMESPEC_DEFINED) add_definitions(-D_TIMESPEC_DEFINED)
endif() endif()
if(NOT APPLE) set(CMAKE_DEBUG_POSTFIX d)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif()
set(CMAKE_INSTALL_RPATH "${CMAKE_SOURCE_DIR}")
add_definitions(-DUSE_CMAKE_LIBS) add_definitions(-DUSE_CMAKE_LIBS)
@ -96,19 +104,18 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
string(REGEX REPLACE "-O3" "-Ofast" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) string(REGEX REPLACE "-O3" "-Ofast" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
endif() endif()
if(APPLE) set(ENABLE_OPENCV "TRUE" CACHE BOOL "Enable OpenCV integration")
find_package(OpenCV PATHS "/usr/local/Cellar/opencv@3/3.4.5" NO_DEFAULT_PATH) if(ENABLE_OPENCV)
else()
find_package(OpenCV) find_package(OpenCV)
endif() endif()
set(SKIP_USELIB_TRACK "FALSE" CACHE BOOL "Skip building uselib_track" FORCE)
if(OpenCV_FOUND) if(OpenCV_FOUND)
if(ENABLE_CUDA AND NOT OpenCV_CUDA_VERSION) if(ENABLE_CUDA AND NOT OpenCV_CUDA_VERSION)
set(SKIP_USELIB_TRACK "TRUE" CACHE BOOL "Skip building uselib_track" FORCE) set(SKIP_USELIB_TRACK "TRUE" CACHE BOOL "Skip building uselib_track" FORCE)
message(WARNING "The build of OpenCV does not have CUDA support, so some tools have been disabled! Please rebuild OpenCV with CUDA support to build them!") message(WARNING "The build of OpenCV does not have CUDA support, so some tools have been disabled! Please rebuild OpenCV with CUDA support to build them!")
endif() endif()
add_definitions(-DOPENCV) add_definitions(-DOPENCV)
include_directories(${OpenCV_INCLUDE_DIRS})
endif() endif()
if(ENABLE_CUDA) if(ENABLE_CUDA)
@ -124,7 +131,6 @@ if(ENABLE_CUDA)
find_package(CUDNN) find_package(CUDNN)
if(CUDNN_FOUND) if(CUDNN_FOUND)
add_definitions(-DCUDNN) add_definitions(-DCUDNN)
include_directories(${CUDNN_INCLUDE_DIR})
if(CUDA_COMPUTE_MODEL VERSION_GREATER_EQUAL ${CUDA_COMPUTE_MODEL_70}) if(CUDA_COMPUTE_MODEL VERSION_GREATER_EQUAL ${CUDA_COMPUTE_MODEL_70})
add_definitions(-DCUDNN_HALF) add_definitions(-DCUDNN_HALF)
message(STATUS "Enabled CUDNN_HALF") message(STATUS "Enabled CUDNN_HALF")
@ -165,7 +171,6 @@ set(CMAKE_THREAD_PREFER_PTHREAD ON)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
if(MSVC) if(MSVC)
find_package(PThreads_windows REQUIRED) find_package(PThreads_windows REQUIRED)
include_directories(${PTHREADS_INCLUDE_DIR})
endif() endif()
if(${CMAKE_VERSION} VERSION_LESS "3.9.0") if(${CMAKE_VERSION} VERSION_LESS "3.9.0")
@ -180,7 +185,7 @@ endif()
#look for all *.h files in src folder #look for all *.h files in src folder
file(GLOB headers "${CMAKE_CURRENT_LIST_DIR}/src/*.h") file(GLOB headers "${CMAKE_CURRENT_LIST_DIR}/src/*.h")
#add also files in the include folder #add also files in the include folder
list(APPEND sources list(APPEND headers
${CMAKE_CURRENT_LIST_DIR}/include/darknet.h ${CMAKE_CURRENT_LIST_DIR}/include/darknet.h
) )
#remove windows only files, will be re-added if necessary later #remove windows only files, will be re-added if necessary later
@ -188,6 +193,7 @@ list(REMOVE_ITEM headers
${CMAKE_CURRENT_LIST_DIR}/src/gettimeofday.h ${CMAKE_CURRENT_LIST_DIR}/src/gettimeofday.h
${CMAKE_CURRENT_LIST_DIR}/src/getopt.h ${CMAKE_CURRENT_LIST_DIR}/src/getopt.h
) )
set(exported_headers ${headers})
#look for all *.c files in src folder #look for all *.c files in src folder
file(GLOB sources "${CMAKE_CURRENT_LIST_DIR}/src/*.c") file(GLOB sources "${CMAKE_CURRENT_LIST_DIR}/src/*.c")
@ -223,7 +229,7 @@ endif()
set_source_files_properties(${sources} PROPERTIES LANGUAGE CXX) set_source_files_properties(${sources} PROPERTIES LANGUAGE CXX)
add_library(darklib SHARED ${CMAKE_CURRENT_LIST_DIR}/include/yolo_v2_class.hpp ${CMAKE_CURRENT_LIST_DIR}/src/yolo_v2_class.cpp ${sources} ${headers} ${cuda_sources}) add_library(darklib ${CMAKE_CURRENT_LIST_DIR}/include/yolo_v2_class.hpp ${CMAKE_CURRENT_LIST_DIR}/src/yolo_v2_class.cpp ${sources} ${headers} ${cuda_sources})
set_target_properties(darklib PROPERTIES POSITION_INDEPENDENT_CODE ON) set_target_properties(darklib PROPERTIES POSITION_INDEPENDENT_CODE ON)
if(ENABLE_CUDA) if(ENABLE_CUDA)
set_target_properties(darklib PROPERTIES CUDA_SEPARABLE_COMPILATION ON) set_target_properties(darklib PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
@ -235,6 +241,8 @@ if(OpenCV_VERSION VERSION_GREATER "3.0" AND NOT SKIP_USELIB_TRACK)
add_executable(uselib_track ${CMAKE_CURRENT_LIST_DIR}/src/yolo_console_dll.cpp) add_executable(uselib_track ${CMAKE_CURRENT_LIST_DIR}/src/yolo_console_dll.cpp)
target_compile_definitions(uselib_track PRIVATE TRACK_OPTFLOW=1) target_compile_definitions(uselib_track PRIVATE TRACK_OPTFLOW=1)
set_target_properties(uselib_track PROPERTIES LINKER_LANGUAGE CXX) set_target_properties(uselib_track PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(uselib_track PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include>)
target_link_libraries(uselib_track PRIVATE ${OpenCV_LIBS})
endif() endif()
add_executable(uselib ${CMAKE_CURRENT_LIST_DIR}/src/yolo_console_dll.cpp) add_executable(uselib ${CMAKE_CURRENT_LIST_DIR}/src/yolo_console_dll.cpp)
@ -244,45 +252,97 @@ add_executable(darknet ${CMAKE_CURRENT_LIST_DIR}/src/darknet.c ${sources} ${head
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/src/darknet.c PROPERTIES LANGUAGE CXX) set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/src/darknet.c PROPERTIES LANGUAGE CXX)
set_target_properties(darknet PROPERTIES LINKER_LANGUAGE CXX) set_target_properties(darknet PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(darknet PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include>)
target_include_directories(darklib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include>)
target_include_directories(uselib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include>)
if(CUDNN_FOUND) if(CUDNN_FOUND)
target_link_libraries(darknet ${CUDNN_LIBRARY}) target_link_libraries(darknet PRIVATE CuDNN::CuDNN)
target_link_libraries(darklib ${CUDNN_LIBRARY}) target_link_libraries(darklib PRIVATE CuDNN::CuDNN)
endif() endif()
if(OpenCV_FOUND) if(OpenCV_FOUND)
target_link_libraries(darknet ${OpenCV_LIBS}) target_link_libraries(darknet PRIVATE ${OpenCV_LIBS})
target_link_libraries(darklib ${OpenCV_LIBS}) target_link_libraries(uselib PRIVATE ${OpenCV_LIBS})
target_link_libraries(darklib PRIVATE ${OpenCV_LIBS})
endif() endif()
if(OPENMP_FOUND) if(OPENMP_FOUND)
target_link_libraries(darknet OpenMP::OpenMP_CXX) target_link_libraries(darknet PRIVATE OpenMP::OpenMP_CXX)
target_link_libraries(darklib OpenMP::OpenMP_CXX) target_link_libraries(darklib PRIVATE OpenMP::OpenMP_CXX)
endif() endif()
if(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_GNUCC)
target_link_libraries(darknet m) target_link_libraries(darknet PRIVATE m)
target_link_libraries(darklib m) target_link_libraries(darklib PRIVATE m)
endif() endif()
if(MSVC) if(MSVC)
target_link_libraries(darknet ${PTHREADS_LIBRARY}) target_link_libraries(darknet PRIVATE PThreads_windows::PThreads_windows)
target_link_libraries(darknet wsock32 ws2_32) target_link_libraries(darknet PRIVATE wsock32 ws2_32)
target_link_libraries(darklib ${PTHREADS_LIBRARY}) target_link_libraries(darklib PRIVATE PThreads_windows::PThreads_windows)
target_link_libraries(darklib wsock32 ws2_32) target_link_libraries(darklib PRIVATE wsock32 ws2_32)
endif() endif()
target_link_libraries(darknet Threads::Threads) target_link_libraries(darknet PRIVATE Threads::Threads)
target_link_libraries(darklib Threads::Threads) target_link_libraries(darklib PRIVATE Threads::Threads)
if(ENABLE_CUDA) if(ENABLE_CUDA)
target_link_libraries(darknet curand cublas) target_link_libraries(darknet PRIVATE curand cublas)
target_link_libraries(darklib curand cublas) target_link_libraries(darklib PRIVATE curand cublas)
set_target_properties(darklib PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
endif() endif()
target_link_libraries(uselib darklib) target_link_libraries(uselib PRIVATE darklib)
if(OpenCV_VERSION VERSION_GREATER "3.0" AND NOT SKIP_USELIB_TRACK) if(OpenCV_VERSION VERSION_GREATER "3.0" AND NOT SKIP_USELIB_TRACK)
target_link_libraries(uselib_track darklib) target_link_libraries(uselib_track PRIVATE darklib)
install(TARGETS uselib_track DESTINATION ${CMAKE_SOURCE_DIR}/)
endif() endif()
install(TARGETS darklib uselib darknet DESTINATION ${CMAKE_SOURCE_DIR}/) set_target_properties(darklib PROPERTIES PUBLIC_HEADER "${exported_headers};${CMAKE_CURRENT_LIST_DIR}/include/yolo_v2_class.hpp")
install(TARGETS darklib uselib darknet EXPORT DarknetTargets
RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}"
COMPONENT dev
)
if(OpenCV_VERSION VERSION_GREATER "3.0" AND NOT SKIP_USELIB_TRACK)
install(TARGETS uselib_track
EXPORT DarknetTargets
RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}"
COMPONENT dev
)
endif()
install(EXPORT DarknetTargets
FILE DarknetTargets.cmake
NAMESPACE Darknet::
DESTINATION "${INSTALL_CMAKE_DIR}"
)
# Export the package for use from the build-tree (this registers the build-tree with a global CMake-registry)
export(PACKAGE Darknet)
# Create the DarknetConfig.cmake
# First of all we compute the relative path between the cmake config file and the include path
file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" "${INSTALL_INCLUDE_DIR}")
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}")
configure_file(DarknetConfig.cmake.in "${PROJECT_BINARY_DIR}/DarknetConfig.cmake" @ONLY)
set(CONF_INCLUDE_DIRS "\${Darknet_CMAKE_DIR}/${REL_INCLUDE_DIR}")
configure_file(DarknetConfig.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DarknetConfig.cmake" @ONLY)
# Create the DarknetConfigVersion.cmake
include(CMakePackageConfigHelpers)
write_basic_package_version_file("${PROJECT_BINARY_DIR}/DarknetConfigVersion.cmake"
COMPATIBILITY SameMajorVersion
)
install(FILES
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DarknetConfig.cmake"
"${PROJECT_BINARY_DIR}/DarknetConfigVersion.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}"
)

33
DarknetConfig.cmake.in Normal file
View File

@ -0,0 +1,33 @@
# Config file for the Darknet package
# It defines the following variables
# Darknet_INCLUDE_DIRS - include directories for Darknet
# Darknet_LIBRARIES - libraries to link against
# Compute paths
get_filename_component(Darknet_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
set(Darknet_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
include(CMakeFindDependencyMacro)
find_dependency(OpenCV REQUIRED)
if(@ENABLE_CUDA@)
find_dependency(CUDNN)
endif()
set(CMAKE_THREAD_PREFER_PTHREAD ON)
find_dependency(Threads)
if(@MSVC@)
find_dependency(PThreads_windows)
endif()
if("@CMAKE_VERSION@" VERSION_GREATER "3.9.0")
find_dependency(OpenMP)
endif()
# Our library dependencies (contains definitions for IMPORTED targets)
include("${Darknet_CMAKE_DIR}/DarknetTargets.cmake")
# These are IMPORTED targets created by DarknetTargets.cmake
set(Darknet_LIBRARIES darklib)

View File

@ -58,10 +58,10 @@ install:
- cd .. - cd ..
build_script: build_script:
- if [%COMPILER%]==[cygwin] cd build_debug && %CYGSH% 'cmake --build . --target install' && cd .. - if [%COMPILER%]==[cygwin] cd build_debug && %CYGSH% 'cmake --build . --target install -- -j8' && cd ..
- if [%COMPILER%]==[cygwin] cd build_release && %CYGSH% 'cmake --build . --target install' && cd .. - if [%COMPILER%]==[cygwin] cd build_release && %CYGSH% 'cmake --build . --target install -- -j8' && cd ..
- if [%COMPILER%]==[vs] if NOT [%USE_INTEGRATED_LIBS%]==[yes] cd build_debug && cmake --build . --config Debug --target install && cd .. - if [%COMPILER%]==[vs] if NOT [%USE_INTEGRATED_LIBS%]==[yes] cd build_debug && cmake --build . --config Debug --parallel 8 --target install && cd ..
- if [%COMPILER%]==[vs] cd build_release && cmake --build . --config Release --target install && cd .. - if [%COMPILER%]==[vs] cd build_release && cmake --build . --config Release --parallel 8 --target install && cd ..
artifacts: artifacts:
- path: './darklib.lib' - path: './darklib.lib'

View File

@ -69,14 +69,22 @@ if (Test-Path $vcpkg_path) {
Set-Location build_win_release Set-Location build_win_release
cmake -G "Visual Studio 15 2017" -T "host=x64" -A "x64" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" "-DCMAKE_BUILD_TYPE=Release" $shared_lib .. cmake -G "Visual Studio 15 2017" -T "host=x64" -A "x64" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" "-DCMAKE_BUILD_TYPE=Release" $shared_lib ..
cmake --build . --config Release --parallel ${number_of_build_workers} --target install cmake --build . --config Release --parallel ${number_of_build_workers} --target install
Remove-Item DarknetConfig.cmake
Remove-Item DarknetConfigVersion.cmake
Set-Location .. Set-Location ..
# Remove-Item -Force DarknetConfig.cmake
# Remove-Item -Force DarknetConfigVersion.cmake
# DEBUG # DEBUG
New-Item -Path .\build_win_debug -ItemType directory -Force New-Item -Path .\build_win_debug -ItemType directory -Force
Set-Location build_win_debug Set-Location build_win_debug
cmake -G "Visual Studio 15 2017" -T "host=x64" -A "x64" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" "-DCMAKE_BUILD_TYPE=Debug" $shared_lib .. cmake -G "Visual Studio 15 2017" -T "host=x64" -A "x64" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" "-DCMAKE_BUILD_TYPE=Debug" $shared_lib ..
cmake --build . --config Debug --parallel ${number_of_build_workers} --target install cmake --build . --config Debug --parallel ${number_of_build_workers} --target install
Remove-Item DarknetConfig.cmake
Remove-Item DarknetConfigVersion.cmake
Set-Location .. Set-Location ..
# Remove-Item -Force DarknetConfig.cmake
# Remove-Item -Force DarknetConfigVersion.cmake
} }
else { else {
# USE LOCAL PTHREAD LIB, NO VCPKG, ONLY RELEASE # USE LOCAL PTHREAD LIB, NO VCPKG, ONLY RELEASE
@ -85,5 +93,9 @@ else {
Set-Location build_win_release_novcpkg Set-Location build_win_release_novcpkg
cmake -G "Visual Studio 15 2017" -T "host=x64" -A "x64" $shared_lib .. cmake -G "Visual Studio 15 2017" -T "host=x64" -A "x64" $shared_lib ..
cmake --build . --config Release --parallel ${number_of_build_workers} --target install cmake --build . --config Release --parallel ${number_of_build_workers} --target install
Remove-Item DarknetConfig.cmake
Remove-Item DarknetConfigVersion.cmake
Set-Location .. Set-Location ..
# Remove-Item -Force DarknetConfig.cmake
# Remove-Item -Force DarknetConfigVersion.cmake
} }

View File

@ -2,18 +2,36 @@
number_of_build_workers=8 number_of_build_workers=8
if [[ "$OSTYPE" == "darwin"* ]]; then
OpenCV_DIR="/usr/local/Cellar/opencv@3/3.4.5"
additional_defines="-DOpenCV_DIR=${OpenCV_DIR}"
if [[ "$1" == "gcc" ]]; then
export CC="/usr/local/bin/gcc-8"
export CXX="/usr/local/bin/g++-8"
fi
fi
# RELEASE # RELEASE
mkdir -p build_release mkdir -p build_release
cd build_release cd build_release
cmake .. -DCMAKE_BUILD_TYPE=Release cmake .. -DCMAKE_BUILD_TYPE=Release ${additional_defines}
cmake --build . --target install -- -j${number_of_build_workers} cmake --build . --target install -- -j${number_of_build_workers}
#cmake --build . --target install --parallel ${number_of_build_workers} #valid only for CMake 3.12+ #cmake --build . --target install --parallel ${number_of_build_workers} #valid only for CMake 3.12+
rm DarknetConfig.cmake
rm DarknetConfigVersion.cmake
cd .. cd ..
rm DarknetConfig.cmake
rm DarknetConfigVersion.cmake
# DEBUG # DEBUG
mkdir -p build_debug mkdir -p build_debug
cd build_debug cd build_debug
cmake .. -DCMAKE_BUILD_TYPE=Debug cmake .. -DCMAKE_BUILD_TYPE=Debug ${additional_defines}
cmake --build . --target install -- -j${number_of_build_workers} cmake --build . --target install -- -j${number_of_build_workers}
#cmake --build . --target install --parallel ${number_of_build_workers} #valid only for CMake 3.12+ #cmake --build . --target install --parallel ${number_of_build_workers} #valid only for CMake 3.12+
rm DarknetConfig.cmake
rm DarknetConfigVersion.cmake
cd .. cd ..
rm DarknetConfig.cmake
rm DarknetConfigVersion.cmake

View File

@ -56,9 +56,37 @@ if(CUDNN_FOUND)
else() else()
set(CUDNN_VERSION "${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}") set(CUDNN_VERSION "${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}")
endif() endif()
endif()
set(CUDNN_INCLUDE_DIRS ${CUDNN_INCLUDE_DIR}) set(CUDNN_INCLUDE_DIRS ${CUDNN_INCLUDE_DIR})
set(CUDNN_LIBRARIES ${CUDNN_LIBRARY}) set(CUDNN_LIBRARIES ${CUDNN_LIBRARY})
message(STATUS "Found cuDNN: v${CUDNN_VERSION} (include: ${CUDNN_INCLUDE_DIR}, library: ${CUDNN_LIBRARY})") message(STATUS "Found cuDNN: v${CUDNN_VERSION} (include: ${CUDNN_INCLUDE_DIR}, library: ${CUDNN_LIBRARY})")
mark_as_advanced(CUDNN_ROOT_DIR CUDNN_LIBRARY CUDNN_INCLUDE_DIR) mark_as_advanced(CUDNN_ROOT_DIR CUDNN_LIBRARY CUDNN_INCLUDE_DIR)
# Register imported libraries:
# 1. If we can find a Windows .dll file (or if we can find both Debug and
# Release libraries), we will set appropriate target properties for these.
# 2. However, for most systems, we will only register the import location and
# include directory.
# Look for dlls, for Release and Debug libraries.
if(WIN32)
string( REPLACE ".lib" ".dll" CUDNN_LIBRARY_DLL "${CUDNN_LIBRARY}" )
endif()
if( CUDNN_FOUND AND NOT TARGET CuDNN::CuDNN )
if( EXISTS "${CUDNN_LIBRARY_RELEASE_DLL}" )
add_library( CuDNN::CuDNN SHARED IMPORTED )
set_target_properties( CuDNN::CuDNN PROPERTIES
IMPORTED_LOCATION "${CUDNN_LIBRARY_DLL}"
IMPORTED_IMPLIB "${CUDNN_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${CUDNN_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
else()
add_library( CuDNN::CuDNN UNKNOWN IMPORTED )
set_target_properties( CuDNN::CuDNN PROPERTIES
IMPORTED_LOCATION "${CUDNN_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${CUDNN_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
endif()
endif() endif()

View File

@ -0,0 +1,43 @@
# Distributed under the OSI-approved BSD 3-Clause License.
# Copyright Stefano Sinigardi
#.rst:
# FindDarknet
# ------------
#
# Find the Darknet includes and library.
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# This module defines the following variables:
#
# ``Darknet_FOUND``
# True if Darknet library found
#
# ``Darknet_INCLUDE_DIR``
# Location of Darknet headers
#
# ``Darknet_LIBRARY``
# List of libraries to link with when using Darknet
#
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake)
if(NOT Darknet_INCLUDE_DIR)
find_path(Darknet_INCLUDE_DIR NAMES darknet.h PATHS darknet darknet/include)
endif()
# Allow libraries to be set manually
if(NOT Darknet_LIBRARY)
find_library(Darknet_LIBRARY_RELEASE NAMES darklib PATHS darknet darknet/lib)
find_library(Darknet_LIBRARY_DEBUG NAMES darklibd PATHS darknet darknet/lib)
select_library_configurations(Darknet)
endif()
set(Darknet_INCLUDE_DIRS "${Darknet_INCLUDE_DIR}")
set(Darknet_LIBRARIES "${Darknet_LIBRARY}")
find_package_handle_standard_args(Darknet DEFAULT_MSG Darknet_LIBRARY Darknet_INCLUDE_DIR)
mark_as_advanced(Darknet_INCLUDE_DIR Darknet_INCLUDE_DIRS Darknet_LIBRARY Darknet_LIBRARIES)

View File

@ -12,32 +12,32 @@
# #
# This module defines the following variables: # This module defines the following variables:
# #
# ``PTHREADS_FOUND`` # ``PThreads_windows_FOUND``
# True if PThreads library found # True if PThreads_windows library found
# #
# ``PTHREADS_INCLUDE_DIR`` # ``PThreads_windows_INCLUDE_DIR``
# Location of PThreads headers # Location of PThreads_windows headers
# #
# ``PTHREADS_LIBRARY`` # ``PThreads_windows_LIBRARY``
# List of libraries to link with when using PThreads # List of libraries to link with when using PThreads_windows
# #
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake) include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake)
if(NOT PTHREADS_INCLUDE_DIR) if(NOT PThreads_windows_INCLUDE_DIR)
find_path(PTHREADS_INCLUDE_DIR NAMES pthread.h) find_path(PThreads_windows_INCLUDE_DIR NAMES pthread.h)
endif() endif()
# Allow libraries to be set manually # Allow libraries to be set manually
if(NOT PTHREADS_LIBRARY) if(NOT PThreads_windows_LIBRARY)
find_library(PTHREADS_LIBRARY_RELEASE NAMES pthreadsVC2) find_library(PThreads_windows_LIBRARY_RELEASE NAMES pthreadsVC2)
find_library(PTHREADS_LIBRARY_DEBUG NAMES pthreadsVC2d) find_library(PThreads_windows_LIBRARY_DEBUG NAMES pthreadsVC2d)
select_library_configurations(PTHREADS) select_library_configurations(PThreads_windows)
endif() endif()
find_package_handle_standard_args(PTHREADS DEFAULT_MSG PTHREADS_LIBRARY PTHREADS_INCLUDE_DIR) find_package_handle_standard_args(PThreads_windows DEFAULT_MSG PThreads_windows_LIBRARY PThreads_windows_INCLUDE_DIR)
mark_as_advanced(PTHREADS_INCLUDE_DIR PTHREADS_LIBRARY) mark_as_advanced(PThreads_windows_INCLUDE_DIR PThreads_windows_LIBRARY)
# Register imported libraries: # Register imported libraries:
@ -48,30 +48,36 @@ mark_as_advanced(PTHREADS_INCLUDE_DIR PTHREADS_LIBRARY)
# Look for dlls, for Release and Debug libraries. # Look for dlls, for Release and Debug libraries.
if(WIN32) if(WIN32)
string( REPLACE ".lib" ".dll" PTHREADS_LIBRARY_RELEASE_DLL "${PTHREADS_LIBRARY_RELEASE}" ) string( REPLACE ".lib" ".dll" PThreads_windows_LIBRARY_RELEASE_DLL "${PThreads_windows_LIBRARY_RELEASE}" )
string( REPLACE ".lib" ".dll" PTHREADS_LIBRARY_DEBUG_DLL "${PTHREADS_LIBRARY_DEBUG}" ) string( REPLACE ".lib" ".dll" PThreads_windows_LIBRARY_DEBUG_DLL "${PThreads_windows_LIBRARY_DEBUG}" )
endif() endif()
if( PTHREADS_FOUND AND NOT TARGET PThreads::PThreads ) if( PThreads_windows_FOUND AND NOT TARGET PThreads_windows::PThreads_windows )
if( EXISTS "${PTHREADS_LIBRARY_RELEASE_DLL}" ) if( EXISTS "${PThreads_windows_LIBRARY_RELEASE_DLL}" )
add_library( PThreads::PThreads SHARED IMPORTED ) add_library( PThreads_windows::PThreads_windows SHARED IMPORTED )
set_target_properties( PThreads::PThreads PROPERTIES set_target_properties( PThreads_windows::PThreads_windows PROPERTIES
IMPORTED_LOCATION_RELEASE "${PTHREADS_LIBRARY_RELEASE_DLL}" IMPORTED_LOCATION_RELEASE "${PThreads_windows_LIBRARY_RELEASE_DLL}"
IMPORTED_IMPLIB "${PTHREADS_LIBRARY_RELEASE}" IMPORTED_IMPLIB "${PThreads_windows_LIBRARY_RELEASE}"
INTERFACE_INCLUDE_DIRECTORIES "${PTHREADS_INCLUDE_DIR}" INTERFACE_INCLUDE_DIRECTORIES "${PThreads_windows_INCLUDE_DIR}"
IMPORTED_CONFIGURATIONS Release IMPORTED_CONFIGURATIONS Release
IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
if( EXISTS "${PTHREADS_LIBRARY_DEBUG_DLL}" ) if( EXISTS "${PThreads_windows_LIBRARY_DEBUG_DLL}" )
set_property( TARGET PThreads::PThreads APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug ) set_property( TARGET PThreads_windows::PThreads_windows APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
set_target_properties( FFTW::fftw3 PROPERTIES set_target_properties( PThreads_windows::PThreads_windows PROPERTIES
IMPORTED_LOCATION_DEBUG "${PTHREADS_LIBRARY_DEBUG_DLL}" IMPORTED_LOCATION_DEBUG "${PThreads_windows_LIBRARY_DEBUG_DLL}"
IMPORTED_IMPLIB_DEBUG "${PTHREADS_LIBRARY_DEBUG}" ) IMPORTED_IMPLIB_DEBUG "${PThreads_windows_LIBRARY_DEBUG}" )
endif() endif()
else() else()
add_library( PThreads::PThreads UNKNOWN IMPORTED ) add_library( PThreads_windows::PThreads_windows UNKNOWN IMPORTED )
set_target_properties( PThreads::PThreads PROPERTIES set_target_properties( PThreads_windows::PThreads_windows PROPERTIES
IMPORTED_LOCATION "${PTHREADS_LIBRARY}" IMPORTED_LOCATION_RELEASE "${PThreads_windows_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${PTHREADS_INCLUDE_DIR}" INTERFACE_INCLUDE_DIRECTORIES "${PThreads_windows_INCLUDE_DIR}"
IMPORTED_CONFIGURATIONS Release
IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
if( EXISTS "${PThreads_windows_LIBRARY_DEBUG}" )
set_property( TARGET PThreads_windows::PThreads_windows APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
set_target_properties( PThreads_windows::PThreads_windows PROPERTIES
IMPORTED_LOCATION_DEBUG "${PThreads_windows_LIBRARY_DEBUG}" )
endif()
endif() endif()
endif() endif()

View File

@ -1,6 +1,9 @@
#include <time.h> #include <time.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#if defined(_MSC_VER) && defined(_DEBUG)
#include <crtdbg.h>
#endif
#include "darknet.h" #include "darknet.h"
#include "parser.h" #include "parser.h"