[dark.lib] set correct function visibility when building shared libs also for non-msvc compilers

This commit is contained in:
Stefano Sinigardi
2019-04-18 16:16:55 +02:00
parent df0d33de29
commit 6497ba1bfd
2 changed files with 30 additions and 26 deletions

1
.gitignore vendored
View File

@ -35,5 +35,4 @@ Thumbs.db
.vscode/ .vscode/
lib/ lib/
include/darknet/
share/ share/

View File

@ -6,7 +6,7 @@ set(Darknet_PATCH_VERSION 5)
set(Darknet_VERSION ${Darknet_MAJOR_VERSION}.${Darknet_MINOR_VERSION}.${Darknet_PATCH_VERSION}) set(Darknet_VERSION ${Darknet_MAJOR_VERSION}.${Darknet_MINOR_VERSION}.${Darknet_PATCH_VERSION})
set(CMAKE_VERBOSE_MAKEFILE "FALSE" CACHE BOOL "Create verbose makefile") set(CMAKE_VERBOSE_MAKEFILE "FALSE" CACHE BOOL "Create verbose makefile")
set(BUILD_SHARED_LIBS "TRUE" CACHE BOOL "Create darklib as a shared library") set(BUILD_SHARED_LIBS "TRUE" CACHE BOOL "Create dark as a shared library")
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 "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "") set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
@ -232,7 +232,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}) #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")
@ -269,19 +269,21 @@ endif()
set_source_files_properties(${sources} PROPERTIES LANGUAGE CXX) set_source_files_properties(${sources} PROPERTIES LANGUAGE CXX)
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}) add_library(dark ${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(dark PROPERTIES POSITION_INDEPENDENT_CODE ON)
if(ENABLE_CUDA) if(ENABLE_CUDA)
set_target_properties(darklib PROPERTIES CUDA_SEPARABLE_COMPILATION ON) set_target_properties(dark PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
endif() endif()
target_compile_definitions(darklib PRIVATE LIB_EXPORTS=1) if(BUILD_SHARED_LIBS)
set_target_properties(darklib PROPERTIES LINKER_LANGUAGE CXX) target_compile_definitions(dark PRIVATE LIB_EXPORTS=1)
endif()
set_target_properties(dark PROPERTIES LINKER_LANGUAGE CXX)
if(OpenCV_FOUND AND OpenCV_VERSION VERSION_GREATER "3.0" AND NOT SKIP_USELIB_TRACK) if(OpenCV_FOUND AND 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/darknet> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>) target_include_directories(uselib_track PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>)
target_link_libraries(uselib_track PRIVATE ${OpenCV_LIBS}) target_link_libraries(uselib_track PRIVATE ${OpenCV_LIBS})
endif() endif()
@ -292,40 +294,40 @@ 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/darknet> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>) target_include_directories(darknet PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>)
target_include_directories(darklib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include/darknet> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>) target_include_directories(dark PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>)
target_include_directories(uselib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include/darknet> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>) target_include_directories(uselib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src> $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${Stb_INCLUDE_DIR}>)
if(CUDNN_FOUND) if(CUDNN_FOUND)
target_link_libraries(darknet PRIVATE CuDNN::CuDNN) target_link_libraries(darknet PRIVATE CuDNN::CuDNN)
target_link_libraries(darklib PRIVATE CuDNN::CuDNN) target_link_libraries(dark PRIVATE CuDNN::CuDNN)
endif() endif()
if(OpenCV_FOUND) if(OpenCV_FOUND)
target_link_libraries(darknet PRIVATE ${OpenCV_LIBS}) target_link_libraries(darknet PRIVATE ${OpenCV_LIBS})
target_link_libraries(uselib PRIVATE ${OpenCV_LIBS}) target_link_libraries(uselib PRIVATE ${OpenCV_LIBS})
target_link_libraries(darklib PRIVATE ${OpenCV_LIBS}) target_link_libraries(dark PRIVATE ${OpenCV_LIBS})
endif() endif()
if(OPENMP_FOUND) if(OPENMP_FOUND)
target_link_libraries(darknet PRIVATE OpenMP::OpenMP_CXX) target_link_libraries(darknet PRIVATE OpenMP::OpenMP_CXX)
target_link_libraries(darklib PRIVATE OpenMP::OpenMP_CXX) target_link_libraries(dark PRIVATE OpenMP::OpenMP_CXX)
endif() endif()
if(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_GNUCC)
target_link_libraries(darknet PRIVATE m) target_link_libraries(darknet PRIVATE m)
target_link_libraries(darklib PRIVATE m) target_link_libraries(dark PRIVATE m)
endif() endif()
if(MSVC) if(MSVC)
target_link_libraries(darknet PRIVATE PThreads_windows::PThreads_windows) target_link_libraries(darknet PRIVATE PThreads_windows::PThreads_windows)
target_link_libraries(darknet PRIVATE wsock32 ws2_32) target_link_libraries(darknet PRIVATE wsock32 ws2_32)
target_link_libraries(darklib PRIVATE PThreads_windows::PThreads_windows) target_link_libraries(dark PRIVATE PThreads_windows::PThreads_windows)
target_link_libraries(darklib PRIVATE wsock32 ws2_32) target_link_libraries(dark PRIVATE wsock32 ws2_32)
endif() endif()
target_link_libraries(darknet PRIVATE Threads::Threads) target_link_libraries(darknet PRIVATE Threads::Threads)
target_link_libraries(darklib PRIVATE Threads::Threads) target_link_libraries(dark PRIVATE Threads::Threads)
if(ENABLE_ZED_CAMERA) if(ENABLE_ZED_CAMERA)
target_link_libraries(darknet PRIVATE ${ZED_LIBRARIES}) target_link_libraries(darknet PRIVATE ${ZED_LIBRARIES})
@ -334,22 +336,25 @@ endif()
if(ENABLE_CUDA) if(ENABLE_CUDA)
target_link_libraries(darknet PRIVATE curand cublas cuda) target_link_libraries(darknet PRIVATE curand cublas cuda)
target_link_libraries(darklib PRIVATE curand cublas cuda) target_link_libraries(dark PRIVATE curand cublas cuda)
set_target_properties(darklib PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) set_target_properties(dark PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
endif() endif()
target_link_libraries(uselib PRIVATE darklib) target_link_libraries(uselib PRIVATE dark)
if(OpenCV_FOUND AND OpenCV_VERSION VERSION_GREATER "3.0" AND NOT SKIP_USELIB_TRACK) if(OpenCV_FOUND AND OpenCV_VERSION VERSION_GREATER "3.0" AND NOT SKIP_USELIB_TRACK)
target_link_libraries(uselib_track PRIVATE darklib) target_link_libraries(uselib_track PRIVATE dark)
endif() endif()
set_target_properties(darklib PROPERTIES PUBLIC_HEADER "${exported_headers};${CMAKE_CURRENT_LIST_DIR}/include/yolo_v2_class.hpp") #set_target_properties(dark PROPERTIES PUBLIC_HEADER "${exported_headers};${CMAKE_CURRENT_LIST_DIR}/include/yolo_v2_class.hpp")
set_target_properties(dark PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_LIST_DIR}/include/darknet.h;${CMAKE_CURRENT_LIST_DIR}/include/yolo_v2_class.hpp")
install(TARGETS darklib EXPORT DarknetTargets set_target_properties(dark PROPERTIES CXX_VISIBILITY_PRESET hidden)
install(TARGETS dark EXPORT DarknetTargets
RUNTIME DESTINATION "${INSTALL_BIN_DIR}" RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/darknet" PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}"
COMPONENT dev COMPONENT dev
) )
install(TARGETS uselib darknet install(TARGETS uselib darknet