]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: [win32] Fix rocksdb cross compiling
authorLucian Petrut <lpetrut@cloudbasesolutions.com>
Wed, 5 Feb 2020 15:01:04 +0000 (15:01 +0000)
committerLucian Petrut <lpetrut@cloudbasesolutions.com>
Wed, 19 Feb 2020 08:24:21 +0000 (08:24 +0000)
In order to be able to cross compile rocksdb using mingw, we'll
have to do the following:
* pass on specified toolchain files
* pass the CMAKE_PREFIX_PATH. We'll have to replace the ";" separator
  with something else (we went with "!"), otherwise CMake won't be
  able to properly handle the command arguments
* pass on the received LZ4 lib location since it cannot be properly
  detected when cross compiling.

Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
cmake/modules/BuildRocksDB.cmake

index f1b68c05422f0ac4758781eb2b85a563555da437..de9748878b7c31c193a1678901d7ff469272f3fa 100644 (file)
@@ -2,6 +2,15 @@ function(build_rocksdb)
   set(rocksdb_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
   list(APPEND rocksdb_CMAKE_ARGS -DWITH_GFLAGS=OFF)
 
+  # cmake doesn't properly handle arguments containing ";", such as
+  # CMAKE_PREFIX_PATH, for which reason we'll have to use some other separator.
+  string(REPLACE ";" "!" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}")
+  list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP})
+  if(CMAKE_TOOLCHAIN_FILE)
+    list(APPEND rocksdb_CMAKE_ARGS
+         -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE)
+  endif()
+
   if(ALLOCATOR STREQUAL "jemalloc")
     list(APPEND rocksdb_CMAKE_ARGS -DWITH_JEMALLOC=ON)
     list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES JeMalloc::JeMalloc)
@@ -25,6 +34,9 @@ function(build_rocksdb)
   list(APPEND rocksdb_CMAKE_ARGS -DWITH_LZ4=${LZ4_FOUND})
   if(LZ4_FOUND)
     list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES LZ4::LZ4)
+    # When cross compiling, cmake may fail to locate lz4.
+    list(APPEND rocksdb_CMAKE_ARGS -DLZ4_INCLUDE_DIR=${LZ4_INCLUDE_DIR})
+    list(APPEND rocksdb_CMAKE_ARGS -DLZ4_LIBRARIES=${LZ4_LIBRARY})
   endif()
 
   list(APPEND rocksdb_CMAKE_ARGS -DWITH_ZLIB=${ZLIB_FOUND})
@@ -74,7 +86,8 @@ function(build_rocksdb)
     BUILD_COMMAND "${make_cmd}"
     BUILD_ALWAYS TRUE
     BUILD_BYPRODUCTS "${rocksdb_LIBRARY}"
-    INSTALL_COMMAND "true")
+    INSTALL_COMMAND "true"
+    LIST_SEPARATOR !)
 
   add_library(RocksDB::RocksDB STATIC IMPORTED)
   add_dependencies(RocksDB::RocksDB rocksdb_ext)