Skip to content

Commit

Permalink
Add zlib vendoring
Browse files Browse the repository at this point in the history
Signed-off-by: Petr Shumilov <[email protected]>
  • Loading branch information
PetrShumilov committed Feb 18, 2025
1 parent 1fc7f06 commit fe56929
Show file tree
Hide file tree
Showing 18 changed files with 159 additions and 43 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ jobs:
- name: Setup Environment
run: |
echo "-------------"
xcrun --sdk macosx --show-sdk-path
echo $(xcrun --sdk macosx --show-sdk-path)
brew tap shivammathur/php
brew update
brew install [email protected] re2c cmake coreutils libiconv re2 pcre yaml-cpp zstd googletest shivammathur/php/[email protected]
Expand Down
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ include(cmake/external-libraries.cmake)
include(cmake/init-compilation-flags.cmake)
include(cmake/popular-common.cmake)

# OpenSSL building
# Common third-parties build
include(${THIRD_PARTY_DIR}/zlib-cmake/zlib.cmake)
include(${THIRD_PARTY_DIR}/openssl-cmake/openssl.cmake)

# TODO: use FetchContent_Declare instead of include_directories
Expand Down
2 changes: 1 addition & 1 deletion common/common-tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ prepend(COMMON_TESTS_SOURCES ${COMMON_DIR}/
ucontext/ucontext-portable-test.cpp)

prepare_cross_platform_libs(COMMON_TESTS_LIBS zstd)
set(COMMON_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${COMMON_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto z)
set(COMMON_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${COMMON_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto ZLIB::ZLIB_NO_PIC)
vk_add_unittest(common "${COMMON_TESTS_LIBS}" ${COMMON_TESTS_SOURCES})
2 changes: 2 additions & 0 deletions common/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,5 @@ if(COMPILER_CLANG)
endif()

vk_add_library(common_src OBJECT ${COMMON_ALL_SOURCES})
target_include_directories(common_src PUBLIC ${ZLIB_INCLUDE_DIRS})
add_dependencies(common_src openssl zlib-no-pic)
2 changes: 1 addition & 1 deletion common/kfs/kfs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <zlib.h>
#include "zlib/zlib.h"
#include <zstd.h>

#include "common/binlog/kdb-binlog-common.h"
Expand Down
8 changes: 4 additions & 4 deletions compiler/compiler-settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,8 @@ void append_if_doesnt_contain(std::string &ld_flags, const T &libs, vk::string_v
}
}

void append_3dparty_headers(std::string &cxx_flags, const std::string &path_to_3dparty, const std::string &libname) noexcept {
cxx_flags += " -I" + path_to_3dparty + "include/" + libname;
void append_3dparty_headers(std::string &cxx_flags, const std::string &path_to_3dparty) noexcept {
cxx_flags += " -I" + path_to_3dparty + "include/";
}

void append_3dparty_lib(std::string &ld_flags, const std::string &path_to_3dparty, const std::string &libname) noexcept {
Expand All @@ -159,7 +159,6 @@ void append_curl([[maybe_unused]] std::string &cxx_flags, std::string &ld_flags,
ld_flags += " -lcurl";
#else
// TODO make it as an option?
append_3dparty_headers(cxx_flags, path_to_3dparty, "curl");
append_3dparty_lib(ld_flags, path_to_3dparty, "curl");
#endif
}
Expand Down Expand Up @@ -364,6 +363,8 @@ void CompilerSettings::init() {

auto third_party_path = kphp_src_path.get() + "objs/";

append_3dparty_headers(cxx_default_flags, third_party_path);

ld_flags.value_ = extra_ld_flags.get();
append_curl(cxx_default_flags, ld_flags.value_, third_party_path);
append_apple_options(cxx_default_flags, ld_flags.value_);
Expand Down Expand Up @@ -423,7 +424,6 @@ void CompilerSettings::init() {
system_installed_dynamic_libs.emplace_back("rt");
#endif

append_3dparty_headers(cxx_default_flags, third_party_path, "openssl");
append_3dparty_lib(ld_flags.value_, third_party_path, "ssl");
append_3dparty_lib(ld_flags.value_, third_party_path, "crypto");

Expand Down
2 changes: 1 addition & 1 deletion net/net-tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ prepend(NET_TESTS_SOURCES ${BASE_DIR}/net/
time-slice-test.cpp)

prepare_cross_platform_libs(NET_TESTS_LIBS zstd)
set(NET_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${NET_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto z)
set(NET_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${NET_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto ZLIB::ZLIB_NO_PIC)
vk_add_unittest(net "${NET_TESTS_LIBS}" ${NET_TESTS_SOURCES})
5 changes: 2 additions & 3 deletions runtime-light/runtime-light.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# prepare third-parties
update_git_submodule(${THIRD_PARTY_DIR}/abseil-cpp "--recursive")
update_git_submodule(${THIRD_PARTY_DIR}/pcre2 "--recursive")
update_git_submodule(${THIRD_PARTY_DIR}/zlib "--recursive")
include(${THIRD_PARTY_DIR}/abseil-cpp-cmake/abseil-cpp.cmake)
include(${THIRD_PARTY_DIR}/pcre2-cmake/pcre2.cmake)
include(${THIRD_PARTY_DIR}/zlib-cmake/zlib.cmake)

set(THIRD_PARTY_INCLUDE -I${OBJS_DIR}/include -I${THIRD_PARTY_DIR}
-I${THIRD_PARTY_DIR}/abseil-cpp)
Expand Down Expand Up @@ -54,8 +52,9 @@ string(JOIN " " ABSEIL_LIBS ${ABSEIL_LIBS})
set_property(
TARGET runtime-light
PROPERTY RUNTIME_LINK_LIBS
"${ABSEIL_LIBS} ${ZLIB_LIB_DIR}/libz.a ${PCRE2_LIB_DIR}/libpcre2-8.a"
"${ABSEIL_LIBS} ${ZLIB_PIC_LIBRARIES} ${PCRE2_LIB_DIR}/libpcre2-8.a"
)
add_dependencies(runtime-light zlib-pic)

if(APPLE)
target_link_options(runtime-light PUBLIC -undefined dynamic_lookup)
Expand Down
7 changes: 4 additions & 3 deletions runtime/runtime.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -139,13 +139,13 @@ allow_deprecated_declarations(${BASE_DIR}/runtime/allocator.cpp ${BASE_DIR}/runt
allow_deprecated_declarations_for_apple(${BASE_DIR}/runtime/inter-process-mutex.cpp)

vk_add_library(kphp_runtime OBJECT ${KPHP_RUNTIME_ALL_SOURCES})
target_include_directories(kphp_runtime PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${CURL_INCLUDE_DIR})
target_include_directories(kphp_runtime PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS})

add_dependencies(kphp_runtime kphp-timelib curl)
add_dependencies(curl openssl)
add_dependencies(curl openssl zlib-no-pic)

prepare_cross_platform_libs(RUNTIME_LIBS yaml-cpp re2 zstd h3) # todo: linking between static libs is no-op, is this redundant? do we need to add mysqlclient here?
set(RUNTIME_LIBS vk::kphp_runtime vk::kphp_server vk::runtime-common vk::popular_common vk::unicode vk::common_src vk::binlog_src vk::net_src ${RUNTIME_LIBS} CURL::curl OpenSSL::SSL OpenSSL::Crypto m z pthread)
set(RUNTIME_LIBS vk::kphp_runtime vk::kphp_server vk::runtime-common vk::popular_common vk::unicode vk::common_src vk::binlog_src vk::net_src ${RUNTIME_LIBS} CURL::curl OpenSSL::SSL OpenSSL::Crypto m ZLIB::ZLIB_NO_PIC pthread)
vk_add_library(kphp-full-runtime STATIC)
target_link_libraries(kphp-full-runtime PUBLIC ${RUNTIME_LIBS})
set_target_properties(kphp-full-runtime PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${OBJS_DIR})
Expand Down Expand Up @@ -188,6 +188,7 @@ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/php_lib_version.cpp
]])

add_library(php_lib_version_j OBJECT ${CMAKE_CURRENT_BINARY_DIR}/php_lib_version.cpp)
target_include_directories(php_lib_version_j PUBLIC ${ZLIB_INCLUDE_DIRS})
target_compile_options(php_lib_version_j PRIVATE -I. -E)
add_dependencies(php_lib_version_j kphp-full-runtime)

Expand Down
2 changes: 1 addition & 1 deletion runtime/zlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#pragma once

#include <zlib.h>
#include "zlib/zlib.h"

#include "common/wrappers/string_view.h"

Expand Down
22 changes: 14 additions & 8 deletions third-party/curl-cmake/curl.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl/install)
file(MAKE_DIRECTORY ${CURL_BUILD_DIR})
file(MAKE_DIRECTORY ${CURL_INSTALL_DIR})

set(CURL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -Wno-deprecated-declarations")
set(CURL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -static -Wno-deprecated-declarations")
# Suppress compiler-specific warnings caused by -O3
if(COMPILER_CLANG)
set(CURL_COMPILE_FLAGS "${CURL_COMPILE_FLAGS} -Wno-string-plus-int")
Expand All @@ -34,36 +34,42 @@ set(CURL_CMAKE_ARGS
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
-DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES}
-DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
-DCURL_ZLIB=ON
-DZLIB_FOUND=ON
-DCURL_SPECIAL_LIBZ=ON
-DZLIB_ROOT=${ZLIB_NO_PIC_ROOT}
-DZLIB_LIBRARIES=${ZLIB_NO_PIC_LIBRARIES}
-DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIRS}
-DCMAKE_C_FLAGS=${CURL_COMPILE_FLAGS}
-DCURL_TEST=Off
-DCMAKE_POSITION_INDEPENDENT_CODE=OFF
)

ExternalProject_Add(
curl
DEPENDS openssl
DEPENDS openssl zlib-no-pic
PREFIX ${CURL_BUILD_DIR}
SOURCE_DIR ${CURL_SOURCE_DIR}
INSTALL_DIR ${CURL_INSTALL_DIR}
BUILD_BYPRODUCTS ${CURL_INSTALL_DIR}/lib/libcurl.a
CONFIGURE_COMMAND
COMMAND ${CMAKE_COMMAND} ${CURL_CMAKE_ARGS} -S ${CURL_SOURCE_DIR} -B ${CURL_BUILD_DIR}
COMMAND ${CMAKE_COMMAND} ${CURL_CMAKE_ARGS} -S ${CURL_SOURCE_DIR} -B ${CURL_BUILD_DIR} -Wno-dev
BUILD_COMMAND
COMMAND ${CMAKE_COMMAND} --build ${CURL_BUILD_DIR} --config $<CONFIG>
COMMAND ${CMAKE_COMMAND} --build ${CURL_BUILD_DIR} --config $<CONFIG> -j
INSTALL_COMMAND
COMMAND ${CMAKE_COMMAND} --install ${CURL_BUILD_DIR} --prefix ${CURL_INSTALL_DIR} --config $<CONFIG>
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CURL_INSTALL_DIR}/include ${INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CURL_INSTALL_DIR}/lib/libcurl.a ${LIB_DIR}
BUILD_IN_SOURCE 0
)

set(CURL_INCLUDE_DIR ${CURL_INSTALL_DIR}/include)
set(CURL_INCLUDE_DIRS ${CURL_INSTALL_DIR}/include)
# Ensure the include directory exists
file(MAKE_DIRECTORY ${CURL_INCLUDE_DIR})
file(MAKE_DIRECTORY ${CURL_INCLUDE_DIRS})

add_library(CURL::curl STATIC IMPORTED)
set_target_properties(CURL::curl PROPERTIES
IMPORTED_LOCATION ${CURL_INSTALL_DIR}/lib/libcurl.a
INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIR}
INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS}
)

# Set variables indicating that curl has been installed
Expand Down
8 changes: 4 additions & 4 deletions third-party/openssl-cmake/openssl.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ set(OPENSSL_PATCH_SERIES ${OPENSSL_BUILD_DIR}/debian/patches/series)
file(MAKE_DIRECTORY ${OPENSSL_BUILD_DIR})
file(MAKE_DIRECTORY ${OPENSSL_INSTALL_DIR})

set(OPENSSL_COMPILE_FLAGS "$ENV{CFLAGS} -g0")
set(OPENSSL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -static")

# The configuration has been based on:
# https://packages.debian.org/buster/libssl1.1
Expand All @@ -35,11 +35,11 @@ ExternalProject_Add(
COMMAND ${CMAKE_COMMAND} -E copy_directory ${OPENSSL_SOURCE_DIR} ${OPENSSL_BUILD_DIR}
COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${OPENSSL_BUILD_DIR} -DPATCH_SERIES=${OPENSSL_PATCH_SERIES} -DPATCH_DIR=${OPENSSL_PATCH_DIR} -P ../../cmake/apply_patches.cmake
CONFIGURE_COMMAND
COMMAND ./config --prefix=${OPENSSL_INSTALL_DIR} --openssldir=/usr/lib/ssl no-shared no-pic no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-tests ${OPENSSL_CONFIGURE_EXTRA_OPTION}
COMMAND ${CMAKE_COMMAND} -E env CC=${CMAKE_C_COMPILER} CFLAGS=${OPENSSL_COMPILE_FLAGS} ./config --prefix=${OPENSSL_INSTALL_DIR} --openssldir=/usr/lib/ssl no-shared no-pic no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-tests ${OPENSSL_CONFIGURE_EXTRA_OPTION}
BUILD_COMMAND
COMMAND ${CMAKE_COMMAND} -E env CFLAGS=${OPENSSL_COMPILE_FLAGS} make
COMMAND make build_libs -j
INSTALL_COMMAND
COMMAND make install_sw
COMMAND make install_dev
COMMAND ${CMAKE_COMMAND} -E copy_directory ${OPENSSL_INSTALL_DIR}/include ${INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${LIB_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a ${LIB_DIR}
Expand Down
2 changes: 1 addition & 1 deletion third-party/zlib
Submodule zlib updated 86 files
+0 −208 .github/workflows/c-std.yml
+4 −13 .github/workflows/cmake.yml
+4 −4 .github/workflows/configure.yml
+1 −1 .github/workflows/fuzz.yml
+0 −1 .gitignore
+4 −9 CMakeLists.txt
+0 −3 ChangeLog
+1 −1 FAQ
+1 −1 LICENSE
+5 −7 Makefile.in
+4 −2 README
+7 −9 configure
+1 −1 contrib/ada/readme.txt
+1 −1 contrib/delphi/ZLib.pas
+1 −1 contrib/dotzlib/DotZLib/UnitTests.cs
+574 −574 contrib/gcc_gvmat64/gvmat64.S
+12 −12 contrib/infback9/infback9.c
+2 −2 contrib/infback9/inftree9.c
+4 −12 contrib/minizip/Makefile
+2 −2 contrib/minizip/configure.ac
+0 −57 contrib/minizip/ints.h
+31 −4 contrib/minizip/ioapi.h
+4 −12 contrib/minizip/iowin32.c
+1 −1 contrib/minizip/make_vms.com
+8 −8 contrib/minizip/miniunz.c
+7 −10 contrib/minizip/minizip.c
+1 −1 contrib/minizip/minizip.pc.in
+29 −32 contrib/minizip/mztools.c
+0 −361 contrib/minizip/skipset.h
+6 −2 contrib/minizip/unzip.c
+0 −4 contrib/minizip/unzip.h
+4 −247 contrib/minizip/zip.c
+9 −15 contrib/minizip/zip.h
+1 −1 contrib/nuget/nuget.csproj
+1 −1 contrib/pascal/zlibpas.pas
+0 −4 contrib/puff/pufftest.c
+1 −1 contrib/vstudio/readme.txt
+3 −3 contrib/vstudio/vc10/zlib.rc
+4 −7 contrib/vstudio/vc10/zlibvc.def
+3 −3 contrib/vstudio/vc11/zlib.rc
+4 −7 contrib/vstudio/vc11/zlibvc.def
+3 −3 contrib/vstudio/vc12/zlib.rc
+4 −7 contrib/vstudio/vc12/zlibvc.def
+3 −3 contrib/vstudio/vc14/zlib.rc
+4 −7 contrib/vstudio/vc14/zlibvc.def
+3 −3 contrib/vstudio/vc17/zlib.rc
+158 −161 contrib/vstudio/vc17/zlibvc.def
+3 −3 contrib/vstudio/vc9/zlib.rc
+4 −7 contrib/vstudio/vc9/zlibvc.def
+11 −24 deflate.c
+0 −3 deflate.h
+12 −12 examples/enough.c
+9 −9 examples/gun.c
+0 −4 examples/gznorm.c
+0 −4 examples/zpipe.c
+97 −114 examples/zran.c
+4 −6 examples/zran.h
+29 −30 gzguts.h
+13 −16 gzlib.c
+1 −2 gzread.c
+12 −12 infback.c
+4 −4 inffast.c
+22 −22 inflate.c
+1 −1 inflate.h
+2 −2 inftrees.c
+1 −1 msdos/Makefile.dj2
+1 −1 old/Makefile.riscos
+1 −1 os400/README400
+0 −6 os400/bndsrc
+3 −7 os400/zlib.inc
+6 −6 qnx/package.qpg
+1 −7 test/example.c
+5 −5 test/infcover.c
+33 −44 test/minigzip.c
+2 −2 treebuild.xml
+1 −3 trees.c
+1 −1 win32/DLL_FAQ.txt
+2 −2 win32/README-WIN32.txt
+0 −1 win32/zlib.def
+16 −17 zconf.h
+16 −17 zconf.h.cmakein
+16 −17 zconf.h.in
+3 −3 zlib.3
+19 −34 zlib.h
+0 −4 zlib.map
+7 −10 zutil.h
47 changes: 47 additions & 0 deletions third-party/zlib-cmake/zlib-no-pic.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
set(ZLIB_NO_PIC_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/zlib-no-pic/build)
set(ZLIB_NO_PIC_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/zlib-no-pic/install)
# Ensure the build and installation directories exists
file(MAKE_DIRECTORY ${ZLIB_NO_PIC_BUILD_DIR})
file(MAKE_DIRECTORY ${ZLIB_NO_PIC_INSTALL_DIR})

# For further optional differences
if(COMPILE_RUNTIME_LIGHT)
set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fno-pic -static")
else ()
set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fno-pic -static")
endif()

ExternalProject_Add(
zlib-no-pic
PREFIX ${ZLIB_NO_PIC_BUILD_DIR}
SOURCE_DIR ${ZLIB_SOURCE_DIR}
INSTALL_DIR ${ZLIB_NO_PIC_INSTALL_DIR}
BINARY_DIR ${ZLIB_NO_PIC_BUILD_DIR}
BUILD_BYPRODUCTS ${ZLIB_NO_PIC_INSTALL_DIR}/lib/libz-no-pic.a
CONFIGURE_COMMAND
COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZLIB_SOURCE_DIR} ${ZLIB_NO_PIC_BUILD_DIR}
COMMAND ${CMAKE_COMMAND} -E env CC=${CMAKE_C_COMPILER} CFLAGS=${ZLIB_NO_PIC_COMPILE_FLAGS} ./configure --prefix=${ZLIB_NO_PIC_INSTALL_DIR} --includedir=${ZLIB_INCLUDE_DIRS}/zlib --static
BUILD_COMMAND
COMMAND make libz.a -j
INSTALL_COMMAND
COMMAND make install
COMMAND ${CMAKE_COMMAND} -E rename ${ZLIB_NO_PIC_INSTALL_DIR}/lib/libz.a ${ZLIB_NO_PIC_INSTALL_DIR}/lib/libz-no-pic.a
COMMAND ${CMAKE_COMMAND} -E copy ${ZLIB_NO_PIC_INSTALL_DIR}/lib/libz-no-pic.a ${LIB_DIR}
BUILD_IN_SOURCE 0
)

set(ZLIB_NO_PIC_LIBRARIES ${ZLIB_NO_PIC_INSTALL_DIR}/lib/libz-no-pic.a)

add_library(ZLIB::ZLIB_NO_PIC STATIC IMPORTED)
set_target_properties(ZLIB::ZLIB_NO_PIC PROPERTIES
IMPORTED_LOCATION ${ZLIB_NO_PIC_LIBRARIES}
INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRS}
)

# Ensure that the zlib are built before they are used
add_dependencies(ZLIB::ZLIB_NO_PIC zlib-no-pic)

# Set variables indicating that zlib has been installed
set(ZLIB_NO_PIC_ROOT ${ZLIB_NO_PIC_INSTALL_DIR})

cmake_print_variables(ZLIB_NO_PIC_LIBRARIES)
47 changes: 47 additions & 0 deletions third-party/zlib-cmake/zlib-pic.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
set(ZLIB_PIC_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/zlib-pic/build)
set(ZLIB_PIC_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/zlib-pic/install)
# Ensure the build and installation directories exists
file(MAKE_DIRECTORY ${ZLIB_PIC_BUILD_DIR})
file(MAKE_DIRECTORY ${ZLIB_PIC_INSTALL_DIR})

# For further optional differences
if(COMPILE_RUNTIME_LIGHT)
set(ZLIB_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fPIC")
else()
set(ZLIB_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fPIC")
endif()

ExternalProject_Add(
zlib-pic
PREFIX ${ZLIB_PIC_BUILD_DIR}
SOURCE_DIR ${ZLIB_SOURCE_DIR}
INSTALL_DIR ${ZLIB_PIC_INSTALL_DIR}
BINARY_DIR ${ZLIB_PIC_BUILD_DIR}
BUILD_BYPRODUCTS ${ZLIB_PIC_INSTALL_DIR}/lib/libz-pic.a
CONFIGURE_COMMAND
COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZLIB_SOURCE_DIR} ${ZLIB_PIC_BUILD_DIR}
COMMAND ${CMAKE_COMMAND} -E env CC=${CMAKE_C_COMPILER} CFLAGS=${ZLIB_PIC_COMPILE_FLAGS} ./configure --prefix=${ZLIB_PIC_INSTALL_DIR} --includedir=${ZLIB_INCLUDE_DIRS}/zlib --static
BUILD_COMMAND
COMMAND make libz.a -j
INSTALL_COMMAND
COMMAND make install
COMMAND ${CMAKE_COMMAND} -E rename ${ZLIB_PIC_INSTALL_DIR}/lib/libz.a ${ZLIB_PIC_INSTALL_DIR}/lib/libz-pic.a
COMMAND ${CMAKE_COMMAND} -E copy ${ZLIB_PIC_INSTALL_DIR}/lib/libz-pic.a ${LIB_DIR}
BUILD_IN_SOURCE 0
)

set(ZLIB_PIC_LIBRARIES ${ZLIB_PIC_INSTALL_DIR}/lib/libz-pic.a)

add_library(ZLIB::ZLIB_PIC STATIC IMPORTED)
set_target_properties(ZLIB::ZLIB_PIC PROPERTIES
IMPORTED_LOCATION ${ZLIB_PIC_LIBRARIES}
INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRS}
)

# Ensure that the zlib are built before they are used
add_dependencies(ZLIB::ZLIB_PIC zlib-pic)

# Set variables indicating that zlib has been installed
set(ZLIB_PIC_ROOT ${ZLIB_PIC_INSTALL_DIR})

cmake_print_variables(ZLIB_PIC_LIBRARIES)
33 changes: 21 additions & 12 deletions third-party/zlib-cmake/zlib.cmake
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
if(COMPILE_RUNTIME_LIGHT)
set(ZLIB_BUILD_EXAMPLES OFF BOOL "Disable ZLIB_BUILD_EXAMPLES")
set(ZLIB_COMPILE_FLAGS "-O3" "-fPIC")
update_git_submodule(${THIRD_PARTY_DIR}/zlib "--recursive")

set(RENAME_ZCONF OFF)
add_subdirectory(${THIRD_PARTY_DIR}/zlib ${CMAKE_BINARY_DIR}/third-party/zlib)
set(ZLIB_SOURCE_DIR ${THIRD_PARTY_DIR}/zlib)
set(ZLIB_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/third-party/zlib/install/include)
# Ensure the include directory exists
file(MAKE_DIRECTORY ${ZLIB_INCLUDE_DIRS})

target_compile_definitions(zlibstatic PRIVATE Z_HAVE_UNISTD_H)
target_compile_definitions(zlib PRIVATE Z_HAVE_UNISTD_H)
target_compile_options(zlibstatic PUBLIC ${ZLIB_COMPILE_FLAGS})
# The configuration has been based on:
# https://sources.debian.org/src/zlib/1%3A1.3.dfsg%2Breally1.3.1-1/debian/rules/#L20
set(ZLIB_COMMON_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -Wall -O3 -D_REENTRANT -DZ_HAVE_UNISTD_H")

# Set output directories for zlib targets
set(ZLIB_LIB_DIR "${OBJS_DIR}/lib")
set_target_properties(zlibstatic PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
${ZLIB_LIB_DIR})
if(APPLE)
set(ZLIB_COMMON_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -DZ_HAVE_UNISTD_H -I/usr/include")
endif()

include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-pic.cmake)
include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-no-pic.cmake)

add_custom_command(
TARGET zlib-no-pic zlib-pic POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZLIB_INCLUDE_DIRS} ${INCLUDE_DIR}
BYPRODUCTS ${INCLUDE_DIR}/zlib
)

set(ZLIB_FOUND ON)
2 changes: 1 addition & 1 deletion vkext/vkext-tl-memcache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// Distributed under the GPL v3 License, see LICENSE.notice.txt

#include <fcntl.h>
#include <zlib.h>
#include "zlib/zlib.h"

#include "vkext/vkext-rpc-include.h"
#include "vkext/vkext-rpc.h"
Expand Down
5 changes: 3 additions & 2 deletions vkext/vkext.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,9 @@ foreach(PHP_VERSION IN ITEMS "" "7.4" "8.0" "8.1" "8.2" "8.3")
endif()
target_compile_definitions(${VKEXT_TARGET} PRIVATE -DVKEXT -DPHP_ATOM_INC)
target_compile_options(${VKEXT_TARGET} PRIVATE -Wno-unused-parameter -Wno-float-conversion -Wno-ignored-qualifiers)
target_include_directories(${VKEXT_TARGET} PRIVATE ${PHP_SOURCE} ${PHP_SOURCE}/main ${PHP_SOURCE}/Zend ${PHP_SOURCE}/TSRM ${BASE_DIR})
target_link_libraries(${VKEXT_TARGET} PRIVATE vk::flex_data_shared)
target_include_directories(${VKEXT_TARGET} PRIVATE ${PHP_SOURCE} ${PHP_SOURCE}/main ${PHP_SOURCE}/Zend ${PHP_SOURCE}/TSRM ${BASE_DIR} ${ZLIB_INCLUDE_DIRS})
add_dependencies(${VKEXT_TARGET} zlib-pic)
target_link_libraries(${VKEXT_TARGET} PRIVATE vk::flex_data_shared ZLIB::ZLIB_PIC)
set_target_properties(${VKEXT_TARGET} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${OBJS_DIR}/vkext/modules${PHP_VERSION}/
LIBRARY_OUTPUT_NAME vkext
Expand Down

0 comments on commit fe56929

Please sign in to comment.