diff --git a/.gitignore b/.gitignore index abaf1d37a9ad528752d4b3fedc645ba809dc7946..487f5ff28fcb0e8c1c485f0ef11e02bb0d107465 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ _CPack_Packages *.gcno *.gcda *.gcov -/patches/ .git-ignore/ .pc/ coverity/ diff --git a/CMakeLists.txt b/CMakeLists.txt index debf2973a978db2a63aa723df33bbaf15e3df9e2..49c19153113018f1ef77f3c744741d799122491d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,10 @@ endif() # Define GNU standard installation directories include(GNUInstallDirs) +if(BUILD_STATIC_WITH_BUNDLED_LIBS) + set(BUILD_STATIC ON) +endif() + include(cmake/utils.cmake) include(cmake/pod2man.cmake) # the order is significant: we need to know os and compiler to configure libs @@ -378,6 +382,9 @@ find_package_message(MODULE_LIBPATH "Lua package.cpath: ${MODULE_LIBPATH}" ## Third-Party libraries ## +# URL of the backup storage to download bundled dependencies from. +set(BACKUP_STORAGE https://distrib.hb.vkcs.cloud) + set(EMBED_LUAZLIB ${BUILD_STATIC}) set(EMBED_LUAROCKS ${BUILD_STATIC}) @@ -413,14 +420,12 @@ endif() # ZLIB # -# -# If tarantool is built as a part of enterpirse version, -# zlib package will be found there and the second attempt -# to find it will cause an error. Search for it only if it -# has not been found before. -# - -if (NOT ZLIB_FOUND) +option(ENABLE_BUNDLED_ZLIB "Enable building of the bundled zlib" + ${BUILD_STATIC_WITH_BUNDLED_LIBS}) +if(ENABLE_BUNDLED_ZLIB) + include(BuildZLIB) + add_dependencies(build_bundled_libs bundled-zlib) +else() set(ZLIB_FIND_REQUIRED ON) find_package(ZLIB) endif() @@ -436,7 +441,20 @@ endif() # # OpenSSL # -find_package(OpenSSL) + +set(ENABLE_BUNDLED_OPENSSL_DEFAULT OFF) +if(BUILD_STATIC_WITH_BUNDLED_LIBS AND OPENSSL_USE_STATIC_LIBS) + set(ENABLE_BUNDLED_OPENSSL_DEFAULT ON) +endif() +option(ENABLE_BUNDLED_OPENSSL "Enable building of the bundled openssl" + ${ENABLE_BUNDLED_OPENSSL_DEFAULT}) +if(ENABLE_BUNDLED_OPENSSL) + set(OPENSSL_USE_STATIC_LIBS ON) + include(BuildOpenSSL) + add_dependencies(build_bundled_libs bundled-openssl) +else() + find_package(OpenSSL) +endif() if (OPENSSL_FOUND) message(STATUS "OpenSSL ${OPENSSL_VERSION} found") include_directories(${OPENSSL_INCLUDE_DIR}) @@ -450,6 +468,9 @@ endif() # if(OPENSSL_USE_STATIC_LIBS) set(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARIES}) + if(ENABLED_BUNDLED_OPENSSL AND ENABLE_BUNDLED_ZLIB) + add_dependencies(bundled-openssl bundled-zlib) + endif() endif() # @@ -505,21 +526,48 @@ message(STATUS "EXPORT_LIBCURL_SYMBOLS: ${EXPORT_LIBCURL_SYMBOLS}") # ReadLine # -set(Readline_FIND_REQUIRED ON) -find_package(Readline) +option(ENABLE_BUNDLED_READLINE "Enable building of the bundled readline" + ${BUILD_STATIC_WITH_BUNDLED_LIBS}) +if(ENABLE_BUNDLED_READLINE) + include(BuildReadline) + add_dependencies(build_bundled_libs bundled-readline) +else() + set(Readline_FIND_REQUIRED ON) + find_package(Readline) +endif() # # ICONV # -set(ICONV_FIND_REQUIRED ON) -find_package(ICONV) + +# In Linux iconv is embedded into glibc. +set(ENABLE_BUNDLED_ICONV_DEFAULT OFF) +if(APPLE AND BUILD_STATIC_WITH_BUNDLED_LIBS) + set(ENABLE_BUNDLED_ICONV_DEFAULT ON) +endif() +option(ENABLE_BUNDLED_ICONV "Enable building of the bundled iconv" + ${ENABLE_BUNDLED_ICONV_DEFAULT}) +if(ENABLE_BUNDLED_ICONV) + include(BuildICONV) + add_dependencies(build_bundled_libs bundled-iconv) +else() + set(ICONV_FIND_REQUIRED ON) + find_package(ICONV) +endif() # # ICU # -set(ICU_FIND_REQUIRED ON) -find_package(ICU) +option(ENABLE_BUNDLED_ICU "Enable building of the bundled icu" + ${BUILD_STATIC_WITH_BUNDLED_LIBS}) +if(ENABLE_BUNDLED_ICU) + include(BuildICU) + add_dependencies(build_bundled_libs bundled-icu) +else() + set(ICU_FIND_REQUIRED ON) + find_package(ICU) +endif() # # libunwind @@ -789,8 +837,13 @@ set(options PACKAGE VERSION BUILD C_COMPILER CXX_COMPILER C_FLAGS CXX_FLAGS ENABLE_HARDENING ENABLE_DOC ENABLE_DIST + ENABLE_BUNDLED_ZLIB + ENABLE_BUNDLED_OPENSSL ENABLE_BUNDLED_LIBCURL BUNDLED_LIBCURL_USE_ARES + ENABLE_BUNDLED_READLINE + ENABLE_BUNDLED_ICONV + ENABLE_BUNDLED_ICU ENABLE_BUNDLED_LIBYAML ENABLE_BUNDLED_MSGPUCK ENABLE_BUNDLED_LIBUNWIND diff --git a/cmake/BuildICONV.cmake b/cmake/BuildICONV.cmake new file mode 100644 index 0000000000000000000000000000000000000000..ebd71bc1b159e8cb02f6e9577ed5ab6dc6838145 --- /dev/null +++ b/cmake/BuildICONV.cmake @@ -0,0 +1,42 @@ +set(ICONV_VERSION 1.17) +set(ICONV_HASH d718cd5a59438be666d1575855be72c3) +set(ICONV_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/iconv) +set(ICONV_INCLUDE_DIR ${ICONV_INSTALL_DIR}/include) +set(ICONV_LIBRARY ${ICONV_INSTALL_DIR}/lib/libiconv.a) +set(ICONV_CFLAGS "${DEPENDENCY_CFLAGS} -O2") +set(ICONV_CPPFLAGS "") +set(ICONV_LDFLAGS "") + +if(APPLE) + set(ICONV_CFLAGS "${ICONV_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(ICONV_CPPFLAGS "${ICONV_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") +endif() + +ExternalProject_Add(bundled-iconv-project + PREFIX ${ICONV_INSTALL_DIR} + URL URL ${BACKUP_STORAGE}/libiconv/libiconv-${ICONV_VERSION}.tar.gz + URL_MD5 ${ICONV_HASH} + CONFIGURE_COMMAND <SOURCE_DIR>/configure + CC=${CMAKE_C_COMPILER} + CFLAGS=${ICONV_CFLAGS} + CPPFLAGS=${ICONV_CPPFLAGS} + LDFLAGS=${ICONV_LDFLAGS} + + --prefix=<INSTALL_DIR> + --disable-shared + --enable-static + --with-gnu-ld + STEP_TARGETS download + BUILD_BYPRODUCTS ${ICONV_LIBRARY} +) + +add_library(bundled-iconv STATIC IMPORTED GLOBAL) +set_target_properties(bundled-iconv PROPERTIES IMPORTED_LOCATION + ${ICONV_LIBRARY}) +add_dependencies(bundled-iconv bundled-iconv-project) + +set(ICONV_FOUND TRUE) +set(ICONV_LIBRARIES ${ICONV_LIBRARY}) +set(ICONV_INCLUDE_DIRS ${ICONV_INCLUDE_DIR}) + +message(STATUS "Using bundled iconv") diff --git a/cmake/BuildICU.cmake b/cmake/BuildICU.cmake new file mode 100644 index 0000000000000000000000000000000000000000..4810a414537526609f2a540dc75bb38ae8d84d1c --- /dev/null +++ b/cmake/BuildICU.cmake @@ -0,0 +1,77 @@ +set(ICU_VERSION release-71-1/icu4c-71_1) +set(ICU_HASH e06ffc96f59762bd3c929b217445aaec) +set(ICU_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches) +set(ICU_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/icu) +set(ICU_INCLUDE_DIR ${ICU_INSTALL_DIR}/include) +set(ICU_I18N_LIBRARY ${ICU_INSTALL_DIR}/lib/libicui18n.a) +set(ICU_UC_LIBRARY ${ICU_INSTALL_DIR}/lib/libicuuc.a) +set(ICU_DATA_LIBRARY ${ICU_INSTALL_DIR}/lib/libicudata.a) +set(ICU_CFLAGS "${DEPENDENCY_CFLAGS} -O2") +set(ICU_CXXFLAGS "${DEPENDENCY_CXXFLAGS} -O2") +set(ICU_CPPFLAGS "") +set(ICU_LDFLAGS "") + +if(APPLE) + set(ICU_CFLAGS "${ICU_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(ICU_CXXFLAGS "${ICU_CXXFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(ICU_CPPFLAGS "${ICU_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") +endif() + +ExternalProject_Add(bundled-icu-project + PREFIX ${ICU_INSTALL_DIR} + URL https://github.com/unicode-org/icu/releases/download/${ICU_VERSION}-src.tgz + URL_MD5 ${ICU_HASH} + CONFIGURE_COMMAND <SOURCE_DIR>/source/configure + CC=${CMAKE_C_COMPILER} + CXX=${CMAKE_CXX_COMPILER} + CFLAGS=${ICU_CFLAGS} + CXXFLAGS=${ICU_CXXFLAGS} + CPPFLAGS=${ICU_CPPFLAGS} + LDFLAGS=${ICU_LDFLAGS} + + --with-data-packaging=static + --prefix=<INSTALL_DIR> + --disable-shared + --enable-static + --disable-renaming + --disable-tests + --disable-samples + INSTALL_COMMAND + $(MAKE) install && + ${CMAKE_COMMAND} -E touch <BINARY_DIR>/uconfig.h && + cat <BINARY_DIR>/uconfig.h.prepend <INSTALL_DIR>/include/unicode/uconfig.h >> <BINARY_DIR>/uconfig.h && + ${CMAKE_COMMAND} -E copy_if_different <BINARY_DIR>/uconfig.h <INSTALL_DIR>/include/unicode/uconfig.h + PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-45.patch" + COMMAND patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-59.patch" + COMMAND patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-61.patch" + COMMAND patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-96.patch" + BUILD_BYPRODUCTS ${ICU_I18N_LIBRARY} ${ICU_UC_LIBRARY} ${ICU_DATA_LIBRARY} +) + +add_library(bundled-icu-i18n STATIC IMPORTED GLOBAL) +set_target_properties(bundled-icu-i18n PROPERTIES IMPORTED_LOCATION + ${ICU_I18N_LIBRARY}) +add_dependencies(bundled-icu-i18n bundled-icu-project) + +add_library(bundled-icu-uc STATIC IMPORTED GLOBAL) +set_target_properties(bundled-icu-uc PROPERTIES IMPORTED_LOCATION + ${ICU_UC_LIBRARY}) +add_dependencies(bundled-icu-uc bundled-icu-project) + +add_library(bundled-icu-data STATIC IMPORTED GLOBAL) +set_target_properties(bundled-icu-data PROPERTIES IMPORTED_LOCATION + ${ICU_DATA_LIBRARY}) +add_dependencies(bundled-icu-data bundled-icu-project) + +add_custom_target(bundled-icu + DEPENDS bundled-icu-i18n bundled-icu-uc bundled-icu-data) + +set(ICU_FOUND TRUE) +set(ICU_ROOT ${ICU_INSTALL_DIR}) +set(ICU_LIBRARIES ${ICU_I18N_LIBRARY} ${ICU_UC_LIBRARY} ${ICU_DATA_LIBRARY} + ${CMAKE_DL_LIBS}) +set(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR}) + +set(HAVE_ICU_STRCOLLUTF TRUE) + +message(STATUS "Using bundled icu") diff --git a/cmake/BuildLibCURL.cmake b/cmake/BuildLibCURL.cmake index 4760d052719167504c85fb7208fe6c5ba9bcb519..410488403110fa18a91b3476d5569f4474c97f47 100644 --- a/cmake/BuildLibCURL.cmake +++ b/cmake/BuildLibCURL.cmake @@ -220,6 +220,14 @@ macro(curl_build) add_library(bundled-libcurl STATIC IMPORTED GLOBAL) set_target_properties(bundled-libcurl PROPERTIES IMPORTED_LOCATION ${LIBCURL_INSTALL_DIR}/lib/libcurl.a) + if (ENABLE_BUNDLED_ZLIB) + # Need to build zlib first + add_dependencies(bundled-libcurl-project bundled-zlib) + endif() + if (ENABLE_BUNDLED_OPENSSL) + # Need to build openssl first + add_dependencies(bundled-libcurl-project bundled-openssl) + endif() if (BUNDLED_LIBCURL_USE_ARES) # Need to build ares first add_dependencies(bundled-libcurl-project bundled-ares) diff --git a/cmake/BuildLibYAML.cmake b/cmake/BuildLibYAML.cmake index 2144b03f8512ae954edf912e4600a324fe151452..4a3fc4e5173b796f888a50e1152d0cae33df5fa5 100644 --- a/cmake/BuildLibYAML.cmake +++ b/cmake/BuildLibYAML.cmake @@ -24,6 +24,10 @@ macro(libyaml_build) BUILD_BYPRODUCTS ${LIBYAML_LIBRARY} ) + if(ENABLE_BUNDLED_ICU) + add_dependencies(bundled-libyaml-project bundled-icu) + endif() + add_library(bundled-libyaml STATIC IMPORTED GLOBAL) set_target_properties(bundled-libyaml PROPERTIES IMPORTED_LOCATION ${LIBYAML_LIBRARY}) diff --git a/cmake/BuildOpenSSL.cmake b/cmake/BuildOpenSSL.cmake new file mode 100644 index 0000000000000000000000000000000000000000..4c440e5692c2376bf22290da855dc79d0e367e25 --- /dev/null +++ b/cmake/BuildOpenSSL.cmake @@ -0,0 +1,57 @@ +set(OPENSSL_VERSION 1.1.1q) +set(OPENSSL_HASH c685d239b6a6e1bd78be45624c092f51) +set(OPENSSL_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches) +set(OPENSSL_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/openssl) +set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include) +set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a) +set(OPENSSL_SSL_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libssl.a) +set(OPENSSL_CFLAGS "${DEPENDENCY_CFLAGS} -O2") +set(OPENSSL_CPPFLAGS "") +set(OPENSSL_LDFLAGS "") + +if(APPLE) + set(OPENSSL_CFLAGS "${OPENSSL_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(OPENSSL_CPPFLAGS "${OPENSSL_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") +endif() + +ExternalProject_Add(bundled-openssl-project + PREFIX ${OPENSSL_INSTALL_DIR} + URL ${BACKUP_STORAGE}/openssl/openssl-${OPENSSL_VERSION}.tar.gz + URL_MD5 ${OPENSSL_HASH} + CONFIGURE_COMMAND <SOURCE_DIR>/config + CC=${CMAKE_C_COMPILER} + CXX=${CMAKE_CXX_COMPILER} + CFLAGS=${OPENSSL_CFLAGS} + CPPFLAGS=${OPENSSL_CPPFLAGS} + LDFLAGS=${OPENSSL_LDFLAGS} + + --prefix=<INSTALL_DIR> + --libdir=lib + no-shared + INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install_sw + PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-111q-gh-18720.patch" + COMMAND patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-tarantool-security-27.patch" + COMMAND patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-tarantool-security-54.patch" + COMMAND patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-tarantool-security-90.patch" + BUILD_BYPRODUCTS ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_SSL_LIBRARY} +) + +add_library(bundled-openssl-ssl STATIC IMPORTED GLOBAL) +set_target_properties(bundled-openssl-ssl PROPERTIES IMPORTED_LOCATION + ${OPENSSL_SSL_LIBRARY}) +add_dependencies(bundled-openssl-ssl bundled-openssl-project) + +add_library(bundled-openssl-crypto STATIC IMPORTED GLOBAL) +set_target_properties(bundled-openssl-crypto PROPERTIES IMPORTED_LOCATION + ${OPENSSL_CRYPTO_LIBRARY}) +add_dependencies(bundled-openssl-crypto bundled-openssl-project) + +add_custom_target(bundled-openssl + DEPENDS bundled-openssl-ssl bundled-openssl-crypto) + +set(OPENSSL_FOUND TRUE) +set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY} + ${CMAKE_DL_LIBS}) +set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR}) + +message(STATUS "Using bundled openssl") diff --git a/cmake/BuildReadline.cmake b/cmake/BuildReadline.cmake new file mode 100644 index 0000000000000000000000000000000000000000..1516efc491e66fdd03051e6149d27d086612f078 --- /dev/null +++ b/cmake/BuildReadline.cmake @@ -0,0 +1,104 @@ +set(NCURSES_VERSION 6.3-20220716) +set(NCURSES_HASH 2b7a0e31ebbd8144680f985d61f5bbd5) +set(NCURSES_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/ncurses) +set(NCURSES_LIBRARY ${NCURSES_INSTALL_DIR}/lib/libncurses.a) +set(NCURSES_TINFO_LIBRARY ${NCURSES_INSTALL_DIR}/lib/libtinfo.a) +set(NCURSES_CFLAGS "${DEPENDENCY_CFLAGS} -O2") +set(NCURSES_CXXFLAGS "${DEPENDENCY_CXXFLAGS} -O2") +set(NCURSES_CPPFLAGS "") +set(NCURSES_LDFLAGS "") + +set(READLINE_VERSION 8.0) +set(READLINE_HASH 7e6c1f16aee3244a69aba6e438295ca3) +set(READLINE_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches) +set(READLINE_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/readline) +set(READLINE_INCLUDE_DIR ${READLINE_INSTALL_DIR}/include) +set(READLINE_LIBRARY ${READLINE_INSTALL_DIR}/lib/libreadline.a) +set(READLINE_CFLAGS "${DEPENDENCY_CFLAGS} -O2") +set(READLINE_CPPFLAGS "") +set(READLINE_LDFLAGS "") + +if(APPLE) + set(NCURSES_CFLAGS "${NCURSES_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(NCURSES_CXXFLAGS "${NCURSES_CXXFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(NCURSES_CPPFLAGS "${NCURSES_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + + set(READLINE_CFLAGS "${READLINE_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(READLINE_CPPFLAGS "${READLINE_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") +endif() + +ExternalProject_Add(bundled-ncurses-project + PREFIX ${NCURSES_INSTALL_DIR} + URL ${BACKUP_STORAGE}/ncurses/ncurses-${NCURSES_VERSION}.tgz + URL_MD5 ${NCURSES_HASH} + CONFIGURE_COMMAND <SOURCE_DIR>/configure + CC=${CMAKE_C_COMPILER} + CXX=${CMAKE_CXX_COMPILER} + CFLAGS=${NCURSES_CFLAGS} + CXXFLAGS=${NCURSES_CXXFLAGS} + CPPFLAGS=${NCURSES_CPPFLAGS} + LDFLAGS=${NCURSES_LDFLAGS} + + --prefix=<INSTALL_DIR> + + # This flag enables creation of libcurses.a as a symlink to libncurses.a + # and disables subdir creation `ncurses` at <install_dir>/include. It is + # necessary for correct work of FindCurses.cmake module (this module is + # builtin at cmake package) which used in cmake/FindReadline.cmake + --enable-overwrite + + # enable building libtinfo to prevent linking with libtinfo from system + # directories + --with-termlib + + # set search paths for terminfo db + --with-terminfo-dirs=/lib/terminfo:/usr/share/terminfo:/etc/terminfo + + # disable install created terminfo db, use db from system + --disable-db-install + --without-progs + --without-manpages + BUILD_BYPRODUCTS ${NCURSES_LIBRARY} ${NCURSES_TINFO_LIBRARY} +) + +add_library(bundled-ncurses STATIC IMPORTED GLOBAL) +set_target_properties(bundled-ncurses PROPERTIES IMPORTED_LOCATION + ${NCURSES_LIBRARY}) +add_dependencies(bundled-ncurses bundled-ncurses-project) + +add_library(bundled-ncurses-tinfo STATIC IMPORTED GLOBAL) +set_target_properties(bundled-ncurses-tinfo PROPERTIES IMPORTED_LOCATION + ${NCURSES_TINFO_LIBRARY}) +add_dependencies(bundled-ncurses-tinfo bundled-ncurses-project) + +ExternalProject_Add(bundled-readline-project + PREFIX ${READLINE_INSTALL_DIR} + URL ${BACKUP_STORAGE}/readline/readline-${READLINE_VERSION}.tar.gz + URL_MD5 ${READLINE_HASH} + CONFIGURE_COMMAND <SOURCE_DIR>/configure + CC=${CMAKE_C_COMPILER} + CFLAGS=${READLINE_CFLAGS} + CPPFLAGS=${READLINE_CPPFLAGS} + LDFLAGS=${READLINE_LDFLAGS} + + --prefix=<INSTALL_DIR> + --disable-shared + PATCH_COMMAND patch -d <SOURCE_DIR> -p0 -i "${READLINE_PATCHES_DIR}/readline80-001.patch" + COMMAND patch -d <SOURCE_DIR> -p1 -i "${READLINE_PATCHES_DIR}/readline-tarantool-security-95.patch" + BUILD_BYPRODUCTS ${READLINE_LIBRARY} +) + +add_library(bundled-readline STATIC IMPORTED GLOBAL) +set_target_properties(bundled-readline PROPERTIES IMPORTED_LOCATION + ${READLINE_LIBRARY}) +add_dependencies(bundled-readline bundled-readline-project + bundled-ncurses bundled-ncurses-tinfo) + +set(READLINE_FOUND TRUE) +set(READLINE_LIBRARIES ${READLINE_LIBRARY} ${NCURSES_LIBRARY} + ${NCURSES_TINFO_LIBRARY}) +set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIR}) + +set(HAVE_GNU_READLINE TRUE) + +message(STATUS "Using bundled readline") diff --git a/cmake/BuildZLIB.cmake b/cmake/BuildZLIB.cmake new file mode 100644 index 0000000000000000000000000000000000000000..f813102ac0239bf283373a322cb36072433c5eee --- /dev/null +++ b/cmake/BuildZLIB.cmake @@ -0,0 +1,39 @@ +set(ZLIB_VERSION 1.2.12) +set(ZLIB_HASH 5fc414a9726be31427b440b434d05f78) +set(ZLIB_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/zlib) +set(ZLIB_INCLUDE_DIR ${ZLIB_INSTALL_DIR}/include) +set(ZLIB_LIBRARY ${ZLIB_INSTALL_DIR}/lib/libz.a) +set(ZLIB_CFLAGS "${DEPENDENCY_CFLAGS} -O2") +set(ZLIB_CPPFLAGS "") +set(ZLIB_LDFLAGS "") + +if(APPLE) + set(ZLIB_CFLAGS "${ZLIB_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") + set(ZLIB_CPPFLAGS "${ZLIB_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") +endif() + +ExternalProject_Add(bundled-zlib-project + PREFIX ${ZLIB_INSTALL_DIR} + URL ${BACKUP_STORAGE}/zlib/zlib-${ZLIB_VERSION}.tar.gz + URL_MD5 ${ZLIB_HASH} + CONFIGURE_COMMAND env + CC=${CMAKE_C_COMPILER} + CFLAGS=${ZLIB_CFLAGS} + CPPFLAGS=${ZLIB_CPPFLAGS} + LDFLAGS=${ZLIB_LDFLAGS} + <SOURCE_DIR>/configure + --prefix=<INSTALL_DIR> + --static + BUILD_BYPRODUCTS ${ZLIB_LIBRARY} +) + +add_library(bundled-zlib STATIC IMPORTED GLOBAL) +set_target_properties(bundled-zlib PROPERTIES IMPORTED_LOCATION + ${ZLIB_LIBRARY}) +add_dependencies(bundled-zlib bundled-zlib-project) + +set(ZLIB_FOUND TRUE) +set(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) +set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) + +message(STATUS "Using bundled zlib") diff --git a/cmake/FindLibUnwind.cmake b/cmake/FindLibUnwind.cmake index 5fb4f4a53e51357e25a68b7e3ff7a3b047f713c2..74b703910bd51b3ec5fcd522e25caf70b76dec37 100644 --- a/cmake/FindLibUnwind.cmake +++ b/cmake/FindLibUnwind.cmake @@ -70,7 +70,7 @@ if(BUILD_STATIC) endif() # Ditto, # https://github.com/libunwind/libunwind/blob/4feb1152d1c4aaafbb2d504dbe34c6db5b6fe9f2/configure.ac#L319-L334 - set(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARIES} ZLIB::ZLIB) + set(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARIES} ${ZLIB_LIBRARIES}) endif() if(PC_LIBUNWIND_VERSION) diff --git a/static-build/patches/icu-tarantool-security-45.patch b/patches/icu-tarantool-security-45.patch similarity index 100% rename from static-build/patches/icu-tarantool-security-45.patch rename to patches/icu-tarantool-security-45.patch diff --git a/static-build/patches/icu-tarantool-security-59.patch b/patches/icu-tarantool-security-59.patch similarity index 100% rename from static-build/patches/icu-tarantool-security-59.patch rename to patches/icu-tarantool-security-59.patch diff --git a/static-build/patches/icu-tarantool-security-61.patch b/patches/icu-tarantool-security-61.patch similarity index 100% rename from static-build/patches/icu-tarantool-security-61.patch rename to patches/icu-tarantool-security-61.patch diff --git a/static-build/patches/icu-tarantool-security-96.patch b/patches/icu-tarantool-security-96.patch similarity index 100% rename from static-build/patches/icu-tarantool-security-96.patch rename to patches/icu-tarantool-security-96.patch diff --git a/static-build/patches/openssl-111q-gh-18720.patch b/patches/openssl-111q-gh-18720.patch similarity index 100% rename from static-build/patches/openssl-111q-gh-18720.patch rename to patches/openssl-111q-gh-18720.patch diff --git a/static-build/patches/openssl-tarantool-security-27.patch b/patches/openssl-tarantool-security-27.patch similarity index 100% rename from static-build/patches/openssl-tarantool-security-27.patch rename to patches/openssl-tarantool-security-27.patch diff --git a/static-build/patches/openssl-tarantool-security-54.patch b/patches/openssl-tarantool-security-54.patch similarity index 100% rename from static-build/patches/openssl-tarantool-security-54.patch rename to patches/openssl-tarantool-security-54.patch diff --git a/static-build/patches/openssl-tarantool-security-90.patch b/patches/openssl-tarantool-security-90.patch similarity index 100% rename from static-build/patches/openssl-tarantool-security-90.patch rename to patches/openssl-tarantool-security-90.patch diff --git a/static-build/patches/readline-tarantool-security-95.patch b/patches/readline-tarantool-security-95.patch similarity index 100% rename from static-build/patches/readline-tarantool-security-95.patch rename to patches/readline-tarantool-security-95.patch diff --git a/static-build/patches/readline80-001.patch b/patches/readline80-001.patch similarity index 100% rename from static-build/patches/readline80-001.patch rename to patches/readline80-001.patch diff --git a/src/lib/coll/CMakeLists.txt b/src/lib/coll/CMakeLists.txt index c01e608bb108d0b036f780a47edb912e370b73ee..de007e9755948eaf1e8e5a9e6228587e97d1f0b3 100644 --- a/src/lib/coll/CMakeLists.txt +++ b/src/lib/coll/CMakeLists.txt @@ -1,2 +1,6 @@ add_library(coll STATIC coll.c coll_def.c) target_link_libraries(coll core ${ICU_LIBRARIES}) + +if (ENABLE_BUNDLED_ICU) + add_dependencies(coll bundled-icu) +endif() diff --git a/src/lib/core/CMakeLists.txt b/src/lib/core/CMakeLists.txt index 233e4f071454ec0a3e4d634320f1ff093b6c51dd..8d3630cb037cff64c42cdb9c27000c6e0ab6b21d 100644 --- a/src/lib/core/CMakeLists.txt +++ b/src/lib/core/CMakeLists.txt @@ -89,6 +89,14 @@ if (ENABLE_BACKTRACE) endif() endif() +if (ENABLE_BUNDLED_OPENSSL) + add_dependencies(core bundled-openssl) +endif() + +if (ENABLE_BUNDLED_ICU) + add_dependencies(core bundled-icu) +endif() + if (ENABLE_TUPLE_COMPRESSION) target_link_libraries(core ${ZSTD_LIBRARIES}) endif() diff --git a/src/lib/crypto/CMakeLists.txt b/src/lib/crypto/CMakeLists.txt index 4e2e5e403605f1903c50c7ca0bb943aea5fbc08a..afdac0891e863a18b23c94f2d8e5b967b122b1a3 100644 --- a/src/lib/crypto/CMakeLists.txt +++ b/src/lib/crypto/CMakeLists.txt @@ -3,3 +3,7 @@ set(lib_sources crypto.c) set_source_files_compile_flags(${lib_sources}) add_library(crypto STATIC ${lib_sources}) target_link_libraries(crypto ${OPENSSL_LIBRARIES} core) + +if (ENABLE_BUNDLED_OPENSSL) + add_dependencies(crypto bundled-openssl) +endif() diff --git a/src/lib/json/CMakeLists.txt b/src/lib/json/CMakeLists.txt index 4462ee2d7043ecfaa41b053929b96214484acce8..8af6b357b425faa2c4cb1ef255c9cdc2e38a2183 100644 --- a/src/lib/json/CMakeLists.txt +++ b/src/lib/json/CMakeLists.txt @@ -5,3 +5,7 @@ set(lib_sources set_source_files_compile_flags(${lib_sources}) add_library(json STATIC ${lib_sources}) target_link_libraries(json misc) + +if (ENABLE_BUNDLED_ICU) + add_dependencies(json bundled-icu) +endif() diff --git a/static-build/CMakeLists.txt b/static-build/CMakeLists.txt index b53239326cb864710839c678dcb2bb3dbf875a7a..c7600e9e3dc2fbf16d578b5b5ec93228d692b372 100644 --- a/static-build/CMakeLists.txt +++ b/static-build/CMakeLists.txt @@ -7,6 +7,5 @@ cmake_minimum_required(VERSION 3.1) # linux machine). project(tarantool-static C CXX) -include(cmake/AddDependencyProjects.cmake) include(cmake/AddTarantoolProject.cmake) include(cmake/AddTests.cmake) diff --git a/static-build/cmake/AddDependencyProjects.cmake b/static-build/cmake/AddDependencyProjects.cmake deleted file mode 100644 index 80bc2d97a4148598bec56164791c4fa2648b179f..0000000000000000000000000000000000000000 --- a/static-build/cmake/AddDependencyProjects.cmake +++ /dev/null @@ -1,252 +0,0 @@ -include(CheckLibraryExists) -include(CheckCSourceCompiles) -include(FindPackageMessage) -include(ExternalProject) - -include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/os.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/profile.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/hardening.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/prefix.cmake) - -set(LIBICU_VERSION release-71-1/icu4c-71_1) -set(LIBICU_HASH e06ffc96f59762bd3c929b217445aaec) -set(LIBICONV_VERSION 1.17) -set(LIBICONV_HASH d718cd5a59438be666d1575855be72c3) -set(OPENSSL_VERSION 1.1.1q) -set(OPENSSL_HASH c685d239b6a6e1bd78be45624c092f51) -set(ZLIB_VERSION 1.2.12) -set(ZLIB_HASH 5fc414a9726be31427b440b434d05f78) -set(NCURSES_VERSION 6.3-20220716) -set(NCURSES_HASH 2b7a0e31ebbd8144680f985d61f5bbd5) -set(READLINE_VERSION 8.0) -set(READLINE_HASH 7e6c1f16aee3244a69aba6e438295ca3) -set(BACKUP_STORAGE https://distrib.hb.vkcs.cloud) - -# Pass -isysroot=<SDK_PATH> option on Mac OS to a preprocessor and a C -# compiler to find header files installed with an SDK. -# -# The idea is to set these (DEPENDENCY_*) variables to corresponding -# environment variables at each dependency configure script. -# -# Note: Passing of CPPFLAGS / CFLAGS explicitly discards using of -# corresponding environment variables. So pass empty LDFLAGS to discard -# using of corresponding environment variable. It is possible that a -# linker flag assumes that some compilation flag is set. We don't pass -# CFLAGS from environment, so we should not do it for LDFLAGS too. -# -# Note: A configure script generated by autoconf doesn't enable compiler -# optimizations if CFLAGS / CXXFLAGS is set so we have to enable them -# explicitly, see https://github.com/tarantool/tarantool/issues/8606 -# -set(DEPENDENCY_CFLAGS "-O2") -set(DEPENDENCY_CXXFLAGS "-O2") -set(DEPENDENCY_CPPFLAGS "") -set(DEPENDENCY_LDFLAGS "") - -if (APPLE) - set(DEPENDENCY_CFLAGS "${DEPENDENCY_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") - set(DEPENDENCY_CXXFLAGS "${DEPENDENCY_CXXFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") - set(DEPENDENCY_CPPFLAGS "${DEPENDENCY_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") -endif() - -set(DEPENDENCY_CFLAGS "${DEPENDENCY_CFLAGS} ${HARDENING_FLAGS}") -set(DEPENDENCY_CXXFLAGS "${DEPENDENCY_CXXFLAGS} ${HARDENING_FLAGS}") -set(DEPENDENCY_LDFLAGS "${DEPENDENCY_LDFLAGS} ${HARDENING_LDFLAGS}") - -set(DEPENDENCY_CFLAGS "${DEPENDENCY_CFLAGS} ${PREFIX_MAP_FLAGS}") -set(DEPENDENCY_CXXFLAGS "${DEPENDENCY_CXXFLAGS} ${PREFIX_MAP_FLAGS}") - -set(PATCHES_DIR "${CMAKE_CURRENT_LIST_DIR}/../patches") - -# Install all libraries required by tarantool at current build dir - -# -# OpenSSL -# -# Patched to build on Mac OS. See -# https://github.com/openssl/openssl/issues/18720 -# -ExternalProject_Add(openssl - URL ${BACKUP_STORAGE}/openssl/openssl-${OPENSSL_VERSION}.tar.gz - URL_MD5 ${OPENSSL_HASH} - CONFIGURE_COMMAND <SOURCE_DIR>/config - CC=${CMAKE_C_COMPILER} - CXX=${CMAKE_CXX_COMPILER} - CFLAGS=${DEPENDENCY_CFLAGS} - CPPFLAGS=${DEPENDENCY_CPPFLAGS} - LDFLAGS=${DEPENDENCY_LDFLAGS} - - --prefix=<INSTALL_DIR> - --libdir=lib - no-shared - INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install_sw - PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-111q-gh-18720.patch" - COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-tarantool-security-27.patch" - COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-tarantool-security-54.patch" - COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-tarantool-security-90.patch" -) -set(TARANTOOL_DEPENDS openssl ${TARANTOOL_DEPENDS}) - -# -# ICU -# -ExternalProject_Add(icu - URL https://github.com/unicode-org/icu/releases/download/${LIBICU_VERSION}-src.tgz - URL_MD5 ${LIBICU_HASH} - # By default libicu is built by using clang/clang++ compiler (if it - # exists). Here is a link for detecting compilers at libicu configure - # script: https://github.com/unicode-org/icu/blob/7c7b8bd5702310b972f888299169bc3cc88bf0a6/icu4c/source/configure.ac#L135 - # This will cause the problem on linux machine: tarantool is built - # with gcc/g++ and libicu is built with clang/clang++ (if it exists) - # so at linking stage `rellocation` errors will occur. To solve this, - # we can set CC/CXX to CMAKE_C_COMPILER/CMAKE_CXX_COMPILER variables - # manually which are detected above (by cmake `project()` command) - CONFIGURE_COMMAND <SOURCE_DIR>/source/configure - CC=${CMAKE_C_COMPILER} - CXX=${CMAKE_CXX_COMPILER} - CFLAGS=${DEPENDENCY_CFLAGS} - CXXFLAGS=${DEPENDENCY_CXXFLAGS} - CPPFLAGS=${DEPENDENCY_CPPFLAGS} - LDFLAGS=${DEPENDENCY_LDFLAGS} - - --with-data-packaging=static - --prefix=<INSTALL_DIR> - --disable-shared - --enable-static - --disable-renaming - --disable-tests - --disable-samples - INSTALL_COMMAND - $(MAKE) install && - ${CMAKE_COMMAND} -E touch <BINARY_DIR>/uconfig.h && - cat <BINARY_DIR>/uconfig.h.prepend <INSTALL_DIR>/include/unicode/uconfig.h >> <BINARY_DIR>/uconfig.h && - ${CMAKE_COMMAND} -E copy_if_different <BINARY_DIR>/uconfig.h <INSTALL_DIR>/include/unicode/uconfig.h - PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-45.patch" - COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-59.patch" - COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-61.patch" - COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-96.patch" -) -set(TARANTOOL_DEPENDS icu ${TARANTOOL_DEPENDS}) - -# -# ZLIB -# -ExternalProject_Add(zlib - URL ${BACKUP_STORAGE}/zlib/zlib-${ZLIB_VERSION}.tar.gz - URL_MD5 ${ZLIB_HASH} - CONFIGURE_COMMAND env - CC=${CMAKE_C_COMPILER} - CFLAGS=${DEPENDENCY_CFLAGS} - CPPFLAGS=${DEPENDENCY_CPPFLAGS} - LDFLAGS=${DEPENDENCY_LDFLAGS} - <SOURCE_DIR>/configure - --prefix=<INSTALL_DIR> - --static -) -set(TARANTOOL_DEPENDS zlib ${TARANTOOL_DEPENDS}) - -# -# Ncurses -# -ExternalProject_Add(ncurses - URL ${BACKUP_STORAGE}/ncurses/ncurses-${NCURSES_VERSION}.tgz - URL_MD5 ${NCURSES_HASH} - CONFIGURE_COMMAND <SOURCE_DIR>/configure - CC=${CMAKE_C_COMPILER} - CXX=${CMAKE_CXX_COMPILER} - CFLAGS=${DEPENDENCY_CFLAGS} - CPPFLAGS=${DEPENDENCY_CPPFLAGS} - CXXFLAGS=${DEPENDENCY_CXXFLAGS} - LDFLAGS=${DEPENDENCY_LDFLAGS} - - --prefix=<INSTALL_DIR> - - # This flag enables creation of libcurses.a as a symlink to libncurses.a - # and disables subdir creation `ncurses` at <install_dir>/include. It is - # necessary for correct work of FindCurses.cmake module (this module is - # builtin at cmake package) which used in cmake/FindReadline.cmake - --enable-overwrite - - # enable building libtinfo to prevent linking with libtinfo from system - # directories - --with-termlib - - # set search paths for terminfo db - --with-terminfo-dirs=/lib/terminfo:/usr/share/terminfo:/etc/terminfo - - # disable install created terminfo db, use db from system - --disable-db-install - --without-progs - --without-manpages -) -set(TARANTOOL_DEPENDS ncurses ${TARANTOOL_DEPENDS}) - -# -# ReadLine -# -# Patched to fix file descriptor leak with zero-length history file. -# -ExternalProject_Add(readline - URL ${BACKUP_STORAGE}/readline/readline-${READLINE_VERSION}.tar.gz - URL_MD5 ${READLINE_HASH} - CONFIGURE_COMMAND <SOURCE_DIR>/configure - CC=${CMAKE_C_COMPILER} - CFLAGS=${DEPENDENCY_CFLAGS} - CPPFLAGS=${DEPENDENCY_CPPFLAGS} - LDFLAGS=${DEPENDENCY_LDFLAGS} - - --prefix=<INSTALL_DIR> - --disable-shared - PATCH_COMMAND patch -d <SOURCE_DIR> -p0 -i "${PATCHES_DIR}/readline80-001.patch" - COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/readline-tarantool-security-95.patch" -) -set(TARANTOOL_DEPENDS readline ${TARANTOOL_DEPENDS}) - -# -# ICONV -# -if (APPLE) - ExternalProject_Add(iconv - URL URL ${BACKUP_STORAGE}/libiconv/libiconv-${LIBICONV_VERSION}.tar.gz - URL_MD5 ${LIBICONV_HASH} - CONFIGURE_COMMAND <SOURCE_DIR>/configure - CC=${CMAKE_C_COMPILER} - CFLAGS=${DEPENDENCY_CFLAGS} - CPPFLAGS=${DEPENDENCY_CPPFLAGS} - LDFLAGS=${DEPENDENCY_LDFLAGS} - - --prefix=<INSTALL_DIR> - --disable-shared - --enable-static - --with-gnu-ld - STEP_TARGETS download - ) -else() - # In linux iconv is embedded into glibc - # So we find system header and copy it locally - find_path(ICONV_INCLUDE_DIR iconv.h) - if(NOT ICONV_INCLUDE_DIR) - message(FATAL_ERROR "iconv include header not found") - endif() - - set(ICONV_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/iconv-prefix") - - add_custom_command( - OUTPUT "${ICONV_INSTALL_PREFIX}/include/iconv.h" - COMMAND ${CMAKE_COMMAND} -E make_directory - "${ICONV_INSTALL_PREFIX}/include" - COMMAND ${CMAKE_COMMAND} -E copy - "${ICONV_INCLUDE_DIR}/iconv.h" - "${ICONV_INSTALL_PREFIX}/include/iconv.h" - ) - add_custom_target(iconv - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/iconv-prefix/include/iconv.h" - ) - # This is a hack for further getting install directory of library - # by ExternalProject_Get_Property - set_target_properties(iconv - PROPERTIES _EP_INSTALL_DIR ${ICONV_INSTALL_PREFIX} - ) -endif() - -set(TARANTOOL_DEPENDS iconv ${TARANTOOL_DEPENDS}) diff --git a/static-build/cmake/AddTarantoolProject.cmake b/static-build/cmake/AddTarantoolProject.cmake index 23a33d8d5a94d0cd6b224c41a0ebe18dfd85b0ba..cd52881930e37f8ced616d083876aef0b92a39c8 100644 --- a/static-build/cmake/AddTarantoolProject.cmake +++ b/static-build/cmake/AddTarantoolProject.cmake @@ -1,10 +1,4 @@ -# Get install directories of built libraries for building -# tarantool with custom CMAKE_PREFIX_PATH -foreach(proj IN LISTS TARANTOOL_DEPENDS) - ExternalProject_Get_Property(${proj} install_dir) - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}:${install_dir}) - message(STATUS "Add external project ${proj} in ${install_dir}") -endforeach() +include(ExternalProject) ExternalProject_Add(tarantool DEPENDS ${TARANTOOL_DEPENDS} @@ -15,9 +9,8 @@ ExternalProject_Add(tarantool # https://cmake.org/cmake/help/v3.4/module/GNUInstallDirs.html#special-cases -DCMAKE_INSTALL_LOCALSTATEDIR=<INSTALL_DIR>/var -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> - -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DOPENSSL_USE_STATIC_LIBS=TRUE - -DBUILD_STATIC=TRUE + -DBUILD_STATIC_WITH_BUNDLED_LIBS=TRUE -DENABLE_DIST=TRUE -DENABLE_HARDENING=${ENABLE_HARDENING} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}