279 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Diff
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			279 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Diff
		
	
	
		
			Executable File
		
	
	
	
	
From c111a280591aa542914ca845c0be6099a94315ad Mon Sep 17 00:00:00 2001
 | 
						|
From: Lars Glud <larshg@gmail.com>
 | 
						|
Date: Tue, 16 Mar 2021 10:40:06 +0100
 | 
						|
Subject: [PATCH] fix build error
 | 
						|
 | 
						|
---
 | 
						|
 CMakeLists.txt         |   8 ++-
 | 
						|
 cmake/Config.cmake.in  |   5 ++
 | 
						|
 src/cpp/CMakeLists.txt | 149 ++++++++++++++++++++++++-----------------
 | 
						|
 3 files changed, 96 insertions(+), 66 deletions(-)
 | 
						|
 | 
						|
diff --git a/CMakeLists.txt b/CMakeLists.txt
 | 
						|
index f4b94d2..33b2c26 100644
 | 
						|
--- a/CMakeLists.txt
 | 
						|
+++ b/CMakeLists.txt
 | 
						|
@@ -1,4 +1,4 @@
 | 
						|
-cmake_minimum_required(VERSION 2.6)
 | 
						|
+cmake_minimum_required(VERSION 2.8.12)
 | 
						|
 
 | 
						|
 if(COMMAND cmake_policy)
 | 
						|
     cmake_policy(SET CMP0003 NEW)
 | 
						|
@@ -49,6 +49,8 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
 | 
						|
 # set output path for tests
 | 
						|
 set(TEST_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/test)
 | 
						|
 
 | 
						|
+option(BUILD_SHARED_LIBS "Build shared version of libs" ON)
 | 
						|
+option(WITH_HDF5 "Build hdf5 library" OFF)
 | 
						|
 option(BUILD_C_BINDINGS "Build C bindings" ON)
 | 
						|
 option(BUILD_PYTHON_BINDINGS "Build Python bindings" ON)
 | 
						|
 option(BUILD_MATLAB_BINDINGS "Build Matlab bindings" ON)
 | 
						|
@@ -146,8 +148,9 @@ if (BUILD_CUDA_LIB)
 | 
						|
     endif(CUDA_FOUND)
 | 
						|
 endif(BUILD_CUDA_LIB)
 | 
						|
 
 | 
						|
-find_package(PkgConfig REQUIRED)
 | 
						|
-pkg_check_modules(LZ4 REQUIRED liblz4)
 | 
						|
+find_package(PkgConfig)
 | 
						|
+find_package(lz4 CONFIG REQUIRED)
 | 
						|
+set(PKG_EXTERNAL_DEPS "${PKG_EXTERNAL_DEPS} liblz4")
 | 
						|
 
 | 
						|
 #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..e8bb3f7 100644
 | 
						|
--- a/cmake/Config.cmake.in
 | 
						|
+++ b/cmake/Config.cmake.in
 | 
						|
@@ -1,5 +1,11 @@
 | 
						|
 @PACKAGE_INIT@
 | 
						|
 
 | 
						|
+# Get definition of 'find_dependency' macro
 | 
						|
+include(CMakeFindDependencyMacro)
 | 
						|
+# Find lz4. This will create 'lz4::lz4' target
 | 
						|
+find_dependency(lz4)
 | 
						|
+@CMAKE_EXTERNAL_DEPS@
 | 
						|
+
 | 
						|
 include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
 | 
						|
 check_required_components("flann")
 | 
						|
 
 | 
						|
diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
 | 
						|
index b421abb..474cd7e 100644
 | 
						|
--- a/src/cpp/CMakeLists.txt
 | 
						|
+++ b/src/cpp/CMakeLists.txt
 | 
						|
@@ -8,13 +8,7 @@ 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)
 | 
						|
-
 | 
						|
+#Set flags if we build CUDA versions
 | 
						|
 if (BUILD_CUDA_LIB)
 | 
						|
     SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-DFLANN_USE_CUDA")
 | 
						|
     if(CMAKE_COMPILER_IS_GNUCC)
 | 
						|
@@ -25,75 +19,93 @@ 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(NOT BUILD_SHARED_LIBS)
 | 
						|
+  add_library(flann_cpp_s STATIC ${CPP_SOURCES})
 | 
						|
+  target_link_libraries(flann_cpp_s PUBLIC lz4::lz4)
 | 
						|
+  set_property(TARGET flann_cpp_s PROPERTY OUTPUT_NAME flann_cpp)
 | 
						|
+  if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
 | 
						|
+      set_target_properties(flann_cpp_s PROPERTIES COMPILE_FLAGS -fPIC)
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  if (BUILD_CUDA_LIB)
 | 
						|
+      cuda_add_library(flann_cuda_s STATIC ${CU_SOURCES})
 | 
						|
+      target_link_libraries(flann_cuda_s lz4::lz4)
 | 
						|
+      set_property(TARGET flann_cuda_s PROPERTY OUTPUT_NAME flann_cuda)
 | 
						|
+      set_property(TARGET flann_cpp_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC FLANN_USE_CUDA)
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
 
 | 
						|
-    if (BUILD_CUDA_LIB)
 | 
						|
-	    cuda_add_library(flann_cuda SHARED "")
 | 
						|
+if(BUILD_SHARED_LIBS)
 | 
						|
+  if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC)
 | 
						|
+      add_library(flann_cpp SHARED ${CPP_SOURCES})
 | 
						|
+      set_target_properties(flann_cpp PROPERTIES LINKER_LANGUAGE CXX)
 | 
						|
+      target_link_libraries(flann_cpp PUBLIC lz4::lz4)
 | 
						|
+      if (BUILD_CUDA_LIB)
 | 
						|
+        cuda_add_library(flann_cuda SHARED ${CU_SOURCES})
 | 
						|
         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
 | 
						|
-    )
 | 
						|
+      endif()
 | 
						|
+  else()
 | 
						|
+      add_library(flann_cpp SHARED ${CPP_SOURCES})
 | 
						|
+      target_link_libraries(flann_cpp PUBLIC lz4::lz4)
 | 
						|
+      # 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 ${CU_SOURCES})
 | 
						|
+        target_link_libraries(flann_cuda lz4::lz4)
 | 
						|
+        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
 | 
						|
+      )
 | 
						|
+  endif()
 | 
						|
 endif()
 | 
						|
 
 | 
						|
-
 | 
						|
 if (USE_MPI AND HDF5_IS_PARALLEL)
 | 
						|
-    add_executable(flann_mpi_server flann/mpi/flann_mpi_server.cpp)
 | 
						|
-    target_link_libraries(flann_mpi_server flann_cpp ${HDF5_LIBRARIES} ${MPI_LIBRARIES} ${Boost_LIBRARIES})
 | 
						|
+  if(BUILD_SHARED_LIBS)
 | 
						|
+      add_executable(flann_mpi_server flann/mpi/flann_mpi_server.cpp)
 | 
						|
+      target_link_libraries(flann_mpi_server flann_cpp ${HDF5_LIBRARIES} ${MPI_LIBRARIES} ${Boost_LIBRARIES})
 | 
						|
 
 | 
						|
-    add_executable(flann_mpi_client flann/mpi/flann_mpi_client.cpp)
 | 
						|
-    target_link_libraries(flann_mpi_client flann_cpp ${HDF5_LIBRARIES} ${MPI_LIBRARIES} ${Boost_LIBRARIES})
 | 
						|
+      add_executable(flann_mpi_client flann/mpi/flann_mpi_client.cpp)
 | 
						|
+      target_link_libraries(flann_mpi_client flann_cpp ${HDF5_LIBRARIES} ${MPI_LIBRARIES} ${Boost_LIBRARIES})
 | 
						|
 
 | 
						|
-    install (TARGETS flann_mpi_client flann_mpi_server
 | 
						|
-        DESTINATION bin)
 | 
						|
+      install (TARGETS flann_mpi_client flann_mpi_server
 | 
						|
+          DESTINATION bin)
 | 
						|
+  endif()
 | 
						|
 endif()
 | 
						|
 
 | 
						|
-
 | 
						|
 if (BUILD_C_BINDINGS)
 | 
						|
+  if(NOT BUILD_SHARED_LIBS)
 | 
						|
     add_library(flann_s STATIC ${C_SOURCES})
 | 
						|
-    target_link_libraries(flann_s -Wl,--push-state,--no-as-needed ${LZ4_LIBRARIES} -Wl,--pop-state)
 | 
						|
+    target_link_libraries(flann_s PUBLIC lz4::lz4)
 | 
						|
+    set_property(TARGET flann_s PROPERTY OUTPUT_NAME flann)
 | 
						|
     if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
 | 
						|
         set_target_properties(flann_s PROPERTIES COMPILE_FLAGS -fPIC)
 | 
						|
     endif()
 | 
						|
     set_property(TARGET flann_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC)
 | 
						|
-
 | 
						|
+  endif()
 | 
						|
+  
 | 
						|
+  if(BUILD_SHARED_LIBS)
 | 
						|
     if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC)
 | 
						|
-        add_library(flann SHARED "")
 | 
						|
+        add_library(flann SHARED ${C_SOURCES})
 | 
						|
+        target_link_libraries(flann PUBLIC lz4::lz4)
 | 
						|
         set_target_properties(flann PROPERTIES LINKER_LANGUAGE CXX)
 | 
						|
-        target_link_libraries(flann -Wl,-whole-archive flann_s -Wl,-no-whole-archive)
 | 
						|
     else()
 | 
						|
         add_library(flann SHARED ${C_SOURCES})
 | 
						|
-        target_link_libraries(flann -Wl,--push-state,--no-as-needed ${LZ4_LIBRARIES} -Wl,--pop-state)
 | 
						|
+        target_link_libraries(flann PUBLIC lz4::lz4)
 | 
						|
 
 | 
						|
         if(MINGW AND OPENMP_FOUND)
 | 
						|
           target_link_libraries(flann gomp)
 | 
						|
@@ -105,20 +117,31 @@ if (BUILD_C_BINDINGS)
 | 
						|
        SOVERSION ${FLANN_SOVERSION}
 | 
						|
        DEFINE_SYMBOL FLANN_EXPORTS
 | 
						|
     )
 | 
						|
+  endif()
 | 
						|
 endif()
 | 
						|
 
 | 
						|
 if(WIN32)
 | 
						|
-if (BUILD_C_BINDINGS AND BUILD_MATLAB_BINDINGS)
 | 
						|
-    install (
 | 
						|
-        TARGETS flann
 | 
						|
-        RUNTIME DESTINATION share/flann/matlab
 | 
						|
-    )
 | 
						|
-endif()
 | 
						|
+  if (BUILD_C_BINDINGS AND BUILD_MATLAB_BINDINGS)
 | 
						|
+      install (
 | 
						|
+          TARGETS flann
 | 
						|
+          RUNTIME DESTINATION share/flann/matlab
 | 
						|
+      )
 | 
						|
+  endif()
 | 
						|
 endif(WIN32)
 | 
						|
 
 | 
						|
+if(NOT BUILD_SHARED_LIBS)
 | 
						|
+  list(APPEND FLANN_TARGETS_CPP "flann_cpp_s")
 | 
						|
+  list(APPEND FLANN_TARGETS_C "flann_s")
 | 
						|
+  list(APPEND FLANN_TARGETS_CUDA "flann_cuda_s")
 | 
						|
+endif()
 | 
						|
+if(BUILD_SHARED_LIBS)
 | 
						|
+  list(APPEND FLANN_TARGETS_CPP "flann_cpp")
 | 
						|
+  list(APPEND FLANN_TARGETS_C "flann")
 | 
						|
+  list(APPEND FLANN_TARGETS_CUDA "flann_cuda")
 | 
						|
+endif()
 | 
						|
 
 | 
						|
 install (
 | 
						|
-    TARGETS flann_cpp flann_cpp_s
 | 
						|
+    TARGETS ${FLANN_TARGETS_CPP}
 | 
						|
     EXPORT ${targets_export_name}
 | 
						|
     INCLUDES DESTINATION include
 | 
						|
     RUNTIME DESTINATION bin
 | 
						|
@@ -128,7 +151,7 @@ install (
 | 
						|
 
 | 
						|
 if (BUILD_CUDA_LIB)
 | 
						|
     install (
 | 
						|
-        TARGETS flann_cuda flann_cuda_s
 | 
						|
+        TARGETS ${FLANN_TARGETS_CUDA}
 | 
						|
         EXPORT ${targets_export_name}
 | 
						|
         INCLUDES DESTINATION include
 | 
						|
         RUNTIME DESTINATION bin
 | 
						|
@@ -139,7 +162,7 @@ endif()
 | 
						|
 
 | 
						|
 if (BUILD_C_BINDINGS)
 | 
						|
     install (
 | 
						|
-        TARGETS flann flann_s
 | 
						|
+        TARGETS ${FLANN_TARGETS_C}
 | 
						|
         EXPORT ${targets_export_name}
 | 
						|
         INCLUDES DESTINATION include
 | 
						|
         RUNTIME DESTINATION bin
 | 
						|
-- 
 | 
						|
2.29.2.windows.2
 | 
						|
 |