From 67cf4445e04f20c0285f1715f55e6dadfa0c9c6e Mon Sep 17 00:00:00 2001 From: Lukas Bulwahn Date: Tue, 10 Jul 2018 06:58:03 +0200 Subject: [PATCH] libflann: backport patch for cmake >= 3.11 --- ...ries-instead-of-empty-file-list-in-C.patch | 118 ++++++++++++++++++ recipes-extended/libflann/libflann_1.9.1.bb | 2 + 2 files changed, 120 insertions(+) create mode 100644 recipes-extended/libflann/libflann/0001-Use-object-libraries-instead-of-empty-file-list-in-C.patch diff --git a/recipes-extended/libflann/libflann/0001-Use-object-libraries-instead-of-empty-file-list-in-C.patch b/recipes-extended/libflann/libflann/0001-Use-object-libraries-instead-of-empty-file-list-in-C.patch new file mode 100644 index 0000000..40a5b62 --- /dev/null +++ b/recipes-extended/libflann/libflann/0001-Use-object-libraries-instead-of-empty-file-list-in-C.patch @@ -0,0 +1,118 @@ +From 2acc9cce82c2634d3b75f1e50f4eb84b4e6f27b6 Mon Sep 17 00:00:00 2001 +From: Francois Budin +Date: Thu, 7 Jun 2018 17:52:00 -0400 +Subject: [PATCH] Use object libraries instead of empty file list in CMake + add_library + +This modification is required to be able to configure this project with CMake +3.11. +To avoid compiling the source code once for the static libraries and once +for the corresponding shared libraries, a trick was used to pass an empty +list of files to the CMake command `add_library()`. This trick does not +work anymore with CMake 3.11 and above. Instead, the CMake code has been +adapted to first create object libraries, and then use the object +libraries to build both the static and the shared libraries. + +Upstream-Status: Submitted [https://github.com/mariusmuja/flann/pull/378] + +[Backport submitted patch to version 1.9.1] +Signed-off-by: Lukas Bulwahn +--- + src/cpp/CMakeLists.txt | 57 ++++++++++++++++++++++---------------------------- + 1 file changed, 25 insertions(+), 32 deletions(-) + +diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt +index 49c53f0..d1f54d6 100644 +--- a/src/cpp/CMakeLists.txt ++++ b/src/cpp/CMakeLists.txt +@@ -8,10 +8,13 @@ file(GLOB_RECURSE C_SOURCES flann.cpp lz4.c lz4hc.c) + file(GLOB_RECURSE CPP_SOURCES flann_cpp.cpp lz4.c lz4hc.c) + file(GLOB_RECURSE CU_SOURCES *.cu) + +-add_library(flann_cpp_s STATIC ${CPP_SOURCES}) ++add_library(flann_cpp_o OBJECT ${CPP_SOURCES}) + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) +- set_target_properties(flann_cpp_s PROPERTIES COMPILE_FLAGS -fPIC) ++ set_target_properties(flann_cpp_o PROPERTIES COMPILE_FLAGS -fPIC) + endif() ++ ++add_library(flann_cpp_s STATIC $) ++ + set_property(TARGET flann_cpp_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC FLANN_USE_CUDA) + + if (BUILD_CUDA_LIB) +@@ -24,28 +27,22 @@ if (BUILD_CUDA_LIB) + else() + set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};" ) + endif() +- cuda_add_library(flann_cuda_s STATIC ${CU_SOURCES}) ++ cuda_add_library(flann_cuda_o OBJECT ${CU_SOURCES}) ++ cuda_add_library(flann_cuda_s STATIC $) + 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}) +- if (BUILD_CUDA_LIB) +- cuda_add_library(flann_cuda SHARED ${CPP_SOURCES}) +- set_property(TARGET flann_cpp PROPERTY COMPILE_DEFINITIONS FLANN_USE_CUDA) +- endif() ++add_library(flann_cpp SHARED $) ++ ++if (BUILD_CUDA_LIB) ++ cuda_add_library(flann_cuda SHARED $) ++ set_property(TARGET flann_cpp_s PROPERTY COMPILE_DEFINITIONS FLANN_USE_CUDA) ++# target_link_libraries(flann_cuda cudpp_x86_64) ++endif() ++ ++if(MSVC) ++ # export lz4 headers, so that MSVC to creates flann_cpp.lib ++ set_target_properties(flann_cpp PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS YES) + endif() + + set_target_properties(flann_cpp PROPERTIES +@@ -76,22 +73,18 @@ endif() + + + if (BUILD_C_BINDINGS) +- add_library(flann_s STATIC ${C_SOURCES}) ++ add_library(flann_o OBJECT ${C_SOURCES}) + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) +- set_target_properties(flann_s PROPERTIES COMPILE_FLAGS -fPIC) ++ set_target_properties(flann_o PROPERTIES COMPILE_FLAGS -fPIC) + endif() ++ add_library(flann_s STATIC $) ++ + 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 "") +- 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}) ++ add_library(flann SHARED $) + +- if(MINGW AND OPENMP_FOUND) +- target_link_libraries(flann gomp) +- endif() ++ if(MINGW AND OPENMP_FOUND) ++ target_link_libraries(flann gomp) + endif() + + set_target_properties(flann PROPERTIES +-- +2.7.4 + diff --git a/recipes-extended/libflann/libflann_1.9.1.bb b/recipes-extended/libflann/libflann_1.9.1.bb index c190ba3..271b003 100644 --- a/recipes-extended/libflann/libflann_1.9.1.bb +++ b/recipes-extended/libflann/libflann_1.9.1.bb @@ -11,3 +11,5 @@ SRC_URI[sha256sum] = "b23b5f4e71139faa3bcb39e6bbcc76967fbaf308c4ee9d4f5bfbeceaa7 S = "${WORKDIR}/flann-${PV}" inherit cmake + +SRC_URI += "file://0001-Use-object-libraries-instead-of-empty-file-list-in-C.patch"