From e4e7dfd4728013c54c0af48c531a4ecaaab13ae3 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 22 Nov 2023 19:27:01 -0500 Subject: [PATCH] cmake: build qatzip from source when WITH_SYSTEM_QATZIP=OFF Signed-off-by: Casey Bodley --- CMakeLists.txt | 10 ++++++ cmake/modules/BuildQATzip.cmake | 56 +++++++++++++++++++++++++++++++++ cmake/modules/FindQATzip.cmake | 1 + 3 files changed, 67 insertions(+) create mode 100644 cmake/modules/BuildQATzip.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f9bc746f884f..c5d708f69de09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 index 0000000000000..005288e873b23 --- /dev/null +++ b/cmake/modules/BuildQATzip.cmake @@ -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() diff --git a/cmake/modules/FindQATzip.cmake b/cmake/modules/FindQATzip.cmake index e61f5f7f4a194..364cb7359148c 100644 --- a/cmake/modules/FindQATzip.cmake +++ b/cmake/modules/FindQATzip.cmake @@ -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() -- 2.39.5