package/flann: fix build with cmake >= 3.11
PATCH v2 1/1 package/flann: fix build with cmake >= 3.11
CMake < 3.11 doesn't support add_library() without any source file (i.e add_library(foo SHARED)). But flann CMake use a trick that use an empty string "" as source list (i.e add_library(foo SHARED "")). This look like a bug in CMake < 3.11.
With CMake >= 3.11, the new behaviour of add_library() break the existing flann CMake code.
From CMake Changelog [1]:
"add_library() and add_executable() commands can now be called without
any sources and will not complain as long as sources are added later via the target_sources() command."
Note: flann CMake code doesn't use target_sources() since no source file are provided intentionally since the flann shared library is created by linking with the flann_cpp_s static library with this line:
target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive)
If you try to use "add_library(flann_cpp SHARED ${CPP_SOURCES})" (as it should be normally done), the link fail due to already defined symbol.
They are building the shared version using the static library "to speedup the build time" [3]
This issue is already reported upstream [2] with a proposed solution.
Fixes:
http://autobuild.buildroot.net/results/b2f/b2febfaf8c44ce477b3e4a5b9b976fd25e8d7454
[1] https://cmake.org/cmake/help/v3.11/release/3.11.html
[2] https://github.com/mariusmuja/flann/issues/369
[3] https://github.com/mariusmuja/flann/commit/0fd62b43be2fbb0b8d791ee36290791224dc030c
---
v2: improve the commit log (ThomasP)
--- .../flann/0001-src-cpp-fix-cmake-3.11-build.patch | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 package/flann/0001-src-cpp-fix-cmake-3.11-build.patch
package/flann/0001-src-cpp-fix-cmake-3.11-build.patch new file +80 -0
@@ -0,0 +1,80 @@ +From fa5ec96a94646492a3f908e12905b3e48a8e800b Mon Sep 17 00:00:00 2001 +From: Romain Naour <[email protected]> +Date: Wed, 18 Apr 2018 20:24:13 +0200 +Subject: [PATCH] src/cpp: fix cmake >= 3.11 build + +CMake < 3.11 doesn't support add_library() without any source file +(i.e add_library(foo SHARED)). But flann CMake use a trick that use +an empty string "" as source list (i.e add_library(foo SHARED "")). +This look like a bug in CMake < 3.11. + +With CMake >= 3.11, the new behaviour of add_library() break the +existing flann CMake code. + +From CMake Changelog [1]: +"add_library() and add_executable() commands can now be called without + any sources and will not complain as long as sources are added later + via the target_sources() command." + +Note: flann CMake code doesn't use target_sources() since no source file +are provided intentionally since the flann shared library is created by +linking with the flann_cpp_s static library with this line: + +target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive) + +If you try to use "add_library(flann_cpp SHARED ${CPP_SOURCES})" (as it should +be normally done), the link fail due to already defined symbol. + +They are building the shared version using the static library "to speedup the +build time" [3] + +This issue is already reported upstream [2] with a proposed solution. + +Upstream status: Pending + +Fixes: +http://autobuild.buildroot.net/results/b2f/b2febfaf8c44ce477b3e4a5b9b976fd25e8d7454 + +[1] https://cmake.org/cmake/help/v3.11/release/3.11.html +[2] https://github.com/mariusmuja/flann/issues/369 +[3] https://github.com/mariusmuja/flann/commit/0fd62b43be2fbb0b8d791ee36290791224dc030c + +Signed-off-by: Romain Naour <[email protected]> +--- + src/cpp/CMakeLists.txt | 4 ++-- + src/cpp/empty.cpp | 1 + + 2 files changed, 3 insertions(+), 2 deletions(-) + create mode 100644 src/cpp/empty.cpp + +diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt +index b44a735..a816863 100644 +--- a/src/cpp/CMakeLists.txt ++++ b/src/cpp/CMakeLists.txt +@@ -29,7 +29,7 @@ if (BUILD_CUDA_LIB) + endif() + + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC) +- add_library(flann_cpp SHARED "") ++ add_library(flann_cpp SHARED "empty.cpp") + set_target_properties(flann_cpp PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive) + +@@ -85,7 +85,7 @@ if (BUILD_C_BINDINGS) + set_property(TARGET flann_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC) + + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC) +- add_library(flann SHARED "") ++ add_library(flann SHARED "empty.cpp") + set_target_properties(flann PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries(flann -Wl,-whole-archive flann_s -Wl,-no-whole-archive) + else() +diff --git a/src/cpp/empty.cpp b/src/cpp/empty.cpp +new file mode 100644 +index 0000000..40a8c17 +--- /dev/null ++++ b/src/cpp/empty.cpp +@@ -0,0 +1 @@ ++/* empty */ +-- +2.14.3 +
Signature · 1 line
2.14.3
PATCH v2 1/1 package/flann: fix build with cmake >= 3.11
Hello,
Quoted 37 lines · Romain Naour
CMake < 3.11 doesn't support
add_library()without any source file (i.eadd_library(foo SHARED)). But flann CMake use a trick that use an empty string "" as source list (i.eadd_library(foo SHARED "")). This look like a bug in CMake < 3.11.With CMake >= 3.11, the new behaviour of
add_library()break the existing flann CMake code.From CMake Changelog [1]:
"add_library()andadd_executable()commands can now be called without
any sources and will not complain as long as sources are added later via thetarget_sources()command."Note: flann CMake code doesn't use
target_sources()since no source file are provided intentionally since the flann shared library is created by linking with theflann_cpp_sstatic library with this line:
target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive)If you try to use "
add_library(flann_cpp SHARED ${CPP_SOURCES})" (as it should be normally done), the link fail due to already defined symbol.They are building the shared version using the static library "to speedup the build time" [3]
This issue is already reported upstream [2] with a proposed solution.
Fixes:
http://autobuild.buildroot.net/results/b2f/b2febfaf8c44ce477b3e4a5b9b976fd25e8d7454[1] https://cmake.org/cmake/help/v3.11/release/3.11.html
[2] https://github.com/mariusmuja/flann/issues/369
[3] https://github.com/mariusmuja/flann/commit/0fd62b43be2fbb0b8d791ee36290791224dc030cSigned-off-by Romain Naour <[email protected]>Cc Davide Viti <[email protected]>Cc Bernd Kuhls <[email protected]>
Quoted 6 lines
---
v2: improve the commit log (ThomasP)--- .../flann/0001-src-cpp-fix-cmake-3.11-build.patch | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 package/flann/0001-src-cpp-fix-cmake-3.11-build.patch
Thanks for the improved commit log. Applied to master!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com
PATCH v2 1/1 package/flann: fix build with cmake >= 3.11
In reply to Romain NaourQuoted 36 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Romain" == Romain Naour <[email protected]> writes:
CMake < 3.11 doesn't support
add_library()without any source file (i.eadd_library(foo SHARED)). But flann CMake use a trick that use an empty string "" as source list (i.eadd_library(foo SHARED "")). This look like a bug in CMake < 3.11.With CMake >= 3.11, the new behaviour of
add_library()break the existing flann CMake code.From CMake Changelog [1]:
"add_library()andadd_executable()commands can now be called without
any sources and will not complain as long as sources are added later via thetarget_sources()command."Note: flann CMake code doesn't use
target_sources()since no source file are provided intentionally since the flann shared library is created by linking with theflann_cpp_sstatic library with this line:
target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive)If you try to use "
add_library(flann_cpp SHARED ${CPP_SOURCES})" (as it should be normally done), the link fail due to already defined symbol.They are building the shared version using the static library "to speedup the build time" [3]
This issue is already reported upstream [2] with a proposed solution.
Fixes:
http://autobuild.buildroot.net/results/b2f/b2febfaf8c44ce477b3e4a5b9b976fd25e8d7454[1] https://cmake.org/cmake/help/v3.11/release/3.11.html
[2] https://github.com/mariusmuja/flann/issues/369
[3] https://github.com/mariusmuja/flann/commit/0fd62b43be2fbb0b8d791ee36290791224dc030c
Quoted 5 lines
Signed-off-by Romain Naour <[email protected]>Cc Davide Viti <[email protected]>Cc Bernd Kuhls <[email protected]>---
v2: improve the commit log (ThomasP)
Committed to 2018.02.x, thanks.
Signature · 1 line
Bye, Peter Korsgaard