0001-src-cpp-fix-cmake-3.11-build.patch 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. From fa5ec96a94646492a3f908e12905b3e48a8e800b Mon Sep 17 00:00:00 2001
  2. From: Romain Naour <romain.naour@gmail.com>
  3. Date: Wed, 18 Apr 2018 20:24:13 +0200
  4. Subject: [PATCH] src/cpp: fix cmake >= 3.11 build
  5. CMake < 3.11 doesn't support add_library() without any source file
  6. (i.e add_library(foo SHARED)). But flann CMake use a trick that use
  7. an empty string "" as source list (i.e add_library(foo SHARED "")).
  8. This look like a bug in CMake < 3.11.
  9. With CMake >= 3.11, the new behaviour of add_library() break the
  10. existing flann CMake code.
  11. From CMake Changelog [1]:
  12. "add_library() and add_executable() commands can now be called without
  13. any sources and will not complain as long as sources are added later
  14. via the target_sources() command."
  15. Note: flann CMake code doesn't use target_sources() since no source file
  16. are provided intentionally since the flann shared library is created by
  17. linking with the flann_cpp_s static library with this line:
  18. target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive)
  19. If you try to use "add_library(flann_cpp SHARED ${CPP_SOURCES})" (as it should
  20. be normally done), the link fail due to already defined symbol.
  21. They are building the shared version using the static library "to speedup the
  22. build time" [3]
  23. This issue is already reported upstream [2] with a proposed solution.
  24. Upstream status: Pending
  25. Fixes:
  26. http://autobuild.buildroot.net/results/b2f/b2febfaf8c44ce477b3e4a5b9b976fd25e8d7454
  27. [1] https://cmake.org/cmake/help/v3.11/release/3.11.html
  28. [2] https://github.com/mariusmuja/flann/issues/369
  29. [3] https://github.com/mariusmuja/flann/commit/0fd62b43be2fbb0b8d791ee36290791224dc030c
  30. Signed-off-by: Romain Naour <romain.naour@gmail.com>
  31. ---
  32. src/cpp/CMakeLists.txt | 4 ++--
  33. src/cpp/empty.cpp | 1 +
  34. 2 files changed, 3 insertions(+), 2 deletions(-)
  35. create mode 100644 src/cpp/empty.cpp
  36. diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
  37. index b44a735..a816863 100644
  38. --- a/src/cpp/CMakeLists.txt
  39. +++ b/src/cpp/CMakeLists.txt
  40. @@ -29,7 +29,7 @@ if (BUILD_CUDA_LIB)
  41. endif()
  42. if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC)
  43. - add_library(flann_cpp SHARED "")
  44. + add_library(flann_cpp SHARED "empty.cpp")
  45. set_target_properties(flann_cpp PROPERTIES LINKER_LANGUAGE CXX)
  46. target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive)
  47. @@ -85,7 +85,7 @@ if (BUILD_C_BINDINGS)
  48. set_property(TARGET flann_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC)
  49. if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC)
  50. - add_library(flann SHARED "")
  51. + add_library(flann SHARED "empty.cpp")
  52. set_target_properties(flann PROPERTIES LINKER_LANGUAGE CXX)
  53. target_link_libraries(flann -Wl,-whole-archive flann_s -Wl,-no-whole-archive)
  54. else()
  55. diff --git a/src/cpp/empty.cpp b/src/cpp/empty.cpp
  56. new file mode 100644
  57. index 0000000..40a8c17
  58. --- /dev/null
  59. +++ b/src/cpp/empty.cpp
  60. @@ -0,0 +1 @@
  61. +/* empty */
  62. --
  63. 2.14.3