diff --git a/CMakeLists.txt b/CMakeLists.txt index f4b94d2..7ff331a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,8 +146,7 @@ if (BUILD_CUDA_LIB) endif(CUDA_FOUND) endif(BUILD_CUDA_LIB) -find_package(PkgConfig REQUIRED) -pkg_check_modules(LZ4 REQUIRED liblz4) +find_package(lz4 REQUIRED) #set the C/C++ include path to the "include" directory include_directories(BEFORE ${PROJECT_SOURCE_DIR}/src/cpp) diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in index 6b95a71..778aec4 100644 --- a/cmake/Config.cmake.in +++ b/cmake/Config.cmake.in @@ -3,3 +3,5 @@ include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") check_required_components("flann") +include(CMakeFindDependencyMacro) +find_dependency(lz4) \ No newline at end of file diff --git a/cmake/flann_utils.cmake b/cmake/flann_utils.cmake index afe4742..8aef8e0 100644 --- a/cmake/flann_utils.cmake +++ b/cmake/flann_utils.cmake @@ -1,8 +1,7 @@ macro(GET_OS_INFO) string(REGEX MATCH "Linux" OS_IS_LINUX ${CMAKE_SYSTEM_NAME}) - set(FLANN_LIB_INSTALL_DIR "lib${LIB_SUFFIX}") - set(FLANN_INCLUDE_INSTALL_DIR - "include/${PROJECT_NAME_LOWER}-${FLANN_MAJOR_VERSION}.${FLANN_MINOR_VERSION}") + set(FLANN_LIB_INSTALL_DIR "lib") + set(FLANN_INCLUDE_INSTALL_DIR "include") endmacro(GET_OS_INFO) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 3f4655a..bc1d758 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,9 +1,10 @@ add_custom_target(examples ALL) +find_package(lz4 REQUIRED) if (BUILD_C_BINDINGS) add_executable(flann_example_c flann_example.c) - target_link_libraries(flann_example_c -Wl,--push-state,--no-as-needed ${LZ4_LIBRARIES} -Wl,--pop-state) + target_link_libraries(flann_example_c lz4::lz4) target_link_libraries(flann_example_c flann) set_target_properties(flann_example_c PROPERTIES COMPILE_FLAGS -std=c99) @@ -15,7 +16,7 @@ if (HDF5_FOUND) include_directories(${HDF5_INCLUDE_DIR}) add_executable(flann_example_cpp flann_example.cpp) - target_link_libraries(flann_example_cpp -Wl,--push-state,--no-as-needed ${LZ4_LIBRARIES} -Wl,--pop-state) + target_link_libraries(flann_example_cpp lz4::lz4) target_link_libraries(flann_example_cpp ${HDF5_LIBRARIES} flann_cpp) if (HDF5_IS_PARALLEL) target_link_libraries(flann_example_cpp ${MPI_LIBRARIES}) @@ -27,7 +28,7 @@ if (HDF5_FOUND) if (USE_MPI AND HDF5_IS_PARALLEL) add_executable(flann_example_mpi flann_example_mpi.cpp) - target_link_libraries(flann_example_mpi -Wl,--push-state,--no-as-needed ${LZ4_LIBRARIES} -Wl,--pop-state) + target_link_libraries(flann_example_mpi lz4::lz4) target_link_libraries(flann_example_mpi flann_cpp ${HDF5_LIBRARIES} ${MPI_LIBRARIES} ${Boost_LIBRARIES}) add_dependencies(examples flann_example_mpi) diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt index b421abb..78f9a64 100644 --- a/src/cpp/CMakeLists.txt +++ b/src/cpp/CMakeLists.txt @@ -1,6 +1,6 @@ #include_directories(${CMAKE_SOURCE_DIR}/include algorithms ext util nn .) -add_definitions(-D_FLANN_VERSION=${FLANN_VERSION}) +add_definitions(-D_FLANN_VERSION=${FLANN_VERSION} -std=c++11) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/flann/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/flann/config.h) @@ -8,12 +8,11 @@ file(GLOB_RECURSE C_SOURCES flann.cpp) file(GLOB_RECURSE CPP_SOURCES flann_cpp.cpp) file(GLOB_RECURSE CU_SOURCES *.cu) -add_library(flann_cpp_s STATIC ${CPP_SOURCES}) -target_link_libraries(flann_cpp_s ${LZ4_LIBRARIES}) -if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) - set_target_properties(flann_cpp_s PROPERTIES COMPILE_FLAGS -fPIC) -endif() -set_property(TARGET flann_cpp_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC FLANN_USE_CUDA) +find_package(lz4 REQUIRED) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +add_library(flann_cpp STATIC ${CPP_SOURCES}) +target_link_libraries(flann_cpp PRIVATE lz4::lz4) +set_property(TARGET flann_cpp PROPERTY COMPILE_DEFINITIONS FLANN_STATIC) if (BUILD_CUDA_LIB) SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-DFLANN_USE_CUDA") @@ -25,45 +24,9 @@ if (BUILD_CUDA_LIB) else() set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};" ) endif() - cuda_add_library(flann_cuda_s STATIC ${CU_SOURCES}) - set_property(TARGET flann_cuda_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC) - add_library(flann_cpp SHARED "") - set_target_properties(flann_cpp PROPERTIES LINKER_LANGUAGE CXX) - target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive) - - if (BUILD_CUDA_LIB) - cuda_add_library(flann_cuda SHARED "") - set_target_properties(flann_cuda PROPERTIES LINKER_LANGUAGE CXX) - target_link_libraries(flann_cuda -Wl,-whole-archive flann_cuda_s -Wl,-no-whole-archive) - set_property(TARGET flann_cpp_s PROPERTY COMPILE_DEFINITIONS FLANN_USE_CUDA) - # target_link_libraries(flann_cuda cudpp_x86_64) - endif() -else() - add_library(flann_cpp SHARED ${CPP_SOURCES}) - target_link_libraries(flann_cpp -Wl,--push-state,--no-as-needed ${LZ4_LIBRARIES} -Wl,--pop-state) - # export lz4 headers, so that MSVC to creates flann_cpp.lib - set_target_properties(flann_cpp PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS YES) - if (BUILD_CUDA_LIB) - cuda_add_library(flann_cuda SHARED ${CPP_SOURCES}) - set_property(TARGET flann_cpp PROPERTY COMPILE_DEFINITIONS FLANN_USE_CUDA) - endif() -endif() - -set_target_properties(flann_cpp PROPERTIES - VERSION ${FLANN_VERSION} - SOVERSION ${FLANN_SOVERSION} - DEFINE_SYMBOL FLANN_EXPORTS -) - -if (BUILD_CUDA_LIB) - set_target_properties(flann_cuda PROPERTIES - VERSION ${FLANN_VERSION} - SOVERSION ${FLANN_SOVERSION} - DEFINE_SYMBOL FLANN_EXPORTS - ) + cuda_add_library(flann_cuda STATIC ${CU_SOURCES}) + set_property(TARGET flann_cuda PROPERTY COMPILE_DEFINITIONS FLANN_STATIC) + set_property(TARGET flann_cpp PROPERTY COMPILE_DEFINITIONS FLANN_USE_CUDA) endif() @@ -80,6 +43,7 @@ endif() if (BUILD_C_BINDINGS) + if (0) add_library(flann_s STATIC ${C_SOURCES}) target_link_libraries(flann_s -Wl,--push-state,--no-as-needed ${LZ4_LIBRARIES} -Wl,--pop-state) if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) @@ -105,6 +69,10 @@ if (BUILD_C_BINDINGS) SOVERSION ${FLANN_SOVERSION} DEFINE_SYMBOL FLANN_EXPORTS ) + endif() + add_library(flann STATIC ${C_SOURCES}) + target_link_libraries(flann PRIVATE lz4::lz4) + set_property(TARGET flann PROPERTY COMPILE_DEFINITIONS FLANN_STATIC) endif() if(WIN32) @@ -118,9 +86,9 @@ endif(WIN32) install ( - TARGETS flann_cpp flann_cpp_s + TARGETS flann_cpp EXPORT ${targets_export_name} - INCLUDES DESTINATION include + INCLUDES DESTINATION ${FLANN_INCLUDE_INSTALL_DIR} RUNTIME DESTINATION bin LIBRARY DESTINATION ${FLANN_LIB_INSTALL_DIR} ARCHIVE DESTINATION ${FLANN_LIB_INSTALL_DIR} @@ -128,9 +96,9 @@ install ( if (BUILD_CUDA_LIB) install ( - TARGETS flann_cuda flann_cuda_s + TARGETS flann_cuda EXPORT ${targets_export_name} - INCLUDES DESTINATION include + INCLUDES DESTINATION ${FLANN_INCLUDE_INSTALL_DIR} RUNTIME DESTINATION bin LIBRARY DESTINATION ${FLANN_LIB_INSTALL_DIR} ARCHIVE DESTINATION ${FLANN_LIB_INSTALL_DIR} @@ -139,9 +107,9 @@ endif() if (BUILD_C_BINDINGS) install ( - TARGETS flann flann_s + TARGETS flann EXPORT ${targets_export_name} - INCLUDES DESTINATION include + INCLUDES DESTINATION ${FLANN_INCLUDE_INSTALL_DIR} RUNTIME DESTINATION bin LIBRARY DESTINATION ${FLANN_LIB_INSTALL_DIR} ARCHIVE DESTINATION ${FLANN_LIB_INSTALL_DIR}