]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: build qatzip from source when WITH_SYSTEM_QATZIP=OFF
authorCasey Bodley <cbodley@redhat.com>
Thu, 23 Nov 2023 00:27:01 +0000 (19:27 -0500)
committerCasey Bodley <cbodley@redhat.com>
Wed, 7 Feb 2024 16:12:45 +0000 (11:12 -0500)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
CMakeLists.txt
cmake/modules/BuildQATzip.cmake [new file with mode: 0644]
cmake/modules/FindQATzip.cmake

index 1f9bc746f884fb22ccf282d5ade8d846f03ddf80..c5d708f69de096c22f9a21392fcc6c06b4d7beb1 100644 (file)
@@ -311,6 +311,7 @@ option(WITH_QATLIB "Enable QAT with qatlib" OFF)
 option(WITH_SYSTEM_QATLIB "Use system packages for qatlib" OFF)
 option(WITH_QATDRV "Enable QAT with out-of-tree driver" OFF)
 option(WITH_QATZIP "Enable QATzip" OFF)
+option(WITH_SYSTEM_QATZIP "Use system packages for QATzip" OFF)
 
 if(WITH_QATDRV)
   find_package(QatDrv REQUIRED COMPONENTS qat_s usdm_drv_s)
@@ -329,7 +330,16 @@ elseif(WITH_QATLIB)
 endif()
 
 if(WITH_QATZIP)
+  if(NOT WITH_SYSTEM_QATZIP)
+    include(BuildQATzip)
+    build_qatzip()
+    # qatzip build depends on qatlib
+    add_dependencies(qatzip_ext QAT::qat)
+  endif()
   find_package(QATzip REQUIRED)
+  if(NOT WITH_SYSTEM_QATZIP)
+    add_dependencies(QAT::zip qatzip_ext)
+  endif()
   set(HAVE_QATZIP TRUE)
 endif(WITH_QATZIP)
 
diff --git a/cmake/modules/BuildQATzip.cmake b/cmake/modules/BuildQATzip.cmake
new file mode 100644 (file)
index 0000000..005288e
--- /dev/null
@@ -0,0 +1,56 @@
+function(build_qatzip)
+  set(QATzip_REPO https://github.com/intel/qatzip.git)
+  set(QATzip_TAG "v1.1.2")
+
+  set(QATzip_SOURCE_DIR ${CMAKE_BINARY_DIR}/src/qatzip)
+  set(QATzip_INSTALL_DIR ${QATzip_SOURCE_DIR}/install)
+  set(QATzip_INCLUDE_DIR ${QATzip_INSTALL_DIR}/include)
+  set(QATzip_LIBRARY ${QATzip_INSTALL_DIR}/lib/libqatzip.a)
+
+  # this include directory won't exist until the install step, but the
+  # imported targets need it early for INTERFACE_INCLUDE_DIRECTORIES
+  file(MAKE_DIRECTORY "${QATzip_INCLUDE_DIR}")
+
+  set(configure_cmd env CC=${CMAKE_C_COMPILER} ./configure --prefix=${QATzip_INSTALL_DIR})
+  # build a static library with -fPIC that we can link into crypto/compressor plugins
+  list(APPEND configure_cmd --with-pic --enable-static --disable-shared)
+  if(QATDRV_INCLUDE_DIR)
+    list(APPEND configure_cmd --with-ICP_ROOT=${QATDRV_INCLUDE_DIR})
+  endif()
+  if(QAT_INCLUDE_DIR)
+    list(APPEND configure_cmd CFLAGS=-I${QAT_INCLUDE_DIR})
+  endif()
+  if(QAT_LIBRARY_DIR)
+    list(APPEND configure_cmd LDFLAGS=-L${QAT_LIBRARY_DIR})
+  endif()
+
+  # clear the DESTDIR environment variable from debian/rules,
+  # because it messes with the internal install paths of arrow's bundled deps
+  set(NO_DESTDIR_COMMAND ${CMAKE_COMMAND} -E env --unset=DESTDIR)
+
+  set(source_dir_args
+    SOURCE_DIR ${QATzip_SOURCE_DIR}
+    GIT_REPOSITORY ${QATzip_REPO}
+    GIT_TAG ${QATzip_TAG}
+    GIT_SHALLOW TRUE
+    GIT_CONFIG advice.detachedHead=false)
+
+  include(ExternalProject)
+  ExternalProject_Add(qatzip_ext
+    ${source_dir_args}
+    CONFIGURE_COMMAND ./autogen.sh COMMAND ${configure_cmd}
+    BUILD_COMMAND ${NO_DESTDIR_COMMAND} make -j3
+    BUILD_IN_SOURCE 1
+    BUILD_BYPRODUCTS ${QATzip_LIBRARY}
+    UPDATE_COMMAND ""
+    LOG_CONFIGURE ON
+    LOG_BUILD ON
+    LOG_INSTALL ON
+    LOG_MERGED_STDOUTERR ON
+    LOG_OUTPUT_ON_FAILURE ON)
+
+  # export vars for find_package(QATzip)
+  set(QATzip_LIBRARIES ${QATzip_LIBRARY} PARENT_SCOPE)
+  set(QATzip_INCLUDE_DIR ${QATzip_INCLUDE_DIR} PARENT_SCOPE)
+  set(QATzip_INTERFACE_LINK_LIBRARIES QAT::qat QAT::usdm LZ4::LZ4 PARENT_SCOPE)
+endfunction()
index e61f5f7f4a194ad68a4bdda770e2b6f58ac9d785..364cb7359148c06f3b64eb32bd591a662585a047 100644 (file)
@@ -27,6 +27,7 @@ if(QATzip_FOUND AND NOT TARGET QAT::zip)
   add_library(QAT::zip SHARED IMPORTED)
   set_target_properties(QAT::zip PROPERTIES
     INTERFACE_INCLUDE_DIRECTORIES "${QATzip_INCLUDE_DIR}"
+    INTERFACE_LINK_LIBRARIES "${QATzip_INTERFACE_LINK_LIBRARIES}"
     IMPORTED_LINK_INTERFACE_LANGUAGES "C"
     IMPORTED_LOCATION "${QATzip_LIBRARIES}")
 endif()