From c74e1bc654ae3b6269bf97183253fb745d5d0010 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Tue, 4 Feb 2025 15:38:23 +0300 Subject: [PATCH 01/20] Add passing CFLAGS to third-parties Signed-off-by: Petr Shumilov --- third-party/curl-cmake/curl.cmake | 2 +- third-party/openssl-cmake/openssl.cmake | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index d18886e8cc..bebd1c7b16 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -4,7 +4,7 @@ set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl) # Ensure the installation directory exists file(MAKE_DIRECTORY ${CURL_INSTALL_DIR}) -set(CURL_COMPILE_FLAGS "-g0 -Wno-deprecated-declarations") +set(CURL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -Wno-deprecated-declarations") # Suppress compiler-specific warnings caused by -O3 if(COMPILER_CLANG) set(CURL_COMPILE_FLAGS "${CURL_COMPILE_FLAGS} -Wno-string-plus-int") diff --git a/third-party/openssl-cmake/openssl.cmake b/third-party/openssl-cmake/openssl.cmake index 046033b68a..85144bd903 100644 --- a/third-party/openssl-cmake/openssl.cmake +++ b/third-party/openssl-cmake/openssl.cmake @@ -4,7 +4,7 @@ set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/openssl) # Ensure the installation directory exists file(MAKE_DIRECTORY ${OPENSSL_INSTALL_DIR}) -set(OPENSSL_COMPILE_FLAGS "-g0") +set(OPENSSL_COMPILE_FLAGS "$ENV{CFLAGS} -g0") # The configuration has been based on: # https://packages.debian.org/buster/libssl1.1 @@ -21,9 +21,9 @@ endif() ExternalProject_Add(openssl SOURCE_DIR ${THIRD_PARTY_DIR}/openssl - CONFIGURE_COMMAND ./config --prefix=${OPENSSL_INSTALL_DIR} --openssldir=/usr/lib/ssl no-shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms ${OPENSSL_CONFIGURE_EXTRA_OPTION} + CONFIGURE_COMMAND env CFLAGS=${OPENSSL_COMPILE_FLAGS} ./config --prefix=${OPENSSL_INSTALL_DIR} --openssldir=/usr/lib/ssl no-shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms ${OPENSSL_CONFIGURE_EXTRA_OPTION} BUILD_BYPRODUCTS ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a - BUILD_COMMAND make CFLAGS=${OPENSSL_COMPILE_FLAGS} + BUILD_COMMAND env CFLAGS=${OPENSSL_COMPILE_FLAGS} make INSTALL_COMMAND make install_sw && ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/third-party/openssl/include/ ${OBJS_DIR}/include && From 3fc1aefb2dec68e7a3d633a6ac1a233400d2432a Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Fri, 7 Feb 2025 19:01:59 +0300 Subject: [PATCH 02/20] Remove BUILD_IN_SOURCE to keep third-party directories clean Signed-off-by: Petr Shumilov --- cmake/init-global-vars.cmake | 6 ++++ third-party/curl-cmake/curl.cmake | 39 +++++++++++++++++-------- third-party/openssl-cmake/openssl.cmake | 36 +++++++++++++++-------- 3 files changed, 57 insertions(+), 24 deletions(-) diff --git a/cmake/init-global-vars.cmake b/cmake/init-global-vars.cmake index daf74f970a..f57db464d6 100644 --- a/cmake/init-global-vars.cmake +++ b/cmake/init-global-vars.cmake @@ -5,6 +5,8 @@ set(COMMON_DIR "${BASE_DIR}/common") set(THIRD_PARTY_DIR "${BASE_DIR}/third-party") set(OBJS_DIR ${BASE_DIR}/objs) set(BIN_DIR ${OBJS_DIR}/bin) +set(LIB_DIR ${OBJS_DIR}/lib) +set(INCLUDE_DIR ${OBJS_DIR}/include) set(GENERATED_DIR "${OBJS_DIR}/generated") set(AUTO_DIR "${GENERATED_DIR}/auto") set(RUNTIME_LIGHT_DIR "${BASE_DIR}/runtime-light") @@ -94,4 +96,8 @@ else() set(DEFAULT_KPHP_PATH ${BASE_DIR}) endif() +# Ensure the dir for dependencies will be created +file(MAKE_DIRECTORY ${LIB_DIR}) +file(MAKE_DIRECTORY ${INCLUDE_DIR}) + cmake_print_variables(CMAKE_INSTALL_PREFIX CPACK_PACKAGING_INSTALL_PREFIX) diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index bebd1c7b16..770166282e 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -1,7 +1,10 @@ update_git_submodule(${THIRD_PARTY_DIR}/curl "--remote") -set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl) -# Ensure the installation directory exists +set(CURL_SOURCE_DIR ${THIRD_PARTY_DIR}/curl) +set(CURL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/curl/build) +set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl/install) +# Ensure the build and installation directories exists +file(MAKE_DIRECTORY ${CURL_BUILD_DIR}) file(MAKE_DIRECTORY ${CURL_INSTALL_DIR}) set(CURL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -Wno-deprecated-declarations") @@ -15,10 +18,7 @@ endif() # The configuration has been based on: # https://github.com/VKCOM/curl/commit/00364cc6d672d9271032dbfbae3cfbc5e5f8542c # ./configure --prefix=/opt/curl7600 --without-librtmp --without-libssh2 --disable-ldap --disable-ldaps --disable-threaded-resolver --with-nghttp2 --enable-versioned-symbols -ExternalProject_Add( - curl - SOURCE_DIR ${THIRD_PARTY_DIR}/curl - CMAKE_ARGS +set(CURL_CMAKE_ARGS -DBUILD_TESTING=OFF -DCURL_WERROR=OFF # Recommend to enable when optimization level less than -O3 -DBUILD_CURL_EXE=OFF @@ -30,17 +30,30 @@ ExternalProject_Add( -DENABLE_THREADED_RESOLVER=OFF # Disable threaded resolver. -DUSE_NGHTTP2=ON # Enable HTTP/2 support. -DCMAKE_USE_OPENSSL=ON + -DOPENSSL_FOUND=ON -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} -DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES} - -DCMAKE_INSTALL_PREFIX=${CURL_INSTALL_DIR} + -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} -DCMAKE_C_FLAGS=${CURL_COMPILE_FLAGS} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $ + -DCURL_TEST=Off +) + +ExternalProject_Add( + curl + DEPENDS openssl + 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} + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} --build ${CURL_BUILD_DIR} --config $ INSTALL_COMMAND - ${CMAKE_COMMAND} --install . --config $ && - ${CMAKE_COMMAND} -E copy_directory ${CURL_INSTALL_DIR}/include ${OBJS_DIR}/include && - ${CMAKE_COMMAND} -E copy ${CURL_INSTALL_DIR}/lib/libcurl.a ${OBJS_DIR}/lib/ - BUILD_IN_SOURCE 1 + COMMAND ${CMAKE_COMMAND} --install ${CURL_BUILD_DIR} --prefix ${CURL_INSTALL_DIR} --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) @@ -56,3 +69,5 @@ set_target_properties(CURL::curl PROPERTIES # Set variables indicating that curl has been installed set(CURL_FOUND ON) set(CURL_LIBRARIES ${CURL_INSTALL_DIR}/lib/libcurl.a) + +cmake_print_variables(CURL_LIBRARIES) diff --git a/third-party/openssl-cmake/openssl.cmake b/third-party/openssl-cmake/openssl.cmake index 85144bd903..43012ee4df 100644 --- a/third-party/openssl-cmake/openssl.cmake +++ b/third-party/openssl-cmake/openssl.cmake @@ -1,7 +1,10 @@ update_git_submodule(${THIRD_PARTY_DIR}/openssl "--remote") -set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/openssl) -# Ensure the installation directory exists +set(OPENSSL_SOURCE_DIR ${THIRD_PARTY_DIR}/openssl) +set(OPENSSL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/build) +set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/install) +# Ensure the build and installation directories exists +file(MAKE_DIRECTORY ${OPENSSL_BUILD_DIR}) file(MAKE_DIRECTORY ${OPENSSL_INSTALL_DIR}) set(OPENSSL_COMPILE_FLAGS "$ENV{CFLAGS} -g0") @@ -19,17 +22,24 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") set(OPENSSL_CONFIGURE_EXTRA_OPTION enable-ec_nistp_64_gcc_128) endif() -ExternalProject_Add(openssl - SOURCE_DIR ${THIRD_PARTY_DIR}/openssl - CONFIGURE_COMMAND env CFLAGS=${OPENSSL_COMPILE_FLAGS} ./config --prefix=${OPENSSL_INSTALL_DIR} --openssldir=/usr/lib/ssl no-shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms ${OPENSSL_CONFIGURE_EXTRA_OPTION} +ExternalProject_Add( + openssl + PREFIX ${OPENSSL_BUILD_DIR} + SOURCE_DIR ${OPENSSL_SOURCE_DIR} + INSTALL_DIR ${OPENSSL_INSTALL_DIR} + BINARY_DIR ${OPENSSL_BUILD_DIR} BUILD_BYPRODUCTS ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a - BUILD_COMMAND env CFLAGS=${OPENSSL_COMPILE_FLAGS} make + CONFIGURE_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${OPENSSL_SOURCE_DIR} ${OPENSSL_BUILD_DIR} + 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} + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} -E env CFLAGS=${OPENSSL_COMPILE_FLAGS} make INSTALL_COMMAND - make install_sw && - ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/third-party/openssl/include/ ${OBJS_DIR}/include && - ${CMAKE_COMMAND} -E copy ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${OBJS_DIR}/lib/ && - ${CMAKE_COMMAND} -E copy ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a ${OBJS_DIR}/lib/ - BUILD_IN_SOURCE 1 + COMMAND make install_sw + 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} + BUILD_IN_SOURCE 0 ) set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include) @@ -58,4 +68,6 @@ set(OPENSSL_ROOT_DIR ${OPENSSL_INSTALL_DIR}) set(OPENSSL_LIBRARIES ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a) set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a) set(OPENSSL_SSL_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libssl.a) -set(OPENSSL_USE_STATIC_LIBS TRUE) +set(OPENSSL_USE_STATIC_LIBS ON) + +cmake_print_variables(OPENSSL_LIBRARIES) From 9d87bfb41eaf5a00d4cf80ca22e0255c7afa89e8 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Wed, 12 Feb 2025 16:12:31 +0300 Subject: [PATCH 03/20] Add patch applying for OpenSSL Signed-off-by: Petr Shumilov --- .github/workflows/Dockerfile.buster | 2 +- .github/workflows/Dockerfile.focal | 2 +- .github/workflows/Dockerfile.jammy | 2 +- .gitmodules | 4 +-- cmake/apply_patches.cmake | 35 +++++++++++++++++++++++++ third-party/openssl | 2 +- third-party/openssl-cmake/openssl.cmake | 12 ++++++--- 7 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 cmake/apply_patches.cmake diff --git a/.github/workflows/Dockerfile.buster b/.github/workflows/Dockerfile.buster index 034e196cb3..21e547154c 100644 --- a/.github/workflows/Dockerfile.buster +++ b/.github/workflows/Dockerfile.buster @@ -19,7 +19,7 @@ RUN apt-get update && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29 && \ apt-get update && \ apt-get install -y --no-install-recommends \ - git cmake-data=3.18* cmake=3.18* make g++ gperf netcat \ + git cmake-data=3.18* cmake=3.18* make g++ gperf netcat patch \ python3.7 python3-dev libpython3-dev python3-pip python3-setuptools python3-wheel mysql-server libmysqlclient-dev && \ pip3 install -r /tmp/requirements.txt && \ apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ diff --git a/.github/workflows/Dockerfile.focal b/.github/workflows/Dockerfile.focal index 2a6f02d99d..10c0fdba51 100644 --- a/.github/workflows/Dockerfile.focal +++ b/.github/workflows/Dockerfile.focal @@ -12,7 +12,7 @@ RUN apt-get update && \ add-apt-repository ppa:deadsnakes/ppa && \ apt-get update && \ apt-get install -y --no-install-recommends \ - git cmake make clang g++ g++-10 gperf netcat \ + git cmake make clang g++ g++-10 gperf netcat patch \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools mysql-server libmysqlclient-dev && \ python3.7 -m pip install pip && python3.7 -m pip install -r /tmp/requirements.txt && \ apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ diff --git a/.github/workflows/Dockerfile.jammy b/.github/workflows/Dockerfile.jammy index cb445104e1..cb667c503b 100644 --- a/.github/workflows/Dockerfile.jammy +++ b/.github/workflows/Dockerfile.jammy @@ -16,7 +16,7 @@ RUN apt update && \ add-apt-repository ppa:deadsnakes/ppa && \ apt update && \ apt install -y --no-install-recommends \ - build-essential devscripts fakeroot git cmake make g++ lld gperf netcat \ + build-essential devscripts fakeroot git cmake make g++ lld gperf netcat patch \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools && \ apt install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ libzstd-dev libyaml-cpp-dev libnghttp2-dev zlib1g-dev php7.4-dev libnuma-dev unzip && \ diff --git a/.gitmodules b/.gitmodules index 107f016fc8..daab73053c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,8 +9,8 @@ url = https://github.com/PCRE2Project/pcre2.git [submodule "third-party/openssl"] path = third-party/openssl - url = https://github.com/openssl/openssl.git - branch = OpenSSL_1_1_1-stable + url = https://salsa.debian.org/debian/openssl.git + branch = debian/buster [submodule "third-party/curl"] path = third-party/curl url = https://github.com/VKCOM/curl.git diff --git a/cmake/apply_patches.cmake b/cmake/apply_patches.cmake new file mode 100644 index 0000000000..9cf1b26c98 --- /dev/null +++ b/cmake/apply_patches.cmake @@ -0,0 +1,35 @@ +function(apply_patches_from_series build_dir series_file patch_dir) + # Check for the presence of the patch utility + find_program(PATCH_EXECUTABLE patch) + if(NOT PATCH_EXECUTABLE) + message(FATAL_ERROR "The 'patch' utility is not found on this system.") + endif() + + # Read the series file and apply each patch listed + file(READ "${series_file}" series_content) + string(REPLACE "\n" ";" series_list "${series_content}") + + foreach(patch IN LISTS series_list) + if(NOT patch STREQUAL "") + # Construct the full path to the patch file + set(patch_file "${patch_dir}${patch}") + + # Apply the patch using GNU patch + execute_process( + COMMAND ${PATCH_EXECUTABLE} -p1 -i "${patch_file}" + WORKING_DIRECTORY "${build_dir}" + RESULT_VARIABLE result + OUTPUT_VARIABLE output + ERROR_VARIABLE error + ) + + if(NOT result EQUAL 0) + message(FATAL_ERROR "Failed to apply patch: ${patch}\nOutput: ${output}\nError: ${error}") + else() + message(STATUS "Applied patch: ${patch}") + endif() + endif() + endforeach() +endfunction() + +apply_patches_from_series(${BUILD_DIR} ${PATCH_SERIES} ${PATCH_DIR}) diff --git a/third-party/openssl b/third-party/openssl index b372b1f764..ddafec437b 160000 --- a/third-party/openssl +++ b/third-party/openssl @@ -1 +1 @@ -Subproject commit b372b1f76450acdfed1e2301a39810146e28b02c +Subproject commit ddafec437b0f371490126a3af2577150b56dae81 diff --git a/third-party/openssl-cmake/openssl.cmake b/third-party/openssl-cmake/openssl.cmake index 43012ee4df..c55d06be9b 100644 --- a/third-party/openssl-cmake/openssl.cmake +++ b/third-party/openssl-cmake/openssl.cmake @@ -1,8 +1,10 @@ update_git_submodule(${THIRD_PARTY_DIR}/openssl "--remote") -set(OPENSSL_SOURCE_DIR ${THIRD_PARTY_DIR}/openssl) -set(OPENSSL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/build) -set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/install) +set(OPENSSL_SOURCE_DIR ${THIRD_PARTY_DIR}/openssl) +set(OPENSSL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/build) +set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/install) +set(OPENSSL_PATCH_DIR ${OPENSSL_BUILD_DIR}/debian/patches/) +set(OPENSSL_PATCH_SERIES ${OPENSSL_BUILD_DIR}/debian/patches/series) # Ensure the build and installation directories exists file(MAKE_DIRECTORY ${OPENSSL_BUILD_DIR}) file(MAKE_DIRECTORY ${OPENSSL_INSTALL_DIR}) @@ -29,8 +31,10 @@ ExternalProject_Add( INSTALL_DIR ${OPENSSL_INSTALL_DIR} BINARY_DIR ${OPENSSL_BUILD_DIR} BUILD_BYPRODUCTS ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a - CONFIGURE_COMMAND + PATCH_COMMAND 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} BUILD_COMMAND COMMAND ${CMAKE_COMMAND} -E env CFLAGS=${OPENSSL_COMPILE_FLAGS} make From bc063a192a143a2fd310da0750be01442803cc02 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Fri, 14 Feb 2025 19:44:07 +0300 Subject: [PATCH 04/20] Add zlib vendoring Signed-off-by: Petr Shumilov --- CMakeLists.txt | 3 +- cmake/utils.cmake | 24 +++++++++++ common/common-tests.cmake | 7 +++- common/common.cmake | 7 ++++ common/kfs/kfs.cpp | 2 +- compiler/compiler-settings.cpp | 15 ++++--- net/net-tests.cmake | 7 +++- runtime-light/runtime-light.cmake | 5 +-- runtime/runtime.cmake | 7 ++-- runtime/zlib.h | 2 +- third-party/curl-cmake/curl.cmake | 26 ++++++++---- third-party/openssl-cmake/openssl.cmake | 13 ++++-- third-party/zlib | 2 +- third-party/zlib-cmake/zlib-no-pic.cmake | 53 ++++++++++++++++++++++++ third-party/zlib-cmake/zlib-pic.cmake | 49 ++++++++++++++++++++++ third-party/zlib-cmake/zlib.cmake | 25 +++++------ vkext/vkext-tl-memcache.cpp | 2 +- vkext/vkext.cmake | 5 ++- 18 files changed, 210 insertions(+), 44 deletions(-) create mode 100644 third-party/zlib-cmake/zlib-no-pic.cmake create mode 100644 third-party/zlib-cmake/zlib-pic.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a179867ac..d23d1499c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 1abaaf4c30..3b7a0e90b0 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -73,3 +73,27 @@ function(update_git_submodule submodule_path) message(FATAL_ERROR "Failed to update Git submodule ${submodule_path}: ${update_stdout} ${update_stderr}") endif() endfunction() + +function(detect_xcode_sdk_path OUTPUT_VARIABLE) + # Use execute_process to run the xcrun command and capture the output + execute_process( + COMMAND xcrun --sdk macosx --show-sdk-path + OUTPUT_VARIABLE SDK_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE ERROR_MSG + RESULT_VARIABLE RESULT + ) + + # Check if the command was successful + if(RESULT EQUAL 0) + # Check if the SDK_PATH is not empty + if(SDK_PATH) + set(${OUTPUT_VARIABLE} "${SDK_PATH}" PARENT_SCOPE) + message(STATUS "Detected Xcode SDK path: ${SDK_PATH}") + else() + message(FATAL_ERROR "Failed to detect Xcode SDK path: Output is empty.") + endif() + else() + message(FATAL_ERROR "Failed to detect Xcode SDK path: ${ERROR_MSG}") + endif() +endfunction() diff --git a/common/common-tests.cmake b/common/common-tests.cmake index 08fdd17ae3..c53d419d61 100644 --- a/common/common-tests.cmake +++ b/common/common-tests.cmake @@ -20,5 +20,10 @@ 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) +if(COMPILE_RUNTIME_LIGHT) + set(COMMON_TESTS_LIBS ${COMMON_TESTS_LIBS} ZLIB::ZLIB_PIC) +else() + set(COMMON_TESTS_LIBS ${COMMON_TESTS_LIBS} ZLIB::ZLIB_NO_PIC) +endif() vk_add_unittest(common "${COMMON_TESTS_LIBS}" ${COMMON_TESTS_SOURCES}) diff --git a/common/common.cmake b/common/common.cmake index 0e989f6792..1e8b192b25 100644 --- a/common/common.cmake +++ b/common/common.cmake @@ -64,3 +64,10 @@ if(COMPILER_CLANG) endif() vk_add_library(common_src OBJECT ${COMMON_ALL_SOURCES}) +if(COMPILE_RUNTIME_LIGHT) + target_include_directories(common_src PUBLIC ${ZLIB_PIC_INCLUDE_DIRS}) + add_dependencies(common_src openssl zlib-pic) +else() + target_include_directories(common_src PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS}) + add_dependencies(common_src openssl zlib-no-pic) +endif() diff --git a/common/kfs/kfs.cpp b/common/kfs/kfs.cpp index 0be87e98be..f078b169d6 100644 --- a/common/kfs/kfs.cpp +++ b/common/kfs/kfs.cpp @@ -17,7 +17,7 @@ #include #include #include -#include +#include "zlib/zlib.h" #include #include "common/binlog/kdb-binlog-common.h" diff --git a/compiler/compiler-settings.cpp b/compiler/compiler-settings.cpp index 26961f3cdf..80962051fb 100644 --- a/compiler/compiler-settings.cpp +++ b/compiler/compiler-settings.cpp @@ -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 { @@ -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 } @@ -364,10 +363,12 @@ 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_); - std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "z", "zstd", "nghttp2", "kphp-timelib"}; + std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "zstd", "nghttp2", "kphp-timelib"}; #ifdef KPHP_TIMELIB_LIB_DIR ld_flags.value_ += " -L" KPHP_TIMELIB_LIB_DIR; @@ -423,7 +424,11 @@ void CompilerSettings::init() { system_installed_dynamic_libs.emplace_back("rt"); #endif - append_3dparty_headers(cxx_default_flags, third_party_path, "openssl"); + if (is_k2_mode) { + append_3dparty_lib(ld_flags.value_, third_party_path, "z-pic"); + } else { + append_3dparty_lib(ld_flags.value_, third_party_path, "z-no-pic"); + } append_3dparty_lib(ld_flags.value_, third_party_path, "ssl"); append_3dparty_lib(ld_flags.value_, third_party_path, "crypto"); diff --git a/net/net-tests.cmake b/net/net-tests.cmake index da3089def7..be98fe22ee 100644 --- a/net/net-tests.cmake +++ b/net/net-tests.cmake @@ -5,5 +5,10 @@ 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) +if(COMPILE_RUNTIME_LIGHT) + set(NET_TESTS_LIBS ${NET_TESTS_LIBS} ZLIB::ZLIB_PIC) +else() + set(NET_TESTS_LIBS ${NET_TESTS_LIBS} ZLIB::ZLIB_NO_PIC) +endif() vk_add_unittest(net "${NET_TESTS_LIBS}" ${NET_TESTS_SOURCES}) diff --git a/runtime-light/runtime-light.cmake b/runtime-light/runtime-light.cmake index d91e6476c6..2deba5067f 100644 --- a/runtime-light/runtime-light.cmake +++ b/runtime-light/runtime-light.cmake @@ -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) @@ -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) diff --git a/runtime/runtime.cmake b/runtime/runtime.cmake index 32acd5a67a..738a715313 100644 --- a/runtime/runtime.cmake +++ b/runtime/runtime.cmake @@ -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_NO_PIC_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}) @@ -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_NO_PIC_INCLUDE_DIRS}) target_compile_options(php_lib_version_j PRIVATE -I. -E) add_dependencies(php_lib_version_j kphp-full-runtime) diff --git a/runtime/zlib.h b/runtime/zlib.h index 6e039357e8..9a9ee1250e 100644 --- a/runtime/zlib.h +++ b/runtime/zlib.h @@ -4,7 +4,7 @@ #pragma once -#include +#include "zlib/zlib.h" #include "common/wrappers/string_view.h" diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index 770166282e..281215c86f 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -7,7 +7,11 @@ 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 -Wno-deprecated-declarations") +if(NOT APPLE) + set(CURL_COMPILE_FLAGS "${CURL_COMPILE_FLAGS} -static") +endif() + # Suppress compiler-specific warnings caused by -O3 if(COMPILER_CLANG) set(CURL_COMPILE_FLAGS "${CURL_COMPILE_FLAGS} -Wno-string-plus-int") @@ -34,21 +38,27 @@ 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_DIR=${ZLIB_NO_PIC_INCLUDE_DIRS}/zlib -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 $ + COMMAND ${CMAKE_COMMAND} --build ${CURL_BUILD_DIR} --config $ -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} --install ${CURL_BUILD_DIR} --prefix ${CURL_INSTALL_DIR} --config $ COMMAND ${CMAKE_COMMAND} -E copy_directory ${CURL_INSTALL_DIR}/include ${INCLUDE_DIR} @@ -56,14 +66,14 @@ ExternalProject_Add( 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 diff --git a/third-party/openssl-cmake/openssl.cmake b/third-party/openssl-cmake/openssl.cmake index c55d06be9b..d7edf3966b 100644 --- a/third-party/openssl-cmake/openssl.cmake +++ b/third-party/openssl-cmake/openssl.cmake @@ -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 @@ -24,6 +24,11 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") set(OPENSSL_CONFIGURE_EXTRA_OPTION enable-ec_nistp_64_gcc_128) endif() +if(APPLE) + detect_xcode_sdk_path(CMAKE_OSX_SYSROOT) + set(OPENSSL_COMPILE_FLAGS "${OPENSSL_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") +endif() + ExternalProject_Add( openssl PREFIX ${OPENSSL_BUILD_DIR} @@ -35,11 +40,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} diff --git a/third-party/zlib b/third-party/zlib index ef24c4c750..51b7f2abda 160000 --- a/third-party/zlib +++ b/third-party/zlib @@ -1 +1 @@ -Subproject commit ef24c4c7502169f016dcd2a26923dbaf3216748c +Subproject commit 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf diff --git a/third-party/zlib-cmake/zlib-no-pic.cmake b/third-party/zlib-cmake/zlib-no-pic.cmake new file mode 100644 index 0000000000..a2758a8c68 --- /dev/null +++ b/third-party/zlib-cmake/zlib-no-pic.cmake @@ -0,0 +1,53 @@ +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) +set(ZLIB_NO_PIC_INCLUDE_DIRS ${ZLIB_NO_PIC_INSTALL_DIR}/include) +set(ZLIB_NO_PIC_LIBRARIES ${ZLIB_NO_PIC_INSTALL_DIR}/lib/libz-no-pic.a) +# Ensure the build, installation and "include" directories exists +file(MAKE_DIRECTORY ${ZLIB_NO_PIC_BUILD_DIR}) +file(MAKE_DIRECTORY ${ZLIB_NO_PIC_INSTALL_DIR}) +file(MAKE_DIRECTORY ${ZLIB_NO_PIC_INCLUDE_DIRS}) + +# For further optional differences +if(COMPILE_RUNTIME_LIGHT) + set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fno-pic") +else() + set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fno-pic") +endif() + +if(NOT APPLE) + set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_NO_PIC_COMPILE_FLAGS} -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_NO_PIC_INCLUDE_DIRS}/zlib --static + BUILD_COMMAND + COMMAND make libz.a -j + INSTALL_COMMAND + COMMAND make install + COMMAND ${CMAKE_COMMAND} -E copy ${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} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZLIB_NO_PIC_INCLUDE_DIRS} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 +) + +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_NO_PIC_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) diff --git a/third-party/zlib-cmake/zlib-pic.cmake b/third-party/zlib-cmake/zlib-pic.cmake new file mode 100644 index 0000000000..021bcb958a --- /dev/null +++ b/third-party/zlib-cmake/zlib-pic.cmake @@ -0,0 +1,49 @@ +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) +set(ZLIB_PIC_INCLUDE_DIRS ${ZLIB_PIC_INSTALL_DIR}/include) +set(ZLIB_PIC_LIBRARIES ${ZLIB_PIC_INSTALL_DIR}/lib/libz-pic.a) +# Ensure the build, installation and "include" directories exists +file(MAKE_DIRECTORY ${ZLIB_PIC_BUILD_DIR}) +file(MAKE_DIRECTORY ${ZLIB_PIC_INSTALL_DIR}) +file(MAKE_DIRECTORY ${ZLIB_PIC_INCLUDE_DIRS}) + +# 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_PIC_INCLUDE_DIRS}/zlib --static + BUILD_COMMAND + COMMAND make libz.a -j + INSTALL_COMMAND + COMMAND make install + COMMAND ${CMAKE_COMMAND} -E copy ${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} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZLIB_PIC_INCLUDE_DIRS} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 +) + +add_library(ZLIB::ZLIB_PIC STATIC IMPORTED) +set_target_properties(ZLIB::ZLIB_PIC PROPERTIES + IMPORTED_LOCATION ${ZLIB_PIC_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_PIC_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) diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index f7b243d42d..5c3d9e3ee5 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -1,16 +1,17 @@ -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) - 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") - # 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) + detect_xcode_sdk_path(CMAKE_OSX_SYSROOT) + set(ZLIB_COMMON_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") endif() + +include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-pic.cmake) +include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-no-pic.cmake) + +set(ZLIB_FOUND ON) diff --git a/vkext/vkext-tl-memcache.cpp b/vkext/vkext-tl-memcache.cpp index 5466708205..143131b36c 100644 --- a/vkext/vkext-tl-memcache.cpp +++ b/vkext/vkext-tl-memcache.cpp @@ -3,7 +3,7 @@ // Distributed under the GPL v3 License, see LICENSE.notice.txt #include -#include +#include "zlib/zlib.h" #include "vkext/vkext-rpc-include.h" #include "vkext/vkext-rpc.h" diff --git a/vkext/vkext.cmake b/vkext/vkext.cmake index 3b181d0aaf..35dc399841 100644 --- a/vkext/vkext.cmake +++ b/vkext/vkext.cmake @@ -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_PIC_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 From 1c9a288a0df77fcb75d264fc38b027be3e72287a Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Tue, 18 Feb 2025 19:59:54 +0300 Subject: [PATCH 05/20] Add nghttp2 vendoring Signed-off-by: Petr Shumilov --- .github/workflows/Dockerfile.buster | 2 +- .github/workflows/Dockerfile.focal | 2 +- .github/workflows/Dockerfile.jammy | 2 +- .gitmodules | 4 + CMakeLists.txt | 6 +- compiler/compiler-settings.cpp | 3 +- .../compiling-kphp-from-sources.md | 4 +- runtime/runtime.cmake | 7 +- third-party/curl-cmake/curl.cmake | 23 +++-- third-party/nghttp2 | 1 + third-party/nghttp2-cmake/nghttp2.cmake | 86 +++++++++++++++++++ third-party/zlib-cmake/zlib.cmake | 5 +- 12 files changed, 123 insertions(+), 22 deletions(-) create mode 160000 third-party/nghttp2 create mode 100644 third-party/nghttp2-cmake/nghttp2.cmake diff --git a/.github/workflows/Dockerfile.buster b/.github/workflows/Dockerfile.buster index 21e547154c..1af9711ce1 100644 --- a/.github/workflows/Dockerfile.buster +++ b/.github/workflows/Dockerfile.buster @@ -23,7 +23,7 @@ RUN apt-get update && \ python3.7 python3-dev libpython3-dev python3-pip python3-setuptools python3-wheel mysql-server libmysqlclient-dev && \ pip3 install -r /tmp/requirements.txt && \ apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev libnghttp2-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ + libzstd-dev libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer && \ rm -rf /var/lib/apt/lists/* && \ update-alternatives --set php /usr/bin/php7.4 diff --git a/.github/workflows/Dockerfile.focal b/.github/workflows/Dockerfile.focal index 10c0fdba51..435df9f2f7 100644 --- a/.github/workflows/Dockerfile.focal +++ b/.github/workflows/Dockerfile.focal @@ -16,7 +16,7 @@ RUN apt-get update && \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools mysql-server libmysqlclient-dev && \ python3.7 -m pip install pip && python3.7 -m pip install -r /tmp/requirements.txt && \ apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev libnghttp2-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ + libzstd-dev libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer unzip && \ rm -rf /var/lib/apt/lists/* diff --git a/.github/workflows/Dockerfile.jammy b/.github/workflows/Dockerfile.jammy index cb667c503b..aee6dda76c 100644 --- a/.github/workflows/Dockerfile.jammy +++ b/.github/workflows/Dockerfile.jammy @@ -19,7 +19,7 @@ RUN apt update && \ build-essential devscripts fakeroot git cmake make g++ lld gperf netcat patch \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools && \ apt install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev libnghttp2-dev zlib1g-dev php7.4-dev libnuma-dev unzip && \ + libzstd-dev libyaml-cpp-dev zlib1g-dev php7.4-dev libnuma-dev unzip && \ # Install MySQL-related and PostgreSQL-related libraries from the Ubuntu 20.04 (Focal Fossa) repository. # Ubuntu 22.04 has moved to OpenSSL 3.0; however, KPHP relies on OpenSSL 1.1.1. # Therefore, we use downgraded libraries that are compatible with OpenSSL 1.1.1. diff --git a/.gitmodules b/.gitmodules index daab73053c..ac8e86a285 100644 --- a/.gitmodules +++ b/.gitmodules @@ -15,3 +15,7 @@ path = third-party/curl url = https://github.com/VKCOM/curl.git branch = dpkg-build-7.60.0 +[submodule "third-party/nghttp2"] + path = third-party/nghttp2 + url = https://salsa.debian.org/debian/nghttp2.git + branch = buster diff --git a/CMakeLists.txt b/CMakeLists.txt index d23d1499c5..ed25042184 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.16) project(kphp VERSION 1.0.1 - LANGUAGES CXX ASM + LANGUAGES C CXX ASM DESCRIPTION "Compiler for PHP (aka KPHP)" HOMEPAGE_URL https://github.com/VKCOM/kphp) @@ -122,8 +122,8 @@ install(FILES ${AUTO_DIR}/runtime/runtime-headers.h COMPONENT KPHP DESTINATION ${INSTALL_KPHP_SOURCE}/objs/generated/auto/runtime/) -set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "vk-flex-data, libuber-h3, libpcre3-dev, libre2-dev, libyaml-cpp-dev, zlib1g-dev, \ - libzstd-dev, g++, libnghttp2-dev, kphp-timelib, libnuma-dev") +set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "vk-flex-data, libuber-h3, libpcre3-dev, libre2-dev, libyaml-cpp-dev, \ + libzstd-dev, g++, kphp-timelib, libnuma-dev") if (PDO_DRIVER_MYSQL) set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "${CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS}, libmysqlclient-dev") diff --git a/compiler/compiler-settings.cpp b/compiler/compiler-settings.cpp index 80962051fb..b7f620dd6b 100644 --- a/compiler/compiler-settings.cpp +++ b/compiler/compiler-settings.cpp @@ -368,7 +368,7 @@ void CompilerSettings::init() { 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_); - std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "zstd", "nghttp2", "kphp-timelib"}; + std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "zstd", "kphp-timelib"}; #ifdef KPHP_TIMELIB_LIB_DIR ld_flags.value_ += " -L" KPHP_TIMELIB_LIB_DIR; @@ -431,6 +431,7 @@ void CompilerSettings::init() { } append_3dparty_lib(ld_flags.value_, third_party_path, "ssl"); append_3dparty_lib(ld_flags.value_, third_party_path, "crypto"); + append_3dparty_lib(ld_flags.value_, third_party_path, "nghttp2"); append_if_doesnt_contain(ld_flags.value_, system_installed_dynamic_libs, "-l"); ld_flags.value_ += " -rdynamic"; diff --git a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md index 19ba70f813..b26917751f 100644 --- a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md +++ b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md @@ -54,7 +54,7 @@ Install packages apt-get update apt install git cmake-data=3.16* cmake=3.16* make g++ gperf python3-minimal python3-jsonschema \ curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev libnghttp2-dev zlib1g-dev php7.4-dev libmysqlclient-dev libnuma-dev \ + libzstd-dev libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ postgresql postgresql-server-dev-all libpq-dev libldap-dev libkrb5-dev ``` @@ -74,7 +74,7 @@ Install packages apt-get update apt install git cmake make g++ gperf python3-minimal python3-jsonschema \ curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev libnghttp2-dev zlib1g-dev php7.4-dev libmysqlclient-dev libnuma-dev \ + libzstd-dev libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ postgresql postgresql-server-dev-all libpq-dev libldap-dev libkrb5-dev ``` diff --git a/runtime/runtime.cmake b/runtime/runtime.cmake index 738a715313..b0e811f920 100644 --- a/runtime/runtime.cmake +++ b/runtime/runtime.cmake @@ -1,4 +1,5 @@ -# CURL Building +# CURL Build +include(${THIRD_PARTY_DIR}/nghttp2-cmake/nghttp2.cmake) include(${THIRD_PARTY_DIR}/curl-cmake/curl.cmake) prepend(KPHP_RUNTIME_DATETIME_SOURCES datetime/ @@ -150,8 +151,8 @@ 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}) -prepare_cross_platform_libs(RUNTIME_LINK_TEST_LIBS pcre nghttp2 kphp-timelib) -set(RUNTIME_LINK_TEST_LIBS vk::flex_data_static CURL::curl OpenSSL::SSL ${NUMA_LIB} ${RUNTIME_LINK_TEST_LIBS} ${EPOLL_SHIM_LIB} ${ICONV_LIB} ${RT_LIB} dl) +prepare_cross_platform_libs(RUNTIME_LINK_TEST_LIBS pcre kphp-timelib) +set(RUNTIME_LINK_TEST_LIBS vk::flex_data_static CURL::curl OpenSSL::SSL NGHTTP2::nghttp2 ${NUMA_LIB} ${RUNTIME_LINK_TEST_LIBS} ${EPOLL_SHIM_LIB} ${ICONV_LIB} ${RT_LIB} dl) if (PDO_DRIVER_MYSQL) list(APPEND RUNTIME_LINK_TEST_LIBS mysqlclient) diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index 281215c86f..a05ef56efe 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -3,9 +3,11 @@ update_git_submodule(${THIRD_PARTY_DIR}/curl "--remote") set(CURL_SOURCE_DIR ${THIRD_PARTY_DIR}/curl) set(CURL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/curl/build) set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl/install) -# Ensure the build and installation directories exists +set(CURL_INCLUDE_DIRS ${CURL_INSTALL_DIR}/include) +# Ensure the build, installation and "include" directories exists file(MAKE_DIRECTORY ${CURL_BUILD_DIR}) file(MAKE_DIRECTORY ${CURL_INSTALL_DIR}) +file(MAKE_DIRECTORY ${CURL_INCLUDE_DIRS}) set(CURL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -Wno-deprecated-declarations") if(NOT APPLE) @@ -23,8 +25,13 @@ endif() # https://github.com/VKCOM/curl/commit/00364cc6d672d9271032dbfbae3cfbc5e5f8542c # ./configure --prefix=/opt/curl7600 --without-librtmp --without-libssh2 --disable-ldap --disable-ldaps --disable-threaded-resolver --with-nghttp2 --enable-versioned-symbols set(CURL_CMAKE_ARGS + -DCMAKE_C_FLAGS=${CURL_COMPILE_FLAGS} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_FLAGS=${CURL_COMPILE_FLAGS} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_POSITION_INDEPENDENT_CODE=OFF -DBUILD_TESTING=OFF - -DCURL_WERROR=OFF # Recommend to enable when optimization level less than -O3 + -DCURL_WERROR=ON # Recommend to enable when optimization level less than -O3 -DBUILD_CURL_EXE=OFF -DCURL_STATICLIB=ON -DUSE_LIBRTMP=OFF # Disable RTMP support. @@ -44,13 +51,15 @@ set(CURL_CMAKE_ARGS -DZLIB_ROOT=${ZLIB_NO_PIC_ROOT} -DZLIB_LIBRARIES=${ZLIB_NO_PIC_LIBRARIES} -DZLIB_INCLUDE_DIR=${ZLIB_NO_PIC_INCLUDE_DIRS}/zlib - -DCMAKE_C_FLAGS=${CURL_COMPILE_FLAGS} - -DCMAKE_POSITION_INDEPENDENT_CODE=OFF + -DNGHTTP2_FOUND=ON + -DNGHTTP2_ROOT=${NGHTTP2_ROOT} + -DNGHTTP2_LIBRARY=${NGHTTP2_LIBRARIES} + -DNGHTTP2_INCLUDE_DIR=${NGHTTP2_INCLUDE_DIRS} ) ExternalProject_Add( curl - DEPENDS openssl zlib-no-pic + DEPENDS openssl zlib-no-pic nghttp2 PREFIX ${CURL_BUILD_DIR} SOURCE_DIR ${CURL_SOURCE_DIR} INSTALL_DIR ${CURL_INSTALL_DIR} @@ -66,10 +75,6 @@ ExternalProject_Add( BUILD_IN_SOURCE 0 ) -set(CURL_INCLUDE_DIRS ${CURL_INSTALL_DIR}/include) -# Ensure the include directory exists -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 diff --git a/third-party/nghttp2 b/third-party/nghttp2 new file mode 160000 index 0000000000..b6618cde43 --- /dev/null +++ b/third-party/nghttp2 @@ -0,0 +1 @@ +Subproject commit b6618cde43069191dd566316510efad68576dfaf diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake new file mode 100644 index 0000000000..1b35c72578 --- /dev/null +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -0,0 +1,86 @@ +update_git_submodule(${THIRD_PARTY_DIR}/nghttp2 "--remote") + +set(NGHTTP2_SOURCE_DIR ${THIRD_PARTY_DIR}/nghttp2) +set(NGHTTP2_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/nghttp2/build) +set(NGHTTP2_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/nghttp2/install) +set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INSTALL_DIR}/include) +set(NGHTTP2_PATCH_DIR ${NGHTTP2_BUILD_DIR}/debian/patches/) +set(NGHTTP2_PATCH_SERIES ${NGHTTP2_BUILD_DIR}/debian/patches/series) +# Ensure the build, installation and "include" directories exists +file(MAKE_DIRECTORY ${NGHTTP2_BUILD_DIR}) +file(MAKE_DIRECTORY ${NGHTTP2_INSTALL_DIR}) +file(MAKE_DIRECTORY ${NGHTTP2_INCLUDE_DIRS}) + +set(NGHTTP2_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic") +if(NOT APPLE) + set(NGHTTP2_COMPILE_FLAGS "${NGHTTP2_COMPILE_FLAGS} -static") +endif() + +# The configuration has been based on: +# https://salsa.debian.org/debian/nghttp2/-/blob/buster/debian/rules#L8 +set(NGHTTP2_CMAKE_ARGS + -DCMAKE_C_FLAGS=${NGHTTP2_COMPILE_FLAGS} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_FLAGS=${NGHTTP2_COMPILE_FLAGS} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_POSITION_INDEPENDENT_CODE=OFF + -DENABLE_WERROR=ON + -DENABLE_THREADS=OFF + -DENABLE_APP=OFF + -DENABLE_HPACK_TOOLS=OFF + -DENABLE_ASIO_LIB=OFF + -DENABLE_EXAMPLES=OFF + -DENABLE_PYTHON_BINDINGS=OFF + -DENABLE_FAILMALLOC=OFF + -DENABLE_LIB_ONLY=ON + -DENABLE_STATIC_LIB=ON + -DENABLE_SHARED_LIB=OFF + -DWITH_LIBXML2=OFF + -DWITH_JEMALLOC=OFF + -DWITH_SPDYLAY=OFF + -DWITH_MRUBY=OFF + -DWITH_NEVERBLEED=OFF + -DOPENSSL_FOUND=ON + -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} + -DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES} + -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} + -DZLIB_FOUND=ON + -DZLIB_ROOT=${ZLIB_NO_PIC_ROOT} + -DZLIB_LIBRARIES=${ZLIB_NO_PIC_LIBRARIES} + -DZLIB_INCLUDE_DIR=${ZLIB_NO_PIC_INCLUDE_DIRS}/zlib +) + +ExternalProject_Add( + nghttp2 + DEPENDS openssl zlib-no-pic + PREFIX ${NGHTTP2_BUILD_DIR} + SOURCE_DIR ${NGHTTP2_SOURCE_DIR} + INSTALL_DIR ${NGHTTP2_INSTALL_DIR} + BINARY_DIR ${NGHTTP2_BUILD_DIR} + BUILD_BYPRODUCTS ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a + PATCH_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${NGHTTP2_SOURCE_DIR} ${NGHTTP2_BUILD_DIR} + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${NGHTTP2_BUILD_DIR} -DPATCH_SERIES=${NGHTTP2_PATCH_SERIES} -DPATCH_DIR=${NGHTTP2_PATCH_DIR} -P ../../cmake/apply_patches.cmake + CONFIGURE_COMMAND + COMMAND ${CMAKE_COMMAND} ${NGHTTP2_CMAKE_ARGS} -S ${NGHTTP2_SOURCE_DIR} -B ${NGHTTP2_BUILD_DIR} -Wno-dev + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} --build ${NGHTTP2_BUILD_DIR} --config $ -j + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} --install ${NGHTTP2_BUILD_DIR} --prefix ${NGHTTP2_INSTALL_DIR} --config $ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${NGHTTP2_INSTALL_DIR}/include ${INCLUDE_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a ${LIB_DIR} + BUILD_IN_SOURCE 0 +) + +add_library(NGHTTP2::nghttp2 STATIC IMPORTED) +set_target_properties(NGHTTP2::nghttp2 PROPERTIES + IMPORTED_LOCATION ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a + INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} +) + +# Set variables indicating that NGHTTP2 has been installed +set(NGHTTP2_FOUND ON) +set(NGHTTP2_ROOT ${NGHTTP2_INSTALL_DIR}) +set(NGHTTP2_LIBRARIES ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a) + +cmake_print_variables(NGHTTP2_LIBRARIES) diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index 5c3d9e3ee5..b17a3e2b04 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -11,7 +11,10 @@ if(APPLE) set(ZLIB_COMMON_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") endif() +if (NOT COMPILE_RUNTIME_LIGHT) + include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-no-pic.cmake) +endif () + include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-pic.cmake) -include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-no-pic.cmake) set(ZLIB_FOUND ON) From 82bf25e8c21c26d7d3dedd737b143bf0229e5532 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Wed, 19 Feb 2025 18:52:35 +0300 Subject: [PATCH 06/20] Update source url for OpenSSL and Nghttp2 Signed-off-by: Petr Shumilov --- .gitmodules | 4 ++-- third-party/curl-cmake/curl.cmake | 11 ++++++----- third-party/nghttp2-cmake/nghttp2.cmake | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.gitmodules b/.gitmodules index ac8e86a285..f2c8020ede 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,7 +9,7 @@ url = https://github.com/PCRE2Project/pcre2.git [submodule "third-party/openssl"] path = third-party/openssl - url = https://salsa.debian.org/debian/openssl.git + url = https://github.com/VKCOM/openssl.git branch = debian/buster [submodule "third-party/curl"] path = third-party/curl @@ -17,5 +17,5 @@ branch = dpkg-build-7.60.0 [submodule "third-party/nghttp2"] path = third-party/nghttp2 - url = https://salsa.debian.org/debian/nghttp2.git + url = https://github.com/VKCOM/nghttp2.git branch = buster diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index a05ef56efe..3e1f597e48 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -1,9 +1,10 @@ update_git_submodule(${THIRD_PARTY_DIR}/curl "--remote") -set(CURL_SOURCE_DIR ${THIRD_PARTY_DIR}/curl) -set(CURL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/curl/build) -set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl/install) -set(CURL_INCLUDE_DIRS ${CURL_INSTALL_DIR}/include) +set(CURL_SOURCE_DIR ${THIRD_PARTY_DIR}/curl) +set(CURL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/curl/build) +set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl/install) +set(CURL_LIBRARIES ${CURL_INSTALL_DIR}/lib/libcurl.a) +set(CURL_INCLUDE_DIRS ${CURL_INSTALL_DIR}/include) # Ensure the build, installation and "include" directories exists file(MAKE_DIRECTORY ${CURL_BUILD_DIR}) file(MAKE_DIRECTORY ${CURL_INSTALL_DIR}) @@ -77,7 +78,7 @@ ExternalProject_Add( add_library(CURL::curl STATIC IMPORTED) set_target_properties(CURL::curl PROPERTIES - IMPORTED_LOCATION ${CURL_INSTALL_DIR}/lib/libcurl.a + IMPORTED_LOCATION ${CURL_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS} ) diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake index 1b35c72578..895dbd3774 100644 --- a/third-party/nghttp2-cmake/nghttp2.cmake +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -3,6 +3,7 @@ update_git_submodule(${THIRD_PARTY_DIR}/nghttp2 "--remote") set(NGHTTP2_SOURCE_DIR ${THIRD_PARTY_DIR}/nghttp2) set(NGHTTP2_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/nghttp2/build) set(NGHTTP2_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/nghttp2/install) +set(NGHTTP2_LIBRARIES ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a) set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INSTALL_DIR}/include) set(NGHTTP2_PATCH_DIR ${NGHTTP2_BUILD_DIR}/debian/patches/) set(NGHTTP2_PATCH_SERIES ${NGHTTP2_BUILD_DIR}/debian/patches/series) @@ -74,13 +75,12 @@ ExternalProject_Add( add_library(NGHTTP2::nghttp2 STATIC IMPORTED) set_target_properties(NGHTTP2::nghttp2 PROPERTIES - IMPORTED_LOCATION ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a + IMPORTED_LOCATION ${NGHTTP2_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} ) # Set variables indicating that NGHTTP2 has been installed set(NGHTTP2_FOUND ON) set(NGHTTP2_ROOT ${NGHTTP2_INSTALL_DIR}) -set(NGHTTP2_LIBRARIES ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a) cmake_print_variables(NGHTTP2_LIBRARIES) From 49f583702e83e5f1f84b6ce3d727d0ba6e7be3b4 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Thu, 20 Feb 2025 19:17:22 +0300 Subject: [PATCH 07/20] Add zstd vendoring Signed-off-by: Petr Shumilov --- .github/workflows/Build.yml | 2 +- .github/workflows/Dockerfile.buster | 2 +- .github/workflows/Dockerfile.focal | 2 +- .github/workflows/Dockerfile.jammy | 2 +- .github/workflows/macos.yml | 2 +- .gitmodules | 4 ++ CMakeLists.txt | 4 +- common/common-tests.cmake | 3 +- common/common.cmake | 6 +- common/kfs/kfs.cpp | 2 +- common/tl/methods/rwm.cpp | 2 +- compiler/compiler-settings.cpp | 9 +-- .../compiling-kphp-from-sources.md | 6 +- net/net-tests.cmake | 3 +- runtime/runtime.cmake | 8 +-- runtime/zstd.cpp | 2 +- tests/cpp/runtime/zstd-test.cpp | 2 +- third-party/curl-cmake/curl.cmake | 1 - third-party/nghttp2-cmake/nghttp2.cmake | 4 +- third-party/zstd | 1 + third-party/zstd-cmake/zstd.cmake | 63 +++++++++++++++++++ 21 files changed, 100 insertions(+), 30 deletions(-) create mode 160000 third-party/zstd create mode 100644 third-party/zstd-cmake/zstd.cmake diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index f6db40aa21..3a951e68ad 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -146,7 +146,7 @@ jobs: run: | brew tap shivammathur/php brew update - brew install python@3.13 re2c cmake coreutils libiconv re2 pcre yaml-cpp zstd googletest shivammathur/php/php@7.4 + brew install python@3.13 re2c cmake coreutils libiconv re2 pcre yaml-cpp googletest shivammathur/php/php@7.4 brew link --overwrite --force shivammathur/php/php@7.4 /opt/homebrew/opt/python@3.13/libexec/bin/python -m pip install --upgrade pip --break-system-packages && /opt/homebrew/opt/python@3.13/libexec/bin/pip install --break-system-packages jsonschema diff --git a/.github/workflows/Dockerfile.buster b/.github/workflows/Dockerfile.buster index 1af9711ce1..ea9f60b15e 100644 --- a/.github/workflows/Dockerfile.buster +++ b/.github/workflows/Dockerfile.buster @@ -23,7 +23,7 @@ RUN apt-get update && \ python3.7 python3-dev libpython3-dev python3-pip python3-setuptools python3-wheel mysql-server libmysqlclient-dev && \ pip3 install -r /tmp/requirements.txt && \ apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ + libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer && \ rm -rf /var/lib/apt/lists/* && \ update-alternatives --set php /usr/bin/php7.4 diff --git a/.github/workflows/Dockerfile.focal b/.github/workflows/Dockerfile.focal index 435df9f2f7..8f40b66b3b 100644 --- a/.github/workflows/Dockerfile.focal +++ b/.github/workflows/Dockerfile.focal @@ -16,7 +16,7 @@ RUN apt-get update && \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools mysql-server libmysqlclient-dev && \ python3.7 -m pip install pip && python3.7 -m pip install -r /tmp/requirements.txt && \ apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ + libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer unzip && \ rm -rf /var/lib/apt/lists/* diff --git a/.github/workflows/Dockerfile.jammy b/.github/workflows/Dockerfile.jammy index aee6dda76c..5b2667424b 100644 --- a/.github/workflows/Dockerfile.jammy +++ b/.github/workflows/Dockerfile.jammy @@ -19,7 +19,7 @@ RUN apt update && \ build-essential devscripts fakeroot git cmake make g++ lld gperf netcat patch \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools && \ apt install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev zlib1g-dev php7.4-dev libnuma-dev unzip && \ + libyaml-cpp-dev zlib1g-dev php7.4-dev libnuma-dev unzip && \ # Install MySQL-related and PostgreSQL-related libraries from the Ubuntu 20.04 (Focal Fossa) repository. # Ubuntu 22.04 has moved to OpenSSL 3.0; however, KPHP relies on OpenSSL 1.1.1. # Therefore, we use downgraded libraries that are compatible with OpenSSL 1.1.1. diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index fdbba19f34..12ca64606c 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -33,7 +33,7 @@ jobs: run: | brew tap shivammathur/php brew update - brew install python@3.13 re2c cmake coreutils libiconv re2 pcre yaml-cpp zstd googletest shivammathur/php/php@7.4 + brew install python@3.13 re2c cmake coreutils libiconv re2 pcre yaml-cpp googletest shivammathur/php/php@7.4 brew link --overwrite --force shivammathur/php/php@7.4 /opt/homebrew/opt/python@3.13/libexec/bin/python -m pip install --upgrade pip --break-system-packages && /opt/homebrew/opt/python@3.13/libexec/bin/pip install --break-system-packages jsonschema diff --git a/.gitmodules b/.gitmodules index f2c8020ede..2db392968b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,7 @@ path = third-party/nghttp2 url = https://github.com/VKCOM/nghttp2.git branch = buster +[submodule "third-party/zstd"] + path = third-party/zstd + url = https://github.com/VKCOM/libzstd.git + branch = master diff --git a/CMakeLists.txt b/CMakeLists.txt index ed25042184..207c12864d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,9 +33,11 @@ include(cmake/popular-common.cmake) # Common third-parties build include(${THIRD_PARTY_DIR}/zlib-cmake/zlib.cmake) include(${THIRD_PARTY_DIR}/openssl-cmake/openssl.cmake) +include(${THIRD_PARTY_DIR}/zstd-cmake/zstd.cmake) # TODO: use FetchContent_Declare instead of include_directories include_directories(.) +include_directories(${INCLUDE_DIR}) # Custom modules include(${BASE_DIR}/flex/flex.cmake) @@ -123,7 +125,7 @@ install(FILES ${AUTO_DIR}/runtime/runtime-headers.h DESTINATION ${INSTALL_KPHP_SOURCE}/objs/generated/auto/runtime/) set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "vk-flex-data, libuber-h3, libpcre3-dev, libre2-dev, libyaml-cpp-dev, \ - libzstd-dev, g++, kphp-timelib, libnuma-dev") + g++, kphp-timelib, libnuma-dev") if (PDO_DRIVER_MYSQL) set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "${CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS}, libmysqlclient-dev") diff --git a/common/common-tests.cmake b/common/common-tests.cmake index c53d419d61..30293a7f8c 100644 --- a/common/common-tests.cmake +++ b/common/common-tests.cmake @@ -19,8 +19,7 @@ prepend(COMMON_TESTS_SOURCES ${COMMON_DIR}/ wrappers/string_view-test.cpp 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) +set(COMMON_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${COMMON_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto ZSTD::zstd) if(COMPILE_RUNTIME_LIGHT) set(COMMON_TESTS_LIBS ${COMMON_TESTS_LIBS} ZLIB::ZLIB_PIC) else() diff --git a/common/common.cmake b/common/common.cmake index 1e8b192b25..5b55b3ae90 100644 --- a/common/common.cmake +++ b/common/common.cmake @@ -64,10 +64,12 @@ if(COMPILER_CLANG) endif() vk_add_library(common_src OBJECT ${COMMON_ALL_SOURCES}) +add_dependencies(common_src openssl zstd) +target_include_directories(common_src PUBLIC ${ZSTD_INCLUDE_DIRS}) if(COMPILE_RUNTIME_LIGHT) + add_dependencies(common_src zlib-pic) target_include_directories(common_src PUBLIC ${ZLIB_PIC_INCLUDE_DIRS}) - add_dependencies(common_src openssl zlib-pic) else() + add_dependencies(common_src zlib-no-pic) target_include_directories(common_src PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS}) - add_dependencies(common_src openssl zlib-no-pic) endif() diff --git a/common/kfs/kfs.cpp b/common/kfs/kfs.cpp index f078b169d6..ac36843821 100644 --- a/common/kfs/kfs.cpp +++ b/common/kfs/kfs.cpp @@ -18,7 +18,7 @@ #include #include #include "zlib/zlib.h" -#include +#include "zstd/zstd.h" #include "common/binlog/kdb-binlog-common.h" #include "common/binlog/snapshot-shifts.h" diff --git a/common/tl/methods/rwm.cpp b/common/tl/methods/rwm.cpp index a19099204f..1d12b19ea4 100644 --- a/common/tl/methods/rwm.cpp +++ b/common/tl/methods/rwm.cpp @@ -5,7 +5,7 @@ #include "common/tl/methods/rwm.h" #include -#include +#include "zstd/zstd.h" #include "common/algorithms/arithmetic.h" #include "common/tl/methods/compression.h" diff --git a/compiler/compiler-settings.cpp b/compiler/compiler-settings.cpp index b7f620dd6b..e63c1d2da6 100644 --- a/compiler/compiler-settings.cpp +++ b/compiler/compiler-settings.cpp @@ -368,7 +368,7 @@ void CompilerSettings::init() { 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_); - std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "zstd", "kphp-timelib"}; + std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "kphp-timelib"}; #ifdef KPHP_TIMELIB_LIB_DIR ld_flags.value_ += " -L" KPHP_TIMELIB_LIB_DIR; @@ -424,14 +424,15 @@ void CompilerSettings::init() { system_installed_dynamic_libs.emplace_back("rt"); #endif + append_3dparty_lib(ld_flags.value_, third_party_path, "ssl"); + append_3dparty_lib(ld_flags.value_, third_party_path, "crypto"); + append_3dparty_lib(ld_flags.value_, third_party_path, "nghttp2"); + append_3dparty_lib(ld_flags.value_, third_party_path, "zstd"); if (is_k2_mode) { append_3dparty_lib(ld_flags.value_, third_party_path, "z-pic"); } else { append_3dparty_lib(ld_flags.value_, third_party_path, "z-no-pic"); } - append_3dparty_lib(ld_flags.value_, third_party_path, "ssl"); - append_3dparty_lib(ld_flags.value_, third_party_path, "crypto"); - append_3dparty_lib(ld_flags.value_, third_party_path, "nghttp2"); append_if_doesnt_contain(ld_flags.value_, system_installed_dynamic_libs, "-l"); ld_flags.value_ += " -rdynamic"; diff --git a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md index b26917751f..ae0a36b5e7 100644 --- a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md +++ b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md @@ -54,7 +54,7 @@ Install packages apt-get update apt install git cmake-data=3.16* cmake=3.16* make g++ gperf python3-minimal python3-jsonschema \ curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ + libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ postgresql postgresql-server-dev-all libpq-dev libldap-dev libkrb5-dev ``` @@ -74,7 +74,7 @@ Install packages apt-get update apt install git cmake make g++ gperf python3-minimal python3-jsonschema \ curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ - libzstd-dev libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ + libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ postgresql postgresql-server-dev-all libpq-dev libldap-dev libkrb5-dev ``` @@ -85,7 +85,7 @@ Make sure you have `brew` and `clang` (at least `Apple clang version 10.0.0`) # Install dependencies brew tap shivammathur/php brew update -brew install re2c cmake coreutils openssl libiconv re2 pcre yaml-cpp zstd googletest shivammathur/php/php@7.4 +brew install re2c cmake coreutils openssl libiconv re2 pcre yaml-cpp googletest shivammathur/php/php@7.4 brew link --overwrite shivammathur/php/php@7.4 pip3 install jsonschema diff --git a/net/net-tests.cmake b/net/net-tests.cmake index be98fe22ee..e81ddfb9ea 100644 --- a/net/net-tests.cmake +++ b/net/net-tests.cmake @@ -4,8 +4,7 @@ prepend(NET_TESTS_SOURCES ${BASE_DIR}/net/ net-test.cpp 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) +set(NET_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${NET_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto ZSTD::zstd) if(COMPILE_RUNTIME_LIGHT) set(NET_TESTS_LIBS ${NET_TESTS_LIBS} ZLIB::ZLIB_PIC) else() diff --git a/runtime/runtime.cmake b/runtime/runtime.cmake index b0e811f920..f649dfc4e8 100644 --- a/runtime/runtime.cmake +++ b/runtime/runtime.cmake @@ -140,13 +140,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} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) +target_include_directories(kphp_runtime PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) -add_dependencies(kphp_runtime kphp-timelib curl) +add_dependencies(kphp_runtime kphp-timelib curl zstd) 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 ZLIB::ZLIB_NO_PIC pthread) +prepare_cross_platform_libs(RUNTIME_LIBS yaml-cpp re2 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 ZLIB::ZLIB_NO_PIC ZSTD::zstd 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}) diff --git a/runtime/zstd.cpp b/runtime/zstd.cpp index e9ca4ee673..9142b0a314 100644 --- a/runtime/zstd.cpp +++ b/runtime/zstd.cpp @@ -4,7 +4,7 @@ #define ZSTD_STATIC_LINKING_ONLY -#include +#include "zstd/zstd.h" #include "common/smart_ptrs/unique_ptr_with_delete_function.h" #include "runtime-common/stdlib/string/string-context.h" diff --git a/tests/cpp/runtime/zstd-test.cpp b/tests/cpp/runtime/zstd-test.cpp index e31ea84843..93177bc8cd 100644 --- a/tests/cpp/runtime/zstd-test.cpp +++ b/tests/cpp/runtime/zstd-test.cpp @@ -1,6 +1,6 @@ #include -#include +#include "zstd/zstd.h" #include "runtime-common/stdlib/string/string-context.h" diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index 3e1f597e48..29c9ea924d 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -84,6 +84,5 @@ set_target_properties(CURL::curl PROPERTIES # Set variables indicating that curl has been installed set(CURL_FOUND ON) -set(CURL_LIBRARIES ${CURL_INSTALL_DIR}/lib/libcurl.a) cmake_print_variables(CURL_LIBRARIES) diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake index 895dbd3774..8749ccd265 100644 --- a/third-party/nghttp2-cmake/nghttp2.cmake +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -68,8 +68,8 @@ ExternalProject_Add( COMMAND ${CMAKE_COMMAND} --build ${NGHTTP2_BUILD_DIR} --config $ -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} --install ${NGHTTP2_BUILD_DIR} --prefix ${NGHTTP2_INSTALL_DIR} --config $ - COMMAND ${CMAKE_COMMAND} -E copy_directory ${NGHTTP2_INSTALL_DIR}/include ${INCLUDE_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${NGHTTP2_INCLUDE_DIRS} ${INCLUDE_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${NGHTTP2_LIBRARIES} ${LIB_DIR} BUILD_IN_SOURCE 0 ) diff --git a/third-party/zstd b/third-party/zstd new file mode 160000 index 0000000000..f9ed7f255e --- /dev/null +++ b/third-party/zstd @@ -0,0 +1 @@ +Subproject commit f9ed7f255ef267cbcbedf65268ce410b8e92eabd diff --git a/third-party/zstd-cmake/zstd.cmake b/third-party/zstd-cmake/zstd.cmake new file mode 100644 index 0000000000..17dd5e4c6d --- /dev/null +++ b/third-party/zstd-cmake/zstd.cmake @@ -0,0 +1,63 @@ +update_git_submodule(${THIRD_PARTY_DIR}/zstd "--remote") + +set(ZSTD_SOURCE_DIR ${THIRD_PARTY_DIR}/zstd) +set(ZSTD_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/zstd/build) +set(ZSTD_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/zstd/install) +set(ZSTD_BINARY_DIR ${ZSTD_BUILD_DIR}/lib) +set(ZSTD_LIBRARIES ${ZSTD_INSTALL_DIR}/lib/libzstd.a) +set(ZSTD_INCLUDE_DIRS ${ZSTD_INSTALL_DIR}/include) +set(ZSTD_PATCH_DIR ${ZSTD_BUILD_DIR}/debian/patches/) +set(ZSTD_PATCH_SERIES ${ZSTD_BUILD_DIR}/debian/patches/series) +# Ensure the build, installation and "include" directories exists +file(MAKE_DIRECTORY ${ZSTD_BUILD_DIR}) +file(MAKE_DIRECTORY ${ZSTD_INSTALL_DIR}) +file(MAKE_DIRECTORY ${ZSTD_INCLUDE_DIRS}) + +# The configuration has been based on: +# https://sources.debian.org/src/libzstd/1.4.8%2Bdfsg-2.1/debian/rules/ +set(ZSTD_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -Wno-unused-but-set-variable") +if(NOT APPLE) + set(ZSTD_COMPILE_FLAGS "${ZSTD_COMPILE_FLAGS} -static") +endif() + +set(ZSTD_MAKE_ARGS + CC=${CMAKE_C_COMPILER} + CFLAGS=${OPENSSL_COMPILE_FLAGS} +) + +set(ZSTD_MAKE_INSTALL_ARGS + PREFIX=${ZSTD_INSTALL_DIR} + INCLUDEDIR=${ZSTD_INSTALL_DIR}/include/zstd +) + +ExternalProject_Add( + zstd + PREFIX ${ZSTD_BUILD_DIR} + SOURCE_DIR ${ZSTD_SOURCE_DIR} + INSTALL_DIR ${ZSTD_INSTALL_DIR} + BINARY_DIR ${ZSTD_BINARY_DIR} + BUILD_BYPRODUCTS ${ZSTD_INSTALL_DIR}/lib/libzstd.a + PATCH_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZSTD_SOURCE_DIR} ${ZSTD_BUILD_DIR} + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${ZSTD_BUILD_DIR} -DPATCH_SERIES=${ZSTD_PATCH_SERIES} -DPATCH_DIR=${ZSTD_PATCH_DIR} -P ../../cmake/apply_patches.cmake + CONFIGURE_COMMAND + COMMAND # Nothing to configure + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} -E env ${ZSTD_MAKE_ARGS} make libzstd.a -j + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} -E env ${ZSTD_MAKE_INSTALL_ARGS} make install-static install-includes + COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZSTD_INCLUDE_DIRS} ${INCLUDE_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${ZSTD_LIBRARIES} ${LIB_DIR} + BUILD_IN_SOURCE 0 +) + +add_library(ZSTD::zstd STATIC IMPORTED) +set_target_properties(ZSTD::zstd PROPERTIES + IMPORTED_LOCATION ${ZSTD_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIRS} +) + +# Set variables indicating that zstd has been installed +set(ZSTD_FOUND ON) + +cmake_print_variables(ZSTD_LIBRARIES) From 196fdbc6dc624a51737457125b8fed86e6e334e1 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Mon, 24 Feb 2025 23:16:26 +0300 Subject: [PATCH 08/20] Factorize runtime library into PIC and non-PIC versions --- CMakeLists.txt | 10 +- cmake/external-libraries.cmake | 1 + cmake/init-global-vars.cmake | 1 + cmake/popular-common.cmake | 4 +- cmake/utils.cmake | 159 +++++++++++++++++++++--- common/binlog/binlog.cmake | 3 +- common/common-tests.cmake | 7 +- common/common.cmake | 17 ++- common/tl/compiler/tl-compiler.cmake | 2 +- common/tl2php/tl2php.cmake | 2 +- common/unicode/unicode.cmake | 18 +-- compiler/compiler-settings.cpp | 30 +++-- compiler/compiler.cmake | 2 +- net/net-tests.cmake | 7 +- net/net.cmake | 3 +- runtime-common/runtime-common.cmake | 7 +- runtime-light/runtime-light.cmake | 2 +- runtime/runtime.cmake | 71 +++++++++-- server/server.cmake | 3 +- tests/cpp/runtime/runtime-tests.cmake | 2 +- tests/cpp/server/server-tests.cmake | 2 +- tests/tests.cmake | 2 +- third-party/curl-cmake/curl.cmake | 23 +++- third-party/nghttp2-cmake/nghttp2.cmake | 21 ++++ third-party/openssl-cmake/openssl.cmake | 35 +++++- third-party/zlib-cmake/zlib.cmake | 120 ++++++++++++++++-- third-party/zstd-cmake/zstd.cmake | 32 ++++- 27 files changed, 480 insertions(+), 106 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 207c12864d..32d5070cb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,7 +73,7 @@ add_custom_target(kphp ALL DEPENDS ${OBJS_DIR}/php_lib_version.sha256) if (COMPILE_RUNTIME_LIGHT) add_dependencies(kphp kphp2cpp kphp-light-runtime) else () - add_dependencies(kphp kphp2cpp kphp-full-runtime) + add_dependencies(kphp kphp2cpp kphp-full-runtime-no-pic kphp-full-runtime-pic) endif () install(TARGETS kphp2cpp @@ -86,10 +86,12 @@ if (COMPILE_RUNTIME_LIGHT) COMPONENT KPHP LIBRARY DESTINATION ${INSTALL_KPHP_SOURCE}/objs) else () - install(TARGETS kphp-full-runtime + install(FILES ${OBJS_DIR}/libkphp-full-runtime-no-pic.a COMPONENT KPHP - LIBRARY DESTINATION ${INSTALL_KPHP_SOURCE}/objs - ARCHIVE DESTINATION ${INSTALL_KPHP_SOURCE}/objs) + DESTINATION ${INSTALL_KPHP_SOURCE}/objs) + install(FILES ${OBJS_DIR}/libkphp-full-runtime-pic.a + COMPONENT KPHP + DESTINATION ${INSTALL_KPHP_SOURCE}/objs) endif () install(DIRECTORY ${OBJS_DIR}/include diff --git a/cmake/external-libraries.cmake b/cmake/external-libraries.cmake index f88954a907..0ec4da23a2 100644 --- a/cmake/external-libraries.cmake +++ b/cmake/external-libraries.cmake @@ -66,6 +66,7 @@ else() ) message(STATUS "---------------------") FetchContent_MakeAvailable(h3) + set_target_properties(h3 PROPERTIES DOWNLOADED_LIBRARY 1) include_directories(${h3_BINARY_DIR}/src/include) add_definitions(-DKPHP_H3_LIB_DIR="${h3_BINARY_DIR}/lib") add_link_options(-L${h3_BINARY_DIR}/lib) diff --git a/cmake/init-global-vars.cmake b/cmake/init-global-vars.cmake index f57db464d6..86e73d6177 100644 --- a/cmake/init-global-vars.cmake +++ b/cmake/init-global-vars.cmake @@ -13,6 +13,7 @@ set(RUNTIME_LIGHT_DIR "${BASE_DIR}/runtime-light") set(RUNTIME_COMMON_DIR "${BASE_DIR}/runtime-common") if(APPLE) + detect_xcode_sdk_path(CMAKE_OSX_SYSROOT) set(ICONV_LIB iconv) else() set(RT_LIB rt) diff --git a/cmake/popular-common.cmake b/cmake/popular-common.cmake index bf42ac2f09..568d13b8d6 100644 --- a/cmake/popular-common.cmake +++ b/cmake/popular-common.cmake @@ -51,5 +51,5 @@ if(COMPILE_RUNTIME_LIGHT) target_link_options(light-common PUBLIC -stdlib=libc++) endif() -vk_add_library(popular_common OBJECT ${POPULAR_COMMON_SOURCES}) -set_property(TARGET popular_common PROPERTY POSITION_INDEPENDENT_CODE ON) +vk_add_library_no_pic(popular-common-no-pic OBJECT ${POPULAR_COMMON_SOURCES}) +vk_add_library_pic(popular-common-pic OBJECT ${POPULAR_COMMON_SOURCES}) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 3b7a0e90b0..80e7b5a054 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -9,6 +9,24 @@ function(vk_add_library) add_library(vk::${ARGV0} ALIAS ${ARGV0}) endfunction() +function(vk_add_library_pic) + add_library(${ARGV}) + set_target_properties(${ARGV0} PROPERTIES + POSITION_INDEPENDENT_CODE 1 + COMPILE_FLAGS "-fPIC" + ) +endfunction() + +function(vk_add_library_no_pic) + add_library(${ARGV}) + set_target_properties(${ARGV0} PROPERTIES + POSITION_INDEPENDENT_CODE 0 + COMPILE_FLAGS "-fno-pic -static" + ) +endfunction() + + + function(prepend VAR_NAME PREFIX) list(TRANSFORM ARGN PREPEND ${PREFIX} OUTPUT_VARIABLE ${VAR_NAME}) set(${VAR_NAME} ${${VAR_NAME}} PARENT_SCOPE) @@ -57,20 +75,20 @@ function(check_compiler_version compiler_name compiler_version) endfunction(check_compiler_version) # Function to initialize and update specific Git submodule -function(update_git_submodule submodule_path) - message(STATUS "Updating Git submodule ${submodule_path} ...") +function(update_git_submodule SUBMODULE_PATH) + message(STATUS "Updating Git submodule ${SUBMODULE_PATH} ...") # Update submodules execute_process( - COMMAND ${GIT_EXECUTABLE} submodule update --init ${ARGN} ${submodule_path} + COMMAND ${GIT_EXECUTABLE} submodule update --init ${ARGN} ${SUBMODULE_PATH} WORKING_DIRECTORY ${BASE_DIR} - RESULT_VARIABLE update_return_code - OUTPUT_VARIABLE update_stdout - ERROR_VARIABLE update_stderr + RESULT_VARIABLE return_code + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr ) - if(NOT update_return_code EQUAL 0) - message(FATAL_ERROR "Failed to update Git submodule ${submodule_path}: ${update_stdout} ${update_stderr}") + if(NOT return_code EQUAL 0) + message(FATAL_ERROR "Failed to update Git submodule ${SUBMODULE_PATH}: ${stdout} ${stderr}") endif() endfunction() @@ -78,22 +96,131 @@ function(detect_xcode_sdk_path OUTPUT_VARIABLE) # Use execute_process to run the xcrun command and capture the output execute_process( COMMAND xcrun --sdk macosx --show-sdk-path - OUTPUT_VARIABLE SDK_PATH + OUTPUT_VARIABLE sdk_path OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_VARIABLE ERROR_MSG - RESULT_VARIABLE RESULT + ERROR_VARIABLE stderr + RESULT_VARIABLE return_code ) # Check if the command was successful - if(RESULT EQUAL 0) + if(return_code EQUAL 0) # Check if the SDK_PATH is not empty - if(SDK_PATH) - set(${OUTPUT_VARIABLE} "${SDK_PATH}" PARENT_SCOPE) - message(STATUS "Detected Xcode SDK path: ${SDK_PATH}") + if(sdk_path) + set(${OUTPUT_VARIABLE} "${sdk_path}" PARENT_SCOPE) + message(STATUS "Detected Xcode SDK path: ${sdk_path}") else() message(FATAL_ERROR "Failed to detect Xcode SDK path: Output is empty.") endif() else() - message(FATAL_ERROR "Failed to detect Xcode SDK path: ${ERROR_MSG}") + message(FATAL_ERROR "Failed to detect Xcode SDK path: ${stderr}") + endif() +endfunction() + +# Parameters: +# TARGET - The initial target of runtime library whose dependencies will be combined. +# COMBINED_TARGET - The name of the final static runtime library to be created. +function(combine_static_runtime_library TARGET COMBINED_TARGET) + list(APPEND dependencies_list ${TARGET}) + + # DFS for dependencies + function(collect_dependencies ROOT_TARGET) + set(target_linked_libraries_kind LINK_LIBRARIES) + get_target_property(target_kind ${ROOT_TARGET} TYPE) + if (${target_kind} STREQUAL "INTERFACE_LIBRARY") + set(target_linked_libraries_kind INTERFACE_LINK_LIBRARIES) + endif() + + # Get the list of linked libraries for the target. + get_target_property(public_deps ${ROOT_TARGET} ${target_linked_libraries_kind}) + + foreach(dep IN LISTS public_deps) + if(TARGET ${dep}) + get_target_property(alias ${dep} ALIASED_TARGET) + if(TARGET ${alias}) + set(dep ${alias}) + endif() + + get_target_property(is_downloaded_lib ${dep} DOWNLOADED_LIBRARY) + if(is_downloaded_lib EQUAL 1) + continue() + endif() + + get_target_property(dep_kind ${dep} TYPE) + if(${dep_kind} STREQUAL "STATIC_LIBRARY") + list(APPEND dependencies_list ${dep}) + endif() + + get_property(visited GLOBAL PROPERTY _${TARGET}_depends_on_${dep}) + if(NOT visited) + set_property(GLOBAL PROPERTY _${TARGET}_depends_on_${dep} ON) + collect_dependencies(${dep}) + endif() + endif() + endforeach() + set(dependencies_list ${dependencies_list} PARENT_SCOPE) + endfunction() + + # Start collecting dependencies from the initial target. + collect_dependencies(${TARGET}) + list(REMOVE_DUPLICATES dependencies_list) + + set(combined_target_path ${OBJS_DIR}/lib${COMBINED_TARGET}.a) + + if(CMAKE_CXX_COMPILER_ID MATCHES "^(Clang|GNU)$") + file(WRITE ${CMAKE_BINARY_DIR}/${COMBINED_TARGET}.ar.in "CREATE ${combined_target_path}\n" ) + + foreach(dep IN LISTS dependencies_list) + file(APPEND ${CMAKE_BINARY_DIR}/${COMBINED_TARGET}.ar.in "ADDLIB $\n") + endforeach() + file(APPEND ${CMAKE_BINARY_DIR}/${COMBINED_TARGET}.ar.in "SAVE\n") + file(APPEND ${CMAKE_BINARY_DIR}/${COMBINED_TARGET}.ar.in "END\n") + + file(GENERATE + OUTPUT ${CMAKE_BINARY_DIR}/${COMBINED_TARGET}.ar + INPUT ${CMAKE_BINARY_DIR}/${COMBINED_TARGET}.ar.in + ) + + set(ar_tool ${CMAKE_AR}) + # If LTO is enabled + if(CMAKE_INTERPROCEDURAL_OPTIMIZATION) + set(ar_tool ${CMAKE_CXX_COMPILER_AR}) + endif() + + add_custom_command( + COMMAND ${ar_tool} -M < ${CMAKE_BINARY_DIR}/${COMBINED_TARGET}.ar + OUTPUT ${combined_target_path} + COMMENT "Bundling ${COMBINED_TARGET}" + VERBATIM + ) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "^AppleClang$") + set(ar_tool libtool) + # If LTO is enabled + if (CMAKE_INTERPROCEDURAL_OPTIMIZATION) + set(ar_tool ${CMAKE_CXX_COMPILER_AR}) + endif() + + list(TRANSFORM dependencies_list PREPEND "$") + + add_custom_command( + COMMAND cmake -E echo "$>>" + COMMAND ${ar_tool} -static -o ${combined_target_path} "$>>" + COMMAND_EXPAND_LISTS + OUTPUT ${combined_target_path} + COMMENT "Bundling ${COMBINED_TARGET}" + VERBATIM + ) + else() + message(FATAL_ERROR "Unknown toolchain for runtime library combining") endif() + + add_custom_target(_combined_${TARGET} ALL DEPENDS ${combined_target_path}) + add_dependencies(_combined_${TARGET} ${TARGET}) + + add_library(${COMBINED_TARGET} STATIC IMPORTED) + set_target_properties(${COMBINED_TARGET} + PROPERTIES + IMPORTED_LOCATION ${combined_target_path} + INTERFACE_INCLUDE_DIRECTORIES $) + add_dependencies(${COMBINED_TARGET} _combined_${TARGET}) endfunction() diff --git a/common/binlog/binlog.cmake b/common/binlog/binlog.cmake index 1a6ecbadb9..b76a473cbc 100644 --- a/common/binlog/binlog.cmake +++ b/common/binlog/binlog.cmake @@ -6,4 +6,5 @@ prepend(BINLOG_SOURCES ${COMMON_DIR}/binlog/ binlog-buffer-replay.cpp binlog-snapshot.cpp) -vk_add_library(binlog_src OBJECT ${BINLOG_SOURCES}) +vk_add_library_no_pic(binlog-src-no-pic OBJECT ${BINLOG_SOURCES}) +vk_add_library_pic(binlog-src-pic OBJECT ${BINLOG_SOURCES}) \ No newline at end of file diff --git a/common/common-tests.cmake b/common/common-tests.cmake index 30293a7f8c..61f208fdee 100644 --- a/common/common-tests.cmake +++ b/common/common-tests.cmake @@ -19,10 +19,5 @@ prepend(COMMON_TESTS_SOURCES ${COMMON_DIR}/ wrappers/string_view-test.cpp ucontext/ucontext-portable-test.cpp) -set(COMMON_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${COMMON_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto ZSTD::zstd) -if(COMPILE_RUNTIME_LIGHT) - set(COMMON_TESTS_LIBS ${COMMON_TESTS_LIBS} ZLIB::ZLIB_PIC) -else() - set(COMMON_TESTS_LIBS ${COMMON_TESTS_LIBS} ZLIB::ZLIB_NO_PIC) -endif() +set(COMMON_TESTS_LIBS common-src-no-pic net-src-no-pic binlog-src-no-pic unicode-no-pic ${EPOLL_SHIM_LIB} OpenSSL::no-pic::Crypto ZSTD::no-pic::zstd ZLIB::no-pic::zlib) vk_add_unittest(common "${COMMON_TESTS_LIBS}" ${COMMON_TESTS_SOURCES}) diff --git a/common/common.cmake b/common/common.cmake index 5b55b3ae90..3ce9857ebf 100644 --- a/common/common.cmake +++ b/common/common.cmake @@ -63,13 +63,10 @@ if(COMPILER_CLANG) set_source_files_properties(${COMMON_DIR}/string-processing.cpp PROPERTIES COMPILE_FLAGS -Wno-invalid-source-encoding) endif() -vk_add_library(common_src OBJECT ${COMMON_ALL_SOURCES}) -add_dependencies(common_src openssl zstd) -target_include_directories(common_src PUBLIC ${ZSTD_INCLUDE_DIRS}) -if(COMPILE_RUNTIME_LIGHT) - add_dependencies(common_src zlib-pic) - target_include_directories(common_src PUBLIC ${ZLIB_PIC_INCLUDE_DIRS}) -else() - add_dependencies(common_src zlib-no-pic) - target_include_directories(common_src PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS}) -endif() +vk_add_library_no_pic(common-src-no-pic OBJECT ${COMMON_ALL_SOURCES}) +add_dependencies(common-src-no-pic OpenSSL::no-pic::Crypto ZLIB::no-pic::zlib ZSTD::no-pic::zstd) +target_include_directories(common-src-no-pic PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) + +vk_add_library_pic(common-src-pic OBJECT ${COMMON_ALL_SOURCES}) +add_dependencies(common-src-pic OpenSSL::pic::Crypto ZLIB::pic::zlib ZSTD::pic::zstd) +target_include_directories(common-src-pic PUBLIC ${ZLIB_PIC_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) diff --git a/common/tl/compiler/tl-compiler.cmake b/common/tl/compiler/tl-compiler.cmake index 40ca5a70ae..4bd70f8be5 100644 --- a/common/tl/compiler/tl-compiler.cmake +++ b/common/tl/compiler/tl-compiler.cmake @@ -2,6 +2,6 @@ set(TL_COMPILER_DIR ${COMMON_DIR}/tl/compiler) set(TL_COMPILER_SOURCES ${TL_COMPILER_DIR}/tl-compiler.cpp ${TL_COMPILER_DIR}/tl-parser-new.cpp) add_executable(tl-compiler ${TL_COMPILER_SOURCES}) -target_link_libraries(tl-compiler PRIVATE vk::popular_common pthread) +target_link_libraries(tl-compiler PRIVATE popular-common-no-pic pthread) target_link_options(tl-compiler PRIVATE ${NO_PIE}) set_target_properties(tl-compiler PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}) diff --git a/common/tl2php/tl2php.cmake b/common/tl2php/tl2php.cmake index 072d33a04b..6c325dab4d 100644 --- a/common/tl2php/tl2php.cmake +++ b/common/tl2php/tl2php.cmake @@ -10,6 +10,6 @@ prepend(TL2PHP_SOURCES ${COMMON_DIR}/tl2php/ tl-to-php-classes-converter.cpp) add_executable(tl2php ${TL2PHP_SOURCES}) -target_link_libraries(tl2php PRIVATE pthread vk::popular_common vk::tlo_parsing_src) +target_link_libraries(tl2php PRIVATE pthread popular-common-no-pic vk::tlo_parsing_src) target_link_options(tl2php PRIVATE ${NO_PIE}) set_target_properties(tl2php PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}) diff --git a/common/unicode/unicode.cmake b/common/unicode/unicode.cmake index 488eda1abb..60796b5aa9 100644 --- a/common/unicode/unicode.cmake +++ b/common/unicode/unicode.cmake @@ -34,18 +34,22 @@ add_custom_command( set(UNICODE_SOURCES unicode-utils.cpp utf8-utils.cpp) if (COMPILE_RUNTIME_LIGHT) - set(UNICODE_SOURCES_FOR_COMP "${UNICODE_SOURCES}") - configure_file(${BASE_DIR}/compiler/unicode_sources.h.in ${AUTO_DIR}/compiler/unicode_sources.h) + set(UNICODE_SOURCES_FOR_COMP "${UNICODE_SOURCES}") + configure_file(${BASE_DIR}/compiler/unicode_sources.h.in ${AUTO_DIR}/compiler/unicode_sources.h) endif() prepend(UNICODE_SOURCES ${UNICODE_DIR}/ ${UNICODE_SOURCES}) if (COMPILE_RUNTIME_LIGHT) - vk_add_library(light-unicode OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) - set_property(TARGET light-unicode PROPERTY POSITION_INDEPENDENT_CODE ON) + vk_add_library(light-unicode OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) + set_property(TARGET light-unicode PROPERTY POSITION_INDEPENDENT_CODE ON) - target_compile_options(light-unicode PUBLIC -stdlib=libc++ -fPIC) - target_link_options(light-unicode PUBLIC -stdlib=libc++) + target_compile_options(light-unicode PUBLIC -stdlib=libc++ -fPIC) + target_link_options(light-unicode PUBLIC -stdlib=libc++) endif() -vk_add_library(unicode OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) +vk_add_library_no_pic(unicode-no-pic OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) +vk_add_library_pic(unicode-pic OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) + +# Prevent race-condition in "unicode raw data generation" operations +add_dependencies(unicode-pic unicode-no-pic) diff --git a/compiler/compiler-settings.cpp b/compiler/compiler-settings.cpp index e63c1d2da6..749cb38bae 100644 --- a/compiler/compiler-settings.cpp +++ b/compiler/compiler-settings.cpp @@ -149,11 +149,11 @@ void append_3dparty_headers(std::string &cxx_flags, const std::string &path_to_3 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 { +[[maybe_unused]] void append_3dparty_lib(std::string &ld_flags, const std::string &path_to_3dparty, const std::string &libname) noexcept { ld_flags += " " + path_to_3dparty + "lib/lib" + libname + ".a"; } -void append_curl([[maybe_unused]] std::string &cxx_flags, std::string &ld_flags, [[maybe_unused]] const std::string &path_to_3dparty) noexcept { +[[maybe_unused]] void append_curl([[maybe_unused]] std::string &cxx_flags, std::string &ld_flags, [[maybe_unused]] const std::string &path_to_3dparty) noexcept { if (!contains_lib(ld_flags, "curl")) { #if defined(__APPLE__) ld_flags += " -lcurl"; @@ -247,7 +247,11 @@ void CompilerSettings::init() { if (is_k2_mode) { link_file.value_ = kphp_src_path.get() + "/objs/libkphp-light-runtime.a"; } else { - link_file.value_ = kphp_src_path.get() + "/objs/libkphp-full-runtime.a"; + if (dynamic_incremental_linkage.get()) { + link_file.value_ = kphp_src_path.get() + "/objs/libkphp-full-runtime-pic.a"; + } else { + link_file.value_ = kphp_src_path.get() + "/objs/libkphp-full-runtime-no-pic.a"; + } } } link_file.value_ = get_full_path(link_file.get()); @@ -366,7 +370,7 @@ void CompilerSettings::init() { 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_curl(cxx_default_flags, ld_flags.value_, third_party_path); append_apple_options(cxx_default_flags, ld_flags.value_); std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "kphp-timelib"}; @@ -424,15 +428,15 @@ void CompilerSettings::init() { system_installed_dynamic_libs.emplace_back("rt"); #endif - append_3dparty_lib(ld_flags.value_, third_party_path, "ssl"); - append_3dparty_lib(ld_flags.value_, third_party_path, "crypto"); - append_3dparty_lib(ld_flags.value_, third_party_path, "nghttp2"); - append_3dparty_lib(ld_flags.value_, third_party_path, "zstd"); - if (is_k2_mode) { - append_3dparty_lib(ld_flags.value_, third_party_path, "z-pic"); - } else { - append_3dparty_lib(ld_flags.value_, third_party_path, "z-no-pic"); - } +// append_3dparty_lib(ld_flags.value_, third_party_path, "ssl"); +// append_3dparty_lib(ld_flags.value_, third_party_path, "crypto"); +// append_3dparty_lib(ld_flags.value_, third_party_path, "nghttp2"); +// append_3dparty_lib(ld_flags.value_, third_party_path, "zstd"); +// if (is_k2_mode) { +// append_3dparty_lib(ld_flags.value_, third_party_path, "z-pic"); +// } else { +// append_3dparty_lib(ld_flags.value_, third_party_path, "z-no-pic"); +// } append_if_doesnt_contain(ld_flags.value_, system_installed_dynamic_libs, "-l"); ld_flags.value_ += " -rdynamic"; diff --git a/compiler/compiler.cmake b/compiler/compiler.cmake index b38ee4b4f4..3ec17d9b4e 100644 --- a/compiler/compiler.cmake +++ b/compiler/compiler.cmake @@ -277,7 +277,7 @@ target_include_directories(kphp2cpp PUBLIC ${KPHP_COMPILER_DIR}) add_dependencies(kphp2cpp openssl) prepare_cross_platform_libs(COMPILER_LIBS yaml-cpp re2) -set(COMPILER_LIBS vk::kphp2cpp_src vk::tlo_parsing_src vk::popular_common ${COMPILER_LIBS} fmt::fmt OpenSSL::Crypto pthread) +set(COMPILER_LIBS vk::kphp2cpp_src vk::tlo_parsing_src popular-common-no-pic ${COMPILER_LIBS} fmt::fmt OpenSSL::Crypto pthread) if(NOT APPLE) list(APPEND COMPILER_LIBS stdc++fs) endif() diff --git a/net/net-tests.cmake b/net/net-tests.cmake index e81ddfb9ea..78eb8524bd 100644 --- a/net/net-tests.cmake +++ b/net/net-tests.cmake @@ -4,10 +4,5 @@ prepend(NET_TESTS_SOURCES ${BASE_DIR}/net/ net-test.cpp time-slice-test.cpp) -set(NET_TESTS_LIBS vk::common_src vk::net_src vk::binlog_src vk::unicode ${NET_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::Crypto ZSTD::zstd) -if(COMPILE_RUNTIME_LIGHT) - set(NET_TESTS_LIBS ${NET_TESTS_LIBS} ZLIB::ZLIB_PIC) -else() - set(NET_TESTS_LIBS ${NET_TESTS_LIBS} ZLIB::ZLIB_NO_PIC) -endif() +set(NET_TESTS_LIBS common-src-no-pic net-src-no-pic binlog-src-no-pic unicode-no-pic ${NET_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::no-pic::Crypto ZSTD::no-pic::zstd ZLIB::no-pic::zlib) vk_add_unittest(net "${NET_TESTS_LIBS}" ${NET_TESTS_SOURCES}) diff --git a/net/net.cmake b/net/net.cmake index bbd16bebbe..0c3acdabbd 100644 --- a/net/net.cmake +++ b/net/net.cmake @@ -23,4 +23,5 @@ prepend(NET_SOURCES ${BASE_DIR}/net/ net-msg.cpp net-msg-part.cpp) -vk_add_library(net_src OBJECT ${NET_SOURCES}) +vk_add_library_no_pic(net-src-no-pic OBJECT ${NET_SOURCES}) +vk_add_library_pic(net-src-pic OBJECT ${NET_SOURCES}) \ No newline at end of file diff --git a/runtime-common/runtime-common.cmake b/runtime-common/runtime-common.cmake index 0394fb58be..d51c5d4276 100644 --- a/runtime-common/runtime-common.cmake +++ b/runtime-common/runtime-common.cmake @@ -10,8 +10,11 @@ if(COMPILE_RUNTIME_LIGHT) endif() prepend(RUNTIME_COMMON_SRC ${RUNTIME_COMMON_DIR}/ "${RUNTIME_COMMON_SRC}") -vk_add_library(runtime-common OBJECT ${RUNTIME_COMMON_SRC}) +vk_add_library_no_pic(runtime-common-no-pic OBJECT ${RUNTIME_COMMON_SRC}) +vk_add_library_pic(runtime-common-pic OBJECT ${RUNTIME_COMMON_SRC}) if(COMPILE_RUNTIME_LIGHT) - target_compile_options(runtime-common PUBLIC -stdlib=libc++ -fPIC) + target_compile_options(runtime-common-pic PUBLIC -stdlib=libc++ -fPIC) endif() + + diff --git a/runtime-light/runtime-light.cmake b/runtime-light/runtime-light.cmake index 2deba5067f..57e3cb69ea 100644 --- a/runtime-light/runtime-light.cmake +++ b/runtime-light/runtime-light.cmake @@ -65,7 +65,7 @@ endif() vk_add_library(kphp-light-runtime STATIC) target_link_libraries( kphp-light-runtime PUBLIC vk::light-common vk::light-unicode - vk::runtime-light vk::runtime-common) + vk::runtime-light runtime-common-pic) set_target_properties(kphp-light-runtime PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${OBJS_DIR}) diff --git a/runtime/runtime.cmake b/runtime/runtime.cmake index f649dfc4e8..1887143805 100644 --- a/runtime/runtime.cmake +++ b/runtime/runtime.cmake @@ -139,17 +139,65 @@ set(KPHP_RUNTIME_ALL_SOURCES allow_deprecated_declarations(${BASE_DIR}/runtime/allocator.cpp ${BASE_DIR}/runtime/openssl.cpp) 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} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) - -add_dependencies(kphp_runtime kphp-timelib curl zstd) -add_dependencies(curl openssl zlib-no-pic) +#### NO PIC +vk_add_library_no_pic(kphp-runtime-no-pic STATIC ${KPHP_RUNTIME_ALL_SOURCES}) +target_include_directories(kphp-runtime-no-pic PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) + +prepare_cross_platform_libs(RUNTIME_LIBS_NO_PIC yaml-cpp re2 h3) +set(RUNTIME_LIBS_NO_PIC + kphp-server-no-pic + runtime-common-no-pic + popular-common-no-pic + unicode-no-pic + common-src-no-pic + binlog-src-no-pic + net-src-no-pic + ${RUNTIME_LIBS_NO_PIC} + CURL::no-pic::curl + OpenSSL::no-pic::SSL + OpenSSL::no-pic::Crypto + ZLIB::no-pic::zlib + NGHTTP2::no-pic::nghttp2 + ZSTD::no-pic::zstd + m + pthread +) +target_link_libraries(kphp-runtime-no-pic PUBLIC ${RUNTIME_LIBS_NO_PIC}) + +add_dependencies(kphp-runtime-no-pic kphp-timelib OpenSSL::no-pic::Crypto OpenSSL::no-pic::SSL CURL::no-pic::curl NGHTTP2::no-pic::nghttp2 ZLIB::no-pic::zlib ZSTD::no-pic::zstd) +combine_static_runtime_library(kphp-runtime-no-pic kphp-full-runtime-no-pic) + +set(RUNTIME_FULL_LIBS_NO_PIC kphp-runtime-no-pic ${RUNTIME_LIBS_NO_PIC}) +### + +#### PIC +vk_add_library_pic(kphp-runtime-pic STATIC ${KPHP_RUNTIME_ALL_SOURCES}) +target_include_directories(kphp-runtime-pic PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) + +prepare_cross_platform_libs(RUNTIME_LIBS_PIC yaml-cpp re2 h3) +set(RUNTIME_LIBS_PIC + kphp-server-pic + runtime-common-pic + popular-common-pic + unicode-pic + common-src-pic + binlog-src-pic + net-src-pic + ${RUNTIME_LIBS_PIC} + CURL::pic::curl + OpenSSL::pic::SSL + OpenSSL::pic::Crypto + ZLIB::pic::zlib + NGHTTP2::pic::nghttp2 + ZSTD::pic::zstd + m + pthread +) +target_link_libraries(kphp-runtime-pic PUBLIC ${RUNTIME_LIBS_PIC}) -prepare_cross_platform_libs(RUNTIME_LIBS yaml-cpp re2 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 ZLIB::ZLIB_NO_PIC ZSTD::zstd 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}) +add_dependencies(kphp-runtime-pic kphp-timelib OpenSSL::pic::Crypto OpenSSL::pic::SSL CURL::pic::curl NGHTTP2::pic::nghttp2 ZLIB::pic::zlib ZSTD::pic::zstd) +combine_static_runtime_library(kphp-runtime-pic kphp-full-runtime-pic) +### prepare_cross_platform_libs(RUNTIME_LINK_TEST_LIBS pcre kphp-timelib) set(RUNTIME_LINK_TEST_LIBS vk::flex_data_static CURL::curl OpenSSL::SSL NGHTTP2::nghttp2 ${NUMA_LIB} ${RUNTIME_LINK_TEST_LIBS} ${EPOLL_SHIM_LIB} ${ICONV_LIB} ${RT_LIB} dl) @@ -189,9 +237,8 @@ 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_NO_PIC_INCLUDE_DIRS}) target_compile_options(php_lib_version_j PRIVATE -I. -E) -add_dependencies(php_lib_version_j kphp-full-runtime) +add_dependencies(php_lib_version_j kphp-full-runtime-no-pic kphp-full-runtime-pic) add_custom_command(OUTPUT ${OBJS_DIR}/php_lib_version.sha256 COMMAND tail -n +3 $ | sha256sum | awk '{print $$1}' > ${OBJS_DIR}/php_lib_version.sha256 diff --git a/server/server.cmake b/server/server.cmake index 9e2f22ebe9..913c6a700f 100644 --- a/server/server.cmake +++ b/server/server.cmake @@ -73,4 +73,5 @@ set(KPHP_SERVER_ALL_SOURCES ${KPHP_DATABASE_DRIVERS_PGSQL_SOURCES}) allow_deprecated_declarations_for_apple(${BASE_DIR}/server/php-runner.cpp) -vk_add_library(kphp_server OBJECT ${KPHP_SERVER_ALL_SOURCES}) +vk_add_library_no_pic(kphp-server-no-pic OBJECT ${KPHP_SERVER_ALL_SOURCES}) +vk_add_library_pic(kphp-server-pic OBJECT ${KPHP_SERVER_ALL_SOURCES}) \ No newline at end of file diff --git a/tests/cpp/runtime/runtime-tests.cmake b/tests/cpp/runtime/runtime-tests.cmake index 731da98fe6..b454b94f0b 100644 --- a/tests/cpp/runtime/runtime-tests.cmake +++ b/tests/cpp/runtime/runtime-tests.cmake @@ -24,4 +24,4 @@ prepend(RUNTIME_TESTS_SOURCES ${BASE_DIR}/tests/cpp/runtime/ zstd-test.cpp) allow_deprecated_declarations_for_apple(${BASE_DIR}/tests/cpp/runtime/inter-process-mutex-test.cpp) -vk_add_unittest(runtime "${RUNTIME_LIBS};${RUNTIME_LINK_TEST_LIBS}" ${RUNTIME_TESTS_SOURCES}) +vk_add_unittest(runtime "${RUNTIME_FULL_LIBS_NO_PIC};${RUNTIME_LINK_TEST_LIBS}" ${RUNTIME_TESTS_SOURCES}) diff --git a/tests/cpp/server/server-tests.cmake b/tests/cpp/server/server-tests.cmake index 55b7368d46..b9bd42a860 100644 --- a/tests/cpp/server/server-tests.cmake +++ b/tests/cpp/server/server-tests.cmake @@ -10,4 +10,4 @@ if(COMPILER_GCC) set_source_files_properties(${BASE_DIR}/tests/cpp/server/confdata-binlog-events-test.cpp PROPERTIES COMPILE_FLAGS -Wno-stringop-overflow) endif() -vk_add_unittest(server "${RUNTIME_LIBS};${RUNTIME_LINK_TEST_LIBS}" ${SERVER_TESTS_SOURCES} ${BASE_DIR}/tests/cpp/runtime/_runtime-tests-env.cpp) +vk_add_unittest(server "${RUNTIME_FULL_LIBS_NO_PIC};${RUNTIME_LINK_TEST_LIBS}" ${SERVER_TESTS_SOURCES} ${BASE_DIR}/tests/cpp/runtime/_runtime-tests-env.cpp) diff --git a/tests/tests.cmake b/tests/tests.cmake index d752ca9a4e..bbd16655bb 100644 --- a/tests/tests.cmake +++ b/tests/tests.cmake @@ -2,7 +2,7 @@ if(KPHP_TESTS) function(vk_add_unittest TEST_NAME SRC_LIBS) set(TEST_NAME unittests-${TEST_NAME}) add_executable(${TEST_NAME} ${ARGN}) - target_link_libraries(${TEST_NAME} PRIVATE GTest::GTest GTest::Main gmock ${SRC_LIBS} vk::popular_common) + target_link_libraries(${TEST_NAME} PRIVATE GTest::GTest GTest::Main gmock ${SRC_LIBS} popular-common-no-pic) target_link_options(${TEST_NAME} PRIVATE ${NO_PIE}) # because of https://github.com/VKCOM/kphp/actions/runs/5463884925/jobs/9945150190 diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index 29c9ea924d..cd24cf1253 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -28,8 +28,6 @@ endif() set(CURL_CMAKE_ARGS -DCMAKE_C_FLAGS=${CURL_COMPILE_FLAGS} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_FLAGS=${CURL_COMPILE_FLAGS} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_POSITION_INDEPENDENT_CODE=OFF -DBUILD_TESTING=OFF -DCURL_WERROR=ON # Recommend to enable when optimization level less than -O3 @@ -82,6 +80,27 @@ set_target_properties(CURL::curl PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS} ) +add_dependencies(CURL::curl curl) + + +############################## +add_library(CURL::pic::curl STATIC IMPORTED) +set_target_properties(CURL::pic::curl PROPERTIES + IMPORTED_LOCATION ${CURL_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS} +) + +add_dependencies(CURL::pic::curl curl) + +add_library(CURL::no-pic::curl STATIC IMPORTED) +set_target_properties(CURL::no-pic::curl PROPERTIES + IMPORTED_LOCATION ${CURL_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS} +) + +add_dependencies(CURL::no-pic::curl curl) +############################### + # Set variables indicating that curl has been installed set(CURL_FOUND ON) diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake index 8749ccd265..9ae9443052 100644 --- a/third-party/nghttp2-cmake/nghttp2.cmake +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -79,6 +79,27 @@ set_target_properties(NGHTTP2::nghttp2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} ) +add_dependencies(NGHTTP2::nghttp2 nghttp2) + +######################################## +add_library(NGHTTP2::pic::nghttp2 STATIC IMPORTED) +set_target_properties(NGHTTP2::pic::nghttp2 PROPERTIES + IMPORTED_LOCATION ${NGHTTP2_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} +) + +add_dependencies(NGHTTP2::pic::nghttp2 nghttp2) + +add_library(NGHTTP2::no-pic::nghttp2 STATIC IMPORTED) +set_target_properties(NGHTTP2::no-pic::nghttp2 PROPERTIES + IMPORTED_LOCATION ${NGHTTP2_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} +) + +add_dependencies(NGHTTP2::no-pic::nghttp2 nghttp2) +############################################### + + # Set variables indicating that NGHTTP2 has been installed set(NGHTTP2_FOUND ON) set(NGHTTP2_ROOT ${NGHTTP2_INSTALL_DIR}) diff --git a/third-party/openssl-cmake/openssl.cmake b/third-party/openssl-cmake/openssl.cmake index d7edf3966b..ed284d51cf 100644 --- a/third-party/openssl-cmake/openssl.cmake +++ b/third-party/openssl-cmake/openssl.cmake @@ -25,7 +25,6 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") endif() if(APPLE) - detect_xcode_sdk_path(CMAKE_OSX_SYSROOT) set(OPENSSL_COMPILE_FLAGS "${OPENSSL_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") endif() @@ -71,6 +70,40 @@ set_target_properties(OpenSSL::Crypto PROPERTIES add_dependencies(OpenSSL::SSL openssl) add_dependencies(OpenSSL::Crypto openssl) + +########################################## +add_library(OpenSSL::pic::SSL STATIC IMPORTED) +set_target_properties(OpenSSL::pic::SSL PROPERTIES + IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libssl.a + INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} +) + +add_library(OpenSSL::pic::Crypto STATIC IMPORTED) +set_target_properties(OpenSSL::pic::Crypto PROPERTIES + IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a + INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} +) + +add_dependencies(OpenSSL::pic::SSL openssl) +add_dependencies(OpenSSL::pic::Crypto openssl) + + +add_library(OpenSSL::no-pic::SSL STATIC IMPORTED) +set_target_properties(OpenSSL::no-pic::SSL PROPERTIES + IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libssl.a + INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} +) + +add_library(OpenSSL::no-pic::Crypto STATIC IMPORTED) +set_target_properties(OpenSSL::no-pic::Crypto PROPERTIES + IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a + INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} +) + +add_dependencies(OpenSSL::no-pic::SSL openssl) +add_dependencies(OpenSSL::no-pic::Crypto openssl) +################### + # Set variables indicating that OpenSSL has been found and specify its library locations set(OPENSSL_FOUND ON) set(OPENSSL_ROOT_DIR ${OPENSSL_INSTALL_DIR}) diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index b17a3e2b04..ff08ffca43 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -1,20 +1,114 @@ update_git_submodule(${THIRD_PARTY_DIR}/zlib "--recursive") -set(ZLIB_SOURCE_DIR ${THIRD_PARTY_DIR}/zlib) +function(build_zlib PIC_MODE) + set(PROJECT_GENERIC_NAME zlib) + set(TARGET_NAMESPACE ZLIB) + set(TARGET_GENERIC_NAME ZLIB) -# 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") + set(PROJECT_NAME) + set(TARGET_NAME) + set(EXTRA_COMPILE_FLAGS) + set(SUFFIX) -if(APPLE) - detect_xcode_sdk_path(CMAKE_OSX_SYSROOT) - set(ZLIB_COMMON_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") -endif() + if(PIC_MODE) + set(SUFFIX "-pic") + set(EXTRA_COMPILE_FLAGS "-fPIC") + set(TARGET_NAME "${TARGET_GENERIC_NAME}_PIC") + else() + set(SUFFIX "-no-pic") + set(EXTRA_COMPILE_FLAGS "-fno-pic") + if(NOT APPLE) + set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -static") + endif() + set(TARGET_NAME "${TARGET_GENERIC_NAME}_NO_PIC") + endif() -if (NOT COMPILE_RUNTIME_LIGHT) - include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-no-pic.cmake) -endif () + if(APPLE) + set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") + endif() -include(${THIRD_PARTY_DIR}/zlib-cmake/zlib-pic.cmake) + set(PROJECT_NAME "${PROJECT_GENERIC_NAME}${SUFFIX}") -set(ZLIB_FOUND ON) + set(SOURCE_DIR ${THIRD_PARTY_DIR}/zlib) + set(BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/${PROJECT_NAME}/build) + set(INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/${PROJECT_NAME}/install) + set(INCLUDE_DIRS ${INSTALL_DIR}/include) + set(LIBRARIES ${INSTALL_DIR}/lib/libz${SUFFIX}.a) + # Ensure the build, installation and "include" directories exists + file(MAKE_DIRECTORY ${BUILD_DIR}) + file(MAKE_DIRECTORY ${INSTALL_DIR}) + file(MAKE_DIRECTORY ${INCLUDE_DIRS}) + + set(COMPILE_FLAGS "$ENV{CFLAGS} -g0 -Wall -O3 -D_REENTRANT ${EXTRA_COMPILE_FLAGS}") + + message(STATUS "Zlib Summary: + + PIC mode: ${PIC_MODE} + Source dir: ${SOURCE_DIR} + Build dir: ${BUILD_DIR} + Install dir: ${INSTALL_DIR} + Include dirs: ${INCLUDE_DIRS} + Libraries: ${LIBRARIES} + Compiler: + C compiler: ${CMAKE_C_COMPILER} + CFLAGS: ${COMPILE_FLAGS} + ") + + ExternalProject_Add( + ${PROJECT_NAME} + PREFIX ${BUILD_DIR} + SOURCE_DIR ${SOURCE_DIR} + INSTALL_DIR ${INSTALL_DIR} + BINARY_DIR ${BUILD_DIR} + BUILD_BYPRODUCTS ${LIBRARIES} + CONFIGURE_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${SOURCE_DIR} ${BUILD_DIR} + COMMAND ${CMAKE_COMMAND} -E env CC=${CMAKE_C_COMPILER} CFLAGS=${COMPILE_FLAGS} ./configure --prefix=${INSTALL_DIR} --includedir=${INCLUDE_DIRS}/zlib --static + BUILD_COMMAND + COMMAND make libz.a -j + INSTALL_COMMAND + COMMAND make install + COMMAND ${CMAKE_COMMAND} -E copy ${INSTALL_DIR}/lib/libz.a ${LIBRARIES} + COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARIES} ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${INCLUDE_DIRS} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 + ) + + add_library(${TARGET_NAMESPACE}::${TARGET_NAME} STATIC IMPORTED) + set_target_properties(${TARGET_NAMESPACE}::${TARGET_NAME} PROPERTIES + IMPORTED_LOCATION ${LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_DIRS} + ) + + # Ensure that the zlib are built before they are used + add_dependencies(${TARGET_NAMESPACE}::${TARGET_NAME} ${PROJECT_NAME}) + + ###################################### + if(PIC_MODE) + add_library(${TARGET_NAMESPACE}::pic::zlib STATIC IMPORTED) + set_target_properties(${TARGET_NAMESPACE}::pic::zlib PROPERTIES + IMPORTED_LOCATION ${LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_DIRS} + ) + add_dependencies(${TARGET_NAMESPACE}::pic::zlib ${PROJECT_NAME}) + else() + add_library(${TARGET_NAMESPACE}::no-pic::zlib STATIC IMPORTED) + set_target_properties(${TARGET_NAMESPACE}::no-pic::zlib PROPERTIES + IMPORTED_LOCATION ${LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_DIRS} + ) + add_dependencies(${TARGET_NAMESPACE}::no-pic::zlib ${PROJECT_NAME}) + endif() + ###################################### + + # Set variables indicating that zlib has been installed + set(${TARGET_NAME}_ROOT ${INSTALL_DIR} PARENT_SCOPE) + set(${TARGET_NAME}_INCLUDE_DIRS ${INCLUDE_DIRS} PARENT_SCOPE) + set(${TARGET_NAME}_LIBRARIES ${LIBRARIES} PARENT_SCOPE) + set(ZLIB_FOUND ON PARENT_SCOPE) +endfunction() + +# PIC is OFF +build_zlib(OFF) +# PIC is ON +build_zlib(ON) diff --git a/third-party/zstd-cmake/zstd.cmake b/third-party/zstd-cmake/zstd.cmake index 17dd5e4c6d..d5fcfe3c0a 100644 --- a/third-party/zstd-cmake/zstd.cmake +++ b/third-party/zstd-cmake/zstd.cmake @@ -16,13 +16,15 @@ file(MAKE_DIRECTORY ${ZSTD_INCLUDE_DIRS}) # The configuration has been based on: # https://sources.debian.org/src/libzstd/1.4.8%2Bdfsg-2.1/debian/rules/ set(ZSTD_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -Wno-unused-but-set-variable") -if(NOT APPLE) +if(APPLE) + set(ZSTD_COMPILE_FLAGS "${ZSTD_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") +else() set(ZSTD_COMPILE_FLAGS "${ZSTD_COMPILE_FLAGS} -static") endif() set(ZSTD_MAKE_ARGS CC=${CMAKE_C_COMPILER} - CFLAGS=${OPENSSL_COMPILE_FLAGS} + CFLAGS=${ZSTD_COMPILE_FLAGS} ) set(ZSTD_MAKE_INSTALL_ARGS @@ -57,6 +59,32 @@ set_target_properties(ZSTD::zstd PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIRS} ) +# Ensure that the zstd are built before they are used +add_dependencies(ZSTD::zstd zstd) + +#################################### +add_library(ZSTD::pic::zstd STATIC IMPORTED) +set_target_properties(ZSTD::pic::zstd PROPERTIES + IMPORTED_LOCATION ${ZSTD_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIRS} +) + +# Ensure that the zstd are built before they are used +add_dependencies(ZSTD::pic::zstd zstd) + + +add_library(ZSTD::no-pic::zstd STATIC IMPORTED) +set_target_properties(ZSTD::no-pic::zstd PROPERTIES + IMPORTED_LOCATION ${ZSTD_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIRS} +) + +# Ensure that the zstd are built before they are used +add_dependencies(ZSTD::no-pic::zstd zstd) +################################################# + + + # Set variables indicating that zstd has been installed set(ZSTD_FOUND ON) From df74c565ad5ad26ebfc4e8829ae1b2a35348590d Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Wed, 26 Feb 2025 15:34:44 +0300 Subject: [PATCH 09/20] Fix order in unicode target build Signed-off-by: Petr Shumilov --- common/unicode/unicode.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/unicode/unicode.cmake b/common/unicode/unicode.cmake index 60796b5aa9..cb72efc7e8 100644 --- a/common/unicode/unicode.cmake +++ b/common/unicode/unicode.cmake @@ -30,6 +30,7 @@ add_custom_command( COMMAND generate_unicode_utils ${UNICODE_DATA_LIST} ${AUTO_DIR}/common/unicode-utils-auto.h DEPENDS ${UNICODE_DATA_LIST} COMMENT "unicode-utils-auto.h generation") +add_custom_target(unicode-utils-auto ALL DEPENDS ${AUTO_DIR}/common/unicode-utils-auto.h) set(UNICODE_SOURCES unicode-utils.cpp utf8-utils.cpp) @@ -42,6 +43,7 @@ prepend(UNICODE_SOURCES ${UNICODE_DIR}/ ${UNICODE_SOURCES}) if (COMPILE_RUNTIME_LIGHT) vk_add_library(light-unicode OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) + add_dependencies(light-unicode unicode-utils-auto) set_property(TARGET light-unicode PROPERTY POSITION_INDEPENDENT_CODE ON) target_compile_options(light-unicode PUBLIC -stdlib=libc++ -fPIC) @@ -51,5 +53,7 @@ endif() vk_add_library_no_pic(unicode-no-pic OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) vk_add_library_pic(unicode-pic OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) +add_dependencies(unicode-no-pic unicode-utils-auto) + # Prevent race-condition in "unicode raw data generation" operations add_dependencies(unicode-pic unicode-no-pic) From 9cfe22cd1f2db2c8e83ffa50d59d482f23750c01 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Wed, 26 Feb 2025 15:44:51 +0300 Subject: [PATCH 10/20] Ignore deprecation warning in gtest internals Signed-off-by: Petr Shumilov --- common/common-tests.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/common-tests.cmake b/common/common-tests.cmake index 61f208fdee..fafbb21b86 100644 --- a/common/common-tests.cmake +++ b/common/common-tests.cmake @@ -19,5 +19,7 @@ prepend(COMMON_TESTS_SOURCES ${COMMON_DIR}/ wrappers/string_view-test.cpp ucontext/ucontext-portable-test.cpp) +allow_deprecated_declarations(${COMMON_TESTS_SOURCES}/algorithms/projections-test.cpp) + set(COMMON_TESTS_LIBS common-src-no-pic net-src-no-pic binlog-src-no-pic unicode-no-pic ${EPOLL_SHIM_LIB} OpenSSL::no-pic::Crypto ZSTD::no-pic::zstd ZLIB::no-pic::zlib) vk_add_unittest(common "${COMMON_TESTS_LIBS}" ${COMMON_TESTS_SOURCES}) From 11f4ca48b8baf48d2014d931ec97bee9ae350336 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Wed, 26 Feb 2025 21:27:20 +0300 Subject: [PATCH 11/20] Replace vk_add_library into vk_add_library_pic and vk_add_library_no_pic Signed-off-by: Petr Shumilov --- CMakeLists.txt | 4 +- cmake/init-global-vars.cmake | 19 +++++-- cmake/popular-common.cmake | 7 ++- cmake/utils.cmake | 31 +++++++++-- common/common-tests.cmake | 2 +- common/tl/compiler/tl-compiler.cmake | 4 +- common/tl2php/tl2php.cmake | 4 +- common/tlo-parsing/tlo-parsing.cmake | 19 ++++--- common/unicode/unicode.cmake | 14 ++--- compiler/compiler-settings.cpp | 2 +- compiler/compiler.cmake | 10 ++-- flex/flex.cmake | 30 +++++++---- net/net-tests.cmake | 2 +- net/net.cmake | 2 +- runtime-common/runtime-common.cmake | 4 +- runtime-light/runtime-light.cmake | 36 ++++++------- runtime/runtime.cmake | 74 +++++++++++++++++++-------- server/server.cmake | 2 +- tests/cpp/runtime/runtime-tests.cmake | 2 +- tests/cpp/server/server-tests.cmake | 2 +- tests/tests.cmake | 4 +- vkext/vkext.cmake | 21 ++++---- 22 files changed, 180 insertions(+), 115 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 32d5070cb9..2bc5f4998f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,7 +71,7 @@ endif() add_custom_target(kphp ALL DEPENDS ${OBJS_DIR}/php_lib_version.sha256) if (COMPILE_RUNTIME_LIGHT) - add_dependencies(kphp kphp2cpp kphp-light-runtime) + add_dependencies(kphp kphp2cpp kphp-light-runtime-pic) else () add_dependencies(kphp kphp2cpp kphp-full-runtime-no-pic kphp-full-runtime-pic) endif () @@ -82,7 +82,7 @@ install(TARGETS kphp2cpp install_symlink(${VK_INSTALL_DIR}/bin/kphp2cpp ${CMAKE_INSTALL_PREFIX}/bin/kphp KPHP) if (COMPILE_RUNTIME_LIGHT) - install(TARGETS kphp-light-runtime + install(TARGETS kphp-light-runtime-pic COMPONENT KPHP LIBRARY DESTINATION ${INSTALL_KPHP_SOURCE}/objs) else () diff --git a/cmake/init-global-vars.cmake b/cmake/init-global-vars.cmake index 86e73d6177..e84db924a5 100644 --- a/cmake/init-global-vars.cmake +++ b/cmake/init-global-vars.cmake @@ -12,6 +12,11 @@ set(AUTO_DIR "${GENERATED_DIR}/auto") set(RUNTIME_LIGHT_DIR "${BASE_DIR}/runtime-light") set(RUNTIME_COMMON_DIR "${BASE_DIR}/runtime-common") +set(PIC_LIBRARY_SUFFIX "-pic") +set(PIC_NAMESPACE_NAME "pic") +set(NO_PIC_LIBRARY_SUFFIX "-no-pic") +set(NO_PIC_NAMESPACE_NAME "no-pic") + if(APPLE) detect_xcode_sdk_path(CMAKE_OSX_SYSROOT) set(ICONV_LIB iconv) @@ -31,11 +36,15 @@ endif() find_program(PHP_BIN php REQUIRED) -if(NOT APPLE) - check_cxx_compiler_flag(-no-pie NO_PIE_IS_FOUND) - if(NO_PIE_IS_FOUND) - set(NO_PIE -no-pie) - endif() +check_cxx_compiler_flag(-no-pie NO_PIE_IS_FOUND) +if(NO_PIE_IS_FOUND) + set(PIE_MODE_FLAGS -no-pie) + set(PIC_MODE_ENABLED ON) + set(PIC_MODE ${NO_PIC_NAMESPACE_NAME}) +else() + set(PIE_MODE_FLAGS) + set(PIC_MODE_ENABLED OFF) + set(PIC_MODE ${PIC_NAMESPACE_NAME}) endif() # add extra build type release without NDEBUG flag diff --git a/cmake/popular-common.cmake b/cmake/popular-common.cmake index 568d13b8d6..1c5d43c1b3 100644 --- a/cmake/popular-common.cmake +++ b/cmake/popular-common.cmake @@ -45,10 +45,9 @@ if(APPLE) endif() if(COMPILE_RUNTIME_LIGHT) - vk_add_library(light-common OBJECT ${LIGHT_COMMON_SOURCES}) - set_property(TARGET light-common PROPERTY POSITION_INDEPENDENT_CODE ON) - target_compile_options(light-common PUBLIC -stdlib=libc++ -fPIC) - target_link_options(light-common PUBLIC -stdlib=libc++) + vk_add_library_pic(light-common-pic OBJECT ${LIGHT_COMMON_SOURCES}) + target_compile_options(light-common-pic PUBLIC -stdlib=libc++) + target_link_options(light-common-pic PUBLIC -stdlib=libc++) endif() vk_add_library_no_pic(popular-common-no-pic OBJECT ${POPULAR_COMMON_SOURCES}) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 80e7b5a054..b58d8a6114 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -4,9 +4,30 @@ function(string_to_list STRING_NAME LIST_NAME) string(REPLACE " " ";" "${LIST_NAME}" ${STRING_NAME}) endfunction() -function(vk_add_library) - add_library(${ARGV}) - add_library(vk::${ARGV0} ALIAS ${ARGV0}) +function(check_vk_library_suffix TARGET SUFFIX) + string(LENGTH "${SUFFIX}" suffix_length) + string(LENGTH "${TARGET}" target_length) + + math(EXPR suffix_begin "${target_length} - ${suffix_length}") + string(SUBSTRING "${TARGET}" ${suffix_begin} -1 expected_suffix) + + if(NOT expected_suffix STREQUAL "${SUFFIX}") + message(FATAL_ERROR "vk library name '${TARGET}' does not end with the required suffix '${SUFFIX}'.") + endif() +endfunction() + +function(add_vk_library_to_pic_namespace TARGET) + check_vk_library_suffix(${TARGET} ${PIC_LIBRARY_SUFFIX}) + + string(REGEX REPLACE "${PIC_LIBRARY_SUFFIX}$" "" new_target "${TARGET}") + add_library(vk::${PIC_NAMESPACE_NAME}::${new_target} ALIAS ${TARGET}) +endfunction() + +function(add_vk_library_to_no_pic_namespace TARGET) + check_vk_library_suffix(${TARGET} ${NO_PIC_LIBRARY_SUFFIX}) + + string(REGEX REPLACE "${NO_PIC_LIBRARY_SUFFIX}$" "" new_target "${TARGET}") + add_library(vk::${NO_PIC_NAMESPACE_NAME}::${new_target} ALIAS ${TARGET}) endfunction() function(vk_add_library_pic) @@ -15,6 +36,7 @@ function(vk_add_library_pic) POSITION_INDEPENDENT_CODE 1 COMPILE_FLAGS "-fPIC" ) + add_vk_library_to_pic_namespace(${ARGV0}) endfunction() function(vk_add_library_no_pic) @@ -23,10 +45,9 @@ function(vk_add_library_no_pic) POSITION_INDEPENDENT_CODE 0 COMPILE_FLAGS "-fno-pic -static" ) + add_vk_library_to_no_pic_namespace(${ARGV0}) endfunction() - - function(prepend VAR_NAME PREFIX) list(TRANSFORM ARGN PREPEND ${PREFIX} OUTPUT_VARIABLE ${VAR_NAME}) set(${VAR_NAME} ${${VAR_NAME}} PARENT_SCOPE) diff --git a/common/common-tests.cmake b/common/common-tests.cmake index fafbb21b86..df450ea94d 100644 --- a/common/common-tests.cmake +++ b/common/common-tests.cmake @@ -21,5 +21,5 @@ prepend(COMMON_TESTS_SOURCES ${COMMON_DIR}/ allow_deprecated_declarations(${COMMON_TESTS_SOURCES}/algorithms/projections-test.cpp) -set(COMMON_TESTS_LIBS common-src-no-pic net-src-no-pic binlog-src-no-pic unicode-no-pic ${EPOLL_SHIM_LIB} OpenSSL::no-pic::Crypto ZSTD::no-pic::zstd ZLIB::no-pic::zlib) +set(COMMON_TESTS_LIBS vk::${PIC_MODE}::common-src vk::${PIC_MODE}::net-src vk::${PIC_MODE}::binlog-src vk::${PIC_MODE}::unicode ${EPOLL_SHIM_LIB} OpenSSL::${PIC_MODE}::Crypto ZSTD::${PIC_MODE}::zstd ZLIB::${PIC_MODE}::zlib) vk_add_unittest(common "${COMMON_TESTS_LIBS}" ${COMMON_TESTS_SOURCES}) diff --git a/common/tl/compiler/tl-compiler.cmake b/common/tl/compiler/tl-compiler.cmake index 4bd70f8be5..75fba29855 100644 --- a/common/tl/compiler/tl-compiler.cmake +++ b/common/tl/compiler/tl-compiler.cmake @@ -2,6 +2,6 @@ set(TL_COMPILER_DIR ${COMMON_DIR}/tl/compiler) set(TL_COMPILER_SOURCES ${TL_COMPILER_DIR}/tl-compiler.cpp ${TL_COMPILER_DIR}/tl-parser-new.cpp) add_executable(tl-compiler ${TL_COMPILER_SOURCES}) -target_link_libraries(tl-compiler PRIVATE popular-common-no-pic pthread) -target_link_options(tl-compiler PRIVATE ${NO_PIE}) +target_link_libraries(tl-compiler PRIVATE vk::${PIC_MODE}::popular-common pthread) +target_link_options(tl-compiler PRIVATE ${PIE_MODE_FLAGS}) set_target_properties(tl-compiler PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}) diff --git a/common/tl2php/tl2php.cmake b/common/tl2php/tl2php.cmake index 6c325dab4d..3aff65c187 100644 --- a/common/tl2php/tl2php.cmake +++ b/common/tl2php/tl2php.cmake @@ -10,6 +10,6 @@ prepend(TL2PHP_SOURCES ${COMMON_DIR}/tl2php/ tl-to-php-classes-converter.cpp) add_executable(tl2php ${TL2PHP_SOURCES}) -target_link_libraries(tl2php PRIVATE pthread popular-common-no-pic vk::tlo_parsing_src) -target_link_options(tl2php PRIVATE ${NO_PIE}) +target_link_libraries(tl2php PRIVATE pthread vk::${PIC_MODE}::popular-common vk::${PIC_MODE}::tlo_parsing_src) +target_link_options(tl2php PRIVATE ${PIE_MODE_FLAGS}) set_target_properties(tl2php PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}) diff --git a/common/tlo-parsing/tlo-parsing.cmake b/common/tlo-parsing/tlo-parsing.cmake index 0901b55cd5..83a01de7c5 100644 --- a/common/tlo-parsing/tlo-parsing.cmake +++ b/common/tlo-parsing/tlo-parsing.cmake @@ -9,33 +9,32 @@ prepend(TLO_PARSING_OBJECTS ${COMMON_DIR}/tlo-parsing/ tl-scheme-final-check.cpp tlo-parser.cpp) -vk_add_library(tlo_parsing_src OBJECT ${TLO_PARSING_OBJECTS}) - -set_target_properties(tlo_parsing_src PROPERTIES POSITION_INDEPENDENT_CODE 1) +vk_add_library_pic(tlo_parsing_src-pic OBJECT ${TLO_PARSING_OBJECTS}) +vk_add_library_no_pic(tlo_parsing_src-no-pic OBJECT ${TLO_PARSING_OBJECTS}) prepend(TLO_PARSING_PUBLIC_HEADERS ${COMMON_DIR}/tlo-parsing/ tl-objects.h tl-dependency-graph.h tlo-parsing.h) -vk_add_library(tlo_parsing_static STATIC $) -set_target_properties(tlo_parsing_static PROPERTIES +vk_add_library_no_pic(tlo_parsing_static-no-pic STATIC $) +set_target_properties(tlo_parsing_static-no-pic PROPERTIES OUTPUT_NAME tlo_parsing PUBLIC_HEADER "${TLO_PARSING_PUBLIC_HEADERS}") -install(TARGETS tlo_parsing_static +install(TARGETS tlo_parsing_static-no-pic COMPONENT TLO_PARSING_DEV ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tlo-parsing) -vk_add_library(tlo_parsing_shared SHARED $) -set_target_properties(tlo_parsing_shared PROPERTIES OUTPUT_NAME tlo_parsing) +vk_add_library_pic(tlo_parsing_shared-pic SHARED $) +set_target_properties(tlo_parsing_shared-pic PROPERTIES OUTPUT_NAME tlo_parsing) if(NOT APPLE) - target_link_options(tlo_parsing_shared PRIVATE -Wl,--version-script=${COMMON_DIR}/tlo-parsing/tlo-parsing-lib-exported-symbols.map) + target_link_options(tlo_parsing_shared-pic PRIVATE -Wl,--version-script=${COMMON_DIR}/tlo-parsing/tlo-parsing-lib-exported-symbols.map) endif() -install(TARGETS tlo_parsing_shared +install(TARGETS tlo_parsing_shared-pic COMPONENT TLO_PARSING LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/common/unicode/unicode.cmake b/common/unicode/unicode.cmake index cb72efc7e8..e669a4d8d3 100644 --- a/common/unicode/unicode.cmake +++ b/common/unicode/unicode.cmake @@ -41,18 +41,14 @@ endif() prepend(UNICODE_SOURCES ${UNICODE_DIR}/ ${UNICODE_SOURCES}) -if (COMPILE_RUNTIME_LIGHT) - vk_add_library(light-unicode OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) - add_dependencies(light-unicode unicode-utils-auto) - set_property(TARGET light-unicode PROPERTY POSITION_INDEPENDENT_CODE ON) - - target_compile_options(light-unicode PUBLIC -stdlib=libc++ -fPIC) - target_link_options(light-unicode PUBLIC -stdlib=libc++) -endif() - vk_add_library_no_pic(unicode-no-pic OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) vk_add_library_pic(unicode-pic OBJECT ${UNICODE_SOURCES} ${AUTO_DIR}/common/unicode-utils-auto.h) +if (COMPILE_RUNTIME_LIGHT) + target_compile_options(unicode-pic PUBLIC -stdlib=libc++) + target_link_options(unicode-pic PUBLIC -stdlib=libc++) +endif() + add_dependencies(unicode-no-pic unicode-utils-auto) # Prevent race-condition in "unicode raw data generation" operations diff --git a/compiler/compiler-settings.cpp b/compiler/compiler-settings.cpp index 749cb38bae..3488c6131d 100644 --- a/compiler/compiler-settings.cpp +++ b/compiler/compiler-settings.cpp @@ -245,7 +245,7 @@ void CompilerSettings::init() { bool is_k2_mode = mode.get().substr(0, 3) == "k2-"; if (link_file.value_.empty()) { if (is_k2_mode) { - link_file.value_ = kphp_src_path.get() + "/objs/libkphp-light-runtime.a"; + link_file.value_ = kphp_src_path.get() + "/objs/libkphp-light-runtime-pic.a"; } else { if (dynamic_incremental_linkage.get()) { link_file.value_ = kphp_src_path.get() + "/objs/libkphp-full-runtime-pic.a"; diff --git a/compiler/compiler.cmake b/compiler/compiler.cmake index 3ec17d9b4e..c554f4f935 100644 --- a/compiler/compiler.cmake +++ b/compiler/compiler.cmake @@ -237,7 +237,7 @@ list(APPEND KPHP_COMPILER_SOURCES ${RUNTIME_BUILD_INFO} ${AUTO_DIR}/compiler/rewrite-rules/early_opt.cpp) -vk_add_library(kphp2cpp_src OBJECT ${KPHP_COMPILER_SOURCES}) +vk_add_library_no_pic(kphp2cpp_src-no-pic OBJECT ${KPHP_COMPILER_SOURCES}) file(MAKE_DIRECTORY ${KPHP_COMPILER_AUTO_DIR}) add_custom_command(OUTPUT ${KEYWORDS_SET} @@ -270,23 +270,23 @@ set_property(SOURCE ${KPHP_COMPILER_DIR}/kphp2cpp.cpp APPEND PROPERTY COMPILE_DEFINITIONS DEFAULT_KPHP_PATH="${DEFAULT_KPHP_PATH}/" - KPHP_HAS_NO_PIE="${NO_PIE}") + KPHP_HAS_NO_PIE="${PIE_MODE_FLAGS}") add_executable(kphp2cpp ${KPHP_COMPILER_DIR}/kphp2cpp.cpp) target_include_directories(kphp2cpp PUBLIC ${KPHP_COMPILER_DIR}) add_dependencies(kphp2cpp openssl) prepare_cross_platform_libs(COMPILER_LIBS yaml-cpp re2) -set(COMPILER_LIBS vk::kphp2cpp_src vk::tlo_parsing_src popular-common-no-pic ${COMPILER_LIBS} fmt::fmt OpenSSL::Crypto pthread) +set(COMPILER_LIBS vk::no-pic::kphp2cpp_src vk::no-pic::tlo_parsing_src vk::no-pic::popular-common ${COMPILER_LIBS} fmt::fmt OpenSSL::no-pic::Crypto pthread) if(NOT APPLE) list(APPEND COMPILER_LIBS stdc++fs) endif() target_link_libraries(kphp2cpp PRIVATE ${COMPILER_LIBS}) -target_link_options(kphp2cpp PRIVATE ${NO_PIE}) +target_link_options(kphp2cpp PRIVATE ${PIE_MODE_FLAGS}) set_target_properties(kphp2cpp PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}) -add_dependencies(kphp2cpp_src auto_vertices_generation_target) +add_dependencies(kphp2cpp_src-no-pic auto_vertices_generation_target) if(COMPILE_RUNTIME_LIGHT) add_compile_definitions(RUNTIME_LIGHT) add_dependencies(kphp2cpp php_lib_version_sha_256) diff --git a/flex/flex.cmake b/flex/flex.cmake index ef9b180c14..1302abbfda 100644 --- a/flex/flex.cmake +++ b/flex/flex.cmake @@ -13,31 +13,43 @@ add_custom_command( ${FLEX_DIR}/lib/vkext-flex-generate.lib.php ${FLEX_DIR}/lib/configs/flex-config.php COMMENT "vk-flex-data generation") +add_custom_target(flex-data ALL DEPENDS ${FLEX_DATA_SRC}) if(COMPILER_CLANG) set_source_files_properties(${FLEX_DATA_SRC} PROPERTIES COMPILE_FLAGS -Wno-invalid-source-encoding) endif() -vk_add_library(flex_data_shared SHARED ${FLEX_SOURCES}) -vk_add_library(flex_data_static STATIC ${FLEX_SOURCES}) +vk_add_library_pic(flex-data-src-pic OBJECT ${FLEX_SOURCES}) +add_dependencies(flex-data-src-pic flex-data) +vk_add_library_no_pic(flex-data-src-no-pic OBJECT ${FLEX_SOURCES}) +add_dependencies(flex-data-src-no-pic flex-data) + +vk_add_library_pic(flex_data_shared-pic SHARED $) +add_dependencies(flex_data_shared-pic flex-data-src-pic) + +vk_add_library_no_pic(flex_data_static-no-pic STATIC $) +add_dependencies(flex_data_static-no-pic flex-data-src-no-pic) + check_cxx_compiler_flag(-fno-sanitize=all NO_SANITIZE_IS_FOUND) if(NO_SANITIZE_IS_FOUND) - target_compile_options(flex_data_shared PRIVATE -fno-sanitize=all) - target_link_options(flex_data_shared PRIVATE -fno-sanitize=all) + target_compile_options(flex-data-src-pic PRIVATE -fno-sanitize=all) + target_link_options(flex-data-src-pic PRIVATE -fno-sanitize=all) + target_compile_options(flex_data_shared-pic PRIVATE -fno-sanitize=all) + target_link_options(flex_data_shared-pic PRIVATE -fno-sanitize=all) endif() # to prevent double generation of ${FLEX_DATA_SRC} -add_dependencies(flex_data_shared flex_data_static) +add_dependencies(flex_data_shared-pic flex_data_static-no-pic) -set_target_properties(flex_data_shared flex_data_static +set_target_properties(flex_data_shared-pic flex_data_static-no-pic PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${OBJS_DIR}/flex ARCHIVE_OUTPUT_DIRECTORY ${OBJS_DIR}/flex OUTPUT_NAME vk-flex-data) add_custom_command( - TARGET flex_data_static POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy $ ${OBJS_DIR}/lib/libvk-flex-data.a + TARGET flex_data_static-no-pic POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${OBJS_DIR}/lib/libvk-flex-data.a ) -install(TARGETS flex_data_shared flex_data_static +install(TARGETS flex_data_shared-pic flex_data_static-no-pic COMPONENT FLEX LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/net/net-tests.cmake b/net/net-tests.cmake index 78eb8524bd..b457b568f6 100644 --- a/net/net-tests.cmake +++ b/net/net-tests.cmake @@ -4,5 +4,5 @@ prepend(NET_TESTS_SOURCES ${BASE_DIR}/net/ net-test.cpp time-slice-test.cpp) -set(NET_TESTS_LIBS common-src-no-pic net-src-no-pic binlog-src-no-pic unicode-no-pic ${NET_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::no-pic::Crypto ZSTD::no-pic::zstd ZLIB::no-pic::zlib) +set(NET_TESTS_LIBS vk::${PIC_MODE}::common-src vk::${PIC_MODE}::net-src vk::${PIC_MODE}::binlog-src vk::${PIC_MODE}::unicode ${NET_TESTS_LIBS} ${EPOLL_SHIM_LIB} OpenSSL::${PIC_MODE}::Crypto ZSTD::${PIC_MODE}::zstd ZLIB::${PIC_MODE}::zlib) vk_add_unittest(net "${NET_TESTS_LIBS}" ${NET_TESTS_SOURCES}) diff --git a/net/net.cmake b/net/net.cmake index 0c3acdabbd..8bd6854616 100644 --- a/net/net.cmake +++ b/net/net.cmake @@ -24,4 +24,4 @@ prepend(NET_SOURCES ${BASE_DIR}/net/ net-msg-part.cpp) vk_add_library_no_pic(net-src-no-pic OBJECT ${NET_SOURCES}) -vk_add_library_pic(net-src-pic OBJECT ${NET_SOURCES}) \ No newline at end of file +vk_add_library_pic(net-src-pic OBJECT ${NET_SOURCES}) diff --git a/runtime-common/runtime-common.cmake b/runtime-common/runtime-common.cmake index d51c5d4276..f58a411ebb 100644 --- a/runtime-common/runtime-common.cmake +++ b/runtime-common/runtime-common.cmake @@ -14,7 +14,5 @@ vk_add_library_no_pic(runtime-common-no-pic OBJECT ${RUNTIME_COMMON_SRC}) vk_add_library_pic(runtime-common-pic OBJECT ${RUNTIME_COMMON_SRC}) if(COMPILE_RUNTIME_LIGHT) - target_compile_options(runtime-common-pic PUBLIC -stdlib=libc++ -fPIC) + target_compile_options(runtime-common-pic PUBLIC -stdlib=libc++) endif() - - diff --git a/runtime-light/runtime-light.cmake b/runtime-light/runtime-light.cmake index 57e3cb69ea..ed75fd5cf7 100644 --- a/runtime-light/runtime-light.cmake +++ b/runtime-light/runtime-light.cmake @@ -39,35 +39,35 @@ configure_file(${BASE_DIR}/compiler/runtime_sources.h.in prepend(RUNTIME_LIGHT_SRC ${RUNTIME_LIGHT_DIR}/ "${RUNTIME_LIGHT_SRC}") -vk_add_library(runtime-light OBJECT ${RUNTIME_LIGHT_SRC}) -set_property(TARGET runtime-light PROPERTY POSITION_INDEPENDENT_CODE ON) -set_target_properties(runtime-light PROPERTIES LIBRARY_OUTPUT_DIRECTORY +vk_add_library_pic(runtime-light-pic OBJECT ${RUNTIME_LIGHT_SRC}) +set_target_properties(runtime-light-pic PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${BASE_DIR}/objs) target_compile_options( - runtime-light PUBLIC -stdlib=libc++ -iquote ${GENERATED_DIR} + runtime-light-pic PUBLIC -stdlib=libc++ -iquote ${GENERATED_DIR} ${THIRD_PARTY_INCLUDE} -fPIC -O3) -target_link_options(runtime-light PUBLIC -stdlib=libc++ -static-libstdc++) +target_link_options(runtime-light-pic PUBLIC -stdlib=libc++ -static-libstdc++) # add statically linking libraries string(JOIN " " ABSEIL_LIBS ${ABSEIL_LIBS}) set_property( - TARGET runtime-light + TARGET runtime-light-pic PROPERTY RUNTIME_LINK_LIBS "${ABSEIL_LIBS} ${ZLIB_PIC_LIBRARIES} ${PCRE2_LIB_DIR}/libpcre2-8.a" ) -add_dependencies(runtime-light zlib-pic) +add_dependencies(runtime-light-pic ZLIB::pic::zlib) if(APPLE) - target_link_options(runtime-light PUBLIC -undefined dynamic_lookup) + target_link_options(runtime-light-pic PUBLIC -undefined dynamic_lookup) else() - target_link_options(runtime-light PUBLIC --allow-shlib-undefined) + target_link_options(runtime-light-pic PUBLIC --allow-shlib-undefined) endif() -vk_add_library(kphp-light-runtime STATIC) +vk_add_library_pic(kphp-light-runtime-pic STATIC) target_link_libraries( - kphp-light-runtime PUBLIC vk::light-common vk::light-unicode - vk::runtime-light runtime-common-pic) -set_target_properties(kphp-light-runtime PROPERTIES ARCHIVE_OUTPUT_DIRECTORY - ${OBJS_DIR}) + kphp-light-runtime-pic PUBLIC vk::pic::light-common vk::pic::unicode + vk::pic::runtime-light vk::pic::runtime-common) +set_target_properties(kphp-light-runtime-pic PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${OBJS_DIR} + LIBRARY_OUTPUT_NAME libkphp-light-runtime.a) file( GLOB_RECURSE KPHP_RUNTIME_ALL_HEADERS @@ -102,7 +102,7 @@ add_library(php_lib_version_j OBJECT target_compile_options(php_lib_version_j PRIVATE -I. ${THIRD_PARTY_INCLUDE} -E) target_compile_options(php_lib_version_j PUBLIC -stdlib=libc++) target_link_options(php_lib_version_j PUBLIC -stdlib=libc++ -static-libstdc++) -add_dependencies(php_lib_version_j kphp-light-runtime) +add_dependencies(php_lib_version_j kphp-light-runtime-pic) add_custom_command( OUTPUT ${OBJS_DIR}/php_lib_version.sha256 @@ -116,11 +116,11 @@ add_custom_target(php_lib_version_sha_256 get_property( RUNTIME_COMPILE_FLAGS - TARGET runtime-light + TARGET runtime-light-pic PROPERTY COMPILE_OPTIONS) get_property( RUNTIME_INCLUDE_DIRS - TARGET runtime-light + TARGET runtime-light-pic PROPERTY INCLUDE_DIRECTORIES) list(JOIN RUNTIME_COMPILE_FLAGS "\;" RUNTIME_COMPILE_FLAGS) @@ -130,7 +130,7 @@ configure_file(${BASE_DIR}/compiler/runtime_compile_flags.h.in get_property( RUNTIME_LINK_LIBS - TARGET runtime-light + TARGET runtime-light-pic PROPERTY RUNTIME_LINK_LIBS) list(JOIN RUNTIME_LINK_LIBS "\;" RUNTIME_LINK_LIBS) string(REPLACE "\"" "\\\"" RUNTIME_LINK_LIBS ${RUNTIME_LINK_LIBS}) diff --git a/runtime/runtime.cmake b/runtime/runtime.cmake index 1887143805..662dd64495 100644 --- a/runtime/runtime.cmake +++ b/runtime/runtime.cmake @@ -139,20 +139,21 @@ set(KPHP_RUNTIME_ALL_SOURCES allow_deprecated_declarations(${BASE_DIR}/runtime/allocator.cpp ${BASE_DIR}/runtime/openssl.cpp) allow_deprecated_declarations_for_apple(${BASE_DIR}/runtime/inter-process-mutex.cpp) +prepare_cross_platform_libs(SYSTEM_INSTALLED_LIBS yaml-cpp re2 h3) + #### NO PIC vk_add_library_no_pic(kphp-runtime-no-pic STATIC ${KPHP_RUNTIME_ALL_SOURCES}) target_include_directories(kphp-runtime-no-pic PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) -prepare_cross_platform_libs(RUNTIME_LIBS_NO_PIC yaml-cpp re2 h3) set(RUNTIME_LIBS_NO_PIC - kphp-server-no-pic - runtime-common-no-pic - popular-common-no-pic - unicode-no-pic - common-src-no-pic - binlog-src-no-pic - net-src-no-pic - ${RUNTIME_LIBS_NO_PIC} + vk::no-pic::kphp-server + vk::no-pic::runtime-common + vk::no-pic::popular-common + vk::no-pic::unicode + vk::no-pic::common-src + vk::no-pic::binlog-src + vk::no-pic::net-src + ${SYSTEM_INSTALLED_LIBS} CURL::no-pic::curl OpenSSL::no-pic::SSL OpenSSL::no-pic::Crypto @@ -166,24 +167,21 @@ target_link_libraries(kphp-runtime-no-pic PUBLIC ${RUNTIME_LIBS_NO_PIC}) add_dependencies(kphp-runtime-no-pic kphp-timelib OpenSSL::no-pic::Crypto OpenSSL::no-pic::SSL CURL::no-pic::curl NGHTTP2::no-pic::nghttp2 ZLIB::no-pic::zlib ZSTD::no-pic::zstd) combine_static_runtime_library(kphp-runtime-no-pic kphp-full-runtime-no-pic) - -set(RUNTIME_FULL_LIBS_NO_PIC kphp-runtime-no-pic ${RUNTIME_LIBS_NO_PIC}) ### #### PIC vk_add_library_pic(kphp-runtime-pic STATIC ${KPHP_RUNTIME_ALL_SOURCES}) target_include_directories(kphp-runtime-pic PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) -prepare_cross_platform_libs(RUNTIME_LIBS_PIC yaml-cpp re2 h3) set(RUNTIME_LIBS_PIC - kphp-server-pic - runtime-common-pic - popular-common-pic - unicode-pic - common-src-pic - binlog-src-pic - net-src-pic - ${RUNTIME_LIBS_PIC} + vk::pic::kphp-server + vk::pic::runtime-common + vk::pic::popular-common + vk::pic::unicode + vk::pic::common-src + vk::pic::binlog-src + vk::pic::net-src + ${SYSTEM_INSTALLED_LIBS} CURL::pic::curl OpenSSL::pic::SSL OpenSSL::pic::Crypto @@ -199,8 +197,39 @@ add_dependencies(kphp-runtime-pic kphp-timelib OpenSSL::pic::Crypto OpenSSL::pic combine_static_runtime_library(kphp-runtime-pic kphp-full-runtime-pic) ### -prepare_cross_platform_libs(RUNTIME_LINK_TEST_LIBS pcre kphp-timelib) -set(RUNTIME_LINK_TEST_LIBS vk::flex_data_static CURL::curl OpenSSL::SSL NGHTTP2::nghttp2 ${NUMA_LIB} ${RUNTIME_LINK_TEST_LIBS} ${EPOLL_SHIM_LIB} ${ICONV_LIB} ${RT_LIB} dl) +set(RUNTIME_LIBS + vk::${PIC_MODE}::kphp-runtime + vk::${PIC_MODE}::kphp-server + vk::${PIC_MODE}::runtime-common + vk::${PIC_MODE}::popular-common + vk::${PIC_MODE}::unicode + vk::${PIC_MODE}::common-src + vk::${PIC_MODE}::binlog-src + vk::${PIC_MODE}::net-src + ${SYSTEM_INSTALLED_LIBS} + CURL::${PIC_MODE}::curl + OpenSSL::${PIC_MODE}::SSL + OpenSSL::${PIC_MODE}::Crypto + ZLIB::${PIC_MODE}::zlib + NGHTTP2::${PIC_MODE}::nghttp2 + ZSTD::${PIC_MODE}::zstd + m + pthread +) + +prepare_cross_platform_libs(SYSTEM_INSTALLED_TEST_LIB pcre kphp-timelib) +set(RUNTIME_LINK_TEST_LIBS + vk::${PIC_MODE}::flex-data-src + CURL::${PIC_MODE}::curl + OpenSSL::${PIC_MODE}::SSL + NGHTTP2::${PIC_MODE}::nghttp2 + ${NUMA_LIB} + ${SYSTEM_INSTALLED_TEST_LIB} + ${EPOLL_SHIM_LIB} + ${ICONV_LIB} + ${RT_LIB} + dl +) if (PDO_DRIVER_MYSQL) list(APPEND RUNTIME_LINK_TEST_LIBS mysqlclient) @@ -237,6 +266,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 ${OPENSSL_INCLUDE_DIR} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) target_compile_options(php_lib_version_j PRIVATE -I. -E) add_dependencies(php_lib_version_j kphp-full-runtime-no-pic kphp-full-runtime-pic) diff --git a/server/server.cmake b/server/server.cmake index 913c6a700f..fec617ecf4 100644 --- a/server/server.cmake +++ b/server/server.cmake @@ -74,4 +74,4 @@ set(KPHP_SERVER_ALL_SOURCES allow_deprecated_declarations_for_apple(${BASE_DIR}/server/php-runner.cpp) vk_add_library_no_pic(kphp-server-no-pic OBJECT ${KPHP_SERVER_ALL_SOURCES}) -vk_add_library_pic(kphp-server-pic OBJECT ${KPHP_SERVER_ALL_SOURCES}) \ No newline at end of file +vk_add_library_pic(kphp-server-pic OBJECT ${KPHP_SERVER_ALL_SOURCES}) diff --git a/tests/cpp/runtime/runtime-tests.cmake b/tests/cpp/runtime/runtime-tests.cmake index b454b94f0b..731da98fe6 100644 --- a/tests/cpp/runtime/runtime-tests.cmake +++ b/tests/cpp/runtime/runtime-tests.cmake @@ -24,4 +24,4 @@ prepend(RUNTIME_TESTS_SOURCES ${BASE_DIR}/tests/cpp/runtime/ zstd-test.cpp) allow_deprecated_declarations_for_apple(${BASE_DIR}/tests/cpp/runtime/inter-process-mutex-test.cpp) -vk_add_unittest(runtime "${RUNTIME_FULL_LIBS_NO_PIC};${RUNTIME_LINK_TEST_LIBS}" ${RUNTIME_TESTS_SOURCES}) +vk_add_unittest(runtime "${RUNTIME_LIBS};${RUNTIME_LINK_TEST_LIBS}" ${RUNTIME_TESTS_SOURCES}) diff --git a/tests/cpp/server/server-tests.cmake b/tests/cpp/server/server-tests.cmake index b9bd42a860..55b7368d46 100644 --- a/tests/cpp/server/server-tests.cmake +++ b/tests/cpp/server/server-tests.cmake @@ -10,4 +10,4 @@ if(COMPILER_GCC) set_source_files_properties(${BASE_DIR}/tests/cpp/server/confdata-binlog-events-test.cpp PROPERTIES COMPILE_FLAGS -Wno-stringop-overflow) endif() -vk_add_unittest(server "${RUNTIME_FULL_LIBS_NO_PIC};${RUNTIME_LINK_TEST_LIBS}" ${SERVER_TESTS_SOURCES} ${BASE_DIR}/tests/cpp/runtime/_runtime-tests-env.cpp) +vk_add_unittest(server "${RUNTIME_LIBS};${RUNTIME_LINK_TEST_LIBS}" ${SERVER_TESTS_SOURCES} ${BASE_DIR}/tests/cpp/runtime/_runtime-tests-env.cpp) diff --git a/tests/tests.cmake b/tests/tests.cmake index bbd16655bb..19a31851f5 100644 --- a/tests/tests.cmake +++ b/tests/tests.cmake @@ -2,8 +2,8 @@ if(KPHP_TESTS) function(vk_add_unittest TEST_NAME SRC_LIBS) set(TEST_NAME unittests-${TEST_NAME}) add_executable(${TEST_NAME} ${ARGN}) - target_link_libraries(${TEST_NAME} PRIVATE GTest::GTest GTest::Main gmock ${SRC_LIBS} popular-common-no-pic) - target_link_options(${TEST_NAME} PRIVATE ${NO_PIE}) + target_link_libraries(${TEST_NAME} PRIVATE GTest::GTest GTest::Main gmock ${SRC_LIBS} vk::${PIC_MODE}::popular-common) + target_link_options(${TEST_NAME} PRIVATE ${PIE_MODE_FLAGS}) # because of https://github.com/VKCOM/kphp/actions/runs/5463884925/jobs/9945150190 gtest_discover_tests(${TEST_NAME} PROPERTIES DISCOVERY_TIMEOUT 600) diff --git a/vkext/vkext.cmake b/vkext/vkext.cmake index 35dc399841..0c8f741239 100644 --- a/vkext/vkext.cmake +++ b/vkext/vkext.cmake @@ -67,16 +67,17 @@ foreach(PHP_VERSION IN ITEMS "" "7.4" "8.0" "8.1" "8.2" "8.3") OUTPUT_STRIP_TRAILING_WHITESPACE) set(VKEXT_TARGET vkext${PHP_VERSION}) - vk_add_library(${VKEXT_TARGET} SHARED ${VKEXT_SOURCES} ${VKEXT_COMMON_SOURCES}) + vk_add_library_pic(${VKEXT_TARGET}-pic SHARED ${VKEXT_SOURCES} ${VKEXT_COMMON_SOURCES}) + add_custom_target(${VKEXT_TARGET} ALL DEPENDS ${VKEXT_TARGET}-pic) if(APPLE) - target_link_options(${VKEXT_TARGET} PRIVATE -undefined dynamic_lookup) + target_link_options(${VKEXT_TARGET}-pic PRIVATE -undefined dynamic_lookup) 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} ${ZLIB_PIC_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 + target_compile_definitions(${VKEXT_TARGET}-pic PRIVATE -DVKEXT -DPHP_ATOM_INC) + target_compile_options(${VKEXT_TARGET}-pic PRIVATE -Wno-unused-parameter -Wno-float-conversion -Wno-ignored-qualifiers) + target_include_directories(${VKEXT_TARGET}-pic PRIVATE ${PHP_SOURCE} ${PHP_SOURCE}/main ${PHP_SOURCE}/Zend ${PHP_SOURCE}/TSRM ${BASE_DIR} ${ZLIB_PIC_INCLUDE_DIRS}) + add_dependencies(${VKEXT_TARGET}-pic ZLIB::pic::zlib) + target_link_libraries(${VKEXT_TARGET}-pic PRIVATE vk::pic::flex_data_shared ZLIB::pic::zlib) + set_target_properties(${VKEXT_TARGET}-pic PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${OBJS_DIR}/vkext/modules${PHP_VERSION}/ LIBRARY_OUTPUT_NAME vkext PREFIX "") @@ -85,8 +86,8 @@ foreach(PHP_VERSION IN ITEMS "" "7.4" "8.0" "8.1" "8.2" "8.3") set_source_files_properties(${VKEXT_DIR}/vkext.cpp PROPERTIES COMPILE_FLAGS -Wno-unused-result) if(NO_SANITIZE_IS_FOUND) - target_compile_options(${VKEXT_TARGET} PRIVATE -fno-sanitize=all) - target_link_options(${VKEXT_TARGET} PRIVATE -fno-sanitize=all) + target_compile_options(${VKEXT_TARGET}-pic PRIVATE -fno-sanitize=all) + target_link_options(${VKEXT_TARGET}-pic PRIVATE -fno-sanitize=all) endif() if(PHP_VERSION) From e89b869f9734fed0d1ddc20e24208be1652cca45 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Thu, 27 Feb 2025 20:39:07 +0300 Subject: [PATCH 12/20] Introduce pic and no-pic build variants for zstd Signed-off-by: Petr Shumilov --- cmake/init-global-vars.cmake | 7 +- cmake/utils.cmake | 45 ++++++++ third-party/zlib-cmake/zlib.cmake | 133 +++++++++------------ third-party/zstd-cmake/zstd.cmake | 185 ++++++++++++++++-------------- 4 files changed, 199 insertions(+), 171 deletions(-) diff --git a/cmake/init-global-vars.cmake b/cmake/init-global-vars.cmake index e84db924a5..90e10cb434 100644 --- a/cmake/init-global-vars.cmake +++ b/cmake/init-global-vars.cmake @@ -12,10 +12,13 @@ set(AUTO_DIR "${GENERATED_DIR}/auto") set(RUNTIME_LIGHT_DIR "${BASE_DIR}/runtime-light") set(RUNTIME_COMMON_DIR "${BASE_DIR}/runtime-common") -set(PIC_LIBRARY_SUFFIX "-pic") set(PIC_NAMESPACE_NAME "pic") -set(NO_PIC_LIBRARY_SUFFIX "-no-pic") +set(PIC_LIBRARY_SUFFIX "-${PIC_NAMESPACE_NAME}") +set(PIC_LIBRARY_SPECIFIER "PIC") + set(NO_PIC_NAMESPACE_NAME "no-pic") +set(NO_PIC_LIBRARY_SUFFIX "-${NO_PIC_NAMESPACE_NAME}") +set(NO_PIC_LIBRARY_SPECIFIER "NO_PIC") if(APPLE) detect_xcode_sdk_path(CMAKE_OSX_SYSROOT) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index b58d8a6114..282213aa67 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -245,3 +245,48 @@ function(combine_static_runtime_library TARGET COMBINED_TARGET) INTERFACE_INCLUDE_DIRECTORIES $) add_dependencies(${COMBINED_TARGET} _combined_${TARGET}) endfunction() + +function(get_submodule_remote_url SUBMODULE_PATH RESULT_VAR) + execute_process( + COMMAND ${GIT_EXECUTABLE} config --file ${CMAKE_SOURCE_DIR}/.gitmodules --get submodule.${SUBMODULE_PATH}.url + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE submodule_url + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(${RESULT_VAR} "${submodule_url}" PARENT_SCOPE) +endfunction() + +function(get_submodule_version SUBMODULE_PATH RESULT_VAR) + execute_process( + COMMAND ${GIT_EXECUTABLE} -C ${SUBMODULE_PATH} describe --tags + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE submodule_version + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + set(${RESULT_VAR} "${submodule_version}" PARENT_SCOPE) +endfunction() + +function(make_third_party_configuration PIC_ENABLED PROJECT_GENERIC_NAME TARGET_NAMESPACE ARTIFACT_NAME PROJECT_NAME EXTRA_COMPILE_FLAGS TARGET_NAME LIB_PREFIX ARCHIVE_NAME) + if(PIC_ENABLED) + set(${PROJECT_NAME} "${PROJECT_GENERIC_NAME}${PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) + if(APPLE) + set(${EXTRA_COMPILE_FLAGS} "-fPIC --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) + else() + set(${EXTRA_COMPILE_FLAGS} "-fPIC" PARENT_SCOPE) + endif() + set(${TARGET_NAME} ${TARGET_NAMESPACE}::${PIC_NAMESPACE_NAME}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) + set(${LIB_PREFIX} ${TARGET_NAMESPACE}_${PIC_LIBRARY_SPECIFIER}_ PARENT_SCOPE) + set(${ARCHIVE_NAME} "${ARTIFACT_NAME}${PIC_LIBRARY_SUFFIX}.a" PARENT_SCOPE) + else() + set(${PROJECT_NAME} "${PROJECT_GENERIC_NAME}${NO_PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) + if(APPLE) + set(${EXTRA_COMPILE_FLAGS} "-fno-pic --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) + else() + set(${EXTRA_COMPILE_FLAGS} "-fno-pic -static" PARENT_SCOPE) + endif() + set(${TARGET_NAME} ${TARGET_NAMESPACE}::${NO_PIC_NAMESPACE_NAME}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) + set(${LIB_PREFIX} ${TARGET_NAMESPACE}_${NO_PIC_LIBRARY_SPECIFIER}_ PARENT_SCOPE) + set(${ARCHIVE_NAME} "${ARTIFACT_NAME}${NO_PIC_LIBRARY_SUFFIX}.a" PARENT_SCOPE) + endif() +endfunction() diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index ff08ffca43..b3d4f6ee93 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -1,114 +1,85 @@ update_git_submodule(${THIRD_PARTY_DIR}/zlib "--recursive") +get_submodule_version(${THIRD_PARTY_DIR}/zlib ZLIB_VERSION) +get_submodule_remote_url(third-party/zlib ZLIB_SOURCE_URL) -function(build_zlib PIC_MODE) - set(PROJECT_GENERIC_NAME zlib) - set(TARGET_NAMESPACE ZLIB) - set(TARGET_GENERIC_NAME ZLIB) +function(build_zlib PIC_ENABLED) + set(project_generic_name zlib) + set(target_namespace ZLIB) + set(artifact_name libz) - set(PROJECT_NAME) - set(TARGET_NAME) - set(EXTRA_COMPILE_FLAGS) - set(SUFFIX) - - if(PIC_MODE) - set(SUFFIX "-pic") - set(EXTRA_COMPILE_FLAGS "-fPIC") - set(TARGET_NAME "${TARGET_GENERIC_NAME}_PIC") - else() - set(SUFFIX "-no-pic") - set(EXTRA_COMPILE_FLAGS "-fno-pic") - if(NOT APPLE) - set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -static") - endif() - set(TARGET_NAME "${TARGET_GENERIC_NAME}_NO_PIC") - endif() - - if(APPLE) - set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") - endif() - - set(PROJECT_NAME "${PROJECT_GENERIC_NAME}${SUFFIX}") + make_third_party_configuration(${PIC_ENABLED} ${project_generic_name} ${target_namespace} ${artifact_name} + project_name + extra_compile_flags + target_name + lib_prefix + archive_name + ) - set(SOURCE_DIR ${THIRD_PARTY_DIR}/zlib) - set(BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/${PROJECT_NAME}/build) - set(INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/${PROJECT_NAME}/install) - set(INCLUDE_DIRS ${INSTALL_DIR}/include) - set(LIBRARIES ${INSTALL_DIR}/lib/libz${SUFFIX}.a) + set(source_dir ${THIRD_PARTY_DIR}/${project_generic_name}) + set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) + set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) + set(include_dirs ${install_dir}/include) + set(libraries ${install_dir}/lib/${archive_name}) # Ensure the build, installation and "include" directories exists - file(MAKE_DIRECTORY ${BUILD_DIR}) - file(MAKE_DIRECTORY ${INSTALL_DIR}) - file(MAKE_DIRECTORY ${INCLUDE_DIRS}) + file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${install_dir}) + file(MAKE_DIRECTORY ${include_dirs}) - set(COMPILE_FLAGS "$ENV{CFLAGS} -g0 -Wall -O3 -D_REENTRANT ${EXTRA_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(compile_flags "$ENV{CFLAGS} -g0 -Wall -O3 -D_REENTRANT ${extra_compile_flags}") message(STATUS "Zlib Summary: - PIC mode: ${PIC_MODE} - Source dir: ${SOURCE_DIR} - Build dir: ${BUILD_DIR} - Install dir: ${INSTALL_DIR} - Include dirs: ${INCLUDE_DIRS} - Libraries: ${LIBRARIES} + PIC enabled: ${PIC_ENABLED} + Version: ${ZLIB_VERSION} + Source: ${ZLIB_SOURCE_URL} + Include dirs: ${include_dirs} + Libraries: ${libraries} + Target name: ${target_name} Compiler: C compiler: ${CMAKE_C_COMPILER} - CFLAGS: ${COMPILE_FLAGS} + CFLAGS: ${compile_flags} ") ExternalProject_Add( - ${PROJECT_NAME} - PREFIX ${BUILD_DIR} - SOURCE_DIR ${SOURCE_DIR} - INSTALL_DIR ${INSTALL_DIR} - BINARY_DIR ${BUILD_DIR} - BUILD_BYPRODUCTS ${LIBRARIES} + ${project_name} + PREFIX ${build_dir} + SOURCE_DIR ${source_dir} + INSTALL_DIR ${install_dir} + BINARY_DIR ${build_dir} + BUILD_BYPRODUCTS ${libraries} CONFIGURE_COMMAND - COMMAND ${CMAKE_COMMAND} -E copy_directory ${SOURCE_DIR} ${BUILD_DIR} - COMMAND ${CMAKE_COMMAND} -E env CC=${CMAKE_C_COMPILER} CFLAGS=${COMPILE_FLAGS} ./configure --prefix=${INSTALL_DIR} --includedir=${INCLUDE_DIRS}/zlib --static + COMMAND ${CMAKE_COMMAND} -E copy_directory ${source_dir} ${build_dir} + COMMAND ${CMAKE_COMMAND} -E env CC=${CMAKE_C_COMPILER} CFLAGS=${compile_flags} ./configure --prefix=${install_dir} --includedir=${include_dirs}/zlib --static BUILD_COMMAND COMMAND make libz.a -j INSTALL_COMMAND COMMAND make install - COMMAND ${CMAKE_COMMAND} -E copy ${INSTALL_DIR}/lib/libz.a ${LIBRARIES} - COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARIES} ${LIB_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${INCLUDE_DIRS} ${INCLUDE_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/libz.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 ) - add_library(${TARGET_NAMESPACE}::${TARGET_NAME} STATIC IMPORTED) - set_target_properties(${TARGET_NAMESPACE}::${TARGET_NAME} PROPERTIES - IMPORTED_LOCATION ${LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_DIRS} + add_library(${target_name} STATIC IMPORTED) + set_target_properties(${target_name} PROPERTIES + IMPORTED_LOCATION ${libraries} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} ) # Ensure that the zlib are built before they are used - add_dependencies(${TARGET_NAMESPACE}::${TARGET_NAME} ${PROJECT_NAME}) - - ###################################### - if(PIC_MODE) - add_library(${TARGET_NAMESPACE}::pic::zlib STATIC IMPORTED) - set_target_properties(${TARGET_NAMESPACE}::pic::zlib PROPERTIES - IMPORTED_LOCATION ${LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_DIRS} - ) - add_dependencies(${TARGET_NAMESPACE}::pic::zlib ${PROJECT_NAME}) - else() - add_library(${TARGET_NAMESPACE}::no-pic::zlib STATIC IMPORTED) - set_target_properties(${TARGET_NAMESPACE}::no-pic::zlib PROPERTIES - IMPORTED_LOCATION ${LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_DIRS} - ) - add_dependencies(${TARGET_NAMESPACE}::no-pic::zlib ${PROJECT_NAME}) - endif() - ###################################### + add_dependencies(${target_name} ${project_name}) # Set variables indicating that zlib has been installed - set(${TARGET_NAME}_ROOT ${INSTALL_DIR} PARENT_SCOPE) - set(${TARGET_NAME}_INCLUDE_DIRS ${INCLUDE_DIRS} PARENT_SCOPE) - set(${TARGET_NAME}_LIBRARIES ${LIBRARIES} PARENT_SCOPE) - set(ZLIB_FOUND ON PARENT_SCOPE) + set(${lib_prefix}ROOT ${install_dir} PARENT_SCOPE) + set(${lib_prefix}INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${lib_prefix}LIBRARIES ${libraries} PARENT_SCOPE) endfunction() # PIC is OFF build_zlib(OFF) # PIC is ON build_zlib(ON) + +set(ZLIB_FOUND ON) diff --git a/third-party/zstd-cmake/zstd.cmake b/third-party/zstd-cmake/zstd.cmake index d5fcfe3c0a..b79150ab41 100644 --- a/third-party/zstd-cmake/zstd.cmake +++ b/third-party/zstd-cmake/zstd.cmake @@ -1,91 +1,100 @@ update_git_submodule(${THIRD_PARTY_DIR}/zstd "--remote") +get_submodule_version(${THIRD_PARTY_DIR}/zstd ZSTD_VERSION) +get_submodule_remote_url(third-party/zstd ZSTD_SOURCE_URL) + +function(build_zstd PIC_ENABLED) + set(project_generic_name zstd) + set(target_namespace ZSTD) + set(artifact_name libzstd) + + make_third_party_configuration(${PIC_ENABLED} ${project_generic_name} ${target_namespace} ${artifact_name} + project_name + extra_compile_flags + target_name + lib_prefix + archive_name + ) + + set(source_dir ${THIRD_PARTY_DIR}/${project_generic_name}) + set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) + set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) + set(binary_dir ${build_dir}/lib) + set(include_dirs ${install_dir}/include) + set(libraries ${install_dir}/lib/${archive_name}) + set(patch_dir ${build_dir}/debian/patches/) + set(patch_series ${build_dir}/debian/patches/series) + # Ensure the build, installation and "include" directories exists + file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${install_dir}) + file(MAKE_DIRECTORY ${include_dirs}) + + # The configuration has been based on: + # https://sources.debian.org/src/libzstd/1.4.8%2Bdfsg-2.1/debian/rules/ + set(compile_flags "$ENV{CFLAGS} -g0 -Wno-unused-but-set-variable ${extra_compile_flags}") + + message(STATUS "ZSTD Summary: + + PIC enabled: ${PIC_ENABLED} + Version: ${ZSTD_VERSION} + Source: ${ZSTD_SOURCE_URL} + Include dirs: ${include_dirs} + Libraries: ${libraries} + Target name: ${target_name} + Compiler: + C compiler: ${CMAKE_C_COMPILER} + CFLAGS: ${compile_flags} + ") + + set(make_args + CC=${CMAKE_C_COMPILER} + CFLAGS=${compile_flags} + ) + + set(make_install_args + PREFIX=${install_dir} + INCLUDEDIR=${install_dir}/include/zstd + ) + + ExternalProject_Add( + ${project_name} + PREFIX ${build_dir} + SOURCE_DIR ${source_dir} + INSTALL_DIR ${install_dir} + BINARY_DIR ${binary_dir} + BUILD_BYPRODUCTS ${libraries} + PATCH_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${source_dir} ${build_dir} + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${build_dir} -DPATCH_SERIES=${patch_series} -DPATCH_DIR=${patch_dir} -P ../../cmake/apply_patches.cmake + CONFIGURE_COMMAND + COMMAND # Nothing to configure + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} -E env ${make_args} make libzstd.a -j + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} -E env ${make_install_args} make install-static install-includes + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/libzstd.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 + ) + + add_library(${target_name} STATIC IMPORTED) + set_target_properties(${target_name} PROPERTIES + IMPORTED_LOCATION ${libraries} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} + ) + + # Ensure that the ZSTD are built before they are used + add_dependencies(${target_name} ${project_name}) + + # Set variables indicating that ZSTD has been installed + set(${lib_prefix}ROOT ${install_dir} PARENT_SCOPE) + set(${lib_prefix}INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${lib_prefix}LIBRARIES ${libraries} PARENT_SCOPE) +endfunction() + +# PIC is OFF +build_zstd(OFF) +# PIC is ON +build_zstd(ON) -set(ZSTD_SOURCE_DIR ${THIRD_PARTY_DIR}/zstd) -set(ZSTD_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/zstd/build) -set(ZSTD_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/zstd/install) -set(ZSTD_BINARY_DIR ${ZSTD_BUILD_DIR}/lib) -set(ZSTD_LIBRARIES ${ZSTD_INSTALL_DIR}/lib/libzstd.a) -set(ZSTD_INCLUDE_DIRS ${ZSTD_INSTALL_DIR}/include) -set(ZSTD_PATCH_DIR ${ZSTD_BUILD_DIR}/debian/patches/) -set(ZSTD_PATCH_SERIES ${ZSTD_BUILD_DIR}/debian/patches/series) -# Ensure the build, installation and "include" directories exists -file(MAKE_DIRECTORY ${ZSTD_BUILD_DIR}) -file(MAKE_DIRECTORY ${ZSTD_INSTALL_DIR}) -file(MAKE_DIRECTORY ${ZSTD_INCLUDE_DIRS}) - -# The configuration has been based on: -# https://sources.debian.org/src/libzstd/1.4.8%2Bdfsg-2.1/debian/rules/ -set(ZSTD_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -Wno-unused-but-set-variable") -if(APPLE) - set(ZSTD_COMPILE_FLAGS "${ZSTD_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") -else() - set(ZSTD_COMPILE_FLAGS "${ZSTD_COMPILE_FLAGS} -static") -endif() - -set(ZSTD_MAKE_ARGS - CC=${CMAKE_C_COMPILER} - CFLAGS=${ZSTD_COMPILE_FLAGS} -) - -set(ZSTD_MAKE_INSTALL_ARGS - PREFIX=${ZSTD_INSTALL_DIR} - INCLUDEDIR=${ZSTD_INSTALL_DIR}/include/zstd -) - -ExternalProject_Add( - zstd - PREFIX ${ZSTD_BUILD_DIR} - SOURCE_DIR ${ZSTD_SOURCE_DIR} - INSTALL_DIR ${ZSTD_INSTALL_DIR} - BINARY_DIR ${ZSTD_BINARY_DIR} - BUILD_BYPRODUCTS ${ZSTD_INSTALL_DIR}/lib/libzstd.a - PATCH_COMMAND - COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZSTD_SOURCE_DIR} ${ZSTD_BUILD_DIR} - COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${ZSTD_BUILD_DIR} -DPATCH_SERIES=${ZSTD_PATCH_SERIES} -DPATCH_DIR=${ZSTD_PATCH_DIR} -P ../../cmake/apply_patches.cmake - CONFIGURE_COMMAND - COMMAND # Nothing to configure - BUILD_COMMAND - COMMAND ${CMAKE_COMMAND} -E env ${ZSTD_MAKE_ARGS} make libzstd.a -j - INSTALL_COMMAND - COMMAND ${CMAKE_COMMAND} -E env ${ZSTD_MAKE_INSTALL_ARGS} make install-static install-includes - COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZSTD_INCLUDE_DIRS} ${INCLUDE_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${ZSTD_LIBRARIES} ${LIB_DIR} - BUILD_IN_SOURCE 0 -) - -add_library(ZSTD::zstd STATIC IMPORTED) -set_target_properties(ZSTD::zstd PROPERTIES - IMPORTED_LOCATION ${ZSTD_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIRS} -) - -# Ensure that the zstd are built before they are used -add_dependencies(ZSTD::zstd zstd) - -#################################### -add_library(ZSTD::pic::zstd STATIC IMPORTED) -set_target_properties(ZSTD::pic::zstd PROPERTIES - IMPORTED_LOCATION ${ZSTD_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIRS} -) - -# Ensure that the zstd are built before they are used -add_dependencies(ZSTD::pic::zstd zstd) - - -add_library(ZSTD::no-pic::zstd STATIC IMPORTED) -set_target_properties(ZSTD::no-pic::zstd PROPERTIES - IMPORTED_LOCATION ${ZSTD_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIRS} -) - -# Ensure that the zstd are built before they are used -add_dependencies(ZSTD::no-pic::zstd zstd) -################################################# - - - -# Set variables indicating that zstd has been installed set(ZSTD_FOUND ON) - -cmake_print_variables(ZSTD_LIBRARIES) From 3356ba84c36c2911a7cbd9acdf8b81adbe08880d Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Fri, 28 Feb 2025 17:19:45 +0300 Subject: [PATCH 13/20] Introduce pic and no-pic build variants for nghttp2 Signed-off-by: Petr Shumilov --- cmake/init-global-vars.cmake | 12 +- cmake/utils.cmake | 16 +- third-party/nghttp2-cmake/nghttp2.cmake | 204 +++++++++++++----------- third-party/zlib-cmake/zlib.cmake | 25 +-- third-party/zstd-cmake/zstd.cmake | 25 +-- 5 files changed, 152 insertions(+), 130 deletions(-) diff --git a/cmake/init-global-vars.cmake b/cmake/init-global-vars.cmake index 90e10cb434..06ee6a0cac 100644 --- a/cmake/init-global-vars.cmake +++ b/cmake/init-global-vars.cmake @@ -12,12 +12,12 @@ set(AUTO_DIR "${GENERATED_DIR}/auto") set(RUNTIME_LIGHT_DIR "${BASE_DIR}/runtime-light") set(RUNTIME_COMMON_DIR "${BASE_DIR}/runtime-common") -set(PIC_NAMESPACE_NAME "pic") -set(PIC_LIBRARY_SUFFIX "-${PIC_NAMESPACE_NAME}") +set(PIC_NAMESPACE "pic") +set(PIC_LIBRARY_SUFFIX "-${PIC_NAMESPACE}") set(PIC_LIBRARY_SPECIFIER "PIC") -set(NO_PIC_NAMESPACE_NAME "no-pic") -set(NO_PIC_LIBRARY_SUFFIX "-${NO_PIC_NAMESPACE_NAME}") +set(NO_PIC_NAMESPACE "no-pic") +set(NO_PIC_LIBRARY_SUFFIX "-${NO_PIC_NAMESPACE}") set(NO_PIC_LIBRARY_SPECIFIER "NO_PIC") if(APPLE) @@ -43,11 +43,11 @@ check_cxx_compiler_flag(-no-pie NO_PIE_IS_FOUND) if(NO_PIE_IS_FOUND) set(PIE_MODE_FLAGS -no-pie) set(PIC_MODE_ENABLED ON) - set(PIC_MODE ${NO_PIC_NAMESPACE_NAME}) + set(PIC_MODE ${NO_PIC_NAMESPACE}) else() set(PIE_MODE_FLAGS) set(PIC_MODE_ENABLED OFF) - set(PIC_MODE ${PIC_NAMESPACE_NAME}) + set(PIC_MODE ${PIC_NAMESPACE}) endif() # add extra build type release without NDEBUG flag diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 282213aa67..b9200c44b0 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -20,14 +20,14 @@ function(add_vk_library_to_pic_namespace TARGET) check_vk_library_suffix(${TARGET} ${PIC_LIBRARY_SUFFIX}) string(REGEX REPLACE "${PIC_LIBRARY_SUFFIX}$" "" new_target "${TARGET}") - add_library(vk::${PIC_NAMESPACE_NAME}::${new_target} ALIAS ${TARGET}) + add_library(vk::${PIC_NAMESPACE}::${new_target} ALIAS ${TARGET}) endfunction() function(add_vk_library_to_no_pic_namespace TARGET) check_vk_library_suffix(${TARGET} ${NO_PIC_LIBRARY_SUFFIX}) string(REGEX REPLACE "${NO_PIC_LIBRARY_SUFFIX}$" "" new_target "${TARGET}") - add_library(vk::${NO_PIC_NAMESPACE_NAME}::${new_target} ALIAS ${TARGET}) + add_library(vk::${NO_PIC_NAMESPACE}::${new_target} ALIAS ${TARGET}) endfunction() function(vk_add_library_pic) @@ -267,26 +267,28 @@ function(get_submodule_version SUBMODULE_PATH RESULT_VAR) set(${RESULT_VAR} "${submodule_version}" PARENT_SCOPE) endfunction() -function(make_third_party_configuration PIC_ENABLED PROJECT_GENERIC_NAME TARGET_NAMESPACE ARTIFACT_NAME PROJECT_NAME EXTRA_COMPILE_FLAGS TARGET_NAME LIB_PREFIX ARCHIVE_NAME) +function(make_third_party_configuration PIC_ENABLED PROJECT_GENERIC_NAME PROJECT_GENERIC_NAMESPACE ARTIFACT_NAME PROJECT_NAME TARGET_NAME EXTRA_COMPILE_FLAGS ARCHIVE_NAME NAMESPACE LIB_SPECIFIER) if(PIC_ENABLED) set(${PROJECT_NAME} "${PROJECT_GENERIC_NAME}${PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) + set(${TARGET_NAME} ${PROJECT_GENERIC_NAMESPACE}::${PIC_NAMESPACE}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) if(APPLE) set(${EXTRA_COMPILE_FLAGS} "-fPIC --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) else() set(${EXTRA_COMPILE_FLAGS} "-fPIC" PARENT_SCOPE) endif() - set(${TARGET_NAME} ${TARGET_NAMESPACE}::${PIC_NAMESPACE_NAME}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) - set(${LIB_PREFIX} ${TARGET_NAMESPACE}_${PIC_LIBRARY_SPECIFIER}_ PARENT_SCOPE) set(${ARCHIVE_NAME} "${ARTIFACT_NAME}${PIC_LIBRARY_SUFFIX}.a" PARENT_SCOPE) + set(${NAMESPACE} ${PIC_NAMESPACE} PARENT_SCOPE) + set(${LIB_SPECIFIER} ${PIC_LIBRARY_SPECIFIER} PARENT_SCOPE) else() set(${PROJECT_NAME} "${PROJECT_GENERIC_NAME}${NO_PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) + set(${TARGET_NAME} ${PROJECT_GENERIC_NAMESPACE}::${NO_PIC_NAMESPACE}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) if(APPLE) set(${EXTRA_COMPILE_FLAGS} "-fno-pic --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) else() set(${EXTRA_COMPILE_FLAGS} "-fno-pic -static" PARENT_SCOPE) endif() - set(${TARGET_NAME} ${TARGET_NAMESPACE}::${NO_PIC_NAMESPACE_NAME}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) - set(${LIB_PREFIX} ${TARGET_NAMESPACE}_${NO_PIC_LIBRARY_SPECIFIER}_ PARENT_SCOPE) set(${ARCHIVE_NAME} "${ARTIFACT_NAME}${NO_PIC_LIBRARY_SUFFIX}.a" PARENT_SCOPE) + set(${NAMESPACE} ${NO_PIC_NAMESPACE} PARENT_SCOPE) + set(${LIB_SPECIFIER} ${NO_PIC_LIBRARY_SPECIFIER} PARENT_SCOPE) endif() endfunction() diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake index 9ae9443052..bd0edd5c3e 100644 --- a/third-party/nghttp2-cmake/nghttp2.cmake +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -1,107 +1,125 @@ update_git_submodule(${THIRD_PARTY_DIR}/nghttp2 "--remote") +get_submodule_version(${THIRD_PARTY_DIR}/nghttp2 NGHTTP2_VERSION) +get_submodule_remote_url(third-party/nghttp2 NGHTTP2_SOURCE_URL) -set(NGHTTP2_SOURCE_DIR ${THIRD_PARTY_DIR}/nghttp2) -set(NGHTTP2_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/nghttp2/build) -set(NGHTTP2_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/nghttp2/install) -set(NGHTTP2_LIBRARIES ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a) -set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INSTALL_DIR}/include) -set(NGHTTP2_PATCH_DIR ${NGHTTP2_BUILD_DIR}/debian/patches/) -set(NGHTTP2_PATCH_SERIES ${NGHTTP2_BUILD_DIR}/debian/patches/series) -# Ensure the build, installation and "include" directories exists -file(MAKE_DIRECTORY ${NGHTTP2_BUILD_DIR}) -file(MAKE_DIRECTORY ${NGHTTP2_INSTALL_DIR}) -file(MAKE_DIRECTORY ${NGHTTP2_INCLUDE_DIRS}) +set(PROJECT_GENERIC_NAME nghttp2) +set(PROJECT_GENERIC_NAMESPACE NGHTTP2) +set(ARTIFACT_NAME libnghttp2) -set(NGHTTP2_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic") -if(NOT APPLE) - set(NGHTTP2_COMPILE_FLAGS "${NGHTTP2_COMPILE_FLAGS} -static") -endif() +function(build_nghttp2 PIC_ENABLED) + make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} + project_name + target_name + extra_compile_flags + archive_name + pic_namespace + pic_lib_specifier + ) -# The configuration has been based on: -# https://salsa.debian.org/debian/nghttp2/-/blob/buster/debian/rules#L8 -set(NGHTTP2_CMAKE_ARGS - -DCMAKE_C_FLAGS=${NGHTTP2_COMPILE_FLAGS} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_FLAGS=${NGHTTP2_COMPILE_FLAGS} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_POSITION_INDEPENDENT_CODE=OFF - -DENABLE_WERROR=ON - -DENABLE_THREADS=OFF - -DENABLE_APP=OFF - -DENABLE_HPACK_TOOLS=OFF - -DENABLE_ASIO_LIB=OFF - -DENABLE_EXAMPLES=OFF - -DENABLE_PYTHON_BINDINGS=OFF - -DENABLE_FAILMALLOC=OFF - -DENABLE_LIB_ONLY=ON - -DENABLE_STATIC_LIB=ON - -DENABLE_SHARED_LIB=OFF - -DWITH_LIBXML2=OFF - -DWITH_JEMALLOC=OFF - -DWITH_SPDYLAY=OFF - -DWITH_MRUBY=OFF - -DWITH_NEVERBLEED=OFF - -DOPENSSL_FOUND=ON - -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} - -DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES} - -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} - -DZLIB_FOUND=ON - -DZLIB_ROOT=${ZLIB_NO_PIC_ROOT} - -DZLIB_LIBRARIES=${ZLIB_NO_PIC_LIBRARIES} - -DZLIB_INCLUDE_DIR=${ZLIB_NO_PIC_INCLUDE_DIRS}/zlib -) + set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) + set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) + set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) + set(include_dirs ${install_dir}/include) + set(libraries ${install_dir}/lib/${archive_name}) + set(patch_dir ${build_dir}/debian/patches/) + set(patch_series ${build_dir}/debian/patches/series) + # Ensure the build, installation and "include" directories exists + file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${install_dir}) + file(MAKE_DIRECTORY ${include_dirs}) -ExternalProject_Add( - nghttp2 - DEPENDS openssl zlib-no-pic - PREFIX ${NGHTTP2_BUILD_DIR} - SOURCE_DIR ${NGHTTP2_SOURCE_DIR} - INSTALL_DIR ${NGHTTP2_INSTALL_DIR} - BINARY_DIR ${NGHTTP2_BUILD_DIR} - BUILD_BYPRODUCTS ${NGHTTP2_INSTALL_DIR}/lib/libnghttp2.a - PATCH_COMMAND - COMMAND ${CMAKE_COMMAND} -E copy_directory ${NGHTTP2_SOURCE_DIR} ${NGHTTP2_BUILD_DIR} - COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${NGHTTP2_BUILD_DIR} -DPATCH_SERIES=${NGHTTP2_PATCH_SERIES} -DPATCH_DIR=${NGHTTP2_PATCH_DIR} -P ../../cmake/apply_patches.cmake - CONFIGURE_COMMAND - COMMAND ${CMAKE_COMMAND} ${NGHTTP2_CMAKE_ARGS} -S ${NGHTTP2_SOURCE_DIR} -B ${NGHTTP2_BUILD_DIR} -Wno-dev - BUILD_COMMAND - COMMAND ${CMAKE_COMMAND} --build ${NGHTTP2_BUILD_DIR} --config $ -j - INSTALL_COMMAND - COMMAND ${CMAKE_COMMAND} --install ${NGHTTP2_BUILD_DIR} --prefix ${NGHTTP2_INSTALL_DIR} --config $ - COMMAND ${CMAKE_COMMAND} -E copy_directory ${NGHTTP2_INCLUDE_DIRS} ${INCLUDE_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${NGHTTP2_LIBRARIES} ${LIB_DIR} - BUILD_IN_SOURCE 0 -) + # The configuration has been based on: + # https://sources.debian.org/src/libzstd/1.4.8%2Bdfsg-2.1/debian/rules/ + set(compile_flags "$ENV{CFLAGS} -g0 ${extra_compile_flags}") -add_library(NGHTTP2::nghttp2 STATIC IMPORTED) -set_target_properties(NGHTTP2::nghttp2 PROPERTIES - IMPORTED_LOCATION ${NGHTTP2_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} -) + message(STATUS "NGHTTP2 Summary: -add_dependencies(NGHTTP2::nghttp2 nghttp2) + PIC enabled: ${PIC_ENABLED} + Version: ${NGHTTP2_VERSION} + Source: ${NGHTTP2_SOURCE_URL} + Include dirs: ${include_dirs} + Libraries: ${libraries} + Target name: ${target_name} + Compiler: + C compiler: ${CMAKE_C_COMPILER} + CFLAGS: ${compile_flags} + ") -######################################## -add_library(NGHTTP2::pic::nghttp2 STATIC IMPORTED) -set_target_properties(NGHTTP2::pic::nghttp2 PROPERTIES - IMPORTED_LOCATION ${NGHTTP2_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} -) + # The configuration has been based on: + # https://salsa.debian.org/debian/nghttp2/-/blob/buster/debian/rules#L8 + set(cmake_args + -DCMAKE_C_FLAGS=${compile_flags} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_FLAGS=${compile_flags} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_POSITION_INDEPENDENT_CODE=${PIC_ENABLED} + -DENABLE_WERROR=ON + -DENABLE_THREADS=OFF + -DENABLE_APP=OFF + -DENABLE_HPACK_TOOLS=OFF + -DENABLE_ASIO_LIB=OFF + -DENABLE_EXAMPLES=OFF + -DENABLE_PYTHON_BINDINGS=OFF + -DENABLE_FAILMALLOC=OFF + -DENABLE_LIB_ONLY=ON + -DENABLE_STATIC_LIB=ON + -DENABLE_SHARED_LIB=OFF + -DWITH_LIBXML2=OFF + -DWITH_JEMALLOC=OFF + -DWITH_SPDYLAY=OFF + -DWITH_MRUBY=OFF + -DWITH_NEVERBLEED=OFF + -DOPENSSL_FOUND=ON + -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} + -DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES} + -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} + -DZLIB_FOUND=ON + -DZLIB_ROOT=${ZLIB_${pic_lib_specifier}_ROOT} + -DZLIB_LIBRARIES=${ZLIB_${pic_lib_specifier}_LIBRARIES} + -DZLIB_INCLUDE_DIR=${ZLIB_${pic_lib_specifier}_INCLUDE_DIRS}/zlib + ) -add_dependencies(NGHTTP2::pic::nghttp2 nghttp2) + ExternalProject_Add( + ${project_name} + DEPENDS openssl ZLIB::${pic_namespace}::zlib + PREFIX ${build_dir} + SOURCE_DIR ${source_dir} + INSTALL_DIR ${install_dir} + BINARY_DIR ${build_dir} + BUILD_BYPRODUCTS ${libraries} + PATCH_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${source_dir} ${build_dir} + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${build_dir} -DPATCH_SERIES=${patch_series} -DPATCH_DIR=${patch_dir} -P ../../cmake/apply_patches.cmake + CONFIGURE_COMMAND + COMMAND ${CMAKE_COMMAND} ${cmake_args} -S ${source_dir} -B ${build_dir} -Wno-dev + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 + ) -add_library(NGHTTP2::no-pic::nghttp2 STATIC IMPORTED) -set_target_properties(NGHTTP2::no-pic::nghttp2 PROPERTIES - IMPORTED_LOCATION ${NGHTTP2_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${NGHTTP2_INCLUDE_DIRS} -) + add_library(${target_name} STATIC IMPORTED) + set_target_properties(${target_name} PROPERTIES + IMPORTED_LOCATION ${libraries} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} + ) -add_dependencies(NGHTTP2::no-pic::nghttp2 nghttp2) -############################################### + # Ensure that the Nghttp2 are built before they are used + add_dependencies(${target_name} ${project_name}) + # Set variables indicating that Nghttp2 has been installed + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) +endfunction() -# Set variables indicating that NGHTTP2 has been installed -set(NGHTTP2_FOUND ON) -set(NGHTTP2_ROOT ${NGHTTP2_INSTALL_DIR}) +# PIC is OFF +build_nghttp2(OFF) +# PIC is ON +build_nghttp2(ON) -cmake_print_variables(NGHTTP2_LIBRARIES) +set(NGHTTP2_FOUND ON) diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index b3d4f6ee93..a85e59bb9d 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -2,20 +2,21 @@ update_git_submodule(${THIRD_PARTY_DIR}/zlib "--recursive") get_submodule_version(${THIRD_PARTY_DIR}/zlib ZLIB_VERSION) get_submodule_remote_url(third-party/zlib ZLIB_SOURCE_URL) -function(build_zlib PIC_ENABLED) - set(project_generic_name zlib) - set(target_namespace ZLIB) - set(artifact_name libz) +set(PROJECT_GENERIC_NAME zlib) +set(PROJECT_GENERIC_NAMESPACE ZLIB) +set(ARTIFACT_NAME libz) - make_third_party_configuration(${PIC_ENABLED} ${project_generic_name} ${target_namespace} ${artifact_name} +function(build_zlib PIC_ENABLED) + make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} project_name - extra_compile_flags target_name - lib_prefix + extra_compile_flags archive_name + pic_namespace + pic_lib_specifier ) - set(source_dir ${THIRD_PARTY_DIR}/${project_generic_name}) + set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) @@ -56,7 +57,7 @@ function(build_zlib PIC_ENABLED) COMMAND make libz.a -j INSTALL_COMMAND COMMAND make install - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/libz.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 @@ -72,9 +73,9 @@ function(build_zlib PIC_ENABLED) add_dependencies(${target_name} ${project_name}) # Set variables indicating that zlib has been installed - set(${lib_prefix}ROOT ${install_dir} PARENT_SCOPE) - set(${lib_prefix}INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) - set(${lib_prefix}LIBRARIES ${libraries} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) endfunction() # PIC is OFF diff --git a/third-party/zstd-cmake/zstd.cmake b/third-party/zstd-cmake/zstd.cmake index b79150ab41..f13d830167 100644 --- a/third-party/zstd-cmake/zstd.cmake +++ b/third-party/zstd-cmake/zstd.cmake @@ -2,20 +2,21 @@ update_git_submodule(${THIRD_PARTY_DIR}/zstd "--remote") get_submodule_version(${THIRD_PARTY_DIR}/zstd ZSTD_VERSION) get_submodule_remote_url(third-party/zstd ZSTD_SOURCE_URL) -function(build_zstd PIC_ENABLED) - set(project_generic_name zstd) - set(target_namespace ZSTD) - set(artifact_name libzstd) +set(PROJECT_GENERIC_NAME zstd) +set(PROJECT_GENERIC_NAMESPACE ZSTD) +set(ARTIFACT_NAME libzstd) - make_third_party_configuration(${PIC_ENABLED} ${project_generic_name} ${target_namespace} ${artifact_name} +function(build_zstd PIC_ENABLED) + make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} project_name - extra_compile_flags target_name - lib_prefix + extra_compile_flags archive_name + pic_namespace + pic_lib_specifier ) - set(source_dir ${THIRD_PARTY_DIR}/${project_generic_name}) + set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(binary_dir ${build_dir}/lib) @@ -71,7 +72,7 @@ function(build_zstd PIC_ENABLED) COMMAND ${CMAKE_COMMAND} -E env ${make_args} make libzstd.a -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E env ${make_install_args} make install-static install-includes - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/libzstd.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 @@ -87,9 +88,9 @@ function(build_zstd PIC_ENABLED) add_dependencies(${target_name} ${project_name}) # Set variables indicating that ZSTD has been installed - set(${lib_prefix}ROOT ${install_dir} PARENT_SCOPE) - set(${lib_prefix}INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) - set(${lib_prefix}LIBRARIES ${libraries} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) endfunction() # PIC is OFF From c688744d9ec2f45a3dc7e2e280e20bfe69252b6a Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Fri, 28 Feb 2025 17:20:03 +0300 Subject: [PATCH 14/20] Introduce pic and no-pic build variants for curl Signed-off-by: Petr Shumilov --- third-party/curl-cmake/curl.cmake | 201 ++++++++++++++++-------------- 1 file changed, 109 insertions(+), 92 deletions(-) diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index cd24cf1253..3ae1f12d7c 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -1,107 +1,124 @@ update_git_submodule(${THIRD_PARTY_DIR}/curl "--remote") +get_submodule_version(${THIRD_PARTY_DIR}/curl CURL_VERSION) +get_submodule_remote_url(third-party/curl CURL_SOURCE_URL) -set(CURL_SOURCE_DIR ${THIRD_PARTY_DIR}/curl) -set(CURL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/curl/build) -set(CURL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/curl/install) -set(CURL_LIBRARIES ${CURL_INSTALL_DIR}/lib/libcurl.a) -set(CURL_INCLUDE_DIRS ${CURL_INSTALL_DIR}/include) -# Ensure the build, installation and "include" directories exists -file(MAKE_DIRECTORY ${CURL_BUILD_DIR}) -file(MAKE_DIRECTORY ${CURL_INSTALL_DIR}) -file(MAKE_DIRECTORY ${CURL_INCLUDE_DIRS}) +set(PROJECT_GENERIC_NAME curl) +set(PROJECT_GENERIC_NAMESPACE CURL) +set(ARTIFACT_NAME libcurl) -set(CURL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -Wno-deprecated-declarations") -if(NOT APPLE) - set(CURL_COMPILE_FLAGS "${CURL_COMPILE_FLAGS} -static") -endif() +function(build_curl PIC_ENABLED) + make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} + project_name + target_name + extra_compile_flags + archive_name + pic_namespace + pic_lib_specifier + ) -# Suppress compiler-specific warnings caused by -O3 -if(COMPILER_CLANG) - set(CURL_COMPILE_FLAGS "${CURL_COMPILE_FLAGS} -Wno-string-plus-int") -else() - set(CURL_COMPILE_FLAGS "${CURL_COMPILE_FLAGS} -Wno-stringop-truncation -Wno-maybe-uninitialized -Wno-stringop-overflow") -endif() + set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) + set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) + set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) + set(include_dirs ${install_dir}/include) + set(libraries ${install_dir}/lib/${archive_name}) + # Ensure the build, installation and "include" directories exists + file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${install_dir}) + file(MAKE_DIRECTORY ${include_dirs}) -# The configuration has been based on: -# https://github.com/VKCOM/curl/commit/00364cc6d672d9271032dbfbae3cfbc5e5f8542c -# ./configure --prefix=/opt/curl7600 --without-librtmp --without-libssh2 --disable-ldap --disable-ldaps --disable-threaded-resolver --with-nghttp2 --enable-versioned-symbols -set(CURL_CMAKE_ARGS - -DCMAKE_C_FLAGS=${CURL_COMPILE_FLAGS} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_POSITION_INDEPENDENT_CODE=OFF - -DBUILD_TESTING=OFF - -DCURL_WERROR=ON # Recommend to enable when optimization level less than -O3 - -DBUILD_CURL_EXE=OFF - -DCURL_STATICLIB=ON - -DUSE_LIBRTMP=OFF # Disable RTMP support. - -DCMAKE_USE_LIBSSH2=OFF # Disable libssh2 support. - -DCURL_DISABLE_LDAP=ON # Disable LDAP support. - -DCURL_DISABLE_LDAPS=ON # Disable LDAPS support. - -DENABLE_THREADED_RESOLVER=OFF # Disable threaded resolver. - -DUSE_NGHTTP2=ON # Enable HTTP/2 support. - -DCMAKE_USE_OPENSSL=ON - -DOPENSSL_FOUND=ON - -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_DIR=${ZLIB_NO_PIC_INCLUDE_DIRS}/zlib - -DNGHTTP2_FOUND=ON - -DNGHTTP2_ROOT=${NGHTTP2_ROOT} - -DNGHTTP2_LIBRARY=${NGHTTP2_LIBRARIES} - -DNGHTTP2_INCLUDE_DIR=${NGHTTP2_INCLUDE_DIRS} -) + set(compile_flags "$ENV{CFLAGS} -g0 -Wno-deprecated-declarations ${extra_compile_flags}") -ExternalProject_Add( - curl - DEPENDS openssl zlib-no-pic nghttp2 - 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} -Wno-dev - BUILD_COMMAND - COMMAND ${CMAKE_COMMAND} --build ${CURL_BUILD_DIR} --config $ -j - INSTALL_COMMAND - COMMAND ${CMAKE_COMMAND} --install ${CURL_BUILD_DIR} --prefix ${CURL_INSTALL_DIR} --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 -) + # Suppress compiler-specific warnings caused by -O3 + if(COMPILER_CLANG) + set(compile_flags "${compile_flags} -Wno-string-plus-int") + else() + set(compile_flags "${compile_flags} -Wno-stringop-truncation -Wno-maybe-uninitialized -Wno-stringop-overflow") + endif() -add_library(CURL::curl STATIC IMPORTED) -set_target_properties(CURL::curl PROPERTIES - IMPORTED_LOCATION ${CURL_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS} -) + message(STATUS "CURL Summary: -add_dependencies(CURL::curl curl) + PIC enabled: ${PIC_ENABLED} + Version: ${CURL_VERSION} + Source: ${CURL_SOURCE_URL} + Include dirs: ${include_dirs} + Libraries: ${libraries} + Target name: ${target_name} + Compiler: + C compiler: ${CMAKE_C_COMPILER} + CFLAGS: ${compile_flags} + ") + # The configuration has been based on: + # https://github.com/VKCOM/curl/commit/00364cc6d672d9271032dbfbae3cfbc5e5f8542c + # ./configure --prefix=/opt/curl7600 --without-librtmp --without-libssh2 --disable-ldap --disable-ldaps --disable-threaded-resolver --with-nghttp2 --enable-versioned-symbols + set(cmake_args + -DCMAKE_C_FLAGS=${compile_flags} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_POSITION_INDEPENDENT_CODE=${PIC_ENABLED} + -DBUILD_TESTING=OFF + -DCURL_WERROR=ON # Recommend to enable when optimization level less than -O3 + -DBUILD_CURL_EXE=OFF + -DCURL_STATICLIB=ON + -DUSE_LIBRTMP=OFF # Disable RTMP support. + -DCMAKE_USE_LIBSSH2=OFF # Disable libssh2 support. + -DCURL_DISABLE_LDAP=ON # Disable LDAP support. + -DCURL_DISABLE_LDAPS=ON # Disable LDAPS support. + -DENABLE_THREADED_RESOLVER=OFF # Disable threaded resolver. + -DUSE_NGHTTP2=ON # Enable HTTP/2 support. + -DCMAKE_USE_OPENSSL=ON + -DOPENSSL_FOUND=ON + -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_${pic_lib_specifier}_ROOT} + -DZLIB_LIBRARIES=${ZLIB_${pic_lib_specifier}_LIBRARIES} + -DZLIB_INCLUDE_DIR=${ZLIB_${pic_lib_specifier}_INCLUDE_DIRS}/zlib + -DNGHTTP2_FOUND=ON + -DNGHTTP2_ROOT=${NGHTTP2_${pic_lib_specifier}_ROOT} + -DNGHTTP2_LIBRARY=${NGHTTP2_${pic_lib_specifier}_LIBRARIES} + -DNGHTTP2_INCLUDE_DIR=${NGHTTP2_${pic_lib_specifier}_INCLUDE_DIRS} + ) -############################## -add_library(CURL::pic::curl STATIC IMPORTED) -set_target_properties(CURL::pic::curl PROPERTIES - IMPORTED_LOCATION ${CURL_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS} -) + ExternalProject_Add( + ${project_name} + DEPENDS openssl ZLIB::${pic_namespace}::zlib NGHTTP2::${pic_namespace}::nghttp2 + PREFIX ${build_dir} + SOURCE_DIR ${source_dir} + INSTALL_DIR ${install_dir} + BUILD_BYPRODUCTS ${libraries} + CONFIGURE_COMMAND + COMMAND ${CMAKE_COMMAND} ${cmake_args} -S ${source_dir} -B ${build_dir} -Wno-dev + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 + ) -add_dependencies(CURL::pic::curl curl) + add_library(${target_name} STATIC IMPORTED) + set_target_properties(${target_name} PROPERTIES + IMPORTED_LOCATION ${libraries} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} + ) -add_library(CURL::no-pic::curl STATIC IMPORTED) -set_target_properties(CURL::no-pic::curl PROPERTIES - IMPORTED_LOCATION ${CURL_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIRS} -) + # Ensure that the curl are built before they are used + add_dependencies(${target_name} ${project_name}) -add_dependencies(CURL::no-pic::curl curl) -############################### + # Set variables indicating that curl has been installed + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) +endfunction() -# Set variables indicating that curl has been installed -set(CURL_FOUND ON) +# PIC is OFF +build_curl(OFF) +# PIC is ON +build_curl(ON) -cmake_print_variables(CURL_LIBRARIES) +set(CURL_FOUND ON) From 4170aed789711470df3ae2d0dd88fdf515410089 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Fri, 28 Feb 2025 19:44:08 +0300 Subject: [PATCH 15/20] Introduce pic and no-pic build variants for OpenSSL Signed-off-by: Petr Shumilov --- compiler/compiler.cmake | 2 +- third-party/curl-cmake/curl.cmake | 26 +-- third-party/nghttp2-cmake/nghttp2.cmake | 26 +-- third-party/openssl-cmake/openssl.cmake | 236 +++++++++++++----------- third-party/zlib-cmake/zlib.cmake | 18 +- third-party/zstd-cmake/zstd.cmake | 18 +- 6 files changed, 170 insertions(+), 156 deletions(-) diff --git a/compiler/compiler.cmake b/compiler/compiler.cmake index c554f4f935..c99c258312 100644 --- a/compiler/compiler.cmake +++ b/compiler/compiler.cmake @@ -274,7 +274,7 @@ set_property(SOURCE ${KPHP_COMPILER_DIR}/kphp2cpp.cpp add_executable(kphp2cpp ${KPHP_COMPILER_DIR}/kphp2cpp.cpp) target_include_directories(kphp2cpp PUBLIC ${KPHP_COMPILER_DIR}) -add_dependencies(kphp2cpp openssl) +add_dependencies(kphp2cpp OpenSSL::no-pic::Crypto) prepare_cross_platform_libs(COMPILER_LIBS yaml-cpp re2) set(COMPILER_LIBS vk::no-pic::kphp2cpp_src vk::no-pic::tlo_parsing_src vk::no-pic::popular-common ${COMPILER_LIBS} fmt::fmt OpenSSL::no-pic::Crypto pthread) diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index 3ae1f12d7c..d787e9cb3a 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -2,12 +2,12 @@ update_git_submodule(${THIRD_PARTY_DIR}/curl "--remote") get_submodule_version(${THIRD_PARTY_DIR}/curl CURL_VERSION) get_submodule_remote_url(third-party/curl CURL_SOURCE_URL) -set(PROJECT_GENERIC_NAME curl) -set(PROJECT_GENERIC_NAMESPACE CURL) -set(ARTIFACT_NAME libcurl) +set(CURL_PROJECT_GENERIC_NAME curl) +set(CURL_PROJECT_GENERIC_NAMESPACE CURL) +set(CURL_ARTIFACT_NAME libcurl) function(build_curl PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${CURL_PROJECT_GENERIC_NAME} ${CURL_PROJECT_GENERIC_NAMESPACE} ${CURL_ARTIFACT_NAME} project_name target_name extra_compile_flags @@ -16,7 +16,7 @@ function(build_curl PIC_ENABLED) pic_lib_specifier ) - set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) + set(source_dir ${THIRD_PARTY_DIR}/${CURL_PROJECT_GENERIC_NAME}) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) @@ -67,9 +67,9 @@ function(build_curl PIC_ENABLED) -DUSE_NGHTTP2=ON # Enable HTTP/2 support. -DCMAKE_USE_OPENSSL=ON -DOPENSSL_FOUND=ON - -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} - -DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES} - -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} + -DOPENSSL_ROOT_DIR=${OPENSSL_${pic_lib_specifier}_ROOT_DIR} + -DOPENSSL_LIBRARIES=${OPENSSL_${pic_lib_specifier}_LIBRARIES} + -DOPENSSL_INCLUDE_DIR=${OPENSSL_${pic_lib_specifier}_INCLUDE_DIR} -DCURL_ZLIB=ON -DZLIB_FOUND=ON -DCURL_SPECIAL_LIBZ=ON @@ -84,7 +84,7 @@ function(build_curl PIC_ENABLED) ExternalProject_Add( ${project_name} - DEPENDS openssl ZLIB::${pic_namespace}::zlib NGHTTP2::${pic_namespace}::nghttp2 + DEPENDS OpenSSL::${pic_namespace}::Crypto OpenSSL::${pic_namespace}::SSL ZLIB::${pic_namespace}::zlib NGHTTP2::${pic_namespace}::nghttp2 PREFIX ${build_dir} SOURCE_DIR ${source_dir} INSTALL_DIR ${install_dir} @@ -95,7 +95,7 @@ function(build_curl PIC_ENABLED) COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${CURL_ARTIFACT_NAME}.a ${libraries} COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 @@ -111,9 +111,9 @@ function(build_curl PIC_ENABLED) add_dependencies(${target_name} ${project_name}) # Set variables indicating that curl has been installed - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) + set(${CURL_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${CURL_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${CURL_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) endfunction() # PIC is OFF diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake index bd0edd5c3e..fdc5c0b762 100644 --- a/third-party/nghttp2-cmake/nghttp2.cmake +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -2,12 +2,12 @@ update_git_submodule(${THIRD_PARTY_DIR}/nghttp2 "--remote") get_submodule_version(${THIRD_PARTY_DIR}/nghttp2 NGHTTP2_VERSION) get_submodule_remote_url(third-party/nghttp2 NGHTTP2_SOURCE_URL) -set(PROJECT_GENERIC_NAME nghttp2) -set(PROJECT_GENERIC_NAMESPACE NGHTTP2) -set(ARTIFACT_NAME libnghttp2) +set(NGHTTP2_PROJECT_GENERIC_NAME nghttp2) +set(NGHTTP2_PROJECT_GENERIC_NAMESPACE NGHTTP2) +set(NGHTTP2_ARTIFACT_NAME libnghttp2) function(build_nghttp2 PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${NGHTTP2_PROJECT_GENERIC_NAME} ${NGHTTP2_PROJECT_GENERIC_NAMESPACE} ${NGHTTP2_ARTIFACT_NAME} project_name target_name extra_compile_flags @@ -16,7 +16,7 @@ function(build_nghttp2 PIC_ENABLED) pic_lib_specifier ) - set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) + set(source_dir ${THIRD_PARTY_DIR}/${NGHTTP2_PROJECT_GENERIC_NAME}) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) @@ -70,9 +70,9 @@ function(build_nghttp2 PIC_ENABLED) -DWITH_MRUBY=OFF -DWITH_NEVERBLEED=OFF -DOPENSSL_FOUND=ON - -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} - -DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES} - -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} + -DOPENSSL_ROOT_DIR=${OPENSSL_${pic_lib_specifier}_ROOT_DIR} + -DOPENSSL_LIBRARIES=${OPENSSL_${pic_lib_specifier}_LIBRARIES} + -DOPENSSL_INCLUDE_DIR=${OPENSSL_${pic_lib_specifier}_INCLUDE_DIR} -DZLIB_FOUND=ON -DZLIB_ROOT=${ZLIB_${pic_lib_specifier}_ROOT} -DZLIB_LIBRARIES=${ZLIB_${pic_lib_specifier}_LIBRARIES} @@ -81,7 +81,7 @@ function(build_nghttp2 PIC_ENABLED) ExternalProject_Add( ${project_name} - DEPENDS openssl ZLIB::${pic_namespace}::zlib + DEPENDS OpenSSL::${pic_namespace}::Crypto OpenSSL::${pic_namespace}::SSL ZLIB::${pic_namespace}::zlib PREFIX ${build_dir} SOURCE_DIR ${source_dir} INSTALL_DIR ${install_dir} @@ -96,7 +96,7 @@ function(build_nghttp2 PIC_ENABLED) COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${NGHTTP2_ARTIFACT_NAME}.a ${libraries} COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 @@ -112,9 +112,9 @@ function(build_nghttp2 PIC_ENABLED) add_dependencies(${target_name} ${project_name}) # Set variables indicating that Nghttp2 has been installed - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) + set(${NGHTTP2_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${NGHTTP2_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${NGHTTP2_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) endfunction() # PIC is OFF diff --git a/third-party/openssl-cmake/openssl.cmake b/third-party/openssl-cmake/openssl.cmake index ed284d51cf..74a4edfc36 100644 --- a/third-party/openssl-cmake/openssl.cmake +++ b/third-party/openssl-cmake/openssl.cmake @@ -1,115 +1,129 @@ update_git_submodule(${THIRD_PARTY_DIR}/openssl "--remote") +get_submodule_version(${THIRD_PARTY_DIR}/openssl OPENSSL_VERSION) +get_submodule_remote_url(third-party/openssl OPENSSL_SOURCE_URL) + +set(OPENSSL_PROJECT_GENERIC_NAME openssl) +set(OPENSSL_PROJECT_GENERIC_NAMESPACE OpenSSL) +set(OPENSSL_FOUND_VARIABLE_PREFIX OPENSSL) +set(OPENSSL_CRYPTO_ARTIFACT_NAME libcrypto) +set(OPENSSL_SSL_ARTIFACT_NAME libssl) +set(OPENSSL_CRYPTO_TARGET Crypto) +set(OPENSSL_SSL_TARGET SSL) + +function(build_openssl PIC_ENABLED) + make_third_party_configuration(${PIC_ENABLED} ${OPENSSL_PROJECT_GENERIC_NAME} ${OPENSSL_PROJECT_GENERIC_NAMESPACE} "" + project_name + target_name + extra_compile_flags + archive_name + pic_namespace + pic_lib_specifier + ) + + set(source_dir ${THIRD_PARTY_DIR}/${OPENSSL_PROJECT_GENERIC_NAME}) + set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) + set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) + set(include_dirs ${install_dir}/include) + set(crypto_library ${install_dir}/lib/${OPENSSL_CRYPTO_ARTIFACT_NAME}-${pic_namespace}.a) + set(ssl_library ${install_dir}/lib/${OPENSSL_SSL_ARTIFACT_NAME}-${pic_namespace}.a) + set(libraries ${crypto_library} ${ssl_library}) + set(patch_dir ${build_dir}/debian/patches/) + set(patch_series ${build_dir}/debian/patches/series) + set(crypto_target ${OPENSSL_PROJECT_GENERIC_NAMESPACE}::${pic_namespace}::${OPENSSL_CRYPTO_TARGET}) + set(ssl_target ${OPENSSL_PROJECT_GENERIC_NAMESPACE}::${pic_namespace}::${OPENSSL_SSL_TARGET}) + # Ensure the build, installation and "include" directories exists + file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${install_dir}) + file(MAKE_DIRECTORY ${include_dirs}) + + set(compile_flags "$ENV{CFLAGS} -g0 ${extra_compile_flags}") + + # The configuration has been based on: + # https://packages.debian.org/buster/libssl1.1 + # + # CONFARGS = --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/$(DEB_HOST_MULTIARCH) no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms + # ... + # ifeq ($(DEB_HOST_ARCH_CPU), amd64) + # CONFARGS += enable-ec_nistp_64_gcc_128 + # endif + # + set(configure_flags --openssldir=/usr/lib/ssl no-shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-tests) + if (NOT PIC_ENABLED) + set(configure_flags ${configure_flags} no-pic -static) + endif() + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + set(configure_flags ${configure_flags} enable-ec_nistp_64_gcc_128) + endif() + + message(STATUS "OpenSSL Summary: + + PIC enabled: ${PIC_ENABLED} + Version: ${OPENSSL_VERSION} + Source: ${OPENSSL_SOURCE_URL} + Include dirs: ${include_dirs} + Crypto lib: ${crypto_library} + Crypto target: ${crypto_target} + SSL lib: ${ssl_library} + SSL target: ${ssl_target} + Configure: + Flags: ${configure_flags} + Compiler: + C compiler: ${CMAKE_C_COMPILER} + CFLAGS: ${compile_flags} + ") + + ExternalProject_Add( + ${project_name} + PREFIX ${build_dir} + SOURCE_DIR ${source_dir} + INSTALL_DIR ${install_dir} + BINARY_DIR ${build_dir} + BUILD_BYPRODUCTS ${libraries} + PATCH_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${source_dir} ${build_dir} + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${build_dir} -DPATCH_SERIES=${patch_series} -DPATCH_DIR=${patch_dir} -P ../../cmake/apply_patches.cmake + CONFIGURE_COMMAND + COMMAND ${CMAKE_COMMAND} -E env CC=${CMAKE_C_COMPILER} CFLAGS=${compile_flags} ./config --prefix=${install_dir} ${configure_flags} + BUILD_COMMAND + COMMAND make build_libs -j + INSTALL_COMMAND + COMMAND make install_dev + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${OPENSSL_CRYPTO_ARTIFACT_NAME}.a ${crypto_library} + COMMAND ${CMAKE_COMMAND} -E copy ${crypto_library} ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${OPENSSL_SSL_ARTIFACT_NAME}.a ${ssl_library} + COMMAND ${CMAKE_COMMAND} -E copy ${ssl_library} ${LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 + ) + + add_library(${crypto_target} STATIC IMPORTED) + set_target_properties(${crypto_target} PROPERTIES + IMPORTED_LOCATION ${crypto_library} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} + ) + + add_library(${ssl_target} STATIC IMPORTED) + set_target_properties(${ssl_target} PROPERTIES + IMPORTED_LOCATION ${ssl_library} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} + ) + + # Ensure that the ssl and crypto are built before they are used + add_dependencies(${crypto_target} ${project_name}) + add_dependencies(${ssl_target} ${project_name}) + + # Set variables indicating that OpenSSL has been installed + set(${OPENSSL_FOUND_VARIABLE_PREFIX}_${pic_lib_specifier}_ROOT_DIR ${install_dir} PARENT_SCOPE) + set(${OPENSSL_FOUND_VARIABLE_PREFIX}_${pic_lib_specifier}_INCLUDE_DIR ${include_dirs} PARENT_SCOPE) + set(${OPENSSL_FOUND_VARIABLE_PREFIX}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) + set(${OPENSSL_FOUND_VARIABLE_PREFIX}_${pic_lib_specifier}_CRYPTO_LIBRARY ${crypto_library} PARENT_SCOPE) + set(${OPENSSL_FOUND_VARIABLE_PREFIX}_${pic_lib_specifier}_SSL_LIBRARY ${ssl_library} PARENT_SCOPE) +endfunction() + +# PIC is OFF +build_openssl(OFF) +# PIC is ON +build_openssl(ON) -set(OPENSSL_SOURCE_DIR ${THIRD_PARTY_DIR}/openssl) -set(OPENSSL_BUILD_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/build) -set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/third-party/openssl/install) -set(OPENSSL_PATCH_DIR ${OPENSSL_BUILD_DIR}/debian/patches/) -set(OPENSSL_PATCH_SERIES ${OPENSSL_BUILD_DIR}/debian/patches/series) -# Ensure the build and installation directories exists -file(MAKE_DIRECTORY ${OPENSSL_BUILD_DIR}) -file(MAKE_DIRECTORY ${OPENSSL_INSTALL_DIR}) - -set(OPENSSL_COMPILE_FLAGS "$ENV{CFLAGS} -g0 -fno-pic -static") - -# The configuration has been based on: -# https://packages.debian.org/buster/libssl1.1 -# -# CONFARGS = --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/$(DEB_HOST_MULTIARCH) no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms -# ... -# ifeq ($(DEB_HOST_ARCH_CPU), amd64) -# CONFARGS += enable-ec_nistp_64_gcc_128 -# endif -# -if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - set(OPENSSL_CONFIGURE_EXTRA_OPTION enable-ec_nistp_64_gcc_128) -endif() - -if(APPLE) - set(OPENSSL_COMPILE_FLAGS "${OPENSSL_COMPILE_FLAGS} --sysroot ${CMAKE_OSX_SYSROOT}") -endif() - -ExternalProject_Add( - openssl - PREFIX ${OPENSSL_BUILD_DIR} - SOURCE_DIR ${OPENSSL_SOURCE_DIR} - INSTALL_DIR ${OPENSSL_INSTALL_DIR} - BINARY_DIR ${OPENSSL_BUILD_DIR} - BUILD_BYPRODUCTS ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a - PATCH_COMMAND - 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 ${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 make build_libs -j - INSTALL_COMMAND - 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} - BUILD_IN_SOURCE 0 -) - -set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include) -# Ensure the include directory exists -file(MAKE_DIRECTORY ${OPENSSL_INCLUDE_DIR}) - -add_library(OpenSSL::SSL STATIC IMPORTED) -set_target_properties(OpenSSL::SSL PROPERTIES - IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libssl.a - INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} -) - -add_library(OpenSSL::Crypto STATIC IMPORTED) -set_target_properties(OpenSSL::Crypto PROPERTIES - IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a - INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} -) - -# Ensure that the OpenSSL libraries are built before they are used -add_dependencies(OpenSSL::SSL openssl) -add_dependencies(OpenSSL::Crypto openssl) - - -########################################## -add_library(OpenSSL::pic::SSL STATIC IMPORTED) -set_target_properties(OpenSSL::pic::SSL PROPERTIES - IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libssl.a - INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} -) - -add_library(OpenSSL::pic::Crypto STATIC IMPORTED) -set_target_properties(OpenSSL::pic::Crypto PROPERTIES - IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a - INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} -) - -add_dependencies(OpenSSL::pic::SSL openssl) -add_dependencies(OpenSSL::pic::Crypto openssl) - - -add_library(OpenSSL::no-pic::SSL STATIC IMPORTED) -set_target_properties(OpenSSL::no-pic::SSL PROPERTIES - IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libssl.a - INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} -) - -add_library(OpenSSL::no-pic::Crypto STATIC IMPORTED) -set_target_properties(OpenSSL::no-pic::Crypto PROPERTIES - IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a - INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR} -) - -add_dependencies(OpenSSL::no-pic::SSL openssl) -add_dependencies(OpenSSL::no-pic::Crypto openssl) -################### - -# Set variables indicating that OpenSSL has been found and specify its library locations set(OPENSSL_FOUND ON) -set(OPENSSL_ROOT_DIR ${OPENSSL_INSTALL_DIR}) -set(OPENSSL_LIBRARIES ${OPENSSL_INSTALL_DIR}/lib/libssl.a ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a) -set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a) -set(OPENSSL_SSL_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libssl.a) set(OPENSSL_USE_STATIC_LIBS ON) - -cmake_print_variables(OPENSSL_LIBRARIES) diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index a85e59bb9d..7fcdf836b3 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -2,12 +2,12 @@ update_git_submodule(${THIRD_PARTY_DIR}/zlib "--recursive") get_submodule_version(${THIRD_PARTY_DIR}/zlib ZLIB_VERSION) get_submodule_remote_url(third-party/zlib ZLIB_SOURCE_URL) -set(PROJECT_GENERIC_NAME zlib) -set(PROJECT_GENERIC_NAMESPACE ZLIB) -set(ARTIFACT_NAME libz) +set(ZLIB_PROJECT_GENERIC_NAME zlib) +set(ZLIB_PROJECT_GENERIC_NAMESPACE ZLIB) +set(ZLIB_ARTIFACT_NAME libz) function(build_zlib PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${ZLIB_PROJECT_GENERIC_NAME} ${ZLIB_PROJECT_GENERIC_NAMESPACE} ${ZLIB_ARTIFACT_NAME} project_name target_name extra_compile_flags @@ -16,7 +16,7 @@ function(build_zlib PIC_ENABLED) pic_lib_specifier ) - set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) + set(source_dir ${THIRD_PARTY_DIR}/${ZLIB_PROJECT_GENERIC_NAME}) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) @@ -57,7 +57,7 @@ function(build_zlib PIC_ENABLED) COMMAND make libz.a -j INSTALL_COMMAND COMMAND make install - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ZLIB_ARTIFACT_NAME}.a ${libraries} COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 @@ -73,9 +73,9 @@ function(build_zlib PIC_ENABLED) add_dependencies(${target_name} ${project_name}) # Set variables indicating that zlib has been installed - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) + set(${ZLIB_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${ZLIB_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${ZLIB_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) endfunction() # PIC is OFF diff --git a/third-party/zstd-cmake/zstd.cmake b/third-party/zstd-cmake/zstd.cmake index f13d830167..e243b8bcad 100644 --- a/third-party/zstd-cmake/zstd.cmake +++ b/third-party/zstd-cmake/zstd.cmake @@ -2,12 +2,12 @@ update_git_submodule(${THIRD_PARTY_DIR}/zstd "--remote") get_submodule_version(${THIRD_PARTY_DIR}/zstd ZSTD_VERSION) get_submodule_remote_url(third-party/zstd ZSTD_SOURCE_URL) -set(PROJECT_GENERIC_NAME zstd) -set(PROJECT_GENERIC_NAMESPACE ZSTD) -set(ARTIFACT_NAME libzstd) +set(ZSTD_PROJECT_GENERIC_NAME zstd) +set(ZSTD_PROJECT_GENERIC_NAMESPACE ZSTD) +set(ZSTD_ARTIFACT_NAME libzstd) function(build_zstd PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${PROJECT_GENERIC_NAME} ${PROJECT_GENERIC_NAMESPACE} ${ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${ZSTD_PROJECT_GENERIC_NAME} ${ZSTD_PROJECT_GENERIC_NAMESPACE} ${ZSTD_ARTIFACT_NAME} project_name target_name extra_compile_flags @@ -16,7 +16,7 @@ function(build_zstd PIC_ENABLED) pic_lib_specifier ) - set(source_dir ${THIRD_PARTY_DIR}/${PROJECT_GENERIC_NAME}) + set(source_dir ${THIRD_PARTY_DIR}/${ZSTD_PROJECT_GENERIC_NAME}) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(binary_dir ${build_dir}/lib) @@ -72,7 +72,7 @@ function(build_zstd PIC_ENABLED) COMMAND ${CMAKE_COMMAND} -E env ${make_args} make libzstd.a -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E env ${make_install_args} make install-static install-includes - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ARTIFACT_NAME}.a ${libraries} + COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ZSTD_ARTIFACT_NAME}.a ${libraries} COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 @@ -88,9 +88,9 @@ function(build_zstd PIC_ENABLED) add_dependencies(${target_name} ${project_name}) # Set variables indicating that ZSTD has been installed - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) - set(${PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) + set(${ZSTD_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${ZSTD_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${ZSTD_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) endfunction() # PIC is OFF From 0d97b3925410a147879e1f0dffee1ed73eb8b08f Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Fri, 28 Feb 2025 20:51:46 +0300 Subject: [PATCH 16/20] Remove useless cmake files Signed-off-by: Petr Shumilov --- third-party/zlib-cmake/zlib-no-pic.cmake | 53 ------------------------ third-party/zlib-cmake/zlib-pic.cmake | 49 ---------------------- 2 files changed, 102 deletions(-) delete mode 100644 third-party/zlib-cmake/zlib-no-pic.cmake delete mode 100644 third-party/zlib-cmake/zlib-pic.cmake diff --git a/third-party/zlib-cmake/zlib-no-pic.cmake b/third-party/zlib-cmake/zlib-no-pic.cmake deleted file mode 100644 index a2758a8c68..0000000000 --- a/third-party/zlib-cmake/zlib-no-pic.cmake +++ /dev/null @@ -1,53 +0,0 @@ -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) -set(ZLIB_NO_PIC_INCLUDE_DIRS ${ZLIB_NO_PIC_INSTALL_DIR}/include) -set(ZLIB_NO_PIC_LIBRARIES ${ZLIB_NO_PIC_INSTALL_DIR}/lib/libz-no-pic.a) -# Ensure the build, installation and "include" directories exists -file(MAKE_DIRECTORY ${ZLIB_NO_PIC_BUILD_DIR}) -file(MAKE_DIRECTORY ${ZLIB_NO_PIC_INSTALL_DIR}) -file(MAKE_DIRECTORY ${ZLIB_NO_PIC_INCLUDE_DIRS}) - -# For further optional differences -if(COMPILE_RUNTIME_LIGHT) - set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fno-pic") -else() - set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_COMMON_COMPILE_FLAGS} -fno-pic") -endif() - -if(NOT APPLE) - set(ZLIB_NO_PIC_COMPILE_FLAGS "${ZLIB_NO_PIC_COMPILE_FLAGS} -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_NO_PIC_INCLUDE_DIRS}/zlib --static - BUILD_COMMAND - COMMAND make libz.a -j - INSTALL_COMMAND - COMMAND make install - COMMAND ${CMAKE_COMMAND} -E copy ${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} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZLIB_NO_PIC_INCLUDE_DIRS} ${INCLUDE_DIR} - BUILD_IN_SOURCE 0 -) - -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_NO_PIC_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) diff --git a/third-party/zlib-cmake/zlib-pic.cmake b/third-party/zlib-cmake/zlib-pic.cmake deleted file mode 100644 index 021bcb958a..0000000000 --- a/third-party/zlib-cmake/zlib-pic.cmake +++ /dev/null @@ -1,49 +0,0 @@ -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) -set(ZLIB_PIC_INCLUDE_DIRS ${ZLIB_PIC_INSTALL_DIR}/include) -set(ZLIB_PIC_LIBRARIES ${ZLIB_PIC_INSTALL_DIR}/lib/libz-pic.a) -# Ensure the build, installation and "include" directories exists -file(MAKE_DIRECTORY ${ZLIB_PIC_BUILD_DIR}) -file(MAKE_DIRECTORY ${ZLIB_PIC_INSTALL_DIR}) -file(MAKE_DIRECTORY ${ZLIB_PIC_INCLUDE_DIRS}) - -# 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_PIC_INCLUDE_DIRS}/zlib --static - BUILD_COMMAND - COMMAND make libz.a -j - INSTALL_COMMAND - COMMAND make install - COMMAND ${CMAKE_COMMAND} -E copy ${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} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${ZLIB_PIC_INCLUDE_DIRS} ${INCLUDE_DIR} - BUILD_IN_SOURCE 0 -) - -add_library(ZLIB::ZLIB_PIC STATIC IMPORTED) -set_target_properties(ZLIB::ZLIB_PIC PROPERTIES - IMPORTED_LOCATION ${ZLIB_PIC_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_PIC_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) From c633d284d1675d2436596fdd2f4bd563f7ad68e4 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Fri, 28 Feb 2025 21:39:27 +0300 Subject: [PATCH 17/20] Remove unnecessary copying of third-party artifacts into objs/lib Signed-off-by: Petr Shumilov --- cmake/utils.cmake | 28 ++++++++++++------------- compiler/compiler-settings.cpp | 26 ----------------------- flex/flex.cmake | 4 ---- third-party/curl-cmake/curl.cmake | 7 ++----- third-party/nghttp2-cmake/nghttp2.cmake | 7 ++----- third-party/openssl-cmake/openssl.cmake | 11 +++------- third-party/zlib-cmake/zlib.cmake | 7 ++----- third-party/zstd-cmake/zstd.cmake | 7 ++----- 8 files changed, 24 insertions(+), 73 deletions(-) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index b9200c44b0..38ce0ad5f6 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -267,28 +267,26 @@ function(get_submodule_version SUBMODULE_PATH RESULT_VAR) set(${RESULT_VAR} "${submodule_version}" PARENT_SCOPE) endfunction() -function(make_third_party_configuration PIC_ENABLED PROJECT_GENERIC_NAME PROJECT_GENERIC_NAMESPACE ARTIFACT_NAME PROJECT_NAME TARGET_NAME EXTRA_COMPILE_FLAGS ARCHIVE_NAME NAMESPACE LIB_SPECIFIER) +function(make_third_party_configuration PIC_ENABLED PROJECT_GENERIC_NAME PROJECT_GENERIC_NAMESPACE OUT_PROJECT_NAME OUT_TARGET_NAME OUT_EXTRA_COMPILE_FLAGS OUT_NAMESPACE OUT_LIB_SPECIFIER) if(PIC_ENABLED) - set(${PROJECT_NAME} "${PROJECT_GENERIC_NAME}${PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) - set(${TARGET_NAME} ${PROJECT_GENERIC_NAMESPACE}::${PIC_NAMESPACE}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) + set(${OUT_PROJECT_NAME} "${PROJECT_GENERIC_NAME}${PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) + set(${OUT_TARGET_NAME} ${PROJECT_GENERIC_NAMESPACE}::${PIC_NAMESPACE}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) if(APPLE) - set(${EXTRA_COMPILE_FLAGS} "-fPIC --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) + set(${OUT_EXTRA_COMPILE_FLAGS} "-fPIC --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) else() - set(${EXTRA_COMPILE_FLAGS} "-fPIC" PARENT_SCOPE) + set(${OUT_EXTRA_COMPILE_FLAGS} "-fPIC" PARENT_SCOPE) endif() - set(${ARCHIVE_NAME} "${ARTIFACT_NAME}${PIC_LIBRARY_SUFFIX}.a" PARENT_SCOPE) - set(${NAMESPACE} ${PIC_NAMESPACE} PARENT_SCOPE) - set(${LIB_SPECIFIER} ${PIC_LIBRARY_SPECIFIER} PARENT_SCOPE) + set(${OUT_NAMESPACE} ${PIC_NAMESPACE} PARENT_SCOPE) + set(${OUT_LIB_SPECIFIER} ${PIC_LIBRARY_SPECIFIER} PARENT_SCOPE) else() - set(${PROJECT_NAME} "${PROJECT_GENERIC_NAME}${NO_PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) - set(${TARGET_NAME} ${PROJECT_GENERIC_NAMESPACE}::${NO_PIC_NAMESPACE}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) + set(${OUT_PROJECT_NAME} "${PROJECT_GENERIC_NAME}${NO_PIC_LIBRARY_SUFFIX}" PARENT_SCOPE) + set(${OUT_TARGET_NAME} ${PROJECT_GENERIC_NAMESPACE}::${NO_PIC_NAMESPACE}::${PROJECT_GENERIC_NAME} PARENT_SCOPE) if(APPLE) - set(${EXTRA_COMPILE_FLAGS} "-fno-pic --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) + set(${OUT_EXTRA_COMPILE_FLAGS} "-fno-pic --sysroot ${CMAKE_OSX_SYSROOT}" PARENT_SCOPE) else() - set(${EXTRA_COMPILE_FLAGS} "-fno-pic -static" PARENT_SCOPE) + set(${OUT_EXTRA_COMPILE_FLAGS} "-fno-pic -static" PARENT_SCOPE) endif() - set(${ARCHIVE_NAME} "${ARTIFACT_NAME}${NO_PIC_LIBRARY_SUFFIX}.a" PARENT_SCOPE) - set(${NAMESPACE} ${NO_PIC_NAMESPACE} PARENT_SCOPE) - set(${LIB_SPECIFIER} ${NO_PIC_LIBRARY_SPECIFIER} PARENT_SCOPE) + set(${OUT_NAMESPACE} ${NO_PIC_NAMESPACE} PARENT_SCOPE) + set(${OUT_LIB_SPECIFIER} ${NO_PIC_LIBRARY_SPECIFIER} PARENT_SCOPE) endif() endfunction() diff --git a/compiler/compiler-settings.cpp b/compiler/compiler-settings.cpp index 3488c6131d..2628e19be0 100644 --- a/compiler/compiler-settings.cpp +++ b/compiler/compiler-settings.cpp @@ -149,21 +149,6 @@ void append_3dparty_headers(std::string &cxx_flags, const std::string &path_to_3 cxx_flags += " -I" + path_to_3dparty + "include/"; } -[[maybe_unused]] void append_3dparty_lib(std::string &ld_flags, const std::string &path_to_3dparty, const std::string &libname) noexcept { - ld_flags += " " + path_to_3dparty + "lib/lib" + libname + ".a"; -} - -[[maybe_unused]] void append_curl([[maybe_unused]] std::string &cxx_flags, std::string &ld_flags, [[maybe_unused]] const std::string &path_to_3dparty) noexcept { - if (!contains_lib(ld_flags, "curl")) { -#if defined(__APPLE__) - ld_flags += " -lcurl"; -#else - // TODO make it as an option? - append_3dparty_lib(ld_flags, path_to_3dparty, "curl"); -#endif - } -} - void append_apple_options(std::string &cxx_flags, std::string &ld_flags) noexcept { #if defined(__APPLE__) #ifdef __arm64__ @@ -370,7 +355,6 @@ void CompilerSettings::init() { 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_); std::vector system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "kphp-timelib"}; @@ -428,16 +412,6 @@ void CompilerSettings::init() { system_installed_dynamic_libs.emplace_back("rt"); #endif -// append_3dparty_lib(ld_flags.value_, third_party_path, "ssl"); -// append_3dparty_lib(ld_flags.value_, third_party_path, "crypto"); -// append_3dparty_lib(ld_flags.value_, third_party_path, "nghttp2"); -// append_3dparty_lib(ld_flags.value_, third_party_path, "zstd"); -// if (is_k2_mode) { -// append_3dparty_lib(ld_flags.value_, third_party_path, "z-pic"); -// } else { -// append_3dparty_lib(ld_flags.value_, third_party_path, "z-no-pic"); -// } - append_if_doesnt_contain(ld_flags.value_, system_installed_dynamic_libs, "-l"); ld_flags.value_ += " -rdynamic"; diff --git a/flex/flex.cmake b/flex/flex.cmake index 1302abbfda..c3061f7c4a 100644 --- a/flex/flex.cmake +++ b/flex/flex.cmake @@ -44,10 +44,6 @@ set_target_properties(flex_data_shared-pic flex_data_static-no-pic PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${OBJS_DIR}/flex ARCHIVE_OUTPUT_DIRECTORY ${OBJS_DIR}/flex OUTPUT_NAME vk-flex-data) -add_custom_command( - TARGET flex_data_static-no-pic POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy $ ${OBJS_DIR}/lib/libvk-flex-data.a -) install(TARGETS flex_data_shared-pic flex_data_static-no-pic COMPONENT FLEX diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index d787e9cb3a..6d27bbbc01 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -7,11 +7,10 @@ set(CURL_PROJECT_GENERIC_NAMESPACE CURL) set(CURL_ARTIFACT_NAME libcurl) function(build_curl PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${CURL_PROJECT_GENERIC_NAME} ${CURL_PROJECT_GENERIC_NAMESPACE} ${CURL_ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${CURL_PROJECT_GENERIC_NAME} ${CURL_PROJECT_GENERIC_NAMESPACE} project_name target_name extra_compile_flags - archive_name pic_namespace pic_lib_specifier ) @@ -20,7 +19,7 @@ function(build_curl PIC_ENABLED) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) - set(libraries ${install_dir}/lib/${archive_name}) + set(libraries ${install_dir}/lib/${CURL_ARTIFACT_NAME}.a) # Ensure the build, installation and "include" directories exists file(MAKE_DIRECTORY ${build_dir}) file(MAKE_DIRECTORY ${install_dir}) @@ -95,8 +94,6 @@ function(build_curl PIC_ENABLED) COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${CURL_ARTIFACT_NAME}.a ${libraries} - COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 ) diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake index fdc5c0b762..d48a7dd25d 100644 --- a/third-party/nghttp2-cmake/nghttp2.cmake +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -7,11 +7,10 @@ set(NGHTTP2_PROJECT_GENERIC_NAMESPACE NGHTTP2) set(NGHTTP2_ARTIFACT_NAME libnghttp2) function(build_nghttp2 PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${NGHTTP2_PROJECT_GENERIC_NAME} ${NGHTTP2_PROJECT_GENERIC_NAMESPACE} ${NGHTTP2_ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${NGHTTP2_PROJECT_GENERIC_NAME} ${NGHTTP2_PROJECT_GENERIC_NAMESPACE} project_name target_name extra_compile_flags - archive_name pic_namespace pic_lib_specifier ) @@ -20,7 +19,7 @@ function(build_nghttp2 PIC_ENABLED) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) - set(libraries ${install_dir}/lib/${archive_name}) + set(libraries ${install_dir}/lib/${NGHTTP2_ARTIFACT_NAME}.a) set(patch_dir ${build_dir}/debian/patches/) set(patch_series ${build_dir}/debian/patches/series) # Ensure the build, installation and "include" directories exists @@ -96,8 +95,6 @@ function(build_nghttp2 PIC_ENABLED) COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${NGHTTP2_ARTIFACT_NAME}.a ${libraries} - COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 ) diff --git a/third-party/openssl-cmake/openssl.cmake b/third-party/openssl-cmake/openssl.cmake index 74a4edfc36..0fec65a816 100644 --- a/third-party/openssl-cmake/openssl.cmake +++ b/third-party/openssl-cmake/openssl.cmake @@ -11,11 +11,10 @@ set(OPENSSL_CRYPTO_TARGET Crypto) set(OPENSSL_SSL_TARGET SSL) function(build_openssl PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${OPENSSL_PROJECT_GENERIC_NAME} ${OPENSSL_PROJECT_GENERIC_NAMESPACE} "" + make_third_party_configuration(${PIC_ENABLED} ${OPENSSL_PROJECT_GENERIC_NAME} ${OPENSSL_PROJECT_GENERIC_NAMESPACE} project_name target_name extra_compile_flags - archive_name pic_namespace pic_lib_specifier ) @@ -24,8 +23,8 @@ function(build_openssl PIC_ENABLED) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) - set(crypto_library ${install_dir}/lib/${OPENSSL_CRYPTO_ARTIFACT_NAME}-${pic_namespace}.a) - set(ssl_library ${install_dir}/lib/${OPENSSL_SSL_ARTIFACT_NAME}-${pic_namespace}.a) + set(crypto_library ${install_dir}/lib/${OPENSSL_CRYPTO_ARTIFACT_NAME}.a) + set(ssl_library ${install_dir}/lib/${OPENSSL_SSL_ARTIFACT_NAME}.a) set(libraries ${crypto_library} ${ssl_library}) set(patch_dir ${build_dir}/debian/patches/) set(patch_series ${build_dir}/debian/patches/series) @@ -88,10 +87,6 @@ function(build_openssl PIC_ENABLED) COMMAND make build_libs -j INSTALL_COMMAND COMMAND make install_dev - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${OPENSSL_CRYPTO_ARTIFACT_NAME}.a ${crypto_library} - COMMAND ${CMAKE_COMMAND} -E copy ${crypto_library} ${LIB_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${OPENSSL_SSL_ARTIFACT_NAME}.a ${ssl_library} - COMMAND ${CMAKE_COMMAND} -E copy ${ssl_library} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 ) diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index 7fcdf836b3..d405019db2 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -7,11 +7,10 @@ set(ZLIB_PROJECT_GENERIC_NAMESPACE ZLIB) set(ZLIB_ARTIFACT_NAME libz) function(build_zlib PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${ZLIB_PROJECT_GENERIC_NAME} ${ZLIB_PROJECT_GENERIC_NAMESPACE} ${ZLIB_ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${ZLIB_PROJECT_GENERIC_NAME} ${ZLIB_PROJECT_GENERIC_NAMESPACE} project_name target_name extra_compile_flags - archive_name pic_namespace pic_lib_specifier ) @@ -20,7 +19,7 @@ function(build_zlib PIC_ENABLED) set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(include_dirs ${install_dir}/include) - set(libraries ${install_dir}/lib/${archive_name}) + set(libraries ${install_dir}/lib/${ZLIB_ARTIFACT_NAME}.a) # Ensure the build, installation and "include" directories exists file(MAKE_DIRECTORY ${build_dir}) file(MAKE_DIRECTORY ${install_dir}) @@ -57,8 +56,6 @@ function(build_zlib PIC_ENABLED) COMMAND make libz.a -j INSTALL_COMMAND COMMAND make install - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ZLIB_ARTIFACT_NAME}.a ${libraries} - COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 ) diff --git a/third-party/zstd-cmake/zstd.cmake b/third-party/zstd-cmake/zstd.cmake index e243b8bcad..4899067a0c 100644 --- a/third-party/zstd-cmake/zstd.cmake +++ b/third-party/zstd-cmake/zstd.cmake @@ -7,11 +7,10 @@ set(ZSTD_PROJECT_GENERIC_NAMESPACE ZSTD) set(ZSTD_ARTIFACT_NAME libzstd) function(build_zstd PIC_ENABLED) - make_third_party_configuration(${PIC_ENABLED} ${ZSTD_PROJECT_GENERIC_NAME} ${ZSTD_PROJECT_GENERIC_NAMESPACE} ${ZSTD_ARTIFACT_NAME} + make_third_party_configuration(${PIC_ENABLED} ${ZSTD_PROJECT_GENERIC_NAME} ${ZSTD_PROJECT_GENERIC_NAMESPACE} project_name target_name extra_compile_flags - archive_name pic_namespace pic_lib_specifier ) @@ -21,7 +20,7 @@ function(build_zstd PIC_ENABLED) set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) set(binary_dir ${build_dir}/lib) set(include_dirs ${install_dir}/include) - set(libraries ${install_dir}/lib/${archive_name}) + set(libraries ${install_dir}/lib/${ZSTD_ARTIFACT_NAME}.a) set(patch_dir ${build_dir}/debian/patches/) set(patch_series ${build_dir}/debian/patches/series) # Ensure the build, installation and "include" directories exists @@ -72,8 +71,6 @@ function(build_zstd PIC_ENABLED) COMMAND ${CMAKE_COMMAND} -E env ${make_args} make libzstd.a -j INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E env ${make_install_args} make install-static install-includes - COMMAND ${CMAKE_COMMAND} -E copy ${install_dir}/lib/${ZSTD_ARTIFACT_NAME}.a ${libraries} - COMMAND ${CMAKE_COMMAND} -E copy ${libraries} ${LIB_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} BUILD_IN_SOURCE 0 ) From 4be82e5f02ae8bcdd7054f085f88aa148bfdb568 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Sun, 2 Mar 2025 13:40:32 +0300 Subject: [PATCH 18/20] Add re2 vendoring Signed-off-by: Petr Shumilov --- .github/workflows/Build.yml | 4 +- .github/workflows/Dockerfile.buster | 2 +- .github/workflows/Dockerfile.focal | 2 +- .github/workflows/Dockerfile.jammy | 2 +- .github/workflows/macos.yml | 4 +- .gitmodules | 3 + CMakeLists.txt | 4 +- cmake/init-global-vars.cmake | 3 +- common/common.cmake | 4 +- common/unicode/raw_data/download.sh | 1 + common/unicode/raw_data/unicode-data.tgz | Bin 336565 -> 375156 bytes common/unicode/unicode.cmake | 1 + compiler/compiler-settings.cpp | 2 +- compiler/compiler.cmake | 7 +- .../pipes/register-kphp-configuration.cpp | 2 +- .../compiling-kphp-from-sources.md | 2 +- runtime/confdata-keys.h | 2 +- runtime/regexp.cpp | 2 +- runtime/runtime.cmake | 13 +- server/confdata-binlog-replay.h | 2 +- server/php-engine.cpp | 2 +- server/server.cmake | 6 + tests/python/requirements.txt | 1 + third-party/re2 | 1 + .../patches/kphp-unicode-data.patch.template | 20 +++ third-party/re2-cmake/patches/series | 1 + third-party/re2-cmake/re2.cmake | 118 ++++++++++++++++++ 27 files changed, 185 insertions(+), 26 deletions(-) create mode 160000 third-party/re2 create mode 100644 third-party/re2-cmake/patches/kphp-unicode-data.patch.template create mode 100644 third-party/re2-cmake/patches/series create mode 100644 third-party/re2-cmake/re2.cmake diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index 3a951e68ad..703748e150 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -146,9 +146,9 @@ jobs: run: | brew tap shivammathur/php brew update - brew install python@3.13 re2c cmake coreutils libiconv re2 pcre yaml-cpp googletest shivammathur/php/php@7.4 + brew install python@3.13 re2c cmake coreutils libiconv pcre yaml-cpp googletest shivammathur/php/php@7.4 brew link --overwrite --force shivammathur/php/php@7.4 - /opt/homebrew/opt/python@3.13/libexec/bin/python -m pip install --upgrade pip --break-system-packages && /opt/homebrew/opt/python@3.13/libexec/bin/pip install --break-system-packages jsonschema + /opt/homebrew/opt/python@3.13/libexec/bin/python -m pip install --upgrade pip --break-system-packages && /opt/homebrew/opt/python@3.13/libexec/bin/pip install --break-system-packages jsonschema six - name: Run cmake run: cmake -DCMAKE_CXX_COMPILER=${{matrix.compiler}} -DCMAKE_CXX_STANDARD=${{matrix.cpp}} -DDOWNLOAD_MISSING_LIBRARIES=On -S $GITHUB_WORKSPACE -B ${{runner.workspace}}/build diff --git a/.github/workflows/Dockerfile.buster b/.github/workflows/Dockerfile.buster index ea9f60b15e..3816b6c1fd 100644 --- a/.github/workflows/Dockerfile.buster +++ b/.github/workflows/Dockerfile.buster @@ -22,7 +22,7 @@ RUN apt-get update && \ git cmake-data=3.18* cmake=3.18* make g++ gperf netcat patch \ python3.7 python3-dev libpython3-dev python3-pip python3-setuptools python3-wheel mysql-server libmysqlclient-dev && \ pip3 install -r /tmp/requirements.txt && \ - apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ + apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libpcre3-dev \ libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer && \ rm -rf /var/lib/apt/lists/* && \ diff --git a/.github/workflows/Dockerfile.focal b/.github/workflows/Dockerfile.focal index 8f40b66b3b..fba676f9c8 100644 --- a/.github/workflows/Dockerfile.focal +++ b/.github/workflows/Dockerfile.focal @@ -15,7 +15,7 @@ RUN apt-get update && \ git cmake make clang g++ g++-10 gperf netcat patch \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools mysql-server libmysqlclient-dev && \ python3.7 -m pip install pip && python3.7 -m pip install -r /tmp/requirements.txt && \ - apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ + apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libpcre3-dev \ libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer unzip && \ rm -rf /var/lib/apt/lists/* diff --git a/.github/workflows/Dockerfile.jammy b/.github/workflows/Dockerfile.jammy index 5b2667424b..982eeb426d 100644 --- a/.github/workflows/Dockerfile.jammy +++ b/.github/workflows/Dockerfile.jammy @@ -18,7 +18,7 @@ RUN apt update && \ apt install -y --no-install-recommends \ build-essential devscripts fakeroot git cmake make g++ lld gperf netcat patch \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools && \ - apt install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ + apt install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libpcre3-dev \ libyaml-cpp-dev zlib1g-dev php7.4-dev libnuma-dev unzip && \ # Install MySQL-related and PostgreSQL-related libraries from the Ubuntu 20.04 (Focal Fossa) repository. # Ubuntu 22.04 has moved to OpenSSL 3.0; however, KPHP relies on OpenSSL 1.1.1. diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 12ca64606c..e670fa0ad3 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -33,9 +33,9 @@ jobs: run: | brew tap shivammathur/php brew update - brew install python@3.13 re2c cmake coreutils libiconv re2 pcre yaml-cpp googletest shivammathur/php/php@7.4 + brew install python@3.13 re2c cmake coreutils libiconv pcre yaml-cpp googletest shivammathur/php/php@7.4 brew link --overwrite --force shivammathur/php/php@7.4 - /opt/homebrew/opt/python@3.13/libexec/bin/python -m pip install --upgrade pip --break-system-packages && /opt/homebrew/opt/python@3.13/libexec/bin/pip install --break-system-packages jsonschema + /opt/homebrew/opt/python@3.13/libexec/bin/python -m pip install --upgrade pip --break-system-packages && /opt/homebrew/opt/python@3.13/libexec/bin/pip install --break-system-packages jsonschema six - name: Run cmake run: cmake -DCMAKE_CXX_COMPILER=${{matrix.compiler}} -DCMAKE_CXX_STANDARD=${{matrix.cpp}} -DDOWNLOAD_MISSING_LIBRARIES=On -S $GITHUB_WORKSPACE -B ${{runner.workspace}}/build diff --git a/.gitmodules b/.gitmodules index 2db392968b..83496f9e87 100644 --- a/.gitmodules +++ b/.gitmodules @@ -23,3 +23,6 @@ path = third-party/zstd url = https://github.com/VKCOM/libzstd.git branch = master +[submodule "third-party/re2"] + path = third-party/re2 + url = https://github.com/VKCOM/re2.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bc5f4998f..ad510cd5a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,9 @@ include(cmake/popular-common.cmake) include(${THIRD_PARTY_DIR}/zlib-cmake/zlib.cmake) include(${THIRD_PARTY_DIR}/openssl-cmake/openssl.cmake) include(${THIRD_PARTY_DIR}/zstd-cmake/zstd.cmake) +include(${COMMON_DIR}/unicode/unicode.cmake) +# RE2 depends on unicode +include(${THIRD_PARTY_DIR}/re2-cmake/re2.cmake) # TODO: use FetchContent_Declare instead of include_directories include_directories(.) @@ -47,7 +50,6 @@ include(${BASE_DIR}/vkext/vkext.cmake) include(${COMMON_DIR}/binlog/binlog.cmake) include(${COMMON_DIR}/common.cmake) include(${COMMON_DIR}/tl/tl.cmake) -include(${COMMON_DIR}/unicode/unicode.cmake) include(${RUNTIME_COMMON_DIR}/runtime-common.cmake) diff --git a/cmake/init-global-vars.cmake b/cmake/init-global-vars.cmake index 06ee6a0cac..2c52d145ba 100644 --- a/cmake/init-global-vars.cmake +++ b/cmake/init-global-vars.cmake @@ -29,7 +29,8 @@ else() endif() find_package(Git REQUIRED) -find_package (Python3 COMPONENTS Interpreter REQUIRED) +find_package(Python3 COMPONENTS Interpreter REQUIRED) +find_package(Perl REQUIRED) find_program(CCACHE_FOUND ccache) if(CCACHE_FOUND) diff --git a/common/common.cmake b/common/common.cmake index 3ce9857ebf..4f68b1b391 100644 --- a/common/common.cmake +++ b/common/common.cmake @@ -65,8 +65,8 @@ endif() vk_add_library_no_pic(common-src-no-pic OBJECT ${COMMON_ALL_SOURCES}) add_dependencies(common-src-no-pic OpenSSL::no-pic::Crypto ZLIB::no-pic::zlib ZSTD::no-pic::zstd) -target_include_directories(common-src-no-pic PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) +target_include_directories(common-src-no-pic PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS} ${ZSTD_NO_PIC_INCLUDE_DIRS}) vk_add_library_pic(common-src-pic OBJECT ${COMMON_ALL_SOURCES}) add_dependencies(common-src-pic OpenSSL::pic::Crypto ZLIB::pic::zlib ZSTD::pic::zstd) -target_include_directories(common-src-pic PUBLIC ${ZLIB_PIC_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) +target_include_directories(common-src-pic PUBLIC ${ZLIB_PIC_INCLUDE_DIRS} ${ZSTD_PIC_INCLUDE_DIRS}) diff --git a/common/unicode/raw_data/download.sh b/common/unicode/raw_data/download.sh index 8e8fc7278f..b5a64e84e9 100755 --- a/common/unicode/raw_data/download.sh +++ b/common/unicode/raw_data/download.sh @@ -7,6 +7,7 @@ rm -rf *.txt wget ${host}/CaseFolding.txt -O CaseFolding.txt wget ${host}/extracted/DerivedGeneralCategory.txt -O GeneralCategory.txt wget ${host}/UnicodeData.txt -O UnicodeData.txt +wget ${host}/Scripts.txt -O Scripts.txt # for RE2 touch *.txt diff --git a/common/unicode/raw_data/unicode-data.tgz b/common/unicode/raw_data/unicode-data.tgz index 38580d1b03714a93374a01b51a0c968300312d39..c35c5b619e3a46d29ecfc53cadf749b069069e99 100644 GIT binary patch literal 375156 zcmagCV|eA@+WuX0+D<)Fd)2nxRoj|+>Z#3Xr{=0XwQbwBtySCj&)(1e`W|n-{LWnG zc_q1%97*mFM<77_cY&VQ8%tV~jK5zs45-01$&MR^iQN{v06Sd)W0m4y1eq1WLcBJMj>xSTZ6&G<8 zY8O%G3)_eDe72qDw9tmZG|#(5(O#Iswp*v8MAd0)C-L1|6|dbi7{-t%Q^<@xN@(h} z&+3TVP@rSe&(l{=$VRAXkJ0Dj^KPn1;VsvHsnTmf`BPc+=|vZyO*qOGz2xv(#dl%7 z<#XWtV&6WQKH2?U0SWeL$?sG#^T6Dvse|eBUZ^U=#>uTfu*7$_obz#VN7du))&14s zwA{6zj!vlZF~m``bjq#l^~Ry$^>uT_7h<-4znp9E&B~!*ZMC%PJfrRW_OMzv+3SRM zQOZq=-xC?do7Gxy)j2cfs}X8Xo1%>~#khw*AG~-TUcf4Ky>D ztuNlJ89G8 zL+b|5;r_0DZQ0=_SWYY>_3m_VmYtnNBy%#%W22}U4VUl0esH$Uf8LnA^hmj~u6#>e zdPuCPsCYLOb5OWW^Kp@h)^=_Z_4`))gj0ySECl`tmH2`~em=v>#Ko;?1N=~??BlMX zb$8$Cz3l5DA+%Ne=kC|V60sn)BbS?1(AGk^;-MJpTsdRbXxsgXNQEkPaHrOFi|ng0#ZK9G6^m*G)PJ?$aTw8FoG|j`#%;nls`l>xDrBKOJ4lhPz2O!-V+x zA{i;GA7}@MdpmOmGwsih&W84&;Ps0bFM%m5&JWNpN(eHD4 z!fnZEe7+hUaMi!Wl=W=@>XJwsK)3JZGJx1+YI(QB3qU5tfHt%4Jt z*_rm!TOTf(3M>yTH7~|Cj#S>w9-BS2K2@0rqtx%aKDlfa6&f~Eh-X4hx{9JYREReP z_)lGhN}h|+y>)yT)5|6vP2ZfAH^Ia&nw6In2O$f$eLYX6Pgf3Yy2OGd%Qc&7H-X9Y zs8(Q&HW~NNXZTMRrt6_&9b=iSe zp2Y{QPE^;&@tcG#DC9`sUH9Pe#BgCKeZk~;DbEQn_N2^PiFLK>?{Se@t&cbVUek-w z!t&-y*>GO{;|JH?T;f{1uj210#Ao|S!o3Aq+0~W{4cdN9yJo<1?CZ>Wl&k>{Cgtyj z=r8xNO-$JuRF0*8&$2b#%+s~oEh8w3I_wCM4DaEhBFOQGj3Y^+|%_ze_y9LfX^zGcgO)4Et7i!08&8l`Du-&Jp;2YSyx zIXJT0G)tYmh15-pMH!@7D&GxAs<6@D7ghI!+g>iV0 zMD5(mhN}B*CeuEYo*#}rD_nM~f7uWOH@7aXGWiw!su+58zkesjWbe|5QadWx+B}YZ zmvxDJ(Q%rt{hin)C{TX62v7NB#YWC)T{x;@PswgUS!&@z7HDOCeY$Xc_c9w+Cs-_h z)ran%V?FZM zwB=N%uMj#a@A--gFMz;#weHkeg!{POV#)IV0FM7prgAPD5kB+bjMqo%zb1GK;lHaL zqy%?Mb*GmaJGoY!zWFX3BfB0K^tGf8#J^Q7kJz0z%?5_QPxfVx_?S%7r81k!^}1{S z#AIeTm(!$j;EYKIIn!HG8Z$GUk88S0a4I-!ehsLP$YGVPRhm2?BR}t-4yw1#Wlgu3 z`->^rqW$Hk_$mj66^S_6Iayd4WvnzOkt#*Z-*1+hkv7%P*T6P+)8B;0z*QHDwPg`K z&_gqoZW5l6!fK!1VhR>nR=revISUPpkR_V0_FDeeF9ibM%#T1a+fpSPF{UDIN>Go| z=ND`h*1Q3)`L2&6r*ui(PAY9j`}f$g+dL&3PB%&a1aHZP%gtcWHb=>Z^-Yq*AHIB7 zx8iY}0sgK<{T^bKHX(X^Yj{84`A4-)IiVhDLtAgH?fEux$p&r`12W`)j9+u#NZ&{s zUd32OkLqbCWL`>Ee&M%W7-K{mKCCNqXU|NYy3*daWk%@sQmC~}CD`yU>qVZ==wYzf zNp>AYUiqJ6IOn04FHxv-~+7M{lD442)n=`+eyRy#cYgJ?h zg$V#DT`+O6T3o~9TQ8d#sU6R;M&K$KxgAqwg)=q&YwSO_w&aX-G|v$(YzLA(?k2hD zaZm59g1JN~5lx30-yYHSt}NzT6dt`1z^lq;M9EhaZWAG^ zIgP`{eAdL0fzoHpldSNNl(W6ibo*pB0U<5%hUCO%HhDF?;U(j9&{W~m%lHuC)ycno<-7U(Me}Cn5Ur65a765UZ12%pi z%FD!I{>urcEYS=!Y@wV5(c_6hvjt?PO2{f9bSwO@u$akE!F^-49F_2q(f`_KN)}P) zD~t}ZqsM#qC!@;KV$Wzp{*w~hQEqRb&)iS(mV_d897sl0(p1hTihIWF(RSc5*?S&9 zLM7B>xg9=Ix>3JE$Q1UV-on$S(js7ErpH=wq5h8o zuNtmiovDx2srP5;E4KPg0u+?xZZ!^-2!$SZW$$CwQ4Z=iTlIpYPGrSsDzCT<;odmG zPPLFFK7)@55E&AZ8Fy{pus}K~BQyo68-lJaoj%DCr)=MHJg5+pC+oN~RQ~p!hjgzM zB+h$5Ecoy(NIOMsXN7I#jew4j8&2byUugcA#jr=X-$e&*!ICaa*Cs|XRhb3yVM6!uUG05IWD=Vam<%<1+Yp$PF{_GPkJY@8+H|*;GY$RyvK3G2PLJdW`xQ0YO;}1e`PCjV z>`9Z-U$q^Y83d{ME%o=SA?KIF8B1ORwlOqgW{n08EI+KAJiMy7JyW5 z(wiQ_!!w7}&JG(5dgxSJbQ>R$3{s&sXBX+*%}U*eaSl&jj>R1_y2!<*M-y(sHN<|6 zV%^!@?1bi!#FgwU?A5uI@1Ueexh-tOI&$9HaMRAii`Bw<$&oS{VtiF&8E9LZi|`Mr z%^XTNPkR+e4InIZ4DqDFs3Wp+BT{X%?z|{Ik0he?AW|LS^HG_thO?GaW)jLSL#r~$ z^5L8~APUpH68JI9paaWH%vIy)m z>L2JhG2_0%F(RH^D@4f%rm0E=Eh;jho?{ttQkgshL@MlnS*0q^_O z_@ioRG6VlOl_)fD)p=7dm@}siTNZ9pGd~q}{}7(2rlILN%FEqOA9tl=<*Mj>weY zP6Z#fRfDx{&5`(8zgr|+Pn5Rj#jv+#ukyA1rLB$$Y9JnbFp9Du=NFtPdJY_aVU{g7 zpQZ4}`vd(=rp;*Pj3G$biX)fZs;_i5l6b8s>6EK?f<@-rDxk?GlORc;QIRow*vKU3 z_eo)%xD;2W;QLlsmeo>BvSq0jdnZlpsZz+Hi7q3Ijb{EKs5;hkU%MtwnQ3<4*Ay44 zKLn=5KHjZjSv*?4P0A0M5ga=GwM_b^A=kbP@)4q;O(8faA+Hl#TTOxg+kEeD^-!2# z^So)K4pa-as3`xa@?{5ZX?C2_=(Ex+dc+inpPJWd(4>#Um8)IK+@d;LF=uvKJPD%Y ziI+o!URSy1VnEJDSy#bPL`3XCS8T@GzZ#^o@4hygM(DF|Vn3N1t*=tXAC$4KOxoZq z$OV{y%#E_loWTD;3B^D5>kk{;oM`5tU?`I|DBWH}ZPAz-{g?&_cPj$Yw1J+1pNpG7 zhMXNPTC0pDJZUx`vNCrm!6ii7halpKk# zGLV2!y9mIz0_3(3k5PjIRr92Ld3U<4P}pR3M6M1@d*cIW|I3}DjIiT^;w&3htJuqY z@`Z=n0t+mn$`%E1&s(DylIz`(f&<6S@+S9ud0x22hKg_%wWBg^0BJOUkZ<$|F9Mq# zaoY8aIRllg142s%^inU+I7b&QUSyAvdA=w6&T&o#8AX9@5yD)%>m+EfN7yQcDIzx4He9}ZDUiRD zruq(w)sum*pmiC?RklCYU~JLjEYVt&#DoUw{Puc+A3tWQA$Gy9MA}&|rKMb3K?_YQ zrjN?rrBAS15S|FH8ba&W_Q5^BS`)d;?Qp$1M43O~R0W(HwnMHFr*?%nPIO~l+bi8TdLJT(l>y^FGk@XjO<+c56!kyGB zJJBb%=4;zjxIQ0T?O?A(g8>7c>3Lo4qC!wY?UlAR2)aR6FB=nA1g!==rS$L>#4n(Ull4y)bje2BKRA8aBT}ZVMaghZKfLhfU(G8n%?zn*q zSG`}LX>oAX2=KYt>9tT|dOcL$)0(eH%z9*=B`5D4#l{1%Z^;xROyH;Mw>jjMfI8Lj zoipSCg|KB{d>x#2U0i*Qq6Gn!?TOao+M6~+WGFFzeL==Ui6rwwp5ks3ml?Br*2!>V z`UU3^zbh?$XKhM?*Ajd&T>YedYW!XZez)gy?2b&Wz&^&YF^-K3*x8ZXAq+OQAJelY zmeOo8Qi%KtxB^+pYswn*^^ibtO}-l3(Siyf(u9XndONfAxJHek3K7}dlb-F?n@2tx z>O3HmXl&B*kb`cp9`mkSA;v6(^&l6`@r9meVL+S2g5l*%t`wySFNx6=fud3(J9A1@ zp>}RKu)g8A4ix89E+R)4{kUM?Ar3}zp z*hv=)jRXDR4Rb2an1G7eAws@D2Um_^za}Sg>hYr_JY37w>nGFulwk2(ZEhBJou z{$i=72+LYcwvV>3W9*!%F2%!NghM)3nvpey`CSuT$9>>3lg7kpTar;dh(5VagOtRQ zRy1jxxs@o`*@qqeJB5VAFtIu=!!2|S>6pn(E>ZjBzxEts#`!9WpHea12K}{<#&bW2 zt12b>S$V9KZD6SKkmX8S(#Q?}DOst`q)lPdehiO#0k>F$d`Vp6iX;dF^N7%cYYFbd z9K3+O(1U7oS3zxWl(^8-3gMF-?ii_6%=-_YR7Euf%v(?m_+{emFFl zQAgEB2O-p!Avwn4(PUSW^fsTRxMR)qCYo%1tcE=X+)V7JCkXjpIMAgk%4HPGiEe1?#8+2nqz+w;DM_Xjrg9(l= zxOzJcfGH&ut)-XT@vdYfcb=A*5CeV;s%qCeBQjF@+1l2?fa1++udREb?$P6F>9hPS zV!Oxe;%>n4tCxJ6w*Elq?$JMrm-C}lewFxSle+x{i(`(N-qjy`! zb%IU#!T7VaMUg^gh?tUR~otqTGjkk5xOQb z!LVal;5=4vUl65ydSsLY0`do*2#%@=dS76dKJ0h8kpMq-LLvh4S!gQue4~*k7j6vdAYB&jE}oFjKAda zCsBKRL<~S;v<3{#Cas_7$oSvcY}bra)`HIoXahaRSKE!|kHTFZDFp+!br@EU;$4P+0l8*^ zzj!W+beOzZu^dwI0YMmlBlP=2F0dPxfG2}e?-B@NtJw$!`(%aG`x>*2 zf~x|nO0;d?&?lEAz7+AWdSnUEwI{tH(vtSsTLdq~Hu23uG}Q0+T92&bihR52_R?^d zf2PKxwr#muWhHA7w3{|%MOD{uxBV`pV0NSAt>GT^3_Cy{)pCW$h8&Dg&9W{FkDe$;C{iCg}M{jk@1T(d_D&uNF_5ciL9(xRSwg~wL~%06SW zf~5>5Ewt~sd~_WTaw0UWRvH?f=g)!~VyjNzh9jp(B=Vpyb%}`vUYijzvR;fG59{O= z^+&VTQw*$sLfI;g?~W!2(9{*$>YV{;c(#L4`^_t%(2?a`Hnx5Evy$90}8JGyhpd=g;cuaT*smOXo zw?B--JCuj99}inkXTw@sPRA|fRPnKcb<&*oIV^cqWYeSDIprlP3go2>(m&=2{k2w| z_Zuu}L;qVS%quTYmog~(Afsid;Jwkg2mJj;TfzIFbB|h)CQ}yOq0u3xV>w^5RP08G zA)6Q7A^9F&KU-{4rHnkHY&lo6ROlw)m?Vkk6?GTw2ttbNK%$t=1ng1iCxk9PdY2;M z>&SIQ|FRI)mL44zTY;pEOQ;E{g&);Xp&}Z^S5lEq^`tiRuZ>GcO}`nY0Xx6-aJ!T! z@3wqt)*OXk$pp)7AT;BB>~uHkaw|m@gPj3Rc~Ab1V8d*$oNUw~3A>l2N~2#F(I7?m zeg27W+g59%4pcV>m`u3%TS-ITFy9u z7AshPAYdbU4CRd4R3w1Eacm*vUCW4$PDaX;$E<)_fWnqlYe#CpE*8&?SEtUnn7Njd zuD6_3r~Z>87g(!Kk^wP$4Ixu+d81y;rK~}!JU}~75~M7n)`CPyt0k?}fK-nwfgVOy zro^qAzc(@Pb8fy&NlFsKcdEkQBo@9j-_#OsQ72Hr+m!tOjB!k7u+gifFd{Dz_#utm8`Xq(LN~c;) z7-@j@5>M(^Zw8-o{UZ}@k-`S&8rRH-215V*-wme(XVIb`{|;!?1(kD< z4P7-`6{3sll|G}Rc`H*x$9*1;i z%F3%14nmT{$>UaJ=6J)0m$9X?vn8^@P8yY4ALZxf^B1>bcd))IrlUyYmD}LupCqJB z^pxB1HJ6KCJ6bEB@bTkA(tM?Q#yr+lB(i5Ju_8CWTancivMKZHLRBE#1 zz9+X3nyKVvB}h}rU84S{=_Ws70K=(d;^0l%iqEM;QV}Zpv^}$BJ{$0npC&K!EnBB@ zz7S9ppLSt6DSWa3Lg_Dm$_SgU1su%&Ku`O})BjMdg2^ycq9ItV0&qLKeP)VOvU6}I z8&l&2B`fe6pS5QGC3wCHfHp_pa1PCocsgR{>*Nv{tY%fi8nak#L7(r7+~jMRunS4% zqTB59%E}d{QrhTT_Mjfc)=N_$C=jM-a9>%MpmVpc@0qEnAY0Nm3;OGOL0F)c1!zAh zlfY83&FZHz{CCpy6YcbUYU<@r%Je253lgZho~lPHs<`ILApwaREr}1D$zg98ef$9z zTl4~O-WupTAEd?^yhn?I7Uwq8qUH_?EV~)dyyFr`TbeMn5EKq1hKaTb(&dRk8iL0g zaFn$r==){P1*I9B_S>#U(F8jCP*1C@b~^F-+BN|#H~Lc#EfRy)kS$RCpnyFQhAw|* z#Sbc0F1%-!-yZSYG@6Qq55r8D z@wd)%hJc75|7pLFy9}3M2U3F)@YtHlBt5_WaA3z#hWprXHz?!cg&|k+Y6KD2dQX9q zYTsRgRH)K3U-5$vzQl~SK@L~7;&nY(MtyF;M=qpIsl>juIT`GLOPhEh9k!rdFIBJz zHm*di;4X1)C6f<<0)-bvAlp|YMX9;fHE+6plOtc)ps#Epgqs7(b4856`1}(tTy`#N zE5P5D`K9g+1l6ULJWz{VnERjVz~&$)gD;{>Yh??dwCRKirYJs{wiDT%~T zKDN8c&r~h-pK`1Ifb>OMy9c?Gb&%4jIg1w+$N5O9i_>wa^tm;7j*k}X#j?OJuIiuoGA-$i{x+(wm(EPkEG79HJ^MOPN1S}H;hZ;(g4 z*~UG(YSyG_mZ|ox#zBatYx7O;2&9rqOcsnb-U+O*irW}C1I@?JH(cjAs(z!HyqvBD zpQPU&zFMXiM+GJ_K7<4jf*j*;66Z(KAITe0#y}B<@9wNWz8#!=DK_0k1>04Kd`fKN zhq=LfHfad&ruMgqb?J@?)ycXEJf^S*<>`(L65?*^pkzk9rL9WZomW>j(O4sO_Q!l^1>Pw*#d!mrvirLhfc!!+Vc~G>#>2SJ6Ejy=0hMm=n zZI@8GS1^d#G-!JeBO{wXirF-3J0ROU@3FhsQsFFSr~(et1vknZ>+L@-aJpFQ%Mw#y zXUhx}*$r3=mv}v!HOgQ(__mq45${gWw5q> zl;dfcw(m&uwtkf5*}@AA&S;t9Vc_@%n=QL=Ah=YoCcJ9~pV`Lu)B5?(YW{~)(?`X^ z^h!c*x<71e97y&v);Jw>TJpwS1^o99_r`PHYLG6eeRtdQZ{fKf<_HI3<=+r%+Lpo| z7udXNwh4+k`sPx*!WPps_$9R(e7;N38^%Do_Te^XZE$JBUP0I7vVMSmi|@kawpxpv z?}F9*pn{ssduQNpOo!*GlXo~S6Xk)&Gb3*IMaCw*j;0-RdfL~lcMN#NlbeTzS8BV? z+{(-4G>2*%J)hxK27E3<||V%_*#AzI}5htG5py0Q}M7!a3}PRLe?4c$Z(% z*knsQx!)P#Gs7#i`K8{7gV00tYm$86cL2}H(5CWMgRaRD&CuI2-(g$huQUFGP+~7B z@1f4<%mRW-lS}u@<+GZ)ggl=!!t-}NVb@8=@|X^j4nN)D$rfkrgK(d+)UYv!PMx-) z<89TJFWv)!DN(7#^Q!`K@Wi_}iHTn6c8$57J8cE1(G6penisjPE8*dPF2{JeRgyKU z)~Z~bu}({JamaiAGEm9H(k(=yN}H9KSm#3oD=bB@?;%tUaxn+n;y|h z-L3QG@^Sq+lRHSs@)~kJvWv?sAy{zwH)XC5Ha%h(x?kt3WICr?@knN*({Fg@VDsc@ z1l_MCp(-Sf?Q7Z=tt^LyS8RQA`9;R~soi08VoqQBlqIhPKec+0RK{ho5h-D|Rkw4x zEv>)V=}Nvlp*ep~=rx9#6jg?%-F9?#NLTt2ZEFKBdw7xx)zq|cCK0vO<#4gR-rCyH zjpD-PrF{Kpzp%!$?!?K&Tk;R>!@cAo>b_s+F1E_~nF-b`<8us1EQ*){2Q z>z{^lCF|UDj*nel1&|jR(GHsiM*FO0KZ@BOjStWpW}v{P7j#LZsz#uiDy`(v3Ah*!*{C-v|m2Ijtw7fHOEC~ey%k%Xd!;XC_1(- zna`4b7AnnWOc#S7U)WEjN=7%9kd{$iVgR4O3mVc%X~WOJqEg(epW{Bstf2v^J_1)2 zsI)5fIrf-SGu`Obxw)n0I5p|^*hyVla#H1VkDnU&7?8=W_@asnEGTmbPC*(o3go5s z4!ICgWj_II`PNB9stzD@PU|1F%qO)FQ?wHV-*tH^8_SYj;RK^i4JyRfsm|P_(9dJK zzB_f>h%d(o@U?drTwWif+?qw!%P8mq8@P;ys?{74cGYiLG;+%|#%KnC^bQn-Cj_zz zQ$=fW`rIOZ#=;oV@jn$<+aH9<#?Vz6f5QZtLMxMn#q%hyZ7~XiWYXqE=Q>ET*=$-vw3fe>QFBhB8$~0l4JToPjP^A>|W|ke)5kL%Mno|;MHQCZt zD$7a_`e+$iE08kZdO&fUc$9k8RNGofOEnxYmBP$5wXD7(-}c-lMBlINMlfhDNoA`* zB3V^Zq=Jz(-8myX40FAZ{}AHg-<=u5ZZ?ZyeHv_beEW~hy$+q5T7lIxchQ! zEuGCU+a#<=>C*}9f_;&k#f`Y*%dv>>)XTs0?@YW~AbSTWFoD$b$rhWFebMgX@~d#c zXu`y@o~=MXm>2O`u82E8jv}RiZvJI}An5L#?EU+3!F!$A>*trd*^ialcSC=JRUzHR zPr7N@SBtR+A&8E8zebx+uAJnDsigBy*#ArW!FpPL+N^wZ{m*v$pM6eKXmY%n5{(;< zYPv?;+7l1BJBQnkqlkIizqj>+f6?VloJ+&X=scy<#QDoKVXWUTl=O-%((&HlIoFFI#e!&U^<`wn0G z9!x=ENH+m-*LTG$`F=`L5R&Wviu{0~!j|p=;=b*!U%o18`QJr4_pmW;{F3m$i*W8? zstoynrNIAhz}UUT8HFt0Bp*52Va+73Ks6s(VdjRDM3`5ibsLM%Rm2mF0S=VC3+%WH zb?zab{E0D(HVZ4%d;xbg1#A^<-A2l5%_q)B_7!$ZMil_WXT>tQL+!&H?9U?4!ZI}@ z8x79F*23a$-zjBkc?vgfL%Ip#Kz29>*z~|w9#tA8zp^!wCE3L?H1`m$k@%44-axL0 zHg8oz#QVlFJoUg}$Q}nc!~4q?4dZ0&qB3I1W)I_dL%9mV3&vY>B!2vx)JbjFQi`_% z8`-TQ4``IYj4Od{^@O~_^n_Hpc-&9TJbLJ4K2*9_->+(%q#()O|H<^7*-Lxq7Ss(k z9Lf%WE}qnnlYWW6k*JO_fu6Yo3Pxr2_W=S+`%uj+f3?mKQ%V7vxIIGLj^leX?#5Qp zJ6=XzW-%!&U0P>7dhBzF_+QzXG7-N2@sZ(~EGdvb=to@B{V^*j{$XXWCWXy;_z@)# zkbFHxJvTq$ z9j(+|kE)ro8@Uecubskf;ydd{;X#>Sd;V3w36{k?= z1LOB()g<`DAY@w=ZJ?i7)6#5>l5ZIe!DW z6|jy9q^H#Lpzsco7N&&N^MLUdmHBUrH9QT6rgo%AcIcgwAGiIk$I zqxfs`T1tW^y9Coaw(E2i-=A+KfK~-X3@U61fpC={XGncn>r(mid6czVgnVDueCcIq z!zxu~D~E!k*KhLX^QZ~}F{m2Emn;zh$Wdx4d&;vr(1tsiE!(i-rKQ)!G7Rt%Ge9$r z(}V#jfUvYa$EkAzWsz-2V#0|P|A~q}ik%0CieZ$LVVXpkZ(|&uH4eLL>q6|kO|Nt! z2Qn?bL%RdPK>lP(6||a?o49mC4QxYHu_ggdN`_d(e7JRM=As7v<#;6>O1{-0N zlT}Ngxk=lzNfnDJZSXoA^NuL)y(yw&svt*Mdj0oARuS(SmRMLWP>1-q-wxXQto=3- zYlN*NZoCYA84UyTGi|z~U*_D@;QUvQi|x<=ie)ZOjhafMg7hQ4e|~f=C1F^uFj4Bf z+TjA0z@5?;!$maj8k98x0@8*gj|M7L?HH1h`th>*lIX?20#vpt)JuRu`oE8Ng9Z6O zg32G~EowR!>Z=X*@WcL-;QUU&9YU^>6%}4XbSWgo%I5B!kh2HpKJle1>Uk%-ZUGe4On*I z%c{+4Ci((3*(x>o!gHk^BG@4yILQEvnu|R*gd9xfif1d@m&`HNKquqO)`rBLzB5)bn>AKH=yd#I4d&8-pxyml{_U0 zZGh9i>&h3yjY8K$Xw~zFH~+rGciS?%6{l*o zBEZ_taDl*Glk8CPU53_)1JBsb{cS~?-m-{|j8l+W=0E@Fz)CjCGoIMjRr_y-B+e#Q zXtHl}Cf>2g{+HUT1HpDe^&quez|u}cnWrO^w!5HFhrh!JkI9a-!_%yOo2}5vMUB4ilchX7W%T@D6hm&7SQ!D2&JmX5q5Zd-t9*vDN@42z zU1>F-*EhKct9<%(;>p%I?4rL)OSwsR&T&L=&&FSBR@^ZlWjw#tAZt4*;&onICn16A z_Ig2o?1KWFMxPyaqzgZ8yv|R0Pf$m8Bc%&Hl!yYLFs2dYh7&cTo;`^8t05Z?- zGZq`U4bu@LE7m(B9&W5%j*eC|6pEvKw3-J9u@#j#b!&7!+ zkV>*a>#ct#LhAac{xG*s=?dgq(lFCTmI?fBeWdrYgBnBEvZl?5&);(w_INK|P#nRD z+88Dgk?JRVB}+f+MIX0W$p9jniq|2~IfNlr@<^INlWn=0-pbM>OWbh}$5>f5{boP1 z4XiK1;B-nw=KjS{wGY|69~Pn)h#_ewy8lhKcUgWJ(ufQZlgkJ#sDwgpBZ!M+oWkgk z${Vs*5983Tmw~e_HX%6OF(#oPpI(4pSu`=foIin@jEp8M1j9^Cc63!NOf)w>-jiBc zCMw@%J%P`L50o%27G`TtX?FTIsBvt*Tl&0aoUpzlp-|gP&I#T&x#c%#)g+zorx#6B z-NUyd$W=xVGN56I7j61MCC%cTWeU1cf7Rl==KquA|MUOEcqpQNeb9!|2bFJWl7H||H(kB$l%-ZbFSv_7ld&VVG_ow==|KPnTDfe zLaD$0_Vagq^23VzS)Is;?5z#|;mS6GWWEn4(JKK=N&WPo$zSMbSMju;dn_}MA$+M| z9wQ=r!e8xW1#zq~aj4weBUsajw_0F-as!5m1dnlNVT&ZoznF)0s?M`Ic(k|QPW%mM zZzTZZ7A41p4eaWNEDMnDYH(nglqroFWi!3XAdkp=0#Q$)O>HnDiKk72sCVJT1 zW8*W)Cwj>J^BEZuJ?QThvQ|CW3gcIW^}3>3--s;R7rwCO9RNnQtFzxBQcg%Xtlz>CzNV#P%RQI;xz+!ozb%NNHD^H8YI*tDq%oP5?qY1B{Jj51JqXfwa@{>*O<~~Y@Z!@D1Ok|N z1@E&NQuIZtaZt$Me|D9B>_=S1bqv%0$VZazXKMYncTTgKZxRaqVaT#rW~AwA)Hgn9 zgmCiptGvGzV)xgtiV(FhBnUt%;SPjlQnJji&WJPQB3 zV>(=r9?q$e*a3EX#k?)3KYls}_a7lq5B$6d>_37%io4y13Y&sGiSw-e?6>&r0}8D8 z?$*7V=VyHpy8bShU4(oya)Oz?;D=WNh*0##>B6;&p|V!=S?nY%0mv%)Bu(m2WZCfF zuRM)uosV>?X8Y8M{Pbl#pSM{3ov>}XUNY6Zf*l6fQ}7vl=d8^t=eyVD(t`|C_*r`~ zZ?R!-(y=$vt(qNBhm4{4koj_!P8jRXdO2^gc^29aaw!r#H3v{+Me^N$=OXBaIT>kG z&9;49P8|YS775OoFH0?eiU%Y${3vxf4GkdN)=0TAI3Q51QV3ifgaJ;l# zb=V_3F{+oxYvUJjmDi*@jk(5TWZeQ?<13dZYiDaS^RxQtT zL#qlMLCf>CvqZ583a(@8u3lLApdHqxoh%rzY4f;kGq-gPXoaJx*Qd*@{L!gW>DRBucHizF8joq-&NB8%jjENB5inhIE} zH>&(&77@gVD~28~A8Yg75hKOBcb_i2g{&}zd4RQ01jr*YYKE8rQ<%oQ;K&k6f*D9p zcE!6MS_aVT(2M_fSBfT+GKi)j&eDrDA{b!?Rrs%?&ncw1euu8Z{(kxUQ?u@ji;#?} z%QES`5HohfJ`LOV7LgRR#XjcS_wetPT&V4ePeuY-V;{3~;zJzY=bS)l;vq4;Niz># zB2Y?R_*bZ1+n&$T04=f8wI2q>j@YJ|H5mbv>qgAd%#y+AEFN-oXDl85azu0VUgITe zk0I7RZ8kf?OgVrf%cRUBN9$H{J{0jl0FzZxM=`DsRO)&tLmN6Dx#-c*uPv^HfG}t(tL!?^<6}mYUyW^-fu-IMugOiJZ;BlLiErPzBJ0qW&;U;isHo# zean#go$CEQ(L}sgdrrF}r-91kTT_irN zGXUhfDqyz49T-aBdn>+ZEn+-_@Mf%F_VF$3%lmi80T^l=h``Q_<1yG5NN`zLr%uim znLz6C2$WC6-MzRW)3h5<5#ZTML6UDz^gQMpXUhvJ(LW1E z-GR`sWCexed~X7bN8qQ0>qg+iDT$kryZ2!R;xP$geQ*4YN1z4C-}fO0;^EJxbL&Q+ z!zt1HOCaFo7?tQ-x^eTf^>VZv1K_{_Te?~lmI}BfxB$K=-8gMc% z?L)#`w%tD>p1~6qqYnt33*&afSb~wR3#f!v?XlK zQ7FosNWL+>*%sGM3i{l%K5Xr0Fj?-%Pt2wnU#dJTsxtX?jW%p=z<=n4N6EQjyW6-X z5^7Vs)^FQXRAUJ`pt2kDLC*()sqE%9Vr&3&@*9P16*JCxBhIQ#;LbSc=|K><@Sm4G zv#|T$TCe7spU=yZ#bT4<=gnvAr)}5!!}(B^UqRQ$+r!bN(8ufE)aT=rpXc{G{{5x7s;Olf)h9-Q1d)VvJoZSJO>TK;xSz-7+nlxW^OlhB=ksaI(UITtYsl8; zDY4({m|@o^6W_+{>u1QvrD1luz0k)^SLgc(a}b*HokQPe%o=pl@gJf0$0K*lL}JeC z5bhVDEUuL<0JzJ3_UPPU8|L%z6Mjo@%lCDRxa$+V_WAz#E|k@__3;$f^*x*a^JOhN z%kN{U3A`0@>G$#Rb{b1+TMBV_wN3&_vrWba64q!`Hm{lu;s_^Bi2mW^ZAwF-zcw-{KR^Nyg#%3wu6X2Pmi`f!Yk>lr9MxWh`T=G=7i_`-i7?$-|_vP zBPrj&uf(6%P4->yZ}&%rou7vcyF*P~exKL3kAAPuUGGoN zTc01FcpP`|CAp7|?9XpQ=S_xwpYKe5ALsuDo5d-u?E5zCN4L3du?c>E_=56@_j&Us z(VzJ_K;OYDCvB;-3!r1m*da{yOumTRI)sB8DdCY7YoH|vATXvYuFGAe%pZx#+H z-5!|GpTRE6IhLP+0IUmaVjGjmj^vKpR8T-$u7$Ia?$Fv)Ak}D+|GZEx)B!eFN_G9f!b%n;o67_72t@#gKYOWZK<3vn{S>wJWX&&_0 z!s#@!d!!6ZFvsqle}zf+qNKI6^e-}KT`}u$oH5(?gGTcfh6LTgNRzSVdn2B>=z}|d z`Bk%-Ut}Z`)L0;nO=DK8e+boAmHRWWPZCx;TaZHO$g=E*2db{$p)KjY`*#a_o`l1 zSI@0`yZiR>>C?B*%$R1Jx^d(qC=i<{e&9dYsN*TFRVxf)*!ezQ5QLQ6>; z%*)=7B%PFH%x|>n)RceZ5+{`Nr9ae`L2t!1J|Vnfo))lnw9r!A^AP^2=N z=Y$*Ad_cAH!m6_%%cenie#~#ndI{bUyVBMibHZ4m=qcl8(D~#2vb)eUCVS9eVx-}U z_Q$4ps0?8{_-NKpvZUa2htrr`?n=uFr4fOcWF=K$${6_B6;Q)@wNr`ErcN;pDVNXW z^T&s=h9#YqIENOnpzZHk^T`_Y6Z9-Tv`Z zYP~lu{zeVWAqN*m4UK6rD9OQ(fx!X8oLbVM$*t=y>aY}(dlYwTzF?O8o1m#*d5qUO z`8Nfgko*4SRP0&~_W6`Tywk$VRvFJ$87yBlA5$h0&%^6|ZcyK7P~Ud{W+m@yU=L5e ze7#2Edl0z%yL_~7+NlTa)UVvV{{NOHii94R$IDY8 z$n!7>qyH;2D2q&}HRd<}VJ24ZQac(uN6*2zwM6YeT0A%0d&wHzk(-UL zyY#=-iE*6?9`#H9C+nM4yLTbRi&87AQY-By^-30rWy$U>9VYdzkHvM%tAI$JA8zy& zj6EaT9U97!y(YD*f_u{Poq)STX>mm}u1Z=^o9yuFRJAKxIW6#}?8-tVjSd!|u{+G> z0zk?)D{$ScwuiRQt`)cdbE#&w{O_eMtbJ*?%o3Ibo_Fk#4@CHqbuo^I&>D&HSw#43Eut7XhJ-C0KGm)iKU|qgoe~Alpv@eetd`oVrTCbbldvIen+J{g zF;nUYG3e0{aJrmw30~PdO{&*C-TnG2n7qir99dVb5yvx_lw)0OLLF#SX+1V|3Yk}{ z7ve%iQwt)fU*=EMN3lZ{vi^ISUA@Mkb)IbtNea(`a=bD|s%mM5TyvXSYaCa=WW3m+ zd2V!?`^-M_%x=u}tDOH=`RbbbCrwsv0qTeXYq>oN@+)3vg>&(0oBFvS@PLoG$$9TC z#1Uzj*Tg|9TTff23BZ=JACL_$FULbm`RH2bQNS*M>SSyRj-b1plN7P)4pD)?2-#14 zE^;Rq(aoCEO``M7T%H2M@B+i8iWS?272D-ILDUC96*#9g%k5;Ye0hAtN_b{3_{2UT z;M7IY0JtPeCW@-%nNKH6qRuSl^4vDV9owqFK5S@@dNUaxHjfb66q+>g6thu~=nh~t2XXcMH)5@L4C52;CGAIsyj(p2uqKGnO z)<+cWXDnU(g<1pF9%Kywj%IZkBS?-$faNZj4NH{%$BcAw;7(I@gx5hl$6!6;Ix#RF z#~KOdjUK>I{D0$Z@4T`%J({n+Ht;lIM>S!~>fS+tp$Ex+WT11|(4pvx)`WK8af$U1 ztd3^ebG+RRHawb-8c}dGSYHmgu+CL5Ii!GxL-V(AGF*y1lsuAgCj zwp(+1iR1rpiTdPYKOuh!0;9$^MWb0CWR5H?Kd}Wvg?+-gkVzw6h6{ZcV-<6sgN~7- zR|V(>=~26r+APs?*{7Q)>Ui9WN0jL) zpR!eO$1{MkaZNG7?cC`rSi47-z_OVr`7>*UP#mVrLnV=ZIR=ne)hD}DgE>M}n+*er zNvER23;}LmEUR!>i%GX&KYR*_{4?m|jJP&*yx)2kpfC^7%C1Z?50bGkL&osY#O&9B z<6Qyaax~xq3>}=$oSp4k+eRK*Q9ve5f23*gCZ?Hy&Q8nv&TMoGAc188XQuw#KX`(z zwJ6M)hBbP;P?#yQ0ZC)QfydP$@@!Fy(7X%~c?4f;JRCF$R$)N;NUKxyy7)|VoDHj| zIM2C9e^$Ezky>Dh93jH}Ai}jyoa2v&ODF?&%MQk(IE3rLMH#c#o4bQ;GR6kgGB+0V zMy?+BH@BveCa`)VlHjm9WQhWs!gL^w6{MF@u4w%R2Y77yWvte}dtvQKzoTy#R)4_z z^_R?M9idIjj^&D)mH>YMBY}(#Cb+ld1fM)Vs-`EvQ>}=@%%fPoBZtn**1P-8m{Ktm;4Ay{VP7wssJNw>`56Zl=2DJyFLi==nT0~cDy|$sD1yAJB~9ez z5FZBN2o6famzbz*Y$juFu-xnq$L&@rzLhd^$bAi?#-TKm9oDYYumNOaN_c+jgslPZ z-(9SM+m(1PGgOuF+RSwlx>AuE9-wr}3aoq($~#VU$llf(5>WhI)}zi8Y~_JNcyhSM znTNrn<)-X)13M&<^|B;+VM$fK{j2>IQAzY9>`6ex9yT6Fsmnkxm@*qhJng8pJzOGB zn?)A(%=q|#C4XU(7!>ACrV)w67kC~!G`sdTGM;}oaBvu|3wU$`wZT}MxoNxLE5~7s zGoCzr*O`OS*5sNcZ;nt&lkj$cU(;pEC3dsdr%|oy>cXxngp)?@xEUq>6niyO~o~mCK2^%oUdWRF#!O{9qPlLUi9YLGc6!HmmLW*PhTZDITc0=T*xA z0*Tj?44=kBxDO0~%o_&(se}yEA7>HRr-J6NfS-R5VKE>X{L-I!WOkw;sY(g%u3JM* zDy?LlD<3cN<;TEkf#q(lR^V)DIs=Z1Ouin6U>MpX)E}=rC+YAVkJwiA8;` zO%I+Dmysb-lM;7n6tHUB1CjnCExoD>P?1WH>dJHn4i$rt=LaVEEA*#&wRtc=68Z|= zfN;2&5RVZINa@e#bl$5|3dgC9?Db4c3|k(>`81~d_OD0qtbqWH9PBov>F6?-gXGT_ zT5j<&^H8z|mz40&7e7S`&W1U)6q1KJc_&ro<_DrA+-<3|Sr#;IO+hoT~XwSuC1AIl18R6!+7S6>0Ka^RN( zv6i#5Z9W`bd!mBk6U1;ZG28MJ1Ps{jH_RN(G-@1=)^OdemW7FUeb^`Tcjhx$B$J*% zA`^cpyKzc~NDUo%(DCpshL;wPo6d8bKK)xWb+orkQmx~|i{YvXWy<(ezoHa#T@D5A zWAF5FmM4aJOGPvX%^QA%d7B#^I-PKY*?uIBkdIGSHs6}iJK711aWx@1f!vVvx4$*} z2G$SqWBZ<@A50Csm`E|o4za6v4XKxY^caMz2$P8oM(%1dE0|yhpW;~1r0^O7>@GFr z61~O?!uQp>@AyDS%O<)Fb2j9zzx}X~4Of~Xm_Qgt+eY8^LhUZ>HoGAOj+KP zS5+jn_n=^LqG78I$w>ccjCW|T8)|_Oi%Cw&=#e_Nih(#R2h2-X`~Fn#`~o8_*cz(Z>c}{((<{OS zroW3@pQG9LPR9fVVCOst@cpIjvhQ6Z>fbX2LI2Px#K#%W)+j$I#2v}x?oYjDP}4^J#Qg*CEOns6{}r5O2FTh4#sUc_!qHC{5c62AqTG#8ALTd%}0IOZW+FaTaqwumX);Rh~p!@ z*ncAe-g=PDQ4={W4}4!1P^3(a#ru}Ti&#{ua&eB9GA{1!Cr!stlD27^ByU-Q9jfC+ znU6JUjPOxeqNn-$<*&X*Q<-9sLIm)KB0mcXcdRluE>M_!ROKY}gXjw}v|}MUw4eBx zk7UB9tq5n_G&Vpy`2^0MjL&YGTB^&{Vp-S;rccrmY!MYg?3 z(?I^~vpLs_u<$#BEZgIfEOlh~|5y@_WQW~l`o^_+@`~B+JI+Z*o88(yFUvYk| zu|>EBQBs^ULGE6(SSOIidm8*7(Z0Qbi5f3|{03 z)V>-`E!q9ey^0_6eC*%yo5c2|X**?weh_K!DxVa1Y4bESnoE+~YRu-p3{=@%!M~z6 zR*P^_5jTB?hyz2CmeX-!zm>S5I>t658lXney0?DE&S_CZ3ax|9^|e&Pa<8G4yd;o7 z`2dRi;Nat;j-eDO;R>DUK5>Y`6JeyR^47HHa&FohUJ|N?%|$fk+_&e;JN;H%zX!+q zcAZFb1jo7n-HAu^Gi~9Z`d-;0pKKmL@`LMp@7Wr^_CZgnit%o4F)LCssyh|7F@gs! zbtj_;(E%6&EFS!()7ym?1=F?jDTwbRRr7H_pS?=B)Hn%J3&Eo6*b&V|#= z8F6HB%k(@y)(k9x3Ck5rRSi4|vJkBc2RgwM`rrky|0bk5T5{b|+yIjLS=6{VX)~ zAaNFSThooPE)>NDKf(qIZx9o{Vs?b`&OXQj#HixFIk+xCff=b7{!g&52w0(ik*TJy z#yA;_XSF_&EQ*Yvu8%0qi5N+e!~spm=`^A)NWwrpE&4H2a#CSXh!h>ro3JuOU6Q`3 zK@}2>yr4`q=&4$!(>w^2v>R|XXrVj?r^E99ET*rBeVNkNv6+V-HFBm=g zOL&5b3OTcvY!eI>quhLzs`n&+exK@dL=7;dRn(c{3zeT6^!fGaqa!bFnV#;TE{h0b z6d?vecZ4yL_LClCYR(_7`Xe3NaZ;fIepAJJEHGGdc@C>gWq$D+_hSn$j|fXBd;C=; z7I0rCugCgZk`-6z!#&+EhZ@W-t8OtIzX`Ww5m&Id#pX(tjmjH6d9J$wr0o($k^3~l zx;Wm{j(&D@5JTTVv7B=~o+m-gqp++SBP7}$_yg|tVtv0lc6Sn&uOV&7U!%c%HoeI} z#lWyUlvekCcW!2wo(kf|eFw%p+LfgHSqqC>mW+&l<6UjCjIR-#FBqXiiWL1sUGCPjCj;vwZQ`b*j4A;Ijh)e?$YN(z%c7Aa8EM6HHigqOHp=F< zP*zYM4a`REr5?dg1~4>(%LuY0F?O|E9rIk6T>IiQ%YB%}Ab1pM`MjEJRLxDXIC_(; z1MtlD#VwcOkbE`wx|W2(=5j7IIl|_USRkn-1Y0DS7O~jrX+EVgA6G*VZ0(Jl)u(5X zn+jVxwlT8EO0AnD3sEnA--EjZyB_OSB*2pu6`(}Sw&xu&@1712`~~mY1Q7Vp z$`N)nwcj%gc)+WCZWInhuyrjYIOF29aDtSURRGB1*)ZIJ6KYNjJ_SH)!x?dNDOhBq zRTywBCI3=T+cabpG>tcb;u!JR47{5>maap4_3uC@O3g8l!`&jFsL!_6c+(Hr=8M(NE=aKPzj1J-Olj+lguoyKy26S&yLJgUD>(vys~YxB ze9$5#*Wv2hcI0-6$thsgBi7)J$E;-wK~dV3rZs>$W1!H5f16*g%|ewH>?DzT$H>RP zu1))~uz*r#F%uI@-+ffT8NHG!82@7MR}!9z6!k6y?>NCO&?Ltpp`EZPT(%`!ZyBet zYk+*#ng~1rj>wg)$*s96EH`%$9 zt_4>>(X=y6;%bHy;GC2AUVCF@T<;btH59LMJ(r-gnH#k2RC)v=EHB6Gs#N)A-i00L zRh2vnb`H{%i#V3QTAcG+!L28F{*D24D>VJ7Ck7*3u@IGy<#25`xM5>ISokLaczrr@ z3M+_tvJ|gseWG229Qv?^Ntau!6l$`lNM)eUhMpl#1I&6n1B=7yO%Nvrq+_eT2`NNs zQKVDi=k@tCL@H$t$}A6`e)FIXe`=92

J34$oQ~sVkVvCl|#iB-cGu0<| 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

u+k%kRQ5I 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 H{@?!rW&J$? literal 336565 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%0ARvy8H0#YtfM77 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≫X&s|A=md(^h!v`r9qU6S7<P%Y`5f?*FyhO#$N0dAQen#tilFVcRmFp?*29wTnq z5;XiUBoMU3ey<=f5oifQE_}G{dj1+u#%Bvb)~Ydt-7W=tuk~RYO~&U5LH3|=xXoey zQQBu}^l6L^92jqadaEq4*Hq!TpF<|H0$vo_Tf7L6SW>;Cb-C4;Hv^nc0=|G#<7ZCY zUR7#nmd8)(EBOPPf zd$I`Ir74chfb>HD=6iS@SwqA!-G*-;|1fGd=b6iL2hs97#RkjlgWv%KBfYsMU>O!Q zb@b-9c5DrP3Tyy7&d>^3j5x}AKVhPdD zK46dFZp`Jsn|tszTDzLB0wtUWQnu85_C&jD;rX7Kj40WMc2FNB162rYW-i1IlyXon zBco)3pPh^;+mCcmKP3ZK2yJdEzz&>nP){SHWW}GIj5-FR7}hfN@ik`WeSWEqC;{vB zLr;$BU#mySLjL?zlXeo;@0+xc-oMh|l7ja6t}4JTtk+K^qkMmVwdN zRUB%dD=O&2`YJeR1odywe?CcxA-4mZjg2ozvg0L_XDbe}15=GFAPQ90XlKe6iO4cx z>{RwJaU3{eWf5D_`H}|rn19Xfr}!4cbgHHahaRaR1${hrB^JEXDfK6{u}Oz<#(?Tp zUB=vkC^y&!J7_W)Yb~n^SARw<#feAu=4w;_eb2te_TvWHn%9&4NSqKW|J~TbM}v|? zNZ!UFEc^T$eoi4qz6S26^V>+}&BJ)9M5lt4noV-fvR(gO`yuIly8qwz_gyWp?CR2E z!zlWXwTFM7Pw(##`@030VD{aP-MuaenjS=#93AZKXgE##M{D_O=D&G&Ti)_VV|Kln z#H83wN>7yBv4zg&k9IFC{`X_6f@K2oSLywj>-dr`l=XP?qT0#4%8#G*qEFq4v=HlJ z3KbWq@br*t^c+qH0TLD)wIbmltWLmzBNm=h0!W;W{qbvHJeaY%q6UT82LrRJ z_T`DyP#EXTom9AE%lGP}m?(<-9LS6MTOc}>pBQXXX34Pey!$EAIM?N>NYrWsAE7En ztm_JuB+6F2O$PEgdDa%k%3wIR<*P`Qt_0tM!~TKLlj3#CKpp};agz0K?|5m(E|0dL z{(Dr9^P~`Ctn1#9RFC>3(!9)kjoYHsfPKb4rf)4M8X|q(fC)(-eI=8Y(Bw0|H8@oV5AMclSF+Pl5Tyry`S>ot6w&V<-D zUK#GaSW@YhyVl`j`dsJm+L!u;erQ=@zuS+7vX?_B`yy`++nLb#e)CGJg86T9sd%8ck@29>2 zztT~KWE6D|IQ|Al|YwySeE@tEIWv(Il8+frcTw6^`n0r z@H)Ul6xX<})Q|Vc88eSKSfiZV8$vUB2MlGLPSk7oJtFPa|Mr_A)%i70ue*Mv;_?lW zGtJb$lXylEt;j zHM_>;pb+_lqFUF(fT?2wF1Vw4D;dwuwrNx}G7XFC&!&m^{Wse-x06fLM2x{!RMn-3 zbnmfWC`;@a!_P0D0H4?1KQ)yThAR{TTJ|IMIRu|JPD3H}^<(qW=~-=IF+ooSoWD*T zhNYO!LOB7e--aiGa!k*|OHMPmiR6(b5z@r4sRT5!)QHG4_%Ik^-FF?c)&+}xl}+z` zV8?Q?dwL57?Q#1_9L3A+;wL1SYxgp6;{Gid1-A>bc>D<%Mf~CKJ@R}gYE`La3&|}=yLt286r=yrOnBdfr zU#0K3ENKSyE@Cs~#IWeFE^45n!9ml}4I9rSVi%2U)Weh@pKS4P(|^!AGlCecE3<~P*wJPKk!gh_IO_iTs`Un`kLIM z0JknJvVvAHv8<>DK8WH9-u_%}3AKfQH?_(d;tPr3XRW=VkI_@);M^W-vuxbn6dl1@ zk4rMl4&41aTk!X=r0uAhi|Bem89oweGj>7a!YTW8upH?y20I38!6r&CzL6?BDC?m% z1T63`oNVAM3R_s`7_3|!G{VDwL|I!F^CkA)8Swq*cq|aLpR42s(^L z9;-4#%v3R0aWDL%Yfp5HIN-U_vyJ;(oS_eO)S#N+EOA)tDab>=Ocg!d{|{I`xW*%e z;0r>){bk@V7NJC$#G?-9)wSJth}+q!t#s{0*e?y$ zt9iMb)*F`2?}Q*>Afr1(D~uPEiAeEw#@79iSj7)~zZ#y*1B<&0Y}jzubg)gC;9k$x zO_@-%aL)ZJSH3T!ZpkA&H<7;x+B`%*M(g!+G!Yr zxLA?4UZy3`WvD9ktyEi(Td(zTP!%^^c@~c-qQADAc?DzRbWk5EgtjZI88$B;w`U z60IZqjY!u}E+}kpJHjFWLxQ5uBz44ji3Qe?&p^(&U13m@+-^5W=&si|Bs(3J#%l<` zHf%$|ZHcXp5ZKRJ^tRpFr?(qewz^1~O@)i2;d+k~h3_#vVw=uYSdol~iNjA_TTsnixO4yJwHGqapgW zSsn_4lJ41NZSMCsxM!OoV8na2S=t#t1h{8oAh0rR?v$0nBfz`1S(*le9&OuRs`o3* zL&)vmyhq{`R_cJe7ocb5T6JJt@cO_()&QK6OaFg936hQy;F8AOnwCSuYbd99UHbi+ zw#6XnsAvJ$u%^XO$XY6ZFB*?yZY>;=>#cc6cqV9MxArCLaIc)W?^8a&rOrQ}Q+*frB3`R*3AHaiN=85lwJ#y{R8ZA< z7w1k|vj<>HNNs0B4U5;(D*$`M=#EO~+%IB;CHAsVa5vbDl7g_b^bsCmsq;9Z*HNVy zHombKFF}IfyiU&66bpq_X4Q^dRi{GsDb|h@l~X?%;sBd@R&4iBIYYYNBcpntajTBTWHvE)kQBZ7n@N1v12w{pm7!*DNUbvV7%YC`+Ho z(}1a2V?b?`27L}g-bpAu!a9&Cm9l){LhhA2pPXIDj?ME4Kl%Ep`_-nedz0#nb3DDD zdRza6N**cPnj&8>ktfoT__vQcRsr?DCi#1@WCBWmUGnFoysFMO_`lBtA6Z7`-ah&+ zo}EV+Uq2K&-(f}=-#%PkWyI=VF9=;8QxBVce?s}F_*MRz<@=W|*`xLCoJ9+YKj@6y zy?*?8aE+RMyKv|Btb6|kzT#Q}=|MAq%<)g6z2)QA*quZ0_!ms)U)Pj3qn~0 z21Eg_a26LRioXKzBY*|MU`I6m2hq>`|7!y8F zh@dkOkdN|Sug1?F-o3vc_BmVy&^#U#(A*kX`TlvBZv7yj1RN7{%rgxfE97=UB7LQv zr=fE{Y%E4keUVQi*M2nSD&Pc^ggB>(Rb5H@SD2U2v@z??5=z=lDoNEZPzkR&->p%@ zy7vet9#AQ{pk;MiXW~f91doG98+^|_z=@ASpOCQ4Peff?hL}QbsAkc(OA5P@cG;aS zU%_(m&Af_mHUf5H_7efH*J%Bt6tDab*}4f}3llM`Pu@cxjz1FwL`#*C-zEZj$v=B* zg~{IfdjtX-tmn{!5t1}4EN1f?Uthz1RU#pf9Z!0%x+iF-W#TtO_F{w)t6xcyz@q%e z@MMEQy=3ZHMxPb)_l9M)=g_`f-)$1!dE&bd&{NDRZUnN-%?g{s#!08mp6*h$wiDcI z*RPlBEUK!xxdUf(8@pKCzT&=3f+OBagQ)9(TsuG19ZFAWv^tbHQa(NruvQ# zYP>jTQ=b;&(jR3)o_-^@Eb-STTepeH+g;6v;5_N!tWV=#tmaUSKZL!rQRhj$W^@DE zk_Q~HZMa0%4lgGsvYd8mLM$)g{D>4TFvnUA)np-$O(p1x0JE4KhB%c5V3z~r8;F1&W)IF!LRE+ar5a)?`JwnLbd&(JTb>}_{ zdA!5FWn2T=asSGy6V@yD{o+JuF;AK=o?d599M*j^M4vJ#cY z-Fg=3L)xJp7_K*g^{@|jE;ecEgi9`Dzg(w-r1%82XIgm!esnRj)>hXVaX*FVTe8Xx zR@u|^-X8UTp8oyR`+x8Kd%1CuCe7Y9WPaPQwQJ@w;SgPHl)L@qY3uhf<;K0REZQ9> z$=Wi3Oom#YZN|~Tm17|O5Khp^))jh8C30ua6ncy$;@RuiXiLMjJyouYO=r4nr0SQQ$PMpq$Msa+O=WdH z>wedtpm|*KJm_tq&5{;<*#6k=Rk5Z) z9&$c2{$i-DjDP(bO~cFsQwG3(F3P;VyV1$`uC+$tO|C1^zvSvpA+br`V%6Los3Sly zla=;bTVo*iI)A0I>@~8bM)Y;y`?Kr;Hc#|<(r0z5ik)`9`cOf>*!;yRBH#1u2*|V9 zGKb*XI+yIsL*KBihWlt;s(&`Qp35aBq#X1#lt_pBU`LLJEeA@lM_p)dz-JZdwS5Kd zNq4)3;QClibnYv#1|FaDM`7Ie;XFR9qC7t3b=xK2avRF`bCJg3DKQ&wb9FblRrMr^ zqz}^VIl^Q{d@Y|#?7HIJp7R6jVbh7u<@A+Cwgr)2U#wbxx*$LFZRvg~7wS*7*GB4- z7xIxj#dvL>P;U4$b+m<%U~c%M5PyfZyI2q5GnVipl%b>-Laxj6327+iiM^`mYpzq+ zqC@G4uHHa@L70Ny*dQ!J#W}jHcqGi|)&I+W!cdT}-4nm_c5p9mXk@RXaO1dN!#zbV zF5pFC3U0voeRxZV3K02q`cV1N!QElZRn_`HG67k|E+W!`EqO_#^ku+ z2~f)7`->_YuSZWEcoD5gq8IMBW1o2rh1-j6!jkyV%|mCyghCR!Sb2WZ)cAJZ8g&G`qjrHQ2 zCOZ$l0gxjA3Kk~_B{ob-X9&-VeHKUj2~3mqe%_SWwc`KrPg3yt#L1#!&h7xl2Q%~m zr@cZX$61H)`qnDEkWfU)cXA8l@m^eeX`Zx0T|8Y?+-R(fV-<{M$5|&N8gR~18V3^0 zaxw^qg{(BjQ6(52xaKH8K>U2catY#pnNFj|jWDbd0msfC5{I>7Tk6xv*`u|=a# zvU8E^{HuAFH>-*Zoe9-nClKsEqnl}ac@7_5xF4dcy?I~5>qPu^*TLcLOs=*@D0+ws zpI#Ng5$n%^DpK%^sgYLCufI(ZS(t+hqxQQ_4aINE3nMa=u;5a2cUYwvHL}{06;H@b z5`M*EvpR(sovE-v^d-Wd?z~xlGpmYDpVJMgY|(ETTIp+?w2qcVrw};@^Y+Gb{1`Hk zL@nUP>~}p;|1(>n+WeCC<9!tr;Wch6tE5{@hHgg`)HDxO6hW zPc;IuZ5764WZfzH8(ATjwc69)g-wCqdR%uh*EGaTx@#7~(2g@uAK$iU*#$*_ZAD<3+$#){} zU(;}Oj5xjh;J8u>Gw=TQFNfJ}dk4Xvplf_gdnV_xmKALf$=wIro_&NS-+!&7JZ87= zFWYVUaW<^w5{1WcLvtb(n4WYG**3WUjf1a3%1#fFDQ?C?y@tS=eJ1wfr-yF)Q9^Y8 z{0;RIkknl4V_HH)SmqsV%7*08?n5OV9TMg#Jap9@kHM?|0_5Nm^4KQs#$XU$pPh|u zdnHQX<(%z8E^J@I4kv@Mb;@a=u(C*wgA&9!Oy3vC1LFf$8Ikcw&#=1Od4K2aK0m}o z3-8>#JlCemoeYW>6=~U)WRishTufd&;Srn0N> zw$sYgXHq7P*`2%v98zlP(|2ByuM9n0FJ_G!L@Z!zZYCG{%WI1#rTJ+c+cV}xMLNiW zy#8s(S7PY1NLQegEW+96O~-t;z&#nG7Z}!o8rWchpmF3G|iS=VG zqPMFki7-CT4?w-M+HM^xGNQTyq3UplyIq#E;%TaE88})|YU|Mx4QCNGAB|$F6w4|w zffeqfrK+8!Xw?pw$p^D*TFz?RrD$WH)GdNJJV%{>T&@;1!P_(79D3tYX`2~h0jvA9 ziJIuGtOe$&s~4wJVJv@PFZ$qj)ku?SbofcrBTda#P|)vWv8of(QHW$z8>J_Iyhwki zNE12DXqySlOrUc(my&46iZe)0%wlsmjXtYX1&*_Y7+IZ+E^Cg|WW;EtEM_%NMpimj z=PSdDRu42nH{I-Xp_|tns>_bnCLC^l-sX0)oPJWPq9P5PvMtE(E{@LV6oF_8Lon$W z)3=RI$T=-4RDvF^LB^rQ;!>la_n|QReQ>MSO-m*Y|3}#0PpChgxNR%B6+meTz%fWo zkEX4i$$$|7tOx^4UF}*8ZJHo*6R;=ORoxal%ai}AfH|)`tK(INrNG$1XI40*B^=OE zeb`5r=;%|F`bldcZ7~EgZh7gehqi{m*@h&jg{`KWeo~JJnsi;aTIjTiWmnt->cCHK z>}^;qP}KTKOCcTAxg4K&j~5ncqioimipR~y;sLr#9_DZzz0HTa?IgKMGcBocdacpf zbUF7zN}v=Y!d&CJF!!pkGRmA9d(H=+R--Jutnojl&)K!tv}>r-W@zAKbUmDAiblSaegGX;YJoV5ce0n7AzQ zY7U&8=yP zO3uy(bQMB`r#n`pYuvPCPGv@V;;*^?_#}Erx28}DZnPWXd@}QGLUU|dm>aBGx80Fn zvkbtK?1Ei|PiKEks8&pkE1q3xb}(Os$6S;zgZ!FRBh~4`cGl_2gmJ;fJ`YNgvF5PO zS+xULkreO+yFpj2(-{?0nsHN;1k#WiX4b2wn5%N6DIptg18*5!?jMx*6JgtIH z;kGcf78lD{Ks10boCyE=ox7_UX$+e81@kUJuCC|lyX-4~03^BO1#L7{s!Fl^$)l?c&c^Fr*jMGt zz>U|KIf=_$%<$c+i81_@qyNdBrfcSZ%yhiQw6jLD(pJutl<03^M=8iS~Ew)MU0lqgq7KT+ahQbvvH!$d>@Zdbqf^Ue}#@ zt2|P+@5!0+yMtxN6kriyhszao)l&hw&c8r;0&szKG;KBQelWE#!{vK+Y}O_+E6k0F zwbJ0!pZ9pe7BlJeCCtTn%5b7pd+WQI)_18<>d%GT{~7b8-Rl1dq-Gzet@UYZEiHP} zd9dq$PSR|vQ~E_EDv|O!2UO&yG?zA&^plRy=DPBRRXUj0)Et3fv_(gL+PD=8yO1B0 z1f5toueG@jA$@9ng?d=oUg?wZ-y`9_pT3{1e+y%|eYuBWTS?C;<(r(LIgB)3yvNFk z;jUUipx%V`gY)+XZrw#^-0-Q*9y0qVA9qo{*Q1l z+|!qU3N^M}C)Kh+1kxdSMW+ec_}nr)nHQDGAaPXs>pxyP_MVI?Hz{wCEJw!sTk5UPHvfbH%p|*o)xxFxo{agr6Y0vOk%=g*^rj~p zUlhQYfx|OtuRD8Rq}!neSH5DAitN-~GY^lGln)GOf2S-GLChX{H4^+{b$G;=8xhCg zo}E|Gv5HRay3Pi~B~fymUUpftG3OJ`_2MJ*6lfxRY&_v%=4=41i#m|(v_z3-GhcG4 z5+7NnKvS`l;;9c4U<26y4F{K<5L=C`X3I|HVi0Ron3}w-T#=#ZEP&P-ahBO-%?D1G zUdF;y%2AahMYY~xMXzK7q|(Ym1VpXg+^%Q00%|kFjYRRq>vZ`_t}Iby-*HPzGjwXZ4y8jH_`1!mq3L&gmbWd zage?UL|?(Nc0Cg%2s^-~*}#$z(OHcu_wX_i&BurcmtSfEX=Uk_*g8`6M$C5MlZv`4Um6-MTXZggH=?YadFl1G!tR zu!&rx6cCk8#_ZDr6b)TZQR1ZP&8f7=6jxgs0J=M`0F)Vqv52(K@Xl8RopNg)kSvG$ zddqSANj=Psgg-`_*e$aoxm$U@9-1~2O6r-;lzfc1>?13ICZW-m@ zV!2XN`Kp{Zg9j;!f1ItnP}UR*Cx;weS6sQHxRc8e9nqCMsfs#{+CLN z$uZYsOsqa17lBo;c>mqrBbs*w5GO{pz=x47xd}D0KeEm`g1=j9$aLQ-iynz`{cM^JwYiyOgOQcvT*pD#M0M---e?l3tAy_83oUJB*;O zg=dtR7q#>EUyPT*+*5DHTI9t9S7 zv}}K90Pf`>(WkQgC0Q=J%7>Ik`uTFbR*#@-1s0SyK}4C&NevgkxQm1CIR7uLShxjs zfl>=M&gwXe<0v;ke?ARy^*mX6Y>(0Q!OMp&t}RZzbj0!fsZ8 zBNxl!&Q!9Ka%aXLi+h!fBC^Ha%>{X>1ZRqsgV zOsZT$q6|iY@^WHJ&q7fNif|Inoxw;GB&w$xrK%bws0!o%qP7w(b2%*Xk=mQ2!4o5@ zXA-4q5+!H?mbh_v_|NVP2R9k5D80_se5LHGi4!U+7JV(4##^z^g{S-ks@P zQMvi*;Crl0f!2R!yxyGYZBe;>bK5Wsrw{ZFNUP;`aEkwVR(Ld@YD z>Ys2Jj@Jqmh*DzwaYS@tBgWfdn%iNjTft~u^q!33IQ$fK7uI+;i-;Z%)M^jZVvpdO zh1o*#3S)Q+$eWF#RHf=#lxlTFIBg;CG>en9RW;j!keJvl{4+a;nw(`6Zno<5axEk-9_ zdWcxchC5r1wG6|iM8c#%L#3?K0CvcYqEV(GQoh|RNmZjQA*WHLAX2^6E=e`k(Hxmf ziAgL<;{Z1m|_e5i8?A?GTo!H9Tq zslsgW*+J&I)1Ju=Fe4M~(2v&P9n0{!m&0{>dFw0XCg)%qt|mL@nQosSa=z?~B^7{) zw}f4Iu}T;*YACVg^tP61ixLFV6v9h`-iq@?FJNjlU}|t+>c1-*YK#<>q%bEMpVE3a zL`hzT)M|#*;D*%iBR4tPMKsK&CHZ|IN5Zu%>;>Jx;Dbe|x>*`r$GO3n0L8fUXX#<`l zSF4E_j9I3-)3&hYKi*?Ws+7}NMdD85nk$!oO(41{Mn5{(Gqh`*JxqZ7L{;6yWS+%j zx```h6H=?oY*o##RC@R#(761_zxipmy%o>uUY=yi`2Ihp-ZCnVri~UQAq2Nz!QI_0 zNN{%>+y@B`gF|q4cXxM};4Z=4b#Q{)o%g%vu5Rq*;>Z<9gUS0JVO8Kq&xC^M| zB|-DQ4Yrx>QH0~b6I*YA%F=c90VS|M1L_iu0T{ou~@YG!J(g z)tmsU%#m{PQ$9$jq!LWZtn3Nelgzd?Sd|jayPL*hL2A9636`pJKA+A1mV{|;w9~n> zi)Rf^VnwkeN(NDN(yEL(lrr^+bOT=^HJ#VKegnDYWHbR6e{E28y1tYO5G)EX)d_s41}Hjhi@ zAzGO4+=>^&s))tU`UhoevyP6YTB=*eB}%lYjDjk42e*RVw+~@@WiYgBgb7`IjAbb$ zly?Vt2U0)pM$~H{55w2NPlY9GSw7^XMD8d;HrfA#!j><}XUw^~Ig~b4?vx6$vy?lu z9#8ilHMM2S@)`dq4ug%Dp1WniXFgQC;~~F0c(T z*8Iiop+)@Yv%;m&ci$~v(DZR1RpY@uq%6SmKSG*w%xeLd|fx2LO03AbWO zHqf)iQYgArQDz*uK}|6T!r0R{E>{M;?}S&{8+WCoS^+g+vF!qXu!5{p%OS@A-iExA zN^4aH<&eMqJ_XzDi>iZl3gp{e?m$*n(7&wJMRwsB0_Y=z{li*0Wg#Dfa{Kh-A`oyV zvjCy(qhg1DnRB#G3WtmajG7z`0pP^)|CUB6DlkSD8OSx0atW0T|NB^9qCK9zyh>Sm;q$6?669JSKN^sD_yRkw z*(dGZBvoV;cN(M77?^N#8Y{CvdN#vjH}c@vf~_nWb$3%*mraQGgk0Wn2UqdGN5jCA z8m*I1Dmvof4hNX-=HVld8?KVoD#&5Ws)@pZO>nTra1jJBPg8?emLy^WMqBUTA?uy$ zR?=kb&-^-`IHBd@IQgW zAtIg^UGo?+M^93n%t{J53@T^Zcv%cZJZElkt$@Y}dj@L#fB#fykF-Cz} zB%?*dcY?z;dbEM<)pc-24#X!L?;;(^o*YT8DP}dE)}Arq?q_l!r0TU5NWwiax)RF# zsq@o=Ha+i_hO&O^P&Eb7Lde9jIzKzDB~Rqf7=5ijzXv&M`QIm+A4r{_$B=Y&ks9{ zzwOhdLGv~Qz}@1r$XOBs=FSGtZOb`iU^wt~!CFpxSxos;>)fQ-M3Bq8z0Z?W0MEZfZ^Pgja6tjkwL5{?>dTm4+>T(4heF}D=8FvN#parWR&nccH5oHsu>}{^o@%?Kzwfza z2^pL7$B9FJ=*lzgz|Gh?zTxUi9N(smv-!gNl)6>K)(_kI-2|GiKAtb&!S?3|Uxc9= zNyc~9W>)3N8X~GX*1CE3^|WI(1`>Kp{4A-#{^LfU?7<3e9MH=feP`vx@X|jsZGEBO zo}LN1Qy({9`E|3`=?{zdho1MAkCgnxyZ<-P5Wx^Lraoo3$>Znj1t6E)@U{F~hGMMK1)j-kQiclc{s2uO9-TS z@x~<7__$f8w?}Uic6V<**2A^F(N<|6=DTO2`m#rcEit8u4Cb9)t~;*4+-#{MxYukM zSIE!8kprGj3^%Sa9v5$IkA6OP{x2!ZiNel{Ax)|duVs@@@U)}z!_EXUTz723fpS=RWS|v@STX9Og*x0zrLs< ztkFFDWw9B3sK%}8>+x<#*eAtcWWV1uQ|5LeOPdeGaPWEXIg3{|D9?G2!9 zY&SgeM;)6=g@#$1gh5pMfX%~;-wPHXq+N!NeHvitg%(kTUC-ym4v_ zg;93c=w!+#h4N82EwRX1-!#DC>Vk^JDU+ULc+}LeZ`-#?38)B^-&C_#n)K4ah(OV=g6OZ#5aXP zn<-HC)gWK;xl5K-OFOHv!9}U2@C2Uhep`JO+!WWe*sbysQkHq+(ObD~bG*>IwCAJN zEU5isdHfh(Hv7kkT9wPEz4fuXyUz04rW3x4jk(5)O)YPH=&Pf9b0v!~`ogB&vnsqv zqfwl{fOypXkC>W}GvO~Y4&FJz^sqft5g*IB3$2B}J(e5QJSN_tqPETNP9MLnagI=I z8Tw$$zof*U8r?=jT^=RvW009`)WeGh6lz=3S*nb6%qO*bCV@+;88rGTZ{Fh#-phO9 z<_)YxZ2bA*Us2gV*{pZa!lmp9@+!78;Txr_~sPlk;9uqQ=eEb9J`~4>=}fLsq6#-(VMhas0T`=d?DF5?qiL2 zmT5gc&aM;np6Q_|oW7%IFj;Cpu$h$8JI0-l4EKOjjr!}`kg1;o@@LoJ#$a=5lHX;0 z3@WHTbS4giV;6xY7sW zz?ZY3R_hgDkjDy%lVM4{(5IVU5n>BIBtuXU|84N=lxRnBebWAp7G=B5Ds*xYrjz}= zg+S=h#bS6Iu08|asXY>Pmc12PxDbzC)<1?Dgnr2snDRb)fPuEB-MsrakCKnqjnc9t zijz@qgqk%UW5B$ktgOeR!h(e^T1@v1wZl1ip^JucXWAS{B-y~QRDfG9ZLS2>UV6|w z{tsb^#G!O-T!s_Hk>!ufKcFwsB%uy|%FD9(xOlF!X{GO&3QqBd8#p`t?_8)?`|?KiO=(apz{Jw6-$W^k z1?6|J0!Dzs-$XRPT3heF7(o6&TW4Ij@{pJj%&y>c9%y-`sAKeuu)IOq~^ z{JxVxJx)K${zYfP@E$6>&^Wm<(Q{Ul;`Eze0}!|tyqlHDkrY;ZdC6$ z*T>r4#OF*~*(08?rS>(7%})GHNRm6A#;>y%#Nx~RUzil`_FPgJab{V(yGNDVo{Q6G z$Vy+2KHdyIo_o~QX^`G1-fgk9D(J@;umL@)+!Bi^zM7)086f=?Tp32>6G)<$zwHWx z#7U&$X@hJ!a$neGu`aThTbU~XxdtH0ji=L`^(;^eOa)N#)$nV-VD=T5D*?Pg`8{<+&DaAa`h;RGn zI&G(W%UMX!yU}R>(agIxm`r{-^UoirluA$VBlnn6xm!*X_&cfhPzto<;?TPTLhCfM zx!;u~hH46I0NUb>t>o876_FLnNp;r+7A}uueKf|`M-fv07~)gO>TwUpDO|Ebg+wHF zfO+$eE67?O_WkMs{_1IIYzn2%A^4?un8jo3j|=cBANHbZ(4W-+sbscpkcv#a@9ATI zA6F3NAQCFj0V)7op$^g$Vq0M=B_6u8YkJ(s_n(3J^{iU@B+ns)!FU9LV~Y&Pd|%!I z;DpV9S0Xz{#Gornkf`D)vKGtLYd;GAr0qF z*6J(UM30Bp+EoSJM31{y$KP_TRNsg0yp5uY^ensM>+>Qsb^Jpif$lDffUxhk=|h+2 z*74*8IZlm_IL5D;;!US8AtVkP3N>3^sY7UVWu9rvPgOa~Rmh}4L8usrr1jcUq=9Jp zWXAkt;*8JCj^bWWs*4F0JNEd-{}vjSKlm!Y5#Ag6)jbdShM{17M8F#4mvtyd*@%i& z2%5spE)e$%eA&Lcy%R(xCY3XAbqw0)RMT)oCCRBiyQeA-(ithnJF`un ze3!7b=?GoUC7Ciz6Rj$VIe5Vnn338G9>UKr~jtP0|V8 zTy7JY7e==Ig?`5@Qm3#zg_axe6rY%LkA!!l&=tADi0U zr5_3W))Ljj-m}tBK#iD_dh5ZZp0+1l9{ACx?HtAqas?SjeOKO`Hb&kV+45KBp3>Af zo9rGh&&ZTKPl4Ee1~qp3HZb+U{tztERfLEU@7X!$51|7jF?Rh|)LQ!qVU8LaWsHPA zbWGY}Df9U!PG`qW?_;rsuU=gbZto$UA%|5VMSN7%{zN zxD^BLJA9v~Xs-yN_+4kcqD$+LN}_p5BW=6(cQ!1dcjMU;wT5OwgO;PUKWsz!) z!I1@IcVqT~beD|*VymLRH2ItRF+;*NXF~E;xlp;Zo+_S7R5r|D80+p8A z_viJmED3B)k6)8a>XS|EdU`?;Doy&R0jZj%Ts3G}1Bf}BtJn8#;T~>`)ky@5`2JW| zb!g+-0~&2iz3v4E4_36p*fXgoSoKRe1e_s2JBjBYLoZ`LgQKWU5(-qy#@RY?JZHTeV0xe*4Ti#*1d zMNP*KrP-(_ZHNreIZua2k*YaQ&2R^I=Pn1}-%*!zwA`=yCOEdrLSp~U#Z>c?2;Eko z@Go=djst$B*h+6^4a$rM4vLiadTw?-OeoBIR*N9Py&WKmC(al|#2)P?)S&4wvooq~ z?`rk>*RYKY)N$;4mRT<;(b9ogCFNSn8cyWSLHy z>cxV%=*x3n`!0cPy~Ha9$uh>~kIT1F9e0`pONs#4bWtfEY!z}ugl-#;&|R_WY!4*H za_wDA%on?!WnA^M9-O>NZ2dVtyGq>C5SWyuy{B^JA+9N0x8x|&HY|;w5jH!UV|7V2 zM}szd@m!*>MA%;5QRUe!bH8sng<0#L0}OnaOsvNvMmckv0Jzq%UXr}(6(o4KE?We^0X>&eH1aJO^QwOI>;HYbDxE5VCu%WG_9ZZDr~OnDuGqd z+5$$rSi%9x(p_6gUH};zHf`!^C>+bW6ek(2dX)AK);#A|I{wvsBbLnn8lO2Je{o8^ z1Q^vz*;naMlju=916jr|$oyh)xD{h)74VpSa0|cZPT<7V`79g1 zgzWn@@NjIGw7gdbM~&|EVP}jPk~!pS&XEyFvOClU5WQg55b?K~rk_hKxioRVZcf>E&e$Rl>a~ z#s;6GZEpiO$$fq3VxE%V%X6B|+AkH}GomJ~P7Pq+nOq5VOWb{yd``ZJ#{w}>=SLol zu`;Xd=@A_oWAp>s)=NieT!_!OKpVpknLVhZ&pcsu&u={R$c6vld2IPL{X;-SE5lkAtF93C5^Rl()reh&5zJ?RI#>=4&3v92`s)@po@Nn06 zhBG?NsX86lZt;ryUUZuXn3;vMJ>DzWo*#l*(869#pYO2WZmk>QKop4#A!=70r-~b1r4*}8z9&9^RWBR zM7Ao;E9N|=5=+#847tN!mM15=qLlD-90aO(?XW@+8I`v}LH--?@ujzAWT9nb!!B>M zLGX6#=S7$D_kSp9Nh0PYhJTMZ@NNj_*~Z^eXclA>FJvbm_r>O;HjKF>xjvKIb8xFLauIX zU#8gJ^pJAyXPS70ZWBV0I-j=30tbzvW%&Y~5}n`JTlGKuvR-@bHmhSw;6;S4l3!v4 zz!o%`D6zLf*)wC%*oZ*3ili15w_gSP{&t%{hrr7gXH)Z+4s_(Xxc1}%rrK1-D?hPc z72~7qgI_}`E2N{&2*+bUdvh0}A0I_blqtEbAN{8yVf(C7H9?L}zC{)s&UX4F|0GB$ zGK}I56RZ)AQzRwSL;FCTB#fEXg#E`9Jra^!3;{NgB$QgFe0eu4Tnxe&hgAuWW*Ec< zsPU*w+tEoV(K$!b-W)94h||tNuw1N6Z<~3Qc&*kKh}N~(7=|)*H=4G!G&#a5FK0^) zDo^d_m%j#v5yEt!vLkLRMJaIZ)>5cA-S7X9^2m~yav6>0oPkZw2?T3ctifJeYUogE zQd|7H%?Rgg%$tp)<0eZ&u!r;{2!DIc&mtj%RaX4R-D~kKO8rM{Hg1>Nl`5nkP9&ru1f(oQ_o8sH!#EY-8`LdW3Jpk)%dXHsCDR(g+&wc@wPa<7J&k!>!^m4o0Gqg z1osED&-pEVB_boa0dp+l&o;Dwl}}9D7r` zf2IWrTk6O)vgB(sn-yHwbVNm4n9_V-!DNqXAc=E3Qkj|#NqvSx^#@GKr2;1Zv5&7S)}&;f zVEJ1=N#n;!(j-?4XdMIUue-VaMk32Qo#2wL;yt|%`ZzvQnsrAS0BwQhaPcl*y|}nl zlKZ8A?!tN@a}O*H3O(%;(cvr#xqlQ6GalIj6-kRm>}#@KX%v6*vDyeJa<$SM=@ux* z0w_OG6__cNUb(0+b9ZGLBp(I!O;m;g$QwlQRkVyVho|3MS17hCTIquD-<1TLc@8ZT zL76((3Hh9)mH9mf?gT=h?jrvQIwUVyk)fC5Vg=EoL$>ILtaX}^%D?{WXl(kna#>TA zx`s%Ane~crB{;b#wANbBy|oXbP2UFBvy{cl^sP(+#6?@S^_IKAkz~ewG91#jDpS|H zVw--i`GIVk%fp!_W9}Gz>m6YxT6y{$+S)7-=6U(3R$Ldvs>CO5>iBhPq@c*K7iXul z*>&{CaEIWP++`!&cN^7tUorYFP`qwlmBxaq@|-O@UgUTk{4-sW!O2c^_xL<`I>*#TyaB$#h`qi_2~n-n?~bK12N@TZ1)) zb_oAEonN&e$fwur$G3U0i?ad~e$WoRbPrNiMcJ-;FXn9fFW(c;Z`0P0^WjEj%>f#ZQ(SNUh&i)X<42%@fpKNI%fkO^UK{v zPi39wogcauP=%nl5`FP;!t-=7u*ZaF`P)rNb zF90|Bto8;gBN&fDJB(lE1qduvv$}%B>YWotPGrWxTef!7I z*93)stXRU(lWgA7g)lYOl;{m>Bq6`MVX4fpQMjFa6X!G91SG;0OSG#8G~XrPtD|+= z#t{{56%lXRM2y{YW}TFVK@X=?m`_4bJm?Y(BzCWtJJ()NN_+wBaYCE6d#VL33K6jY zenx!yil;j!RMH*AD>iq5_0>_|6l7AosmeB%D{Fw0-nUaj7&fpvx1q_33QT9@ZCuVi4NHq z>P__LmuFmNO?Sp$^FLyiL^1C?EW+2X3#!F)6B7Njvz@Ud)NjviJb8>Fo^A23DgAmR z`;ZLe(Po+Ov7l2GY|QaWo;-dZ!P)Cx026fxPZ-S{=9%y6_-Mm0!xUYPmrA?CoBL#= z05FF6dJZ^7(&DdZOv(}@>7vfT3q!Xn+?+G^BdKt|9EzDDF>F?o^+4UB2k?7RVI@oCjn*>IBEKk_B znVdr<U+;T0q@4>T9T>7HBf2vzAiWPt_?)TMkWReiDTx&r1Vo z-GA3A?76id)?itbPZ~a^(kXo0u^(#R7xz>f7l)oC7`#h=RKomKgXq$ER8mKjG#WbG zI(ioTkY6khP&(ZO)N9ReY)hftv23ISrC{9}Tx{#}kU32S!#YzqJ9LMKotS6aHsEVj zLeYTDts`3sbd%o{MYo!()UCNH=NCS+yqe;y?20#Ok8xA$%GjjLEy;3=1?~k4`HmLg zOIv{c8l*P?m5Iki_n7)!pya0*Zfty!Z)W9Jium2onC#Ci#h$BdnthEwwg!%F> zk~Ts6f+Sc({>`mEj4lhAT$|wa#?%vVd3smDl>9PS=oC7o2A;b%UG~N=_g+9{y;E}m z&&MKpSK0m0ApR1rg#;YGE z!nc32_P;nwZULi;!;hs;WP3$yHb3(}Vn8c{0$l4yT5Gr{`PovE&yXh^ROlXA4JaP({CQlmHHIp$o$xV}p12ATMK z48w~V(vNlV3I#;l%wSg+8^%D1>izC8HC9sJ-^mOd?k`YJ{_5=_`f%|J9$X!W6CkxG z1cb;2^}+DJ+&||^9mNULewLLZ3tq@usr`Z>PNgeL$MUvED7Mm+C{+cx=wxr;tOgIicdaw6K!WYcXdgj9q`) zik5CPXB2qn09#0?dCR%RRxTyM2$MV&S0eNdXnxWE7xdV{$MFwUUj{q4W+k&36y5%P z-)1+Z_th4|rYcj^jklXs?;t)(^HwmbZ$fFp_M3I{M&2g{nUTxkU+%mF3a3y)HLex8 z#Smiyfa>Y$_1Mg~dXt5XZb(TdlfwSPu&mE(3q8ig758~5@?1keAJu-*14nV$hs1TU zB^W<5>sO%}IT<%~kc&y6yrEU`NefJmpZf*~kWtHTw<>}1&8#5`xcyFGl`%0RJYIwq zr*6>Oh%vlYxrusjQw=NQsx;WVPpUN8XtojAlMT({57KAh%J7-ic8|?mH(Ev}Bl^*w zpnBd}@~C(+*{S_P)2)YXPE6UF;PG$f)&J1tCB7u-Ok431D(@#~TzbICAV8rtf-BKB z6I%Dz)Nsh8#(A^S^6w3hr8jZ*IbfbIcj)qv7vU*ai`ar>oipWC z(yv%}s>EC~e92Y7T@$W-8P$2+yI~KP67;c(0L6jtB&2M!8IHuUx^5xTUIll$9#bQK=FA zB&^)WhJIfE1(x)AGvP*g%6X-#>Ii@RK%AW#HEDh1O$%Zvsqr00%ePasTz=`id2=8- zwsmmiD^tMn4Zcv3Qiyx4uhNze<;I~bX-%g7`j?u8vcz;_fYucRrDSzBiqy;27Ob)v zORE@IMB3I#vg?3q9R7^+g4-HH#+%gcx^VOJ_a^woS0#uiN4YldJxSyw>ZjeC8KyUx zw#DW{gP~NK#y@dLJPAJ7Ind3Nhj#3S|9s7Fzs_XI-Lum>gl2N=tmcb+t6x7W!WZ3x z#ve1bHvdqE?rJ0Z#P(3$1@wRkS@$o?IuWH^K1Orc_r|!r?MRkQQ^fi*heEW8Dfyza zGRytS#owH^d-(26$Ghe^suP#wo6F(Lp7R|ONR)NY-MYrI_h3JCQ^7Vse#(hJ?}%#J zNA>C#Z+S@cID6DSEwrlZ!E2NOic>jggimcY@uU`)%kEJ4Icm>9&`EzpM*@$wTFmdg z_MCkOF6aE4R`4g?nUsMttn=ieOxq|Lkv5%s-E{x!x&vhIXBn|4J7?qkpDe5{^-0=U z(s~{%@S?t}aO`pU?>g0Crhk#MJ=W`RKR}GveQ8Ne_1GT;xGP_Fohv1Wx@%nhr^hg? zg&v)d{qynC@oRTeg7{D)eqQucugf?=ig&m`?xnZhB7=FAvu@07wqPpbZ<;`a=1-m04VJD2?SIqDO_HM5)U@ul-9r@X6l-jRMMqnR zExxe)oZHFpUYsIb&ws<9G1cxP$qd95vG|b4zUd+`G``NchDIN2m(eqih71v7A(eabm&gS1 zUV?cO>0=s9=S<%xMy1L+BAAU zT@crJ)^zYINDs=;Ih0oLM!$=X*i#kH*)Yk2UOTB#wrC`b6F?<@8;fXX7tzThuHTu7 z_^FCQG`f-vOhEthI*xmqo~8MMO^s}f56T#NXRO+f=$qQ~Sg`4cLlZc#ZN}zk<$wjBw~A(;km_cYcR6r$#Cnk1 zCsR^4z#+0QA@L#T@gM_-qG71P#lu!5)w|J!HBlJLl*Ov zci#hBHez%1ZPO^kOEcpOiZZXGewT`2NaU-A;`^m3K5sSWTw{SBffjOLZ?Yaysci~j z4kmKjxt-k4sd5C)L~KV57rds`weOMNcpbG5Ji%gQqm2GO9lzEJ%0^sTilw%T5ck_; z)p2*pmIx(gB57m$6^`PlNVo}WUI_~!Dc$uhjnVk<06>OfOQleM1~T*MqasB2)8=cjXC+zQ~eu1wmrNyZ58`Pgkiv7Lgxg4yli$mB2DgiTcJuXx#8!%MgC9^F|zLPD229OW3Jodkvw zcUb~NyI`N59;TGbdSM)oSe&)ar8hL$Y+xZaZ*z?_(M5A0lY0hUry)aJhnxhb#Gf8! zBj!w$atTAk&M|OwOMv#)pM!GYwo|9+O?r1Xqz~Q^9($n0SYS`La1LoPP2h05?~#7_b#9I(YT;Odmn+STkJvspyvW`QL#s+j#jY^FbB0 z6n~lyQ~k5bg;pa`JA)|r$2jYeUD^v-7_0R9xQR%;GgH85(OTP-!Gwhb`-5ZpTq87q z@vzOaX<~WGVp}v3)7tjaI_#!nZw1Zf1rXRIzf2!x7SxMlP)=zHyID>i)=@LKq&f@Q zDy@mq25?$~zMmqL-a)yy{a)nh*_Z-axVYwD_^c|#8U%$-e_xDS^FIn8IM@(@O8QPC z0E_&)EPbMRGAp`SzIno&SmcO9oA|(iXEHxqs{}PV3zFA9g><%o+lIbms0Uhpz#Jg$ zggGs@=iYc$+`B~%WoO~`d7BZL8LG2j2kZB(Hlf^VQ<`xH>Vo4-mEYy~pp*hr)nmDqhqc4s=oPTz?&(qRXHJqAoZdo*D8;G- z9okeFmd)*6(#MMue=4~;ewB!nNgo(DvAnZ%$`{-@ZU9|>RRw#i>-|GB_}ruB9++jT1>)9FNl(<$;fqXOnMPw2l`!$bOGzD86MGVxJ)_6?_D7+C~X_1 zSxMjE+)8YLj*|62N==$iN~#a`0K1YUI6QB{cEDU!h4Mq5hd}wl7w8d}xb06YOBG+l zxnFq4_6&)Eym;S>E5~7a2EvaV*shZ0g)2Hu! zBELJ$&)En*lMJ?R>nz81DaQ|_fVIAUya;YKJ7E8=IXxt!e#@lvxwRd)CmddpYfix? z+T&t>aQUEX$V#*7JdIetm;n=YexlrYmHI@W0X~^n;Ts@@Z`AcIUkQ@$BR^;xhaz7+ z>cfJzPIzfeeyJkho`=dkyo_jK@>BR6kNi=+Uk2fi>TJUn>5o5kmtB^-5+Wda^9KyAJ=9(H zFWU|VJ9tSy_B{z8orCM#ucWhnJ>e1zDkzqC;7j>*bam4I-V{F*LOs8~orsXj*7eH; z$&PaFzRQ@X_6JOPu$DbwPBxGmBXHAG7XR&RvXmSao1~*HVyj!*W z*svl6=Mp$;4tl?rO6&p6%;_pX-qT&hxA=0QVhS_Kn%naan2CQkJQwMm6;u8GQ- zGz7*Bu}rU&3@=kxn%q4yAg8VSihC?{%;q<*@qP^m;{{>!ua|+LmLnSATH>7XTh8uY zl#uoz<21L+kK;<co=-?Y3D-VFP(SAeB(!`4~*c@Yvs3Vc{V#DqlnCk~>8Lw~^mQI~* zO*4n}*m9VaV~plZ9G2nXP`x<)F2%~3su1HyAxbre%-%c-bWbQQ(%LPju{rQvHZX<0 z&_QAC355~sW1i{OjeD5{h=KuP?IrX0%PC8%b#W!nwG-A{CSZp^b0 z@p^#8@+f;qb>Pz*Bz;Py6(x5j~nKX>5umm-JoYga&pqOP8S$zBCkd$pOEHycBK!(^`j z%R#_|kzjC-w6XqD+v8ejo9w>OQ&b_gi(Y6?ls1oA_2D{=6=138ajmpSvYZ5Fq= zLtSsZok~=7nE+w*)HhhTw5G#Ck~G;tl~P*!jju__8)&WV2kqv46- z()26Wf0f6~Dd`=tvC2$`6(wnMAOdukl(~VKSG!VJ4T)HQh~PxWy$W*mDHV;vBv(Q- z6@^Zh#Bzvyr}z;~+;s}eoQwtUX8M|sQQisBt)GbD~KHw9_)iozXiGZES6>#X<*P3iuhGTe;(xESC3 zn(XE(Pb8dlT%5lPA8p{MQ0-b^@ zvcj>EcG_9zM_HBCQK(yI_^?DX=LWW-b;(ygvYg7BFw!2lWq8vjRYF2(5t%vK%Q5OU4U6IIWZ%~L%HTuBa(Y5h4UuD9HfT6sYM8AK7} zD4)kM;e=j`Vc4XaMJS!CjZxbCzqX2-Pn)4#Mh{!BM{l5{TLw1{D>LOfx=wD%nO|wS zH>%b+HpVy%GNN=CwcDz+MQZ*0SxJwZt>OP*BTxnAu2oWg;ipM`_Mfm>_~uW5U=ArN zr2OJZlZxSQ>zRz^72*#Ap_{}1VaH^E|JlMQ3x}dqOZH_0#6bE8jld={V>9s0pIE7u z^veb|1F4&zKO^b!{SN#eddxGppDpx?aGSX#)L%B31W0*A{$!&$^WO(<6T)Lti(Co+ zctu3`b{$I?8iIjIu}jL2hDxjy8w#;v{^2F^lZ=Q9c6aALLM<;Es_*|-z)T}G(0>RK z#s5DwLU|`j2h&fEy|KNV4KjVtvM@28!a1U1}t4w*u=Gp^GuCZsZ`j^ zw2F&Nzo}Abu&HYm7nrK3QYo`BF!a-=O(aSu$zdd)(59^?jwZ_CC%c!JBB)Ynvgv6Z z%8e!#%jKE6X_@Dm(y11!v3YA9!cz9jrOAvnmefwbQqHBa$&HE`r6E$zrL#rFhxM~* z$`rGkX;UTyn%O2Iahvf`CIp*F$P{y%wZ@P3vAK#+@u#tM#jk{M`zo`Ucka+_Hu7Ja z=bKKr^{aPUy6#Q}#Ix=pYhD*`gmEj%3`KJ54rYL;H#=!?**ER6>{hefZWI15qv!uu z%uQ)BgkQZY-+^H#Nc(@;8UKgvw1<3ZSwr?@)n7iPK5bXNiU_CNWKM)H5(IJ3#WD~M zE$6-+K%;}`^UI$OVel>{plLGu6RGWqUakw20bU z8cwiM1%!w79WCE#rjsL(52Dnk`|}%3J>)Qnbl|`CzCw76>FlDV5HGHBG9)a=Z}K z{vR6uZ!koVyPa!)zb>`;50U&gwEv<1dO`+4$U2a^^Z)87Ac*ikbO7<*Qcw6qTAs`p z={65h*atPc6(05b+=l6w)BM;|!^im3S+)dow=-zd)MY55fAlqUDm`pfALkFhoO6oA z{QV7Vn>n0P7ZzGm*O=c!>M4VB>G>ei8$8>_9a2-5d0q_5oKCaSnk>ficV8S=7ZIBp z;bRP`J8aVVdyxP^WN$U6s-HGB)W;2Gu$1~%;7V4oQ#xeZ>7+i z7SU|wX{4dpii;k1Mv|DN(Db9XG$VCA*AxPZlaSZMQZ=#SfB(y^gHo6)EDRQaQxsiv>Jz?C0 zD?rb(X9%*KMbm(#Qv_uMzo(xwXO@^d(3x0{K0Q`$sZ#pp%1Pxe zMvk<0iG-=9jTmdR0$34}>-i`y?Md;E0Rkw=b$!H4#?S&43Ccb_95m~dQbR9K->U`a zn++SXG1g%ATVX`6DziLShpTY>fi`T}m&wqdGVVqm1)yCk7sV#6)N|Eb8L*9jX4o`y zgx2EAfV9YdPs;5Ab56ERZP=!B0R5-zrmR+Lf*R1gqbrRQpVyL4%a!ANDDqIIj4#O; zvxLKsnHq?rs@G>T&^q~lj2(-v!}ExR-LX{FFxP@b4H`+&ls~De@XfQR;&>MQthmFB zj|%hGbq$WqU_yR$nh8kVASmcP+`2W8H_Euj_C4HW8FJ;g#0<)}N@XokId3uQ-o@lH zQs}S2CFs-C?W3HqjCC1ct$_5GcU@3u-YI{kp9n-~Y-?tL_foM?bA*5-nh?zK(D;^-l_fbCnz|nc`2n z6a^$v$!E;*tCXx9`gEE*xjBVPp0+^K675XVUOZ%>EV%99(ZamZa9VnLeM5lEc)oUV zPo5|eBZYv=u3^70>TiPJfVP-`=TEJR)186|{uh{$G3g7Pcw>C&e1!*x5$Tt1NT;oi z?76Z`(WId)C2?q$6Dun;+R!C_a87u%05Vvr8jJnP^dMPaH3;DDNCIVeH!%PplrT?&-fBG5GLOaVu^6;KDCG?JZV_^)y^ zc+6y4g2hAQ;jn75WxWB_x0-q{SKtK;e}!_=GH-K4^UN%zaBl46yN~^6r~=@fMbG^G znMDkHN#HZSL2Vgig~sDNy|FDfFms4xdZKSdH%ZLhAfm4VC(D#M{jM(#y?bXF^R3Yww3$Vi9enlN6#UX>@|INyr>y6V{Q)BCa#<-2WF0yr|!LPwaN%hrpmZp zd^{?@#IPQzt$F7NXr%9COJ77MohZ!B6InL?ysDJH$7Xn(`c)p2mE>9I^~)wSV!j-v zO=hf@h!#FyT}3R>mb=!~rLNiC670mmWP^N{cR%X1x<95BQe7UI)YWlnoAaaOJlbyM z9|*6DzH7vp!+wzhr~#50XFzq8vm%m0P#9#;b>uwLcK}eT#8Q$mcmY4V?C?A2y1Kbi zxlXoFYnJ)982DzkMebfOHq~xs6IlD%*}eX_9aY9O^QCJ(H>H8fxf|7LotM~|AUms^ zn01|FwHS{5d?M|C)`4b=<|Un*KRckNO7OrV*Vk5%vk zp&w0$z_(;BpJPbKvv50jr_FQu4z5ETZ4b<*1msD7A9j%e02655K6`QVGu0UKQiA0qa+BJ#x?d_g;apWUSg@%eabJV+>hON8YNHqmtDU!`{eR4)S~(BPph0Z5uY1hDsHEe*TFi%9 z4(~f1Y1(kD`sWov&uP6k;uxaZWUT;!nR4;MT~unS$bBbHQpzh zbh}(+e`CbLni;hvs9T8tUr7d>INQbNygq0#vvYo>4I4a!Er<>(SLpU{r8?y`4kkP7m`x>^%Q63?-%q856(o76q7gV z4|(Hetr&JWkMFaQE)Dxcwr#VZw_?vgA8bJx3+$FSO?f@0SGI1&$nF$gYwSy2|EMs; zpg%>Gh*y)aQ^pYnglIaywHPQJi-pd2UU{zoJmikJnD@6bh(|jap`&M32L3@x3|~Vj zJ~pP0qfMocZiHv~`kYDCoTE`OuSne`j`ZI`TNt3cWtF zPwFeQbMHtIYHq>;6R%imOO=PlG2Kt&?QCvOz%c%24p>0El&rvBW6;+*XSTV&?q&?+ zJtxjyTWb#scZVF7f|82GHuop^$KR`H2FAzT>NTQdYO`W_$AV_TR{`K&b3(wpAlLQjv4hcUlO=X zog;NL6(OpB)5qf)PQw>DwZ6_LF}z+mWdjC-|CyIMLK3$}83-8(k}~IojkAF<>p(8y z$CWi!afM?WTUt4P2#OptCK~xJBsCR_24&K?*1-Di|nJSgChnw{zC#zIWs7fxy>smm#6V zJ4o|4^v;T5+Q$p*rm~|)sX#3SSX0dQAHin(MkGWOwQ_Lx@J%kRmATyUy~KAwNrPE8 z9Eb^}lgsN9t`~-vg3y4Q1j`8h0lf8|NhPPZHZH7g-A@3@yB)6gHnwNB^H<81_#GTI z`6sK=OA;kXgQBc#+;$WZM8QqU7bbwp!el)WRyN6`Q=SyWO+rbB{voI4ILVi8H#Y1I zNfyGS?DV!BDaT6Mq}7sdCU+Mom)Y6LMN ziGJT#LJ@MPJUb+V>R+Q2QA8XwIPSlhCLxf&AE>kuY#UGapH*fI@YkHsmQS+jF&zV8 zpR>Ih2o}A3NjJ`+95CuM8Qt*c2ox>cv!)7+N!0Its}pwnWDL+G2(G@fDS9VN+#+-C zUH^>hM-8g6Q>#M}g#47(uxlv(a~h*E8~xX8{?E^{N~m!#pRP*%e23JboD~%n8aVoH z13G_`qt>O|HZ~7lq7pGhpM<&f4{5uFm;z|Mk@`K&yO-yJ4axcH&gZZ3M%2I8uMXnB zrY>5uRbX{VR5IuoO0541Z9WnR+#J=e-5k*8fTupv>}lAs7JJ{CmGfkT>*c_``=jc9 zqBdQg3eU)AfBZ`!=I_~+mz|_Xh2%%Ryd!#LMDWbQHp7q^1nDG1iF>1CAHyQAC-NDb zW%NF4^+jf5rlLQ@-Cgld?rh|Fmf=!dx4KMY?~_59O6KjYe403z&Kk7Xdden{Aab;f zF~mU`s-Y^tjdpi?XrI*RHVmI0R|*C8;qA={?yJ2dE`m+eBVa`($|I)g9d)W+!e z%*NRxWTLycxa}Y>3LjC+N)1j(l3>y2wc!1#4Q)zxMs4nLa`DHZ)*B{CG^A1bBDbG^ zm$Id7#Iv85;MbpWqv;Azh;LTv!pk;+GWE|{2BCyMIjks*A1i~azbty^+Pd9M8hJ}~ zhffM~VAVV~RFj_ZtivUq$Xyuhla)`a12ZYCssG7c9#gU*d2%IX-+R|t@%6USbi zCIAZLxcc(Lm`}>w(;*585vfOKqS@6X@C+?ES_S3R%+vZ3 zPvh_v{0_L8%9fkUZ6(l70}tgCF3qs44qSr`*3*atQ1a##T9o2qMh_mUFHJRM8u}gj zZ18w&(QrHMyP7SyewdA_uA}HSR(DGQFzsSLiEN|91ElM|egnvGOT&^a!wy6IAh5lV z^ll&R%avTp23IeE+W(fk012a@1uN4RrVg!2-BhO%UxCZH+H$|?7}H`)M0t#nTuD2L zb1wuAcBJp?%L?oMnGBCs>Vg>c$A^twx>I|*%#_|`>blr_gZhvwp@4EwGz zvl$?)k!KSea>vlLcf;6+Iwq!Cf8dD{l3IrIv{ilNGuUkaOF1{cb3#WG+}_;D8yddo ztr7i0cz2r)qk7XU71dL3o&s~tJ(k_b$o5-50nb8RiBN>;reAaljSt%0jFx~w#%$+V zG<=QepYzYN+Lfva{8n6MR%1TDEA(?;o`yL!Vaf+x2!sO<`=qLQ`I7ausv}^#;vLlq z`9F7wnvVV|S#J~uuPsi`wTm+w8#yNr%MFMEErTMso^#~sw$$YZ7P5C5*gZ$Qr+3u@ z%aT|H_lgp49MR&_RoA0|F^~>e^KWv8L&VFLr+IPBiJe;@wS>7Z*~)4vi(LldCTOpj z^TPVvEY7pLeU9R%fbO!ZM}(-oO1arR$LycjDG*V^oa%2|{=#s#>x6L-e#CvBTFY%( z8mkFY#jV6m56}Xpv0h6~mR#>lY;{^UV*_APT6LYrNdy3g2aUq(t8j2)X=mSd!pAzq z3xFNHtp{#;H;8{sSWe>ipz6YqP=<;|Z(G74^1QtgJ_teVybx~-mp5b<3YQhW4Bp=z zL7jRQ^kO&HXM7Y@SThIQhSO!qV$C{#TDXx`>Vh2|S6uZFJ0i1&kZ7*X3w8DFz7X=4 z-J3dUS0_dNfm2P=jG%XkE57n0(LclI3|i?L7-wsRP7Pz4Fgwio?3x#{pTgju9(CKp z65xb)8@HHv;wvG165^+LvieBvZD$#nGb+xnC_a+m=-A4A|H905(V6mbl_}1S%z4#j zHYMju+9j&f#&1xNwEx=77{@(rFM0E#XQpU+k*Bq;V6Csgp#^p4x;Xdz3SvH$)+)J~ zaQN#|mqzkTzD|G?ghauo|3IEIQm}Xz*XLGIRq(jkzN&CzkG}>~WHvo|Rf|AW?J#D* z`%=QKQVnW56M*!b3O#TdH)TKK(!Z0DScR9hbpA!7u)g2B06=dL@)o)C=dXhR0}&K*yyI|f za4^{%^uf#CpU#8Dxxjn46n29cnmV_QaK$iP2dYpVxH-qItYgTk`JJbE0NEzUp^nn1 zIPoFx$(uV$>I)jyHCk-gyIQD4<%^|`A7%Kx-dPRoRLgn4b{J8AGK0p(1O_>f3-t-*u*XoP7HVed^>2`MR*HPwTe;L!aWobB^n5)qDX!k7+Ldfm;o&Q`FqCN1NUxargEjl=qGbUBl= z9`HqKjA%yJVyv&mHe)W~t5y{n_V`g)m0Gx}e)S3FCX>l%Uqnr~s*3QkUehrg`dEaj zR=rW%C?YAKEIp#f8~<;LQC--VlSBRAEFde~NMtF%?1Hew8Mk8gXJw6#bl7=cc+hDj zcOIW5+{!|PszIn^TfB!WpURSymc3%RLp4V;h`b3P#=AeQVZ+piy|uUG<~9Z%c-H)oYXXMpwGinN3+f!& zFw||iKOzIt%_5Hiv-FT9#_&G)#$qW@xjO-v`SA%S&Jea72cK=f%Glzt0y1DaM9l-l zt2w;*O>1QM^6^$z8B!@-;K4Z>I6_0aV`x-(WQJU4 zlf+DQLj7mWHia8lqiJJqIeQ|H&0Gf)KXa8;ckv~V6lSnO?7ldr@>n@x@F@R0#fqSA zlYW8Ln=V)B-HutTSh!E3ug%9>rs;`4oB?Aa`XlhFm!+(%TaB>z29vM*@VCFqRcEna zzyKnOKO;LD5N>7I>Ra#5}R<69w@@n?F+VTq*R%HFj zYv=TCu5LcW&08vOX)xayb1hikZ?mowKHnU)4(GQ46@=BPeperJbUlQvPg;X4VhAZ# z*ZzKS%ha!VQ@@`vV8;bQnSN&`Q7tYi0{-V59e zUM}fBzh@I(xlmQ<^PwTejrkX*o|NIVvb_vDjLJ{qVLJGRFA6~4%0?&b*Dlz!sJUxQjBKWCsf0;e;jg-E%N@x`&;<9sIvF~0tDS@!aBlQ& zK%F-}O#kM)S2|MOa$KLXNrU`cf(YRP`nY=Q)^d6cHiEXW$DlSueg+Mn5og*FbZ{CG z%DSpLcyq897sN*cGqD9gI9pS8j=)mQb@y`npFb$$w$l-JZdHy2lU zlZH6cy~na`GU?JHb`|>)GD21T{*R#M!M5hbMimn{bCtR2uqn$@@Qa8pweb zN3S4`qZs~6t*)h%;w)z{X$qLs;vXpvCR&TdC&36f8MAu@~n>W{-|! zZKSUIZ*%g+sJ~xLHaashkM;t*w^G|Lip^VqIqp2WAMIgwPC0x)s!A~&R~8nvX}lT! z?{;t$5;*>!JH?W`XkFEYbLYC0|AZRLG`g;W%Q${8rNDjZ9Qv0m$H6weBX|+SVq&pw z8?w$^EoG=B+gQb;9Apo%#kReGA{;8^St-|uY8q30@T73YI>2m<8m3*XoTk^@xlQ&s zTC=9`i@PBO>BJdZRRVe|>~6Jn!Dl&ls%e|exj1_zhI_pQv}&G5F*2+7=nwy^{MhW34ee>2Sv+8&=s<80Y}iFgP3!Bc1ukK*1ZHwX+P8 z+HT@QgIMB6Jw#pAVjA~Du z-aEAbbE_FG^Pra&PEO3;!J)TJ z#ZRCx`Y0h_lS#@s1#g^c=HLn&+8F~wfplO9#ZkYy_Xlm33K z3RTu%LPc}App~wvWX=~o!axEY+gf=T&>LR4<)4`OYKS+&g^c-L7)cr0tq(6NRZY@s z$kFoyz2IabteZfrv{g^Rqhb23qap+qzT>TOP_$u-uwJZE-M zy%Mt;fp6Hk9P@4N;YpM|B@L=mQ-ryz-96D%#I>oxU+uu8!}Jh5`yWX~VmGC-p(*0m3-pAs_7a6B=)=(Xaa*U3QZskf*!@N^l$(9q zMH&wvTi2GQIMg&^MNRHrUMrJY(<>rLCJ^W2%_h}lcYM#x1p ztFg*(*xK+;o8PdpmxVQvZab%`8z1NK@!k6uwT@fA(8Mk#{0K*byaxzqUQ zaF;~8L_J7}ZXjkWU)g+y9Mmo3UE&_XL=TX|*H$RcP(+d~UV1Okh0*lvkD+D{i6Ki4 zHcx;QF51@AE(FQ407xt!&eQS^5Hn7K9=i_3!{G}GO-8$1x`lvP5$ZA7frGYv1EI6{ zr(;09Oj>c&`2(cx!MyKaUSW{f3z+u<5OYR~9{UEx)8G#Zy$AEYgL#E}OkTjeA0YG^ z|Ma+=N3^XPNPwp%6hNQ~5&*FP0f=FM5b0?IkU^J0^nmUFJv-q5bVmgMd_Wn1#ZeF3 zjsRF78zBsTltHD(L;BNNayY{Qq&5IsQ}_UqCrFT(2Eg+W0T4qBfgVc=;Bkclh3W$? zmkVcn!|opxXpqV>FI{@3_?F-1HhiM z14MIX0iOc&p$vbtp@0HkP{0E`0Lh#Kz^B|Qs2u2LR1n6o06@0n0YKY(4mC~};Gf7r z-~|Vw*aSEp;sat{A$xK)00OrNpg|G{_#sjNkvCM2m;u1^6afTy18mje0U+-oMBqIE z<0Z=A{Tgqu_4&cpCjwg^1rSpXE7HRWMFvd|3${LF&yF<&x??5S>aq|lj#=QA9;`nn zq~Q;G==4724~QP44~VUQo6`pby5av?M=*wbgX;mk!GQ+f;6!@B8~iOP0P2AhYzcor zq{s&Zi|89%`b^I|RL{;k6xkMdgMLN>1-zhvPgody!XMxheuv8W{{f7Doh2Ut+JJYk zX~2}2$HD;Fnhy~dZH^DXmLnwO)?Z}ko*g=P5s(WyAcp2M0Af-UAZkbe$+9H?9teXM z>0!qJp{IrekOlA{-~)!?d*H_;0g{${fkm#4LXcZmKcLCB@DW7dW)HLL=UB;bHB(<=dq zTdpwUM_0ZuWYE-%016fph)=n6NFoShT3{__AeBYyaY2}wO@Pdv4j989)Jy;>4i^a8 z-cqCj zUUTFayyi~wUB>W`dpX(tB5$~EkO!q`9;IRU7ocgBY&W>0F|HJvHog$FCw91R8m4@E zydanB6V?wiO?kHg=Dsp~pmbm2q<+-tOn59SoMqnTIXuRHU zDz4eGp^;0h&T7WOj~SWCeHDZsqW_e}pO%cRbO1zK8B7}p6|y*ep|ZAfCX$uN)R+!j zP_r2S-rMo>e7=<_d%7JDHY1%wH?Di;-RK^|AU1V-JjJs*OHT}1{Hu`#LMhRsO-VM`R&eY#;77e`PRD%&f5epB z1)iokYT&rE-TbIeXxnre=j)xDciT$oWEPqL(lmSi@VWe%Y2~R zlFCvPls$@EH?6YL{YLfQvffq`R1v}TMzO4?^-1X4ey4%4k1EbU?7o1*C8UmXk&dP2 zOaCh0k)S#-k5iXDXt%|CNY_k~lSgU(Etws!w;FbKs*8Evw+7=VuZMe<{ zrOIyMQv-i&(r~Ze38~tu&6kI&H@%t`81t{yc*3(%&skv60 zWDi&f+gfei=U^!F?_N)S$tU%2oN`kipgw={N;!DaSGFjcV`9&4wO)^uCrQ#y8g0#? z4B{bd1eX^N>#Wx-XKTh>;`eT(N4f#3%l0RAhNAUUj?9=IK@$_CY3@-iAalDt`|$AY z(;Q$7LmxOnyr3HshnW%mGQCMutkXlCMEf=@&YxK#5cp&l3v77t?ckOE1s881z8^3q z5jrNEHMx@1PkM zc}IOf0;N0jVe|A&LH`<}M*+BZdKLeGb%@rn#z?j~v2ELG`6c3Ucvq0PUc&MOy2D;> z6dQhnNm;#v%Mk5YC=z9Lu>vUQwe=hqo^?F1L6p(|LR)BKO>c61jKih3*;1ttlEKeu zsow!tQ0}kDclmdjlzue@3({%wsf(Uu$nzz1CBnk}an-}0wo^X=BI!vu>j?CA_hH*q z>+Z6W8EtSeImx|5Y$<-={B?}?@yKT%Hb$?7Hx8@icfK`diq!;T@Xu1Y%<=_6eXdRE zgD>O19a5@OmeTYP08HO&EY%`Jw{rYv5*emiNf3NHt+6&bzm-`pU8mo!(?+E)s^hhG zWi1zS8^P(<)gr3g5rv-UDXa#D^%v>YJB(xaXPf%y>4A*bpX9AeWH{PY3DX&DAJdD@ z_c@ra1Y?IE7HB39he zdA~-bn|32j6N$=D&%c~fGcL|g0V0?me>~y+)Qo?0SdrtK4&IOg%yhF;HG zPg^*&{4$f-l$xCm?k0Znfi(-91e=Knw&E)8MN|FPgX0ZBl)*J(>|`sRCEV2?v+^I3_JzGCFqiH- z7iCqoi)mtur^zQ&-7cJ;l=Oc#hG0(+6NJN(ra~l{UXvX7*)Ftsw?WnMCOi~ivG%|MkHlCn46FR(Q;idp2rMDi* zhA91oar7>$#`qUCn0@8NLW@y&YW^kTHLqX77|Va|PvTIZaL z%Ho>H-An{3|8rcH;@ug4hR`Day6G${&!1t%I5Cw79uJ<{{%M6+;%{sT`rOMW+QorE zcpY`B1ctrLgNn=Y88*^aCx9kw=NPgPWcrqH2IFabYBLqM zck?G~Wzow!Zd9E=vUagg@5*SZ)x1W&d1v?B^_oAZ zQmCQ!BGZ8Sh{6#m0INJp%6g-D3#zE{#x*77fAyvrw{N~oxlj5OKl<1Vi!v~40u$Ct zu2{Dq!<3*;gw}$cAVkG6ims$emUddc-=!R@`w8q6Rx z!Oxr=-^#E1E)((y*DYQ*-q~Y(4GHC$0=Z{q-ww^^#<*;5b5BFB`EA)8?|$z0bsNw# zXu~A5n4!!Hol60DTRC>nHKWy(f%dJX@jCouKYi`3T?35@I4+)aIk6v7?b^a>nQ&Cv z)Q0vKRgPf3ZLsF78`-yogKIjMS1FlVoU1P~(eM)xyJuvK(M}K>G-1&|auAA=AEmsM zHY3pO)_@_)0K*yQ$x#_DYoiKZII^#HFbr*#ezS{WIbk<9pol|DG~}ld3Z*r(9#$`rooiDR}F@@{FF)6~aXxm?kT%4LF1zzZ%<*a}ys~ z?FO^fx>EY??y=>aR`{^W?GME%Gggbro-+mIV7hp0KyR2bREC(I-KSkQ`5`ZUjpqM? zLVDK?(4PCga|ZOjTD{S1dc4NK;cNLBw3nA%8m zDh;7;c6zUErx2CY|7W?v@IIunzhgk*v^oVokd0A)`4+=DKaVP2VB$RTM=(F5%Nf6Y z?-@r7){CRF&K7*qcdr$N_Z($c4*mdg#vSHe>VgDcI`)8I&kFhObgGV#^wLTr$*xEd zMEKT}XQ5)2hwmf$zsW+$yUM+gc|96Nm(iNg*Y{8DWIWJU83E4mg)RpttZVe$_18Nx{Lw3^(Bs-IK)E0>f3 zxdpyMBD0|-ikifI>_RoPBf`~9&xgER6b>m|LR@vhPIS&5>f`J(@qRKzjS!cEdZkX+ zZ6AHck05@1&!~f@axxuAZMB1NS)=iM1(>8MWQ7VnXzsHj+(;YUl;X(;FygxN4N6lf z?t6L~tFs(2!?OxX_ZK(!q}bj<1JP%-MPGnw3u$?9munX~oYg09>~n<1Kp^{YD(9> zsIb|gR?%L>usL*Xl1ymrJ<(@z;oFKX3*CFI4?mTRRf?9z=0HY7W20v$vDVwY_)D1P z;v^3+uslNNZdacpI00_mIMFgGO=tK34Wg&Ev)tv^eY%HRSJA524?*;Srxl1g%G=R% zWmSHy8=@>hYssQ#9GGb=?P#*OgGBm;Bm=@}ZM>qxL#U*_H%mBNq^p_tK&kyGuRX`H zps@!=^Y#3CI9)<>qt%raGixC=b%K`Xy>)l4KPjHhrID7YvWY@{hFaai5v5kEGu_U!$FK9uVj1&{NGyXv5Gl=P3AH*GqYkILf`Cbh4G{b!o%1o2! zLUR}+-wbUwkGtrfUuJtg{j105B)3AOb75YdxO)$A?oEOICsOhD3n?6C6uCS~F}{uk zK}9jlxXy+QIBs>n6284+&bagZ;f^WejxkLyYHWt3s-BlAZgD{ocu@d|S6ia|umr@b zuT+Sc=`3gF2ahIW;inKkQd$eTiKyd#J#@b9fjD&D0>NK`XH_-XM#)#yzb{$_t|q^( z8D?u9IY!TW^7d$P-#q|0%y6~PDl&FVcmg8Qm1s4#QlE2|kvspDhiDcM z#854z9J@919W|(2OUr-GktsD8<%G+HI@)mc4nFH{^b#C7EsUP4Gr7+zy_L~<0;}+8 zqaCG)On`TOfYoCoM7Hg3qWH~-P%&x_|FZ(7k5#G#2H;zs&xj6YpVeNNa4u3uIwdDF z()$i!O9tiY{8OLzCiSqGbMK36dO=R>pgom+e0){u0~3`!=EcfNtM=1OXPd${De1+K zZz);E`UNDKqeJ{X`V#~5BJk^#+{JL`H>Az{1xny!po|0O=7_w~Z`mD+&^vCchF^$c z`X7$+l=u2>`r|xuq^)7OGFZMhM5oaXw%eFtXYo+RkKQKf0ml4-6jKXIl^NABD&da2 zq-{gFGIFkqe->ri@-Civ?rYyH9bem`sO{Y4_j-~@6;{r1`ak2`2vwP7oNmA0JniH% zw;@k5?{Kwc5E?T=-9=dhdTELju7fJVc9PVmb7g>^}u zxHd2`YovY2&W6)&(-IOJ%wBaOvi6f?UZLRqGscR>>wmbq66w zOJQluoqWXm51I_FAlr&BBZOXXJft1%UE^0m^uv2+M{#kEuz4rq-jkr_0P37N?>XV> zqzo}Sdmi{l3lh7B6u$s7J=GT+W6Yo0pMP<#JmMHPp#}njlQR1K3_j!TUv6vsEaY_t zcbi3j_6r_@#HAp-Y)>9uL+8EwwVTi;F$>-v|dp7Nc0 z*V4*tUTv~?ZASIK>N%j!K6EmUZF)4Z_-`Kcy#g1JZp26qJ#NEFCBNbD?`PYE&rpl=&VQxKdm-M8^i zTJyxJA8b8SJS!s%tiFh0Z@>7Y*i6Bx#7jK0&97Y+=Phkj{X|AH84W*-bljqQ%ZXMK zmulHNM(8S|th@Qh+?Y&}lUR`xtEOH4cKWQ?v0QaGn4(8`@+UxapHRO9T~?6vQZH%s zA);WyK#XDN>>iI7wm2FMygG`|RxeK`fzX`8C4COZrMNNcSkd^Mt}dU2-&ta(c#l(S zwsJT*Vwnc{mcaIRzhrFjX!P`uw3CaU*v6?OjkGn{@C!)}9#F->$BOI|sZ}TOg#I;E z-T9$S&6w4X8c<6_=5bVoAhysZ)`MOY;Ko+b}j$IgcvDwJcJrC;~ zM2&6*@g67~C#==SMM276o?Ef5*79N z1AY2?YCbm9PWJ5B=t~%oQ%n~2W)7|#dQ8BfBFh~<&_AM!K7X1S8q<+RZ*FXn`s55Q zUlbRb66HV1s+dIQoqhI=?+1&09w9UO!Y^xfABXG9im;%vj;PEC%f7=q?IjAEa&6<> z*`*NpQPEhz~E@Y9lO4=!N#ZZWDe zlo5M48KzDxtk|j>i0|3Gy`G&w1S+l0kG@6u_vtS@YgGWc3{+n*t92aqwI|5^5}Ny( zy}MFPhg5@fgap&3-ZLMvV@15A$7mr})%CO_MCWAgCslUc+m2N?WHhaNO*dfx>{zrB zfGuYv?pJZ|;El(k9>BMS2P@x88E6SuGWBs1(a`)&E#SK^>DHtIP&mfg3;)T5!FwhK z?$t}H(1UnSk<{-mOU7DQ5M(u~C)}le;&{a5K;>K-3nIaolG{rg8ZoUn$-KovuJw<> zJBR3v7@E65jt$9M7w!5N+G8@q0)cWZk3FTK$&>7AxlwzTx4h((_HYd`x-kt@f?n8a zj;+zkpuwrUhHN>pohfhIjZcv#5w%YNjpipP>2g@GINzJyC_ZGUY_fZW85T0KF8mec z^cJ`TTut#E$ZASnmT|EoeL6b^a>U+OBFyhku0HL02{{v(@NV5-fzxy5H)r>^SBR?= z7F8MdpRPV)sn(O-Rco-U3rO3C7>-E9zQQ;Cd1jMN9!J{PE@1dDO}o1u^Ku~{RxPeC z$04UD24VUQ@0tJB+p6<$g~G*ndTmP{ig% ziEXbFn)ea%GdL zHQHt|@bJSs+!s`3d6g0A$^%LHRfd5|Rxa`T_xU=vt^K>9BatI}vY$TX!7~Q!`uI zTrj)uC^b!WT5$YDCJ8HOT3c27kR}~94;$^#~Q(Q6cQYcr*Rm}1g zbKm1dyXT0>`NN*&Fzr^7(s_;H{q5$4=M3VH@SZDGidFno^7TmWHQMJOFBOa5;}xYI zPalyT=fV~YFwgKXedeqd3}#N9mIAb1iL?CPsNT|J;IJHNjQpMEh>vTw3KHtODG!d} z&G6j<@A2R^+>4wY$XaF_x(lqZP^tzY1Nik`xH{|xB1;(B6b`ZQnk}6 zG5Lxlv*w`WYWkN)mc<_p7&W=w&VO~gVd=o075AYofMf66RCPkmX!=nXF2I;wCxp1T zA64KGjO%q^NvVIM@|=S4jSehH5f~r;57YcX6*vcD7hUZuKkZXc!uyjB_i&*Z8kPxM z*8SvWTNsnr1C|b4#vK^bG5yg_Fc}Q}53}Ae6yW9`^>U#dmwYU->$I@{33UhZx>6jm z?J^kewOG~+!wzkgPvcx8jKZu@o#yx z+^76LUMn+R*lt<$+PY|5>q5aIM$j*Q9l+nun z)JHMj^4mT&oc-62RRsQ%V*L5QVcj&+ALGx9PPhu*VM1s zs+Mqi|4y5iwVI=>{-5dz#zMM1sAc~M8ayG8%1$r-!QZLI?WGMtcmHrf>igQV>B`mC z1DNrM^$YQFDU#(m4`pJv3>^Fi&y|Bj%R7E(fiSy}xL%X=AZPbpOsdv5&W9+A7s z%P{1>%=>4+M602iqNV7Vx_>(fM?B~9b;QDL{!M;kM&c$HV{?@|MAX#-S!ILke9gdn zl2h3hPpt^gMd2tk|61IB57PGf1w}!3zqLxAF*x|Rm=i};8GmGnyiT^G67{OyPCWehKTdzal2W|hz+N7lsm#TlXAh_Z`u}zuwkypL&EOYMF>pWG zxJR(w?#rr@e=c^4`^)ERTO!u{$Qeq!&e!5tjH>m)!Q`wPdV%70nB40WaJf11$6i8w!*fF_Jq`mYPTzc9{EVQdv7mq zT>rj~RQ+S<-R19MQ;B^B1A=lZ?zelz?FXeGR6J`v0sDzhYm40E&uq+(XeDLq(cdBO z-k^CKBcF>Qs99JVYKL^+pWNN>E!N|pctgJHWAN#i`UiYzZe+_4$xH|X2TZCSi!+~ zq|GXNfn_e3WX`yL*gE0QuD<15Tn2kD&@uIg`{bF1Em!#yP|mKY2$C_>E4t$2t^=G$ zZeEHZ*ye#H42)G+dLa^vVCKGeD@S=3nmeA}ZN70cO&6#kI_C3i*dY!N$?BUrMQ8lv zHT+X;Q>zaS+M*VM3{XXK?VP(A0qX_gf_>6KgStyE;W{ z{A7Zq+99xFU&D`1!~NoqIf`lqsUlT@&EIo$s*C?hBR=*SJra#Mu{iCM-Ro}Jjo2EL> zcJOgFtb{sDy|-F1y@XouhC@l7Kfx!}c^rC8x3+JZ8X5(Lg)bIJqiJfbMTv%{I}vQ zFTOm?N@>7(c4cVbQMZZ(PYbRdG_51_Cy}}i<3(YV*gv52#|W<*$ElhnCP-`^$R*8U z*KU7;SJ=0DL|2F$O%y-@Dp*q{P3TnKX_OUldcG$-&3DYRIWn+=fST=k=E;l+X(BB^ z;XA_9e1<$t%)VFJG1Pn7r=%$pDSk6nco762{}@cG`cZ+Sg~NA+r}>JyRw_0v92J4G z5~>v-LGxy;{(ShwGWW&eB*%0_SkR#+pfDxtU9Q3(iGGyH<88J_3p-VV^jpp8wn*3x zNSvSZ@}>By<}+r)sJ~he6MABKK#mwcC;WdpQBT!7h5PgmMZdNZApSzl^#1)e%VRWc zxL@=G4r_#oD3OOqxxZvj#{74T0T?sR2hc(}48xclI%0d~eD9C{dIzP`BxhfExnbv)>nT2P%Q z*#rIGTtE5x_L-HR=LPLg8%4WYZ#^jO7)7G?hc%)FZ`K@2fBF?;z8(_|!r{YhT7+2@ zU*bB;dy!O}z~#ePsAToX8s2o*ED4RjV?jP|CS)O_0a{E(3{%Q^FzdNNyr6kGKC@h8 z56HEaQgi%1X8O=PL2)xu`JMv4@c3?8x)V>eFV40=BB2w{_ht{_rOw6iW&1JfgTVBY z>D_fshqBgV!ccFdsf4N+lu)*(y_6tp!Kovo`O@mXV=TjEwWLkqsGztU_CMca&Q~5s z@7}^KHRwP`!X{VuH@O+-O~L2R(8!YzYq}FP%U>agZb@MeyWzYkTH*@k72FJ-IN{RT zHTo{@pfBG&{6p~RS{G<34kl7ES{Ds@g4@;dXEFunQ&zhOt16y4>udj>jSZA~5oAg^ z@m#Xvsazlh`Y~_7E)xb~!9H3Gi4M$= z3=MCk3TBvv_6UYK29M#KyhDk9f2)`9mXGA#v%Tn%gU;6w6hDI9@5l;Suyc-;j}MQ18;~|BiMI zNBwnPSf^l8%}b<=(fuDI{d&s#m%fv1*gKM&prurGGo~3S#>pA*Fm&Cfv9DO!sXLUO|y$mALbC2l`AVVKqRuZ8c z3`f=r&nW6`Vk#{Tp+Ofv&t96NdN|A?1N@0u!o+yZP+Q(><|}#A|6-(@7vpAuF8+wc z<%aN4II)Dy+8I(5H+oY$;REUPBqVB0mKiaD}R2!-*K*Zd0QP@4*W8^-rhwTonq5` z6!)GzT%F@NY1N{kaj0fib$a>4L zIGSKl7x?yl+Q;Tns&AgYG=ccz)&3jT!* z7|9dsc*^ZhLlwDp7img(``9uZ7-OLpl&`dl2x>=@%QA z-og9C%xe3h-N%+fFeN)Pfekrdk)9uN(4`SVh4t)W^AOSa)oxzZW0QRQ98^|p$A-;NJ<^NH$b!n=Ak4A-QFzI1)4 zkc2$>bL)pB-NEF0TSfkF!9Qdk9+cEj`2Q6a|6%mu^Sj$3YOa4PmM@&GjJC&E2>yDHsba<3?V3H^0NZE(*;;{yJyJ@ ziR_7SMu-jP1E9hFQNwZdrQkEavZUtaxQ-%p#n2wzTQsZ?tV9Ysh0T69ofU zWGl7*9mXJ~N>m{MRE@xqL{h9n%6uJc&a!oRy#e@%e_Zt#Y-NL2y;8}W^ZKsxd7HB4 zdzQETJ+xHw7c&bw=>YZH)O{=mm#!QhF{?IT2|Mz}r!TziP+6S#$okk0uHCB0kl8|9 zN}vA{w=K7gi`Gv9FrCEKsJ1oOWc_A@#=GMaJ;01>=8fw-vIuozdjs{?x-J+P>LSdc8>KU`_vWIEHtA9UJb@z`wQvWYv68pjLi5w zD%IQ5=)!zc_-M68$wWsxu7U|?2!G%NIoz3wk(j@eP}0!)%8R4U3P+T+c9uyj5dt0c z{MI0(V1(xAHPiPp87}bW^TX40Jz|9ITy)<#V7&Sbf4_cf7<|P78B3yMntVMjF*+(# zt~F?j^rSfb{-S9}l%%av^2Aziq~v?|>edv0HNX5aTVmsdZv3oeCuAoSyZ-^HW(bZ0 zJ@d1?caDWoxF}WVNC=P9M4(gM`q4uW*`19+e6Mg7#N(7@v2fh|n%y{FVI5-Q>@!^W zl)zMf%JAGG+8~;Wh_m%MebO_7{OCbO9>b7#GWT56M zOks^*>JR#CHx@0T7|B(S1|Gj~`n7^(K@g5?_2+e3TZsDkRq{Eb?vVp5r-T68Yuez1 z<21A-nJ_Tx%+C15lW0~rrKCL7%q4J=`#d%KLgMA|(XfMBy56fT&_|zys%OWm?)Np| zF+T>Y<^sH?U~gdSbCdR!Cvm#U^BqR=pT6Y_E9zlC$L_6F&r+SY!_RfC5XY1$(Ug2v zOR~~X$Y`o)o&H(q9F%vIit0qT^_anXT62|kda_E>rhFnTnW)gD<#%5~yV+vD|Lar7 zy>8OdO2R=(&3KZPlk8{q!c2!bs5^voW9eUj=Zsn^CWl4A1F{dEekvKe1qfWzqQI;+ za+xct;hxRNX*jAYu002Zn5;$)EC>^07oGJB+mnt2$&XC7j z{}8bdGK6SHyOj&P^frtk)ynEfJandjQmd1-DeNF+qa!7c zdPU+p3zrxRX~2lRqvG|QV`%uDM#;&x%C=IFwOMTK$Mx@X!vz*@iv&Wc>0&>JymKim zu11RERc9l96ZgM2Bhc~T821}nJwe6{2T(h$t?@QExs0(vYViS1)ag-}yl=fJgDYU*0UHEyJ|XB?*tyiLcihG}b2Qv!LAmlViwE7wjkc^WAX>^F=-^&lWU-?s(5r6G`7r*c~kbAr_8QOVlIs zf=!;EL}PF$QsH{g(qFq})_G(Sh4h~F8N(@BL^|ZVw;OYr^azR8)%qui$LON0TJ@+* z%F<`#rFC^1-YrG*nBi{aVj`Wnuq%?fkAdSfsq2ZzGV1iwQo7hDcG~+`CkvP5MS8lF z^EZAU_elzDM9BAt6`xi-$Qa2q7JGmkwiYe{(T)`at3I)4R3GAe~tf z=wi(C#;@Ya;U);3sFadU!ZSP=t z$lkM+wI8z{IZlqf4TNWUE(gq25xTDNqb*xx-aId*fGh zI{L679_wkcDI9XNMhchpAh|=nFK;N2S`V@R2HZvnu~xMDd?=v$+&l3NL{^OU!HkzX zX5y5<6fQ}cmp!4=jXiT4gDkOe6ocuXBsdQroN>|uv2Ut&NLI^O<6~vNG|l~jKJ)nr z{*%chcauLi8}uV*Lv(PK?h}EjR((+;f`{Z6H4&M#%qxls(#mRNXwy>b z7#};m=|)KA!S@=Uj+O~kUyImvCrNky1gLs*`7)i&Rb#d^CW26gTZHl1hdHrpU|O!$ zxvB|DYoj7;6CZhO=lO`1R4Uxmeh(`M3voY2xTkK}3oz2={ahBmq_{Zk zs>CxBYO(f|X?hBMzr}bUxs1dA7KD$+Tw@^P5U( z8-q*Eit72vl?k=A74cn+ zjgMU{6mpOw!2Wf5O*-=(8Dt0-^T@I`-DWSU<+JsgUvum_nQD>Zu_E@$kX=iC`-o<_ z6KZ`gqD+B=4l3rWVATT&zxxTOE#>J%i`w?!OYMcF_)43SRE+}5@~DdK)6-=2C(dbk z%!BWInJmc`{NoXvz9lOk;{*zS3B0m7J)#Fva z`!3Uj>N0$TUHRn}4C+K9-%LovbXPeJ?bF-XpL4GfMGORi10!sM^sI=N#&~RsXmt6d z!k3d%!kxI6eZok-sd+?UQY0yq<)ji87xC(hxdoOo^fmX~TJOu$Ux28nO`Mb)kEaCQR9Mg}L% z90UwF&Mv14fIDb4?wvpaj(eF1_E3Tk0VV5 zT9y}wmvr1)AhV+gR>BA~3^`kt@ZK4$R^^YRkKPn;oG9x7LKdCx=5V zHjK^v$&_z_Q|n`PynkJ)#K2E$^lP3EWYH$WT_`JV6Uzu17*{I$rYuW6j?+?=J58`M zXywc6Wh_>MH*gjkjm=Q8hdvL6&gAR}=)x;ZbN#shTQNCG?jvG!mqO03DExTkMg- zLRzM(o8hrK;K%dYvAn&qmn0KnsjiJKR~4JcVGD^D$&aMSPLQch&+Kj5*OMu_N~7pFVv|Rv*WK{F#eqQPU%+F4ccI+z_k>2WPH-dP_qZfS+6XPFxpk~BpmYM6 zGCtvELgVCkxabV!5h7z61_z`^MAZs>8iy^kn!xPoA34lvO!7?Hc7Z>TJyzg<*0@Q; zFL!-($aDKP$+dbSX+!Z#9HW-sY|$MqlQvk z!JOJlREw`1#)T1|#|Iu4I<+khLs-sd(hs^t%84v%KDs1k^3^Z~Wl=lkN3cpE?2udC zSsdEp0}fvh;}0>v*BXa*Tdo70Cg)fCI?(irGLv)b2ze zyMK6f`CCXkyztrMbB5^p7l zn7~WJc}_Gt%$uGi*LpQdUiYe67>n}6{tItGz6_FnWmWsC7&<{Y!zojuc|FF!LhaGR z;1uvr4ze!JF6NYPwL3c&l|1?knLJRSxl9?EVM)uKB3pVdKl-vwG&X683~ruQJzg`7 zki3!)c~l7%4uIfU!Z$>y#o7bmDZHQqLX=5gqS>=nTrA~X$OTGPY(MQDs%Fb-Vb(t6 zu3+c75nZ4`K*=IvDz@&3KS0B+6O^s-PfPg}&C8h&zpc|DOu&2w&Gdn3*%PD10E)*r znsJe|a5H^I@3K^X=Wi6TQXv%Y;&R7DAUK267vAc=6o5v&n7)krXv17IR^e(bQ(A^Q zb@?|r1qvn38>dq#=gM4-R>NUq8&ulee>Z4oR>XTfI5I?o{Uz4ZVe+bLfpDhEn0nRR_CB-T2P+@F|fX0 zPA2VEC4`i-8d3b9fPJBm(tKj(G-hgYue%sYC@JnVG-(=9k&Y=E&ERBBw>&(NHojSD zjvf4v6gmDcr{%P^MeTCR0xMF{Mr;j5Y&Bn`U&Y6W0<_bioV}^Ts-76?f~jA;4B1oV z>A@C#Vk)F;NaYEyevu@576yrM{SnOh4qK&MP1n>gY}oERTzI?Zd>7xi_Xyped{A$Br;i2%&R8cq0Bc7VOv5e7FZQvy zhpgZG8zfWw-*3+r=Z^j!FC|O3D2pD~kw6`8mUEOB$vW6zX<$oPQ7xeZ_tX{l?P{cs zloOZGg`wb%%m2*B)Ovp`eiy&553wu3;HGF*mk6j7(kep+uh}zM^T`7xWW2+o%C-0_JwgKrovSB8%BobW8 zOg=ZR#Pb2xmax6N#TB+0&+`U^Oo_xFJ&W>KP zv*uV*J+&%MSJkrhqLzI0YiKv8OiBPS@X(rm2NFKQz5~`9zO)BFFm?Z24UcErUJ~f~ z(RzzhV6)#wwPg6})hG>|DR5QF_}j3AKDd%AaJ%XZdN|>iK2kNIG!q) z<&qt6`F!3>eyha79LL4i;qHg>3kZ)alzUcz?1j4KOlIFwti;Uz99(iph z4?UIBsxjYSMbL*<+H)j#k&v~kKL2a5%>Ml17-X`2x8=$N5&Fb!O#-Gy5E>{#UUE8b z5j}V<;e_V=X^=a5@LG`{34lYp5G@9kcG>qXq>dgTejI+X7};d|!^>9rBA}D~72Il6 zyLgTT-S@P*CQcOkcHylt>R(~!clvh&)Z}25K5KPBeKV({D{>)U2TM3J#k#U|xXO0! zolT^v-N+i=CYVyU6OSWgLtM*}cN=In&c@?1-i@mR5xNRq zDXSU*nIFWorr~|W`DUh9zs><~oVc?a2Iqj4)&lG>LFi>28X<+>BIE}z>JuO|(pJdY zHNy(EmX&hZmL^z1(-;>>^$r&lB7fj1eL$iNTM71Z`8XWdxDrT3VaEcH+v9pqD_Rse za#(_hcjIt?Etb5d(_A`cA^!aI~A(L zy>qprviy-N&(94=NLRgd&$GV4kBty90?`(Tm`OoC>(zJ?VzK-^*J=99?gMFq?yxxD z^NNf0SxlOCbqL=xFUb0g6NVP^J=4N!t5dX_OWUIj_F^8SALn<^!=G6bd-$e0SY7OP zh?~MrmJefLH4VL-PHs;jx*z{5eKet$w*+tHkX@T_Y(V#GN(Fl7$4m}r46+)O6I@B( z;rQyXhU=nfJ_5a)3}|_9er>pW$T09K_Tgi?E<4ZuS*P{yfphWfEmVqtO5)+OgH>Dg z=o{gaB9up9KNrE3W>+l{WIt}6vs4)rI~vCm7oyV7bq~*#9Y5f`eSE~(7v*!`@%EVc zcGKYVIMR`n-Y^puUJO`0{o@PtoyCo<`46S`c6fK9 zi2NV=$-Bz3WyNRtf1DM^6yVokqlo1+5Yh5Cj9Jv^As4Of z?qcpWDqW@@c@mYr*FxT5O_yC51$-Xovv;hl90e%GVyCU-UwIBD(R)? z4!g@Kvl~yuLL`n>=L48i=ZLbl4Z#GaV7I4+;GW3ZR)HfqGq5YL*vSaUfLTZG9Yj9y zToaZ0aGNs|xDm&CHG~oYN><{vua$SL_RR%k#A1_=it{ZdOtKCo)1|t`+K`_7uY>+q zRg#=PV)dUGCrs?bF$uU~nb>2BDAO`SN5;QocDw~s<|fa~l-K~fUPm{1Ui&Zq7Y*fu zp_TuQCCbBJjzs39FNsZ|Wc=|X>jpKx^8Qujj*QRNy!Af~LvtOQo~?;&nb;#s^ioxb_8xn7H-_7Mo}p^*}h7tFj%j&KB6g zSlP^NfK8H&N}~gk)2eI`mXTvzLkW2gBKI{YViOm*FAykJm3>C?>WhsyaGv^;)0r95 z_<*zeQvxfU-NHov4j->Gqqd<$VhlD6LC>w(Yl{0L@%O(Hb{tJl&T1-(mHs_BjmS7% zet$yyh#c}BLB`qCr8qM{|4XUvI$go%1Xd39@cg3|$P8pAzo38R8ekiP;?g9mGqekh z)@t5)4#57_N-MTvwwJ-(DnCwBPFhY_z zp!vn7lmdrq3F=|e?jv~Bx6Z5ZRI!p9Bn%?i1){Qr@?swv|rEeY`-cEythT# zzQ>?&qHMiUm>0qUPjC>#qe{q}fmr`32P*XYtv+976VcPq9zg+qUpUV;lu`N=HD(Nk z<1O9dIjWonEw?2iz^~9+bhA#{Q&94%7UxIMteMt=(+h5zrj)b<0o&c6f$h8$iYU8iq2p>Sht)Bji!(fVDQIv;P4l_ACfikU#T@R8KC z-CiX-Jmx~u;2lHtH%`4yzhe@TA{YX!T0=48ib?m*Q&6ct&lj8Tn8XSZD@hi zVwAm0gJ-RKr*!~J|DySi;-d&Z&k^zGxjeCi!()nA`1apiIcq1t-;w#A9)+6fTpjl2 zGf$)OP5ArwyrXj_jmi&RZr^k|1-d*#j9w60e`lWnIyYPIY#aFWJDJDMhXVq9xnTQM zR0He1(4U;oPwPeWr)p2YLUX_!RxW+XP+^LbSx4p`O}?ta5)Ry3U{F=TY!#M$o9-O5 z{n)%mIuDo{aYI>iZNmsHS8fw3VpTtPk??Qz->>zY(ShPZ{0*yMwpo$E z>-N_s34L;Gh8zAZW z-FvcFv3$cP9S_ndtns3lU#Po7^)iw=Y_-aAMn_(N2qiJj z0&fxTfhP>oyo323E!_6B_w^S6df!w(Xeudjy4Pn+RE*fiiuD`N_vAM-hCj0Us{qoM z)VCHqIORa?6XR-?`R*3u21$#=+5eio^?m0q&rDjkYmz(MpOszK4vXuip&zokq6f&a z@0!2KJc59LB<9wx(DBwVKIPe-v*#zDw*iB2Q^<>Tsh{*#*NPDtcLpU5bW(2;g+kil4n1(fk$;Z8fTvZjj5TRiDdhD2 zwOKgh6(4H%UAl)g(z>?E)7T8hwhqU5;j(Egdp z(5UR+nQ&n&3lP^yW{gc_H7H1@CnfJj5 z_b^U_IR_$q?yI8rCB|{WVn87Qa%(LW)-QT(%6m8sk>iJqeB<;3i=T%_uO9k~S^opy zm{)}}MHp8{uO|6zB(u4x()e;#xHB=wmQ-z1#sdUg2)rWr!QY#bMgI!8sCh*|W)yDS z*wy%!_kv?Z;!{u5&KxkJ#TPA05p4fP8pn@*lm1W+#NnI@&L5e<910r-{HyQy`_n~w z?og}b7iGjKjd4Vc!BtYyw&aZPCn&!z6ZoKoK7rLssdvik?2fpW8Fbbc8QB2!Zt>jb zbG`Ah-Wd%Sz3Uy$)P3nH^=ndB9PMt>MijG|(2;T~>ABn805vzaB0rd6ZK;V`@vQ=Zm?@@o-8v^+NpYNX~pZp7^pt zSDHFVH|o(kRo_QhNXapUbcxwSgJ{&-n8v=;ivP!-LW2!^b-T#%Bae;XSwp4g>6%qn zQIs*=o7?+^Dj8heP5*965nurBrTa!DjDNVDQTyTeB9Dl?=EJe(xyNBogbV;Wd zO1g+>(!ToXr|zzdTHMB|tOoiUBUFqF6{!kGTtb}NO0VbDF+D)3^%dUXb_45r;7Ru8 zOP>=mPfIBMN%g>}7`C-YaAwEI`LfGr?n48GO3r6(QY9Ht5O-^rVTNDb(%8EBeG44f zjVz=z%(5&@Tcf4}vr6HOHQ_y;KT1et?&~V1Q(Wn+%PnR9df!69@{$FeY1TjV+v$#c z!wAO>hQ5eLO$mrf)orRpMaVNi`Y%Z}yY?sdvM6nxf(|uFcL~sEraT=c(~Rp2``{o4eTQ%_2y}S8Axo@?vHtzT@ zpt3~GUM*rbieasTMS<~{2?y=) zogJDR$54UsWfckjK?~n>YaCFGaa0R~6y@=*xHZXBjl+b|ly={5Nu05-K-D{}FUr># ztsN8jKmqx^$v4xFqzLEY-)0N^MEm^)?Kyi5^`jbCwpIrG2BSE8Hv{}y6_5ciqG+mb zE5NuupuR^7i&WFSUnGIFL6GFlRX8-7W@KQuApYiMkm`e%>D-hGZvv1y1A&WJ2}jsg zz&yQH|Hpd75=&R2N!R_~ytgGnE4Hh#>w}@xrkG7{$62pXj25{8w*)aKI*CV!`dj`N z)e46Xq>!|sP7#5l4wC@S8^{`22ns68!@XAvwhJH)E5NTTyFQAXRB7HY%GKuTAegn4#mqpjbe(csXlY=c#lKEG3h_OKP`nl zlUs6aL?0Ja@U7PR1iS?3pmtJ4ng<9**N1lJ!IismTc1Y8yki|UsazyHx1SR(f4n_f zs5~d>$sCf^Zcz{MBny^L}HQUpW_f&BxYVrN-_9p{`9C#PfhukO@#Du!$W#Rx&3E6D= zqnT*t%r8TX^Qgs=lPl01w-4HC3y#>cJjoi>^T5l5T*UW+r;q4d1^s0J&W-brbL0{8 z_0Xq9_p7tF%(vGOpV!%7I!^gI*5*HRMrvZ0mJPU4Af{nohZcY#uQXyT-2OO`SF}=V zn7rst-;UyA&5b@GJKMAs?gPg_#`B^o8%9Xxuk4@|XDXcZvdf&{CenG=!SG)OKJ}fU z##`okYoFMldVj@qm!;6JILnTss0ehQ7pqwvB_z)*>Wd`2e?Z&BbSI^l^?n=)>=fv3 zjuScIp_5Jchui>+_k(Ttl&J7iH`o^$(&Ao)oPoDo?N?pniT4(ohLYn-*?2#nm_cz%I5xf2w?1~OPhW3 zwg1jHgkYvKwNv}+ChGv7PYA(jr%;EsGK>Iwh7eqLF1Kmx!H5R85Q6(ok5+9UjJN}Z z5Im*vfokr%DI)ClV;CO=*lL!11by_(D{4&X>mr3obE8G#=;*-D+u2ky`(W1#KK9x6 zo&lvav_-BLc!0~#`Fj6DuOfLTO_yTZUEM2}vBFWf5yA8v3O7tXLSCWT`#K?Z7KL&6zwQ6-uI;6-(P80{n%nKNo{#C7|h=iV0 zbf=URsy0fQbkL=GS0ux>xvMZP<>1-%6~v6;M(PLl`E=bnc4hq^ zo^tv>yl6eK%>L$KD*^%o+~>WSZh+9<8t?`u?HWp{Ed-N+EToocO;Dt&xB|$GU-6Rg z>rh8X-~4;?m~OtsnYk~;A}6i>6U$UhemCHkL^fzwH`k)eJgs)(d;12<*M!lq&(9LqWy=fmlY@|Fm7dkt6=p87!%Li!o^_bg5Vy8-~kr!SDkxDZg%_L z)jP0vMK}T+kLX%YVB!>bUHZmwePG&l@Ij(5PXPbs2KG0A&UU?t@u;HNw(#`Iif!2J zr#z}M5`4mXQR8gEr2ENi`AjDRzT*;@@`d(z%h4sD)a|xV#WUa!K+l#B(1<+H&-@MySj8A-W@!Zj+hupyAx9e>(B(OUmr9EomE~!G@8V}5VP6J0GYjch?=f)Zb^-d zS-b^)3b=9z#dyN{$ zES*Zkk`xr2?#zZa0&H(k$ID&~dF4k}=Na3m+GnYR8y@`^|L}kf3a`EQHGIxj4sp$$ z=2zU(r`opsak}>u-=0|vPFugbwbS(0p=FZ2Yyv~#gw9ml>4BMIo~KtqHGQh5t&*f^ z6E?5sO`}v}2?|YDIQd`+@I%iYs}H~K*WEFuxGv1)9o)>+=S?7Ed@ONgSkq=~(`H)J zsmH=(6arQ?jDQWS>P0}=M-<+G%Ov`RGV%fP7b}zUPU72 zlVcui+2B(F$OEoG)lTf^i!xuFI)Uq{W9j*vh=yPXN1~|xK}Cyj3E7Wc%iYsQ%(<6h zknq=HCL6KF*KU>@{|;V+wH$1~WsypX;yXm}1reBDs|Bf1p0{?@I9| zoqkK4#4P79VEzxp+^I(5UtrC7MN;k{@!H3|WVTi&>%)+p-ajqWm0mRfQ_jKGUu zAKQhj61z1rQ4SGhLoW$R+fgn{R9Xn@U%4j?u$TKz#jvk6dq7ph;1Bz_%)7d2t7jkf zD*{i9&&sT_IuL=xUBob8l{ghK`(gj=_fmeXONs9*P7$E@a{J9!SU8N;1 zN5uDatP*g1Tl)KTtO!uswyg#K;v0T(>VH9mvws%0B(?ma3IF1i4VtW9W6J7ayMF?< zX@2!FsLTL$z#yNNl92v?aK>jTg5dqcI`*q*s>S;Wss)(o(CjvUzuLmI^Q*vAbc67o zkshBUPgK#p5njA<);0eh)PBYSwe0Pv1L9M{vBnPylSMu}Br9cT_5ri@jdlt68n2|m z4Fj9mNkZx1Pb1GI^eZ=wUFl-YB^4>|B@n(|d7jjRh&9254Q7(`V$#{X3S;T!$#8fq z{qDj<6R*;{38jT_yYasw9mWsNyc;Os$sJo>pLb(|Vgd9o!WBx`po{4dlX^T6C;U{I zIk)O`;YXp`ut-zAe(uP~f!sfO-&+`U`7$ZcqZe6a?l<@-UJh}QpV+;cRROv0yA4pu z(#(`B5}SQ(D*DZdXAj~0iFw?c(wY*Dc|F7Qu?){+#M(TIwy|#kug9Gh*B;FWc>bBj zmriQn(yms_wt_mutS)+cd#y2YeOnowI-+0yP?nz2$;l&_R=l3pKXv^r6q2o^X zEOtYxnoY7>nxFZY97ybHGO5q zJT@N$DuEd)n`-vXznX}v?)YEW`t9jRIbgL9kgHuzU3=M%-362K z5gdO0G~=u}_R2kz^^wjs8Wb_LeQRxH8u;BVhL5Ci9)laQN*S!0Gxq7Z<Y)m6beGrN|QC4L1UGxBED@BK70Z|3pg1_n`H`5Wj62+uJ=IFLahlw#^TNp$-o2z z`kytsCdreft2oBj2UiMYu)O`6s1^ufGiPqDj?sOv0&RZ(At$5$vY{18@*KudHG}=A zEp^Fz5)@A9%=MbZaURdV^`6x5n?L}M50*8*R_8u@AF@vvpzfcF2T?%~CI=k2-rt|Y zbe5Q06>}8f*MC~z53?e`3;45Yq~kA@g_*DsB<)dYAu^&()?iO#rSUx1g*-Y-$`uA|~10q>ChB~!Dczr%(=EwGsv~&MGtIHob>avKl zE|i6Ss}O?YsB@d8f{Z5DdT(}=yysvh{H#DhMII7F<(8b*V*GN;K&gEv=Mw>@8L@8E zj;@_M*Iv`3)(FHuJBz=`R>B<^eYi)7vt^!3^@#n|{k$IuMDN23tkwws5&&3ubck+) zyT(b%aUQoF=tK87y{f6HGy|*s2w=nBUsYmj$d&RnE_AZ4hJrjV*8kD6Lzi~>uhZW0L>ly}T`ryN{iSUbunF48^1lD-dlP?5B}CJ6?!Zz+a_kXu zJWq1$9!5og6*=|r1@X}9;X8jSyMHJl0|M{+&Hi>~i(U2jD8c*8T$l8dxSX0to`ZjR zEHOIYBH`flBuhNQ-Yc+ZcyN~z_k#fWM~cEG3Az{Z42yU__KfEhN~&6M3ZJ;`B7dxm zm?5=Q&rRO>T+^1p)ZcSHIj9vTmV)3>v^EX9IYC)L^56bFKu0uis-T@??t$1ralq(T~{Rk#y*@5IAemFsHPWjaQ-$S3Kvs&Rvw%X@bfd%2LTO?%=o(2 zWYGrfZ}JJl@CC_NLl`Du55z14w_IZ|<;8k#XOg6@ozfmSf8lgVulo-XOTRzKMQBZ% zt5_wXC^@6ED_cyU_1ov7h69SJo$Xswaqj-IA($Pp7c?6qxN7R^2)7KR*guSHcZ3(VdY z|8~PEIC7R4v)!u|HTE;_+zZTG%}}^+@Q{?h2;5n1hgU4s7Rf1gm7qM!V)W{UTn5)~ zVavAp*GDw8=oj%#XtjRo1J5kvIDM>lmFPbESZ_7S_YTm?GnXPXp5Tdi)2C}<>qD~? z1E%dM+iZy4jB%nJDDzzybb#ep+@1TqVvrm#fI~f6=FkLw5h6YD{5)Rv$=x0n;i8@_ z+k8C82=^0>{#DK6jEh`}H%Tw2P!NANo9=W9s*=4sJzWYFA>$v@kPpU$Hff&J`5ex zUg&Tr@kt0QG47Q{8gg+)fFD^{FFkb`+hViB9HjL0Z0AQtMWJFuhUHfg{{UtYCMApM zsN*@!cK^nQQ-qE%Gzvo9-06gdH?dpmH!A{<-@UBtB zaBDEHH-B<3y2kI4Igi6Z=n{bQ3ENu6rxSgnn=&lw*{0tU2w~%jX{5ZEts3zP3h_2%RR8hYH_6zv`dKd0mWO&)rG_yfT zMi-|BDe8{E3uC+@=6EcAB&Ldul)Y<2p}TU(@cgl8v>?;%c}!1bg48HM^}@)tvn~1% zY%UCE#V&jZ`$n5lpO;dVT1e&(fz9eCf4A^!E!zodBwxS0pEaru_J3`NUE=V9B?0HAc zN9m>Rkg(UfwYOF5;IA~$?9@oK%Tv^tmKB7pxew_r#zg-#8~_Yk_BrSKW8ro^Rvior ztq?8G6Xfhh2ua(-tI=>J@Jy8bVA-Msmol5?Za9>X{8tdu$i<_s?)qwZ83@lMtBWpsdFqdH7;CVs&C}l(DgA zCI~s_(^!kJI$r*YMtq+I-$>bYC57|*t|vY>ePBW3fv`UK6%J+zmBYUvh30jNA=29l zdRHtto)yPQIK9XX*V`8O*0)vs{~W4dAMt<8rsPD1HU@uhf}}Kr+;J}dTo{wSwRd)L z^~>c-c3J<&)PF-;X8W$u&I2A6(eZRa+>lsq35}iXs%?fHz(*7HE7Zn8+Jk%MfFWah zj>|%Qv^~}W0*^|JRn*Yynr~iJA-U3g zCP;%mIaW#gNx@ZFb>yAX!pJs$w_Jn*0*o0O90-J-?ljU-Tcl2*Fx*Qy(0Z2LRoc1H zDm}}8n&S)M>GI3iawRddZjEdE5?jHEPOa~hP0cWN++~xm>W@9O_JxHsH0jy|MAwAP zQ4n-DNwmQAy~$U8J(Z!C`gS;j%ngo@U!-BgOYfl_3qUrFQpGn%y-^H1H=l{l$qrQE>*yV_YLcj1E z*|KxG27ZJCD~;8@rNA{tqx$XonO0Ugf@9+v)hRmoPr{rdoYKMH2VJKOA4{cj&orBX zE^m8o7PW{KnSsyA>mYKk9|ZoGcPgK#5+?`Zn7rUvn-?7z2yAhc&g1CAgD1jAgufWb z$o&Y#-YoMf*m^b*PNO~d3=KYMtRvgv=w2jau{P7@6npei z#XGNxhw6K>adg>8^)Kk4e)SQ+h;wp&u z)Lmb3ec=4SO_lTcHs7X$&(yO;KSi2vG%0j1t2SKFKyGzKo9btM)kEHMuE0NN*ok~L zUQf*ky$wW_Vf)JQiQV9kx0k^syWRXCpI4bd0#MN~a&P1@AZV}UKEHSL+#`u2S@iKt z(lDVaaUkP8!O&~g3_}2Z%F%)AnVd58X&Z?a$zl3#Abi$fFe@BCQGC8ulr(25#!8Ov zmuY*omYywi`2Z5|*yS_b3IuR? zotNva4!Wh^v(!2?)jJ$EPAH0hOl)mhr|d)c8k{>*2yzB|j8~-V#DZeijL|X@l?Cu$ z&fS`DfcEtQi=4#fTn3WSr3Z~GAeD`xl2+NFN4XRx5Mus{%tL8}@;Sw~)dXo$K-2U6 z3~;A}T>ZH@jk2|di9Pqr%=XVUhHlhPc_)ztk%zbhztK4Dqp5TZuq(+R3i~Bzhl6rB zbmQI!)4T4J9g|Qv>W0pm=GFEeAr`ZW1KP6UTwm;bh={+&|7KM!_++V;$7;O(8li?M zJoiT+K25(aiz*THd8svh2DK#how6IS{G_oP{nO60SFX_~EX{y8CmYdTXOGHaS32%# zB__TwK>WLif6bAX`b!5v`bC*hO6ALi`u@Kx)N3p8hyQ8hPNkH2&y>5oxBxZ13S%Dx zHae=$b8Vd}S;pGcoYRkBbHEAK=`;3hO%kYh){w3&`|D9p3Df`|RXA=&Dw>-zJ=Dl&6!Sz#)z?UO)oaP}X=rxEME~Uy-$?pP0tOc_9-V25NG=JF&aJ7ICY~vef|n_uv^YbdHmzu=VXr+;^K|)$UQjqSUhekT2JEdzty1N9V zkrsRoet-AQZA*yU=I0Jjr<(KQZG&!tiP|So z&{2T+k7|!S>mAjuj6xrSRz^vWK>^)8=^BHMMWK&F$DYZKLt~=+$GaE|ht>>ZU?Qq5 z>T||biphvwW=mP^!(TbliH9j2k9!y&MxY=;bqNZ<^I!yc@^kPBi=H<&|Nm39Ui)qP?NQ=2dNgCK(s2Ya@zgbF57<3R7ZSavU3~JK+I* zbdy!Wyd8^QCTR0GOk&VYhV#{K908m#{02nC({O8R6rRIw@v z8s4`Hu#vI@($^1_w_wLnUoJWg>;UrGP=DgWcWkIWl5fgDm+P?r{}YBG*qKeoE!b+R zfeX08fxcl0ATCTEsxvhEJ_%f38pSRhIJ%!Yu(ZB`Jn6hNFk2B~1?bDLr-kUN|A;-n zE#7nU+D{94fX+mp|0n$;_s0LknX&Am97>*3D4Ko5221TJ@5^QzHC;9oMR{zkR^f* zg#TmX{;~f6IrrGU!Y0$vFhC2i1x>O0k5zIe7Ip0Lg+IE2D4?o~X*Pmx;NpW}E5?6* zBfHB$)?38DBwGNf+&%D@^RxGd0cK^tV4%`i8gR_+flzQTP&FnPoPRLv2cy9Z`V!n% z#5y}6VKy0Wb3ik;E6?)@-|{1U%B$e!#u#O4sFi;I)-!NjX%692gq~InxF^ z*>t=a9&P0>d4Ul8osaZs(!n@QF-mmM(6kCV`ml!yNW{eCz_mKjZ9285;5B%?1kSY=fPflDlycc3M^Sv^)n^AVFx4 z{?J-rUwyIV0=}>-f7lD~&ry3p;Hj3b!reyy|2qdm7aPD+YOlgBI`G(D0_@ zVAYNJNyRwuaw+^P(Ul87fjL{hERiyIkT;gNm6{5AgUA4Sn_2`}P>pJ^I!`z!9lT z5#!S3w9N!5vuh9je2D8Ef5;2)W@!!Gru^fW&(W~QF?h<5M-G1(Vth+H=pV_wj>dF_ z%JM8n_QCSzjfwkhM8IIAO>Yiu?0zthSt%u9pkghZXJUg((gDwSWVt@W9CziQqDaR_ zu!)U&D|fo*O-ix1#T$qp)2V7 zR^0!9MfI1JfOjYgP-pN|96-%DPj{7}7d&ML{sElh0DA?nT{)bDzm%aj_iWcaYo;Fe z=_4bE-ppVTGYAu@=?Zp`+?q_&&WsKL)XZikiy;A6NF7%bj9y?8ltZgDp?`=;0H`rf zUjw+Oxc3NuG^DmGxZ+-6&-DiQhd*cP7bC%QloJO%bL; zof0=1+!om_i!kc#$cB~EjlSKOu2^9L?J4hdf9WgF=2p*{slaD(+;5?F;PttJ3`%Bs4j{h3(U1=1QyBtl{!9ZDHdnhT-869D%| zc55QcdL@ftm2?OV$ZW-TmYBWwdc-;|Y$c&=O|LME!9%tx9YwIJ`So(ZbPg#Ag*3gw zE(QSoJ(%PY95M;UC+2&xW)DnN_})0k-vRR-h`#wPuVRgh3<5PKY5yvFRBo z7W#GZNr)VH^x#o11YvO@VG`3ag%txd3w1QC6{zLA=!tatBCtUDCjeOh3l{+U0n~$UxB99y7{V|U{27%xtZ8nSa{PbWb`F?(>BTi(%RQB zAIluV8FO%Mqr4VY0_2Lj1Rnyq=v(`m=Bq42IC&1w%?#GUCV*T?m#sO#Xk`YBR%SFI ztbkyg$w?lJxvhW(y1N2KrrJw@)B{AQ@t$kG#QO{LJf^%`eLz=vG_1Y@es+k8;{Y8G zD}DzPAEMCN9FK>g|36ke5lnuFa%PS>9tK#-dv*-KCW2oaD*n>~Ea@TYH^Y54yZaJ; zlgQr@v;@R>L+!G1sHb$9W@Q1@IX9s40T6_TM^DH{q*)BCWe5Jx0ZswvPZq8{qv# zOu~Iuz#j{fFl?7mxUYy&7?wmVhh<_S9rM{=i-$5Q(w~PmD&n3De=?V$dck8Z{~sae z`A?LgN;@4$6@6JdkRvKk3vdEvp{dQuxJWQ#8G}?FtiO0Rn%VKh>OVCOvI0Vr9rpCI z89L(1EqoZLpMsp0C(t`a3Sf%|DIjSyX^7GN{*z zv4g5OHP}7J7Q9_i6e5xM7RnXL1;vjX(b`z?0)ay)npGqr2)~Pv5D3qa7$yRWw!}ym z-1q$kf= zk+2H}ULv@=lx9_RV}_Vb4;a7v{1p(UTIKf4j(b=j4(Uk!_J6BY2A(}EReprA7Jg_j zQ4<<3)NF>>p9b9iFY7chL@)GDBU+FGLjPYqzwYaC|5s1heLYtnF)$OsZKdCVdj1E# zZFSTo~xWp)IF(C(kYd z6MoaBWzpZljz)oN`}#dFCwW(!QHP1Y19n0*?6b1q=!6YATA0GgDp?Nw1q^>I#*+=p zvR@1o2;I^j>WGH56zhzt?_NJ>X8+RJ``jy z^fj!nqgc+FK+cUnj022amWQo_2-2#GFM)Lx>(qk^0kssEv<&W05Q7f6Ww?@EQ=q?k zvaV1b`=|4meg@c*T!Qu>f9*XnU4XW>qKn9hQyBWCrFIb+yV0Z2gld> zgp0@N+c#is?~Do6GOb9=6>m0{`PsH-YayiTVke4BQO@RT72+!&AOCs1c!XS3fG>u_a zR#Kg2N7e)&L0{Bq`enbWGxf`^$ul*`qA4&n1koul70OBiT(5}&VDJlrwcaqu;rQMs zI{%U$%m1WL{}MPR);}9LmTzCn4V?KuN%)_{Aonln(E*e#Hw>2lB(W9t+SeOPUa_8m zuXC2X*8KxtLjWoKKB*Z}ECT+Y>Qr*q#__T-UeHZM4s}X66z^|&I2dqKf&WOq7zMzI z-HT!*0w(tc=#qYWM_^wQtM&|jh${x>3-Dp7k+D?HA~D-vW_(Lmj0nzq&9U^xA~9cU za95LGH!0$iR{15E=MW2I2wl@}UkmGNX4Up2K)Patae~iEX^y4MmWbI}A;8>c3lJfI zc>m+rY$13LD0qLe-n6@Df=akKc*dkid8ssDVk*g|3Kb*6kZ*p#dAPn*;;9N!8hb9Cu_j z-J}|@(A*pgS67LNDin<0quW)YzYTW3KR{Sg1WpSCV>jq_hagu;?!3SOg25;8rHJtB z6F<>B$4?SeZyR7gtcUsziEjpg-GO)+1F$>z#7~&p_oEoeB<*J~1ZC#=Z3UJ`e7)aD zP_!h6s6uw`Hxf$sP)qlF=y-733v- zQqG?X5R)={;HHFz#kB+~c1sT!bmpyrEy}WZZ4fon<>a+}^VZuqx@HIbHi7Is7taMc zNsu16NaHY6OW;ts^p-&qU^M71L zIYQ)5Cl3qc7B<85AGxsyxT|~dO8Y+@KGM^MiL}tu1_BT>8qyF?8w!9pt8(&O&7>Nb zoh)iM<2QKP>~cC@%|N7bP7uO@eH*4~IEcPpI374EN|6HkoH|7?m`zOJ1HQ1Q%@hsK zWnYfO#$ko8(q+L=|4g7$?+(CJ{hx{bkTC=>{oh>Cm~u=fC*INI za!fp@-Yd-il4xN$Ce>5#aydDsN+8hzAgA8ZmU2v>-`?e)02`2C$}&~{2J*==jR6v~ zEYk@f3Cl8p&b*`LWSMx*yjOJoCDE3$Opbu^lkBzvR?O#B1+2B;RfWef(EwMOw5os? zlL>G!1^2pgfUMOM!0r&=X&uk3@|+RHTD-YodM(LJ`Ww5GiaTJfvOIaxes_M2#=fay z<%nXO78KElDRJ0Wu_z! zzHwn?DGMyw&%W1G{~ZNX!kKdswlk~rE7Z=@yt{&?<_ z78`+q;fMtoj(Dy_U}q2vx$WqTvfGXHmwd_F!j`SE+Lk|z&w3j4?o;mjdSe?fJVbo$4Sa~m z>XiYA?Bj=sjNYCHh&0)tdm;;v-p3CRsj};BeZw~<9#F7I6doa1I4S}J7L3BXClLey z!6g9mMup>pIiqm#!R%2H&%mrvxc4L+56l>aiwCAZ3{zs2mR}-8YJ|o$a{||h%o1q` z9hmkIyO#hFc_FQOAC9>5Y4-V0Z*UD zDHu*wwj3e*9Svy>w-_nXPP|Slcq!dZRR>NFXE-YM_;?k5!Ywr43)Jm$Ecdt!SS{C9 zmFtKJ4xT=7($bF47OzQ7scCAL?mNjU zp2ZXm$$D$jdmxix$qUCYdj^fCDLVc)-Od^F;dIR?_KsVcHr~2RO||PS#G=j~>5QkT zS3F~For_q&K3k(#<+9P}H%JaDe(_0l8Czr8`$;U_A6)|`x~{pDwN=}i<*Q7j4stUYP%;)#%o{I5)WtL4u0oh4bgb7vlyabrdt6v9mHAwLY)v|9?(Wdno#(mI~2uM zMcpN@qj|a8Uyk~~s%d5{$kxim%%;#ZbmaTDe4-;f{+*7Cg-z~<^vSM)E%G}ur-BdZ z2;lua_=cj(Ju5IS@S`u0Nb(S(hC&w?+QT;lt@( znD#8+JgKmvjrOJ1avA458e?YMBa@aOugZ;XbD%2&Nuec)3 zZk{r!?R)KwnM;NRV=xX<-)cUs&=~&0dxV8$)j>sntCn7n&89PS zHokU|6Q2K}Nu;XSpVIn+%1C)mU^-t;f?p^joUy>o)Wt89zKT$>q%bQJh+>6K_~JSY zgSZWuX0#^wkts==OQgM%8l^l^o)_pBWQbBeI{Gq;Ni}uzs^T{W@D-|+Rpcxt$rMVt zyc{k*OUmb8<=aOJ5nU_T!N#Hr20n5`;Oh4|qf4J*C|E?Ijn#p1Cb7zpb|#UKx4nh8 zDt5til5oMgQ&<28a+Z{qX&{Y4KlLWym1q{>Cai9XmBB+lmWPunh`^cZUBPfacR>?| z0xb}4dvo$E=I*M;pRcdE%8c7I-aK1wrNHp}w2VqKqPoM9CBj--6>ViAs;0a0e#_(* zv`i?QwX*nxo3OdKzqdX64Sp07b15wZX{4`&LjMJWs}o_(wFj6JVNEepkaX$^VDb`G zcZMx7vE`CGFuo6(-hZnt$GgV?s_wjTdkcA=7;8v?Ik!60$poqv;T36bdZyXZS3xJP z1+x1gPco71;^*O3MIVZO2K>8N!ASj6<9+tE{+6@h_H7NO5IE(sLq?lw`^`ff+5-3fue9mfZO`2eS~-D zBJCjdu6?QOuZt75~RoyYP@NL`xH51?aG z3t7P(>jK;q?t9)3j)f>SJ zI@c?YRQ%{izGKcy)pZDIh|18uCZVONe@Aim;diC_mTB0u}XvMG})O+gg07 zhFM9}1|%w}e~82;FAXT2QBAiz-iT68YShuZ!XnVm<+5l5COZ~hPgs2eIRIJ8EMU&* zhloftrQTuzB&q)u3E+4a?L}HIT{eEoukGvf`?;e^9St^PVpy*@5-(#99Yc_wi3+Gx z*M_d)Pl*b93jp(`br9%2eGcw_=2MQunSMZvx;Jk$>6vUb57N5;X1*}sr0EsM&D{`rF~7Rjt@09&0X8RT5Pdh-ws%&Emy* zfw_KBSfRM{E8+Bzlr;%rEAJoH+U*-tXrc}KY zuJ@_1*MGY>ZshgO>gwB&{0uwaHWn@{>k*219EcP0e2mBLgX_|B{pXwo+XbvI!P4{p zizQ_8?#ucnp6<&Xd1YAts{v+iAo>#W#N{r_uI&v%N6V~dt|3U+Jnwe=H8K0CXCdcJ zN+Z=06?MUOGwVynf29E7Z=PX%lkjdTIN5ic@|amL*Yb@~|BfcINeaZ!8L9sBPW(X7 zX>ATAvT#yd`X@Bb&NuDk<6j#}sNOjH@8k1N&D3-4RhKlA!7sgJ6_@*hN|dUBa5&GV z-3OOVKib5fnzt^kOl8MVgxix<1Zhcn;Ds|lUla3FWAJ_q(4!u2?*rlBWmk8SwNy+AFN%^MV8OE zD6XrA%I<>gd3@>VtPgv}9rjG%-4xBznaaAaY~YsaB5-G=?udh_i;XG#b-o@D8i_0F z38h}fn+AQhU>!CxU*!fM{)-XS6ZcE<_<0Q9Bn)4I?YI{gDv!1ZzK0ifuje%Kmf6mx zotx%)VgD~WlEhhW_ld}4uliYU?!SiC?+y-TFS8kz$mE|V6;fW=TdDn4S+~eLv5*o| zzF0?pJpQ|$_-b?EZpG#Hk3ffySH{`x?H{{C?~&5sRy*N*g`#p1R_ zw=Xo>DEaM5-?w)nI@d5}rqMWbinxMuvCF?S#!ETzxYer9yO{JMtRBuvXKnhOVz`Ot z=8d39h)aAGTC9nVQ;BJ!CHwK_q!K(HK7u3NDcP!odBoX#@JQ62{fmUCiUz1=#vpD+`V z#r#6bBTmf(h~4FAOn!@7hcjlop}50x{o(_04iFOyCT6zuvF-9D^E(1VJLK)TNKN&^vj#E4r3>%ZIbq*nIZ1GP;6A%Ea{g%^*N zzf>s~k;hs^#n8i>fL7@hyQ0=h#;tm)-GfAjfjC}(M!QIdaWY(vn1vr3h=InT=qBfz zrpo(rzWY8J5e;eFoXYqJI_Iy61|cJNdM19Gdvxuh7E|oRhiJhBK9Cfo8cK zd$-2H`#-(#T@U||N{DmV@GsIFwa@JjAJ2JY%E7XQsfMN_=lFv|cV-(-cjL@yVoG;j zA>gSYD={y%rVG6^>Yv@ef=o7NH8jyCa_j8><=ToOXMEZEm2xyl*x9oNBe>`K?A_-xIpo!YguI~$Tm-2p~x#D+^G zq<%peDCPbP$vt%J{##WC+D_UXlXeNuW(WuRlVg262im8>hmOGt?QJi9)vDqj$pjl- z$8ZVl6vW{y_;|9wU&!lv+6!~gS;F>GwS%9`@*q$qZSUUTQ~QT1w140Alk#CE3+7A< zR*-n@`9OpN*X?QWgfjF{8s3tyuVO0ICXFgo-Rmj}-sYCmCY(CA~F##nP5!ZNkp{d5vTdz#R z-bP&Ev%8k7j010*%2Umeq7VBR^=$@jA{bwfjHGrHF6~<`GoJZH2*fG1AG@~;1}X^< zDYh3rn(|q&+r8*?@Nr}1-1lMj5Nv29AVsdPVU#<5|7qGlkRmcOzUf3awK%%tbK&yr zz&3K;kx_rq$L`>|c}tPAb`>r-scLO|w$?ykG{utAQjhp`{?;n z1YX`p!Oq18#>pnU3%CSo9=0xPJ)yO%OWr&4Er0RD8{02zLVosOKC)3R62|v`L4vbp z-$2>MdFEBYCCF4QUODeJM}4sW-mQ4v$Feh7`0FFedce^r;kaeWW*h5T>dDn zE{+Rf3Qn#+9qR#!?-mh!DCikgqUDu#RavL&sS$Dxl34JIEnPt;UXV(y1cHkhF?0O7 zi;y2^jNws_c__4*b36W-h&kW9@7P~;oKXBwe$d#G4#lhnL_uS>M|Mjs+Leq{vQ|R_ zhV7LLfe}!MMo=#D07Y^~K8JWt7Nod$6n0 zz>MnobioIFwh$u{A0m<8`k+XqA?Qi?=>dTA+SU325f*JScYTMGNrL>}C=EsKV#hDa z@qCWqdytazcn~HY2J!qzGQy+9O~o@(kiF>NEMH_t<58 z>-RB1VYSF-vvh1+(JA*QBv6DTglAkMlFG2ncZ()92uknmDizmPMxv3UHR^ z0D|1b_8nV0-MEfI{6_tS9d@&UxQ$E<1Y4w`tBZw@Q>ghD?L|tcJW3)5!r-trT_JqH zdC^(nCRL0&V2b(l6~tbkRttoyON9n|h$wv1+R|G@0=ckNNDn8#dl@}XLU1D!m5#GS zs?5@LcWdZnoP&@crzGYOx$w(L$+sGf!T6oQBfy0)23!cxzt5FAnmXmTLTWX>r#6XX z#w9(Hms2G2LAQ7od%zd-$y|Ag^9)+{9xkBWgnl7NeBD99;? zNv?n8vV{BjgGMRot%ea58kB1 zXcN%`JR#TbXql2z9(DW`^3l)$S%=?!tSLG?Dfjm{FVw}XdEJ$^@CID0QoU_p^t3Sl zptv}XGWyW&`lnP{U{w-6Y+|lpJZfp8MmoQ+q>-SfdrrylO5rr`0E+nZwW8N| zFyYt#no2N4^20;KXeaGGFVmdx2=g?szrhI_dg!UKzg+WCB53G3;mg1)8z9m~`DC}Z z>vo^$sKLyfNt=jgTvDg3oJ?NclhKaF_Vq%Rd zADX0HW2bPG-~9yE?vvuUNs0y;N7!t2DP3@TkjRslniA}nkmmPyTH zHLYts9$<&D{@{3Zf&p;iXCY7PzSZok`T05cUfNp`0`WhCph0l!4~ofTavE=w8i}7w-m$WAF77X-l#OqCdlpaLxll;V%zWvI ze!VkX7cn$;^zF|_8}CA0*TYbc2egYA&9S|-+-w75gZ zTKr@B0pCKLo}J!CwjIQ{Cmp+<#3xRiW_g9!{ZM*^x`^?lU^wI2)Y;_zX}M^sM{W{< zsbU>T9wkl|ur%^{IDyxH zO4Y;w|XSdh)S|EmgepifnrE_>Qd_nf0i6;&b90#ou~s{pDwxqXwc< zLBP9n1GZA*oeAdr*YaTRXBd&_a;X=T-c4HLN$GMyp zk1giLxg6PbluUbxd`e#764vEiwubX5QjUvMp!5_p)i#q7x_Dfz<=L=%L55?ofw|WG zEJc*#soI*6^kP~WG8_trxZEEt-5D?9a}a~$Cn-sd(C!Pid)`j7RY6^|d2rm@K?$W_ z2`ZK0(6Z|q+hl3IWRB1)8l$pr7`UF?WI5e&j3;YU><-)Lqh~SL>)}v2mK1c+31u{| zP#Dd)obKX~`b(3*A$3d|JT^nm)SyHkp&z*R!gkC}W_Sznx1OTux4-n;?j5wiHzJSQ zT%OUspD6)^oS@KJu`YvYO>e zwrR{P&u=xMkH1S1XYm`=2fMf~K7u?cObSG;g3MWc;g)?Ha{~doreNXEnZGXuc54~8 z?iM_`Kj%Hz_#==$M@zx$rb1u^u) zSA57NB$Q7NtA|R~E~P*bsh2zX_uh3O<;I^EL%1mVE6zU07xV z{wo`2G^He(2WnR zM@&%o2{tj9_r@2i0{KTQpij|<%7pjkV=&6Bp%6cD)=!O=Czd{6Qg0Y(3WZlnY6K7Z z4`97TD%um7@aVWQcdY{lw4+HwzQu%dA&iEiqNC^ZyF;ibtb-n4JUs zWbKxI<1@`BTQjXQ+(j#`Y@#MnhH^w=yo~1$i}4O_IzWBpO!bAl9!>_($Xm~>faNYC zP13l5R7Lc<+uVT3^G>wjltj((GVeYC_E*#CK0gH5y{1!rrUcj@8MPjLoUg{w|K1^M zJI;f4{ztdYlDz5sPi&nf^1*2U=W?F;E?R=v=ad8_w)Q2SZPCw+YL+ujjpCL@oeVYx zSJS*XUB6`Ie3%cW<#h)5i?o?6MksD#IVCF--#h>3esA74qx0)!^_daOjs}{H)7$)@ z2^~r(r$jQT8*kTFN%&rYqrIW5lilEGpC2rfo8U@=*SpdiA0O(lgY77E2-3tX(tlUI zx0E)Ui_&hJxXZ)C-n>2pjq7QQda0V3pO#@!Y~!3zpwaR;M|ZxinUtv3t`6bCC*kbG z+rS1}#Q+lt-AmDPUjduw12TX*OM_Ww_IM4{DO2h?{J1AV;)I4ZNb6H z!=a~4F;w{{+$+)PlzMkYxx{|gJa<`QJHuL5N`*>|r2T5sP}1$$Qb%?84ed3`VpN#E!ql4()6k%BlmewfvvuMpq-luj zcb*^S%uDVAqKUaBiFz?>UPzRaTp1eGL|(lh{h5D*?m!*A?SZ1KeJkA ztP?%Btbq3Z%~L5JiYK|{bXg)J9g+U)nIM-OZ{QgU%sGIBbY_{YAb;yIk@vN3#RbHC z;iom;jy?)=He|Adp=3zrI3F0Hu+)rDU*Sm)O-Tf$Fv5wy$>NphWa46PBu_O$Yx1U^ z>%`J2=?H-|o5u?;&@--%Li&giAc3w<_k7RE5w z!!2E&s952m$@fmaJGYlv)ECP?WN$x*&9R-6ZOxgKlCAS9IyLi=fw*9!Bx**A+eScC zxST^EXbVW@2tPCDBoo$91^%e}h;W>T%`E!p6 z>=8d=xsbP@E;LTQ;^nMcAL=JKMHFwQXB5oj^uJit zr63Rv$9+Rp3Q}6+9^H-~%vuyFsgEH{4$@Nn_Mzo(%P)2u2jWR75|*DIL%JqSaJIlThaYTcT)_89ZzkmCLIGhjYY- zb<5X>Gq9$h%$8ClWe3CrRzBDco>2zCsUNrMUHZ(I7rs-_)H1O*ehYniBEF;Z1 zzUhwh|K;fZmAj?RG1~t_gQNQ}EL}g8S0Qn&xJ~V0GND4^rWv7Z16v!%og~1XzHVUq zLHeo*!uUdZAXmV+))A?6ZWE`lm*TE=6Le)pQt2wJ}N z{ke?Ey-){@s%#tNd8V+iQ-URRa%`*_5)TmG$M4`L$2z@6M#`M7N`J6kC{W?S*>U4@ zwKKLu2` ze5`n2+#N^JN#enP>1(PjF)4Y7-=h)x4o+Y4cy=JWJm9_V6;TboOY!IIgf%;2)df|W zQZSxwaG!>vF?LpiypR>Mj23e@`{Q3M+4Z>v`s@W^sm_B%7#|6yw6J$ga>__1q!X4W z{pw)_8cmBHB9K&4LI26&s_>QboVlw6f`xL8rtds{x?h1Pjvv9B(h0;1SQqRF$wM zb)U+asIlzARY&;5a8*O##Z8<=Y($PI%MbVqlExF8MuHElKelv-<~p}tQ0>H7oJNE< z4^&+RUObMssM;Su+0-JsbT?;hI*k=R2~2C}oY+*R$z@*&%pQ4vJ^4_ynPb(e#4k#y z-m1jcyjb9w^4`t)ZR-$kDqFEO)*?#Z|6qli<~! z#zX8s^8B#4kj8I{Q6`us@H_)0RxPbZIh3fh$|^_f{+-BnrFi5?o?De+K>e8vPNC~l zc_yRhzF2fd*vpc|Tr$MHd6--+CgVg&9Zs4osL#yJ#&Q8zNgaGd#9QC1efyuYu#sG^ zqZ+gI9<-ZD5aXhB^;wGgQglxyvqJwg&>G?wF_q(xPJL#<`k9A4C`K%uKySEH$ds;o z(w!Cx8niclmH*Y*wz1k@?X7^IzIILF`<0Hfx1<-cb;YMs`q8eEFDzJC^qt(NeM9-m z4H{@9q~oz0mm{a8-|X3J*I-AT-u97@R8(aP&aB%!CKl0kSMlKK>K)EodO$gNL&pudSDT@I;-5ZG;2t< z*B{R5a!&HtLzCLVbk*|5gW<@<2j5?0vmkS5T{6A=Cy5^AmarI~d=FyM=$Me$ zy6IP>OuRMsv0m@|T)(o8VhLf|V5B;TO#%c?;K^j(NN&{Y~91mv*y- zL7H6*=@#NWlDNT{PdR=zCj#Et*ZHLkB6sBCw4>h5`*pBEMll!L5vZ7A`uL z;c1w?PNYe4XZ}HJ?G@Kgl3-hqtRP8vD!S&*!Q#a3^xNg$&CShNPjlJabW^YQPvBMu zrav#UNmy`$UE$QA3zV429XU-P#!4A_Az%9e@)K6tG)lB{sj$WG;P^>^da~&us`>k{ zjz~h6NY(Vnt2@U~dDgwOB#WfuGg5BGIN&Dg>1B#I3tgPWR?_jMwKNNzC&2A*tjn;_ zIp?4IA9f{=rX`uyu5;oShL@)y0nU!GFgzOIN@G>n@3~o4)On~jVI{8<>WsI7K@Z6P z3+fVTe-Byb6t4Ng>N1St9zWK~o#W^pMhe5PIZc$3?p5ShBwyZF!dXAF!pvz%}a;jROTKcZCGtC{3|=kQrd43?-IcJEJ!-myqN4RG?V zeU4T`q3FkVpAF7(Pf#Dw#>xjOAb}0z8XJpB20{sLS#gPxv;aY%c5j?k6C34v-UnzkI%kck zdwum^>{w9^9bYW!p}!JNv48W<^r`3Jmt)j}%;*d^xMZgM$OSr)R`5+rA8&bBd z79Z_f(NC;gtJ1Wq=Trq*QCr}~de=7S~P zNgG>_u?W|~zo{BIO|j5(_f9?6UDrIu*BY=}V50gee-$y`C8fyRCKu}#%(N+JN$~7A zr>3VTm|;`U_L$#wKst|UG7pH)W@Z^PXt zIn8(W7~Qwdll+~B_4`r<4!(MSnco}&-=ArERm$LsZJZwJ^UieycsOROcj=nv=201A zL^nvXOA6!H_D5uVtXgCZnL z-cN3ik9zv0`Txboy5=4!$o=j0%`_{S8eTtl0P!pGrl>fMNg{uY<#vf&>_6!2){_d% zd{f@t&J3gfG$M|R6~BT`D%taw9gokUz+f#7z~>o2vXbwN=24{o1NfA*TR_;z=y$ z1LnYoS#PPIoSo+$lq;B!kwzvq72>A|^>T6jjwSH>e7xe@yGIu2TM>I%Nf)_vA^2+k zx;k)SQ0I`FgZtCKT=?C)678G@(gOXzd|XlAQw82XGyu4a@2M*@XuwS|qldo25i@9h z07vWl>H*tc#$ytK8O{e`*ZIEP=v%d(VZk@~?eypuzV>o|`Re21gRW`zGae^$Q|$Ve z_&iTF5t_gT?tAGC+ZVhzxwEv#=*;qF0&X0|qyPMWnEL8~sJIM*nJmhgSd%>^@cf?Klcxb8nuOZl|)pG{7p1 zsX!e0>I0!fz9_{JR&YjJ!h(#D1ptq#!vC`F{*NUI`^OsK$Uq0@BTAdb6apMldK$Gf zjB7rc2~gupADy(P#ehdt-g5q;^TFx_y;nJy+!QzNX;R9lag1MtULv0g*3lF(Xd)MQ zCd;2KZsJvm4J523o)9!aQ4a(j^~KLM1Bg$ai-I?ez7MD%KVuutsrc3z&~Q47w|vo_ ze_5pV;*Zd|plhVpLdO<7GM`}eK;f@UsI3znH;(Lxm(ds?lRgZ$0iI*>XSa}^xlI8K zyiy5NF;FlrR7~#T$=_@|pW5hZzUH`m|Zj7(fYX_Esn;9&->{g)! zp)DY$w~TE<32)3wfMzQ#(+s9m0vU_!Jq&M4CkEQANR!c$-HulM=0rYY4-_$y1 z4RAurP_gkhEISI2eGX-=-2%?aJSF>$%r2KSL`VEkR3R}R9nSaETr2Ngrw#QJD?lW!8wtld~5L)dkB2pqTAR*kdzF|Ql_&@N_B3dqF=)v`uK)+c@4|O z=Y;HNkkiFyob0Qhp3c&rjujh!KCD03L-LKU?2?i$zSb`724R^nO}QCIjFTNqcoFZ3 zs=ucgnRA!LnvEN|Ief}CK5~s|=X;XjJ5{^Ru#P-?`%p{2tpNFeX>gq(`#R-ben<4} zyB$9PFM1kf{jn(jB+{rG+-F~mE$>L;%oARBmro?MYbNqo2ZQ~f7143= zS4?)*j+g=1BU06pHN;$s<)&pK%wi zwO%qDRs14wV>_SN&ol#==AsD8rJ zGmxF_FQ;Z#J9!SWAyw;R#%h#-rRQ};@M^f5vl;c$sl_REq5k?NOF_&8viEGK z|G>1+s>oydYUfypI$t)b2Qy58+8jb722t7Tsq#FeeMG-QkNkm`+v_(a6fl)Z_X|=; zTZkfmZ43ogZ&BaBH)U=PlO!qi$$zqisH_EdGi(6`q!1R zFQ!=j;1WkXz53cqnGmU?i=;Cr0ITPraAm3R2OpN-{@lcpm8~MA5y=TId+Q~PkmZ{< z5#u8KaEJ$j=G2`+d>*Fiwym{s`T*a_?EQ)0di$-t+W;JAn}(ym`*hc>js31^87JiG zf(-|Y0r8eYg2=yChJwft=7-b9_DS*%I|3F!iOHgMt!PVtxt-|M;I!P0d34qjpmMhy z^papy?oOvem8L1)(@K%ICGHsY0a#_=MSPuaJ_$rF1?<6HP5bQ~`RmVdWOm**p0Q?@ z5tol#P<)!{GfCFG|49vZg)3hSYsc%h?V--I0HWNp;$rWv6dz|FEsDsQdzu#kZ_QCm zDOBe7B&G~h?6onoz_c-4_n%g5)TF;4Vtrc4Wa{%QPaS*u_Qu+J`WEOpsJPp!o!Qj` zFAt&XJ+EtB>p`#E4X+#It?BJ}Ei=c>ehb)lnWa&ep57i#dBa3doNvU;Ua5JWdV{*1 zQIR+5doVRnwXnCl_)5T$x>=@^G972D=~B$sGP_<2cWISBWnrKJ3?CV@UtnCV-=EbI(XrCd#tJaRAluV$oVM7E8cbH=IFb)r!Djg*Q zZMW2v9Z~ao>i^z1x_X>g_$7*ox1hYOD;olfHmKmS;GGf(mC(%N*{y{SzL^=iq~@jV z4;$;~qJ+To^DF+?)djM@w{qUY`10k9+EJ^B>1)yq%$!Iw48~Gbw_LO}op=hujS15p zFX7wf+>->)CTZw;l+0gY?qcn!EvO+|*LuRboOSQ! zZ0d9;>EGV|TyKD`$hdXu{-=f=x-&4ar7?fIJVV6#VM6kuEs#Kbwz*aC!2J${xkSt$nKxL z)sBkpcL1+BK|gt<84XLV{4`^S1F$@~IuT-rE`I|kmDxM`>uj6v*mhI}a&`6|CDr_G zxHZAkPXYQ>4dzZfbqbO@F)>ms*Z|_gxna|pfs+8d?^j@b%Npg<>_xq?11pmV0p=sB{l5e|t0ol9l7^bGz|FzX z*4)MCvJ%PDe;vp$@YezMC#98onC9)n!m`4UHny@xUB>Y7w zK=%YC(S;n9gX(+HYm8femS0t1fTKCNi=S{27a$-Cz++wf$1ccKSkC3iP=%LuWA>u+ zgf;0mk2Ys8^ysx$IBA2|Di5k_`~vjNK^-ln_8RY-@u8vPDWIY@*hSu2@YmdIvQX-=;Ve{>%;t@yUe*tG zz+ubLYajWJ6&4+U2Tp7MWPh08y=r!+-`&k196WV5Ne*kMlhL-Eamg^@t!f>6n<2QR zx6(&BlULv;4<=J9d0NBUtv%yS9z3RTQW#Z+RZcsb)wDu2WTXh+!y4yIRC zcL&;o+qRxB=iUc;Udz@gaUSVOraeG0FLmseX~1|ebAEfzZeYS4++EN`vq;0Iuf?(3(TMij3agNJ^4JS zd}*lUQ=mP{6_1I_;xeaB3#3rhq?N0IXwdrbSB5KKoQ%gYCwV+Vn=JB?Eh|(4;Nuq! zWNray#~N5pH9SLQkgH_kTn6Bx3&p?2*tm$-fhIDc_QixmHUKI|*i^K%?g!AXY0qYh zm%w!u$`;LxOYSmlG7=eDXo}oM=#~m7q7^X0>3p;SV?-@xZ0LEVbC;p?gDK1Ospfw6 z(TCl-ILH-y4iOtCuf{i%B_7PUaeNq+KgaZ4EqSc)h8oa`?=-oVe2I@!^ZeLaf^Yv8 zkImMMuvYPl+V4zK5Vy}S&|=vo8H?l?2tEf;009UynuU)LbNj;yP(#&eor;xON;U$P z@A{{s&^BI#aZ}QJ)nzZ)R^LTP-U7Cg*nK3a-=jHjUycqWUQ@Q7u;rIdI!not7iu3h z)uc^BKb7FAeZ-QF5l-0R!Q3$;sK0;UbDH3JWS*iU$DT-@0iIrC1^p^QcgM-fyWtY`=2h8?=COec)w@6! zR~aX*{kHp1vuLX(0Y@)+2KAS!E+svZ$pU6|9-+X`Fave8hU52lp}_van#c0X3w2-x zEl_|4U;Zo#0BXdu&G&*^(+?W96u`Y&T};@c>W;J{9spV_csm8xsRna&!y|pYQF4cuo>) z&raTKQ0(Pz-7gK$6v8OXzSE*WJ(HmOkL0xiSBx(&@>lEH7gV)F%>}O^t5c_fG}l#M zAsT1K(!+>ljw;7Z)j?tuPP6GOPtg!Dsw<$S*vvujG%@~;0I-S|jHfR?5A8V69^ba# zz^usYHr$>^09U%ne6G6BoHHvg&shs{~;-7gM269tvWn3yF{!=?cW+gu!3yArcwD& z+iAeZuH^`K*d>M z^2>t%A}kbkOF?tNxNfU`RKUPQ`(6RIX8$a8)GVgt{nJnMFCPN7b0)YaM(9;6iDrNV zU3+why}O2*RsW2TeNB%=C&C!l?G@6O8qFO9608p{{ZDSkJO=FeodjWthIuXj5p+65 z|J+Fga~b_h4P&1O^WQAav@U4vI-rYp;@9LTR{39+gRAYxC;rt5Y|o6|?&tV5Nyosh zwEq=s%gUr1_Fv$x8i&CA0o2};4!u<#Z`Gj!CV!xv)NpIn{~38Dlq&vT6cf+qHGzF4 zkn-_45%IkLGLiCn^u6U%&qw?Bp3c@v_Wk?QyYe-jSvz-E@ zhMsSAfQ2j^5GsJuEqCE>`IC#oxP^%1ijs?!E5@tVabg7=_w0)jfIktzVpWdyDueRV z>-yuCXl80LyCg7;Cd*G(t0jT})06h~y!raTigqYD7!gOU}!tpF;)z5L~$#jpSzbYTGvx@NKT|CE3FX8?otZz0^S zwE=$<7W6QAGnM~pqENT=C&AMs2eM|o_%A=2&oh93t%QWMHKlm}7Fd2-F!B3;@Vt)f z%YUIb@FJ&(0cSRr)ZZ?<;L933G{xXMN4{QrHbn`<)7ilfy{7-k6N0(y|6~60(2^{o z0m5I_FsZQqkIC|H(y=LuBCl|)RRISUw8Q(IH&*I zIq*vT&qa>ocWoi9g6wu6=bLD$kd|if;9ymIRiB_1WXB2Zil+Fiqq*;&>fm+9R2!NU z)q>F81C}bFgVs*X44{pK%n)tqHmv_>&O&KkyvD)&Bw+ zwEb~i^Dp$ZxTJ}HF3wP&#J)2-yJQY@YgPSbq%+f90WOGD`g2gpiy& z)#^qE`fKZ-r3vyE6DkCg7v#H}>P4-t29rKt#t|Qr+@2oXUeS78mH=;d?yc0i!HD0i zEPbFctiF@V&#!%(B{dwkJAd#{_9_yN~t&m$JP_GVLy`7Q`|-~ej5HL+>N0q*e^AfZEBNb&`ZNih-HyP5Ly+GdWtHxw$_b1-aBy?ZKMgWSsm8#s5#gE zY|PG2C7hMIw6mtRxaj#tW9w!?OWDJM*cv*qcagp@e2ducK5($}JSd~oFMTwpY@nSY zy1t_p+ZC4=a|z{@%WeOh*T)xA?if1oNDN7pr-Urjl(`wR-ri9YUA{d8zR80+?CC>| z`#e7KUs%v9?yR|da|ojzS%){NLPX=h>#rQ}lgac)BDWq^rLPu-pGR1<8>&7YCg*o&XF1s(E^ z?@vmy&?4K4C8{dN8|$~V@mgbrp29*hyz(pR`ADsz=xokz{8J|<@xRc(*KMD6rtBaa z9~hgGq-8CgcUOo!Xe2pQJku_GdV#T&bwxsbdwgHd2;(Bl^T$tm?^v#-S$`GZ2uvNB zOL;FR{1L_B)!enTSKhJQ`{Jsg*TE#%?jIQJ?1@JdyS3*SF0huemf)qbBXG$eMXocy z(U~<=6^w6;(U}K{xB0;YEyz#DDZZFT;?nbOzx(K0?`#L!USGL9(=H+N zj_u&PL+f*AJ?Q5pw|OY0L>t4|f!rx|q)2oot$5e+7`K`fp<4{8%uvJ+L^ccis)dok zni@|&SkKNoM#IInGY}#7;FFUWoQMO#W|pAmbmx0Kn`DDycJZ;n7m|-WNxdg7bDEs=vy-=%HD1Vm=u^?=!zhRc>@%&K z6ghU!ur1g>=>Alu$U;PT1Qa#9c(Y>-ll5<`Z2BX3ISsveb@YIMb~+5Ke;_M?XHzjp z*Y+-CyA1xcO&TYuuqwzVJ&9M?0`fpelsm$9)3gkn8HzP+RHU4lNLsIMMztkDz_e#z z(Ec1z{ye`l$EX@6qW?%YrAnRQ`yoAj|B^}AtG3YZth0$-#7$*{Y?>NUwUIxJAno_~ zxGOCnRLc@wl;ib@37tMUc@TYpDBghG{q;v1NIEH9OF}vYD zj~!i`)(HK8%Uyj9AA33${GAOtH7i~p`E{*cSqRbjVcoB#XVf+k#zFc>xp=mce!eHo zc0Pkg`D(>p~M!XT<{(qCwH2?&Q#aaW$~^kS4bjkHaz${ z)0u1HJreGeiCMUW^N*v8dn;kPD|$UcnmOZDR5!>7OdyVuo2 zg=yrBEG}U$A!XWz+~w{TNmW4di`^{}s_rpy=kF?4q*lhP!`jpFsYBM z!Y@!g-wdy#sgxgow&ULc&ztJT{9=8SnAvYMMPR}$BXFj<2DM>cjj^xIzPl_h#UVba zRaKD>2Aj}k55*8_y|NB1V!ZytZ8dm(T5>RPscA`--=p1U^jgyvs%5?G{Qc|Tv;Z_o zj#1`d9eAr-c&eJj+oSkn+(&&{d?a$CQ!k-Yj1EVGDKg5y9c`E9GaAJi0@?h=J7%2R4^_7hP1 z#EoMqg-)J*KU}s*-B*o!)#jIk@rHMhZZ|ncG5j_nX3NjJ|J`l5WrC44Nvv%Tv=Cfy zS10^HcQ&DIVT5_D<)&(i5{t9@s5_NsarziQSr@I<-mEfPmytk~@01Mo`879;za zm+UbdhR*8A-(+y*O$Dk6bfWmribRMFb{x0FP0mK&SeZBdOgDu*^5TsyJ7zV+Q?j7` zc=rvJkDZazZ91!oxCye%1tvCqS%A$>ibbi=sMx^>ckGN7i(P|s7Tyx8dwZsPe>|(Z z41%e)tk=7iC7tQg$>ch6MwhkgA4Ie7rTU_V%g~% zRvQ&QjJNBw^P7Bx4y$qd!F}uwPVz(FfxQbI2F{rBcWZ54SMU-wkf7e9UrJqecU_2Y z`njAR*H%kCbhFQ!8(kZYfj&F__H%xD{o~Csc#lIi&Tda;K4EpXi;xtl_^a_J*+K8j zaU;0)$E!W{WR-KV09Jwd6s;o5K#lN_dDhi-lA_^R6WWY4)xd9l@CmSoK$i9pt9a*S z46Wf}w#Kf`Bet8{r)&D>V@qXWn;rsv9Njd+$0h=ak0P;fYW<`{CcQKrltz~KnYrpw z&b=kosQTaSn@+E+6haBGqo*E(6=`*VZT0xcyp@#^ZDlzq=slFPrkq4$CafDM zUD2+eisR~0kn$e8XM?(oKGI?JXw#`8yVaf@HQ%iM7`*)bWdBw-%3IxqTybm z*#k_C+VqR-?dtdURAkaYp+Mb(A7JX&wq9Hxd&=CK(n|-0F?Dk)(PK^6tR8=EQL&Qn z23cwC6YDj05tX_U&iA|#SbzuUT|TV;0aW=HNDuX}{uxkXfWmxK|IWqsnwzhsKc^>b zNC{K34pWC$(#qM><(6Mg%Ul9YA^GphF7^-&d%2$1o^!%yh=xn7o}61rzT!0Wx3DrU zl@FsNdsnSY)z}nF$t}veL-Lmp;jO@8%ctji?S(Q^@vh+;6$@WdK@$(0b4-SYojen} zl@}9M92*z-IOTn{ksll#pIJpV3-8?I^c}u^WYtogfci*fY~|~Kew zVes_`6;;-Go8scz{6;l;i?-&bv$ZT=#GHmtf(Yw7!rxvesE%Pl2d!2E>D(K>sgmAl z_}1{OWFWlih*jNZ=Y2SmPX90aHm>|ni1U{}-qOM#nNmOZ#z>NK`QPLtJv2O0K_Im# ztf^XY|77!ueTAPLH20+Rzz@leV(8YSZ!c{KCS)QzquGcbGh9D>olC znaEJ;kQJ*?G<}hoy9m~uVROUbgpl%iYH&h$`6~+&>W{`3;&l=CbVf3*Fsc^h3WdlI zo-6Ws!VjMFI#*^z*B_BV!(dA@`>7LQziDTYxQ#v^<`2!Rn>gL>Chq5fM31tOIKwO5 z4PPhVR*OrYt}n9o)`)h$V+h6Z#`3*ph84)qGYeW$6%&7Wrq-A#o7l5+NAVsd>(&_J zC~%R8l4)yf=;+Fu+_&>XeWl4YmO$$Yy*8Xj$An4E!q94SuJl2L79q^Hmy$TDu!3N~ zrXoOz9@K+vTszZt6iGCP^=i)Ii=W<|sun`vF2MWFKI(dbiR`;~3dzt|RTUH}9Fc8c zpf4)qX0*0wDPhgpxv(&#qkihu`00DoY;u!r`E_H{;B!u00oCTM;=X2bx5z$9#64aF zAAeLd`!1OU#L0&4g(i#z21{IeqgY)EE-gE0kqWlGgP6cbykc=c%CPTJS?sbN7E815 zKC*x)A7)FlTY%7<6o8-sh?f|-0hWH29$9a7*)3@-3R%^DvGVDJj(|pO=H-B#@iG1dd>Xg&+o9=3Oh7y4O z8V>#=W+H*l*P>D~xIBXQLx1^sceSzPhB&~2ua0@lTy zmb<1Srl~Q$&jo;VJA-{Kb+GSHhC}Q(@OT9%gw8wL)WgC&uo>?FQc1;|eAURGy0u4> z^1X}epHE{zI+9{HKx0eh4q3*I_*`NJw{fQPFsln|U2_m21vc~raxuCN1f**Oe3dD> znqSjjUyg+paf3Y*H5(da_-gx}UxKY9y<)8FV}7j{ShXgV+OHP$yjomWeq998HHy9D zt;sN($6&P^;H!%P?*zisK^9|Juu0Zdng^Ui+;5Ma@T|T$f8E5%TV#MSECm-P%G@vE z=?fs54J*Pl{MIJ6 zeVrDj5bcIhCl`o^(jx@Ps1YX{`{doq z5xoe+p`viBalQ`x_q^ihiE81H^On zZ%*p7^7V{yt<E8=pWXdxcyzT&Gl6!q02j{L zcwAJh?CN@GP;jsoy!V%e8EI`UZRCv@WEW^M(y1MBg%;{g|%TuUvkP7GJ~1qJo17VNDX#xAuj|61T% zR9xRDiCfBFzI^Vw+Uc;?;Tab zRq63^6Q>ka--dvq-Z7k@jC`x-#;+QU7We0h?@|$j*3IL@Wz@?iQgTjAB@f3eseEx0 zscHS4yQ@FvkzT$3xcIIreyG448e}!l85O*yWUjY>Q%ojeLHRJD%m?D%``vPeC%(WZ z(SNTFjuVklZWYf^QE4=-=ZVAd;Kn)KsCB?%>t>1SA;G%g63!Qhe06Jj?snT`E9Ym5 zf%aG{5}gv3cpo2#-x{HXcCr3Gb}=EPT?rA#o;p=6huTm*??vT?=2E_%z#{y9-tI5T zT1K^j$|>!T8SL6;wJxpn@!CEOK1DN=f{R(=d?B&3G`^20YVly|RE5Uj&x|?tIW1(L zN$g6ft~4g35In@U!g5r(n|O^M>znAk=kyFz;Yl{j3a9cMEkdqm+&#Zt&>a}IUyP4i zy3+lDYFhJ%OrxqrP7k3L{*13v)*h%DdRp7Ee5-mW&xdkPaxl{KVO4?h|d>zI`q$GG8;vP`gx<_*TwZV?bH6-!88>ziuy9OUAfizC0i>Y3IDZ z$jZmMs2@42Ja6wIy15Q()V+mY)t<&id7M>3Y0hymFN83>3266TX>oQ0F29bOJzhe* z-}x}zbvbHN+D}1Hi~aLr(bbtSx-2sOa2qe7jBrMtAQ+#Mc3fd~PM5sgrg3-jZs)UE ztV&Af)^*Bq)DlgPI$P`BkF@Vp^5;H;U8GtJFAU2p=|p<4uJQR8E3m4cxZVjU1WuqE z{UD|^TMCq3x}Ds^E^WM9BL}bWRb{NgjJn!3tES4XZLQEXjAOGrzxibup7(slxPX=q zUK>kzuVI8JD$~2@{nFcKvM0N$t5b#K4LhUCQEAac1n{!E4?IV;qYC}0JcHP<<$5=| zXL%9MuURDQyV??kkx?d~k4(OFlsfxO6AvChGCExvXqu~c%e+ZdHV#XQg}=PmIY8;a z*rhZRm&~Q>>^+Tk?h#cil}qb%OgRWL8>6b0ARv`AA<7y}9ZG)oE*cS;_dcBa5gA|) z8%UN%rUS&S(@+rKs>~4ELRgppU){OjqVHaOWGmjhT`d!EUTXsO;qv;eWQIlyYC>uS>0NdQjDbH%#`rstKA(J;ka)5 z`QoujkbdvoeUxE<#RWyKcYxbl-7&2Xe@gAyH~SNQ2e8fEzY19w%Mh^n!h8fh`}UgI zU<+rI%1O7)Y?-OvZR_N72|}vl?mqFOv`B}5_j1eo{Lc`~I-B994=VO(17k zt7;Nj(D)Tdc7BD1edT6Ua5Q;Kg5bJat{Oe?1xkPR*qNxApVrG?98@Tps_d> z88cp^qzxjfhT$;d@@4IFiYEM-i*PK8CF1A%o)^`HI-8!$3wcy4`aL>j-UOdpw=GxW zo=5V=?n})y&nXnTP+Cd5WVygfG51xl4R*Rf8}ClMWmSf~7FI87WDyX+)k+2cU^s1=4e&D641M;VSlMp zt4z4d>aD3Ys^Px6e=q)x4}tc(*B)5~tt@zR2l(~+?f$82YTgApGbJ!V=5JWB&D;h~ zh_1Ed-OVhePn>c;bAo?vZUiJ^>8OLF4b?FC+A{W%!XzZI3$=+GMxpQj5Ecgy>e9vr zMJQpM6VM`EU8MUAG4>;jO6+SE#tHG&Kk&O=7P0oO|6Ye!0`lGv$Xl22yE zY6I4@j>3}ML*cDu4{a2FUiC~`Hf$`t5dV6CKljtV`SC!f>{@npd=vEL?dO@HAI$Zj zP~9yhn@|_L{rB~G>&N_-H@0r6zhKF2_bjKMdaYzO6T2e!B$xSPsOC52!$p+4Z^7WP z$?6h5{tavn>FumDMT1afzFMk0J9ASHmp7pGOZur~QPDU1BdAL%`8(l@+TEfz>OvmS zomu_)K-xd@^`7xi;B8TRm&&&p8T!mFxwj{}8_?(Plz%P+nUf#zy~2r)KUugYqc>BK zV}PNsnyDNthPpZCa%T_t9QX@dFLHRTpnU7^gDZGkfr~$~;I4BKmfx*UrK!&Q_nZ!Z zyKsxX&L;&_1r>T2@6qpgtK;?v8UpvWg~vPi7aADT(C_%GGxZ1>O}!`|ig&0jqa7BC}k00sI1UZ zlP+%9b^9#}IHg_!MJe&c%*ZP#3oi&+ zW=+c1D}=BvUHBbyp6wu@!t#5M*`awW;)~s@VJfOFW!h5pDpFn+q!h;r@nSb2_|m&# zzwf;c=C{aV$b5G;~8q+P4==;dwBvmlkH~~>nErzmFkH>4o5s` zITLkwv^ng(w)P|SbQa~z!bd^~*dapvnW;V_i*%v^dU2snv#Cb!!}-OiNuN zk38!wz9@H&f?yPd#1ZGivaFGAniR_0py0dh{_b8^^-n05#q$d8xB~P>PnZh_GBftSg6{}WUPsl!}5-YA?|AX*37kRT_iysnuuB?n*_;(gnj;y%M zA}ZkjGEP0k;ZQFNqt6bTmsotAK7)qJS4GbZ=KVZ;gy=T1U2qgBJ+7Q?~;4 zd<%>IfI*_10Tkp?2{@wK;BhJ0Jw)_Q!8O-{J%*T{?DmQ*`&aPc{Wfelvh3et z3Ne-jF6lm`xj&wN9^8X-SJxCA;Be<=8e@r|-~$mO!A?%E8Lv~{w5;V^qH;7_s8k6m z;e!eVyI4kBKAZZUT)6CK?akUGRcFfwuSlB?Xw^?TvBffrQcJ6Oe}#mMSgUj7Qy1=Z z3-DRX4)%A4#}@S#D%}Y+JbJ~QTX9*PnJ+70xwH&rNC0h<2zci^vB)-hjM3pERXXO)g#eU6Tc zQg;M%rtCG>+>tBHzJPQ+llj#XxMol)oT{1WGG4TwHk5uguOO^lb=+1JE$-UV@*VT` z@otJ|3ikKQw|n1rly;O-hhN7|d34&cNO~F#a2QBbJ@B+SXET<&yDjnsF?PVbbl`mD zLU~^fx(W;b%~vH_Gym$UO4C8^Xsg);p=c?imY9=jf>}2Ce6|U)VDfQ6zUEisah^a; zDsftzVnJNBYQu{5YZaji4{PMN$vzwgM zljgRXx`ii&P6tMX&Mz9R^Xm@h-0mvVRzxOtcN;Xg($P-O@w?O)TTI`Ij@?+iw@sd% zx_f|nag9w`9sD^I13yjBPSYxk6Y?guTl?8Z#!tCQ>Tj`dFRvJW6+RHycs~P$;NGvk zf!Tc`>ehSJ`>x4;_Fb83TJ6>h-t%#(%q^j&5)0rbFB?IdD3ztEOk`qevIMvGhD-I~ zz6RNNoR4l@v3l+PzJll~&;B$Yr?zObsJfO5euU2Sio=Gkgy&jaCu!7GbNfyXAiJ4c z>07YdnI81rxp9Qvx<#;;qb^|W4Ew6Xx^=GC>75SC=_ab|lnZAL4(C}xl>K;D;<_6f z3lL7-`hbh5&``)n4o+?CI2BP8s;_;6bNV8pL3ggn_UOVOv|lVhlv4wG+7X&V)4$R5 zjxNqhr|xuRW3ruK5#z^BH8oTRuG9P}&yLXnE=fsT8KJV!cqqc$=y}v0sn77-*&9Bu zt4M*!J1ak7a79*Rv|Ckru8~pqH6aNTwV&=X?NBvObA+6`yk-^NC3+uvGeon~e_6#9 zq(+F(vb;Oj)QIf)jqlcS$+KETSG+zM;#gEVEd>3*QFhIoy5kvK3K8O@{Z)GU@I0ga zX6Kr;?oSi)PXb^#d5AMomi!2~>tINgu5b)M$>sb7AG`A7&v`i!l;K=L zx*iZj(-E2)8F_x7+O|u|vHMi#vOc`gTNm%-xLs$ZlXHZ+tdC7f=iJrti)h*P+C2s5 zm(8x^G>)Vt9e^MRp=;?UEs4DjvhEpHR;`s`i&I{YEw58}Z z0>5i1v8+Qh5E6@Ofz()chI7tD33Jf7`DWopb_NO0{5~uNIiD%@$x3If{tj#x(YyTZ zn_+RVpUMzK(~>%hd($__X_VdNYekjU&aveB;{w$^{_&)(9dT=Z>$%l1OYrd}r9Jcm z?2Z;^xgK+bNNeL^DM@^a-lY&70eIw^^b4m=Q^!is$qIO+@w${Yo;bvHt6*EU>X55J z4n`&yr_S%eqC;}B(%!s;An&JjSIZB+lx$njtM6IiyQbXM_Y5c%_9s*w$@O;18H zwB6`6cC@`PI5Kypq(R_LH|UDc>gVC7P~AiN9%0Fr=#tYm-k5BCF&SyTIF2Lr**hWq zVm-pqeC=Fstzr+OspM?B&dOXk!2-i5Dmfdk119DRPfI!Zp}f>pvUm+9Q@`=td{2&X zKdjsdHW{V+atg0`PpNaWi$y1N+SV;DdGtkQMZpz@d+loJh-57HsbHwnX1Wq!| z@^cDVpl%yauj0nSPFVfHx2aSMw_?p-b=+b5P{C+Tnb#t?nqb&IC&`}`mrnK3FAZKz z$hGz$N}bzXtS=3sI(l1sp)05wQC4A#^PCc3HoJ;DPM`j{ABQ)4v&Bt7D;2Ebqv{U3 zSxnI{qmDh!I0>!%Lidtj(z!Xo(uS=^ zP^r0I64)&OI&M(6ug@5@6OQ+RJEyf_f1oxprtV`xoNp}7bWx^#VnhR+4|uN|s3`US zU|$Qy$I(`!rVU7S^Zc{&4%9|abYFJ7ntIw=Lq}!esh(8dj+3#a_BMRNLywu3Gg8@@ z(wCSiakL0bP7Z<`*;h*uZd8i_+AS*yrEEfKgbi_z5g458_gI~t6bH-$Df6aM@iW?5 zR)jSjmZE5#mYeLom)kAN%+?$Y=9+l)=F zCnezh(6?LbgYPNC3GNf;AowW zmi^k=qBd~W7nSR*beyT$m>1{7_^}2-Yx%JY8Jd)Gy9lc$bn0@8J8J$jQ*z_cbe#~3 zbKe>F2iaxZd0Sf*%8XdM?)EH4=t-a~aJmu^1l=~+5GhHC-d8>GB82%7Wg%$7~Hn4;9y7jteZ3pFkbt)RyE)c>aGBs41?{J1$De^KI zQ+aXqPW)Ai1G zM{pNP^3~Nk2yU1g@cX5NoT0WS-4v9|?|%$=!CZA%#~7}?Cq)W>Ek=3Ox851Mh;+mm zZR#X3+@WuHq$sekgxRp?d~Ax~Ury6KtGJCYxje()Y8NvOUldUvoPnxa4;>f~974Q2 z{AVE51-j#@-Ad1cy`LbGedRpCUMU~wBR3Y|JcA`$!(?U*$Ez?i)hcMV=tm2dQq;2T z=d>-fAVGR_U9-U)0l7NyU&nHVUl%+*0W2|^iA0-zaQIkZMOdA%fuH}Z~4opMFoGlafN4)fe{XA0#0t%@2Xy5AA^lH^S zaJs#-a58orsTrn1nzK?TZJ*4E_^ zHv_8K#3(l7g$2WDL>EUjpNaZFV^eSOUYNFpHAi{8i(8cTET{pt;NGvlz6W-+wBFTs zJJJ0Al)a3&P7sU@)qIX+O_x792WAs@;R~=%#CpX4th(-jcmFiMe^zsn`=|27Tlx9& zjr+(jZdShLbFj!W%du4fk&;aTBbx<;X zE5xQVpz|bXQn=+jqlr@PvC=uSg1phv$c{)dA8>mua{o}|gd)bZbDki25RP)rMLym3 zx+?6W4TC$}cSIrg1c^f^Kll3%6h3{0LOIglNfMYFzH?NGOuq4K2oK1>t}0KnSNSA} zmJvx3Y#Y9tDNM7t0`#7QP)_vw9;?5*JUyRvkRWF_WhY=U#-cLU z+yK!s{2#X7GAxcJ>K4V_-7P?HNN{%u?ry=|-Ccvb1Q{F#ch>|7?ry;yf(*_b-tWqD z&OLv2ty+6+>1L>&r+cPG68T9QkHa>>?(0YMpCys`{)AYZCvpB)Rkf)gg~@7>Oo#u& z$q06ieK-}$z?q9mtVHp3rmF-SRz41`3y1kg@4rMsAKEYAyv)ei&C)HIA9b?|VP6^l zoBnsG+2HBON2cnJ9(PNvL<7x48}COtjxXyezTAcsiIDGakI3;hHBKE=&)+y5IQLOv z@q`n22tqXTZz89DV&yTpRbfKwnkUZVHd#X7pyQ4)twwZWtU%v7b8B%ouB7Jg-Whs~OYF#2s6hE<3YX1AI}<{;e9&w6q4xT57-|<;!kxWzn&3(iC|T zqBX~g=eh{~RwKC$0pF;}+tV`1h7Z%_DGv*0Ri{U$Cpz{BJ$CQwI|ASHSb!u}J9pYh z4+#=>KM?0WBNv&tAGmj?mGpxnM9W(5$*Wn$J3f?V)98xc^BDwJ6szCLS!WJKD>%^;WFnrh{K-=5OSh}Ke+?aq651l);!QfD{Lwab zS~N7-ZG|(h;^eVqt-sC*{klkU)||2Ya1K_X-=E0cdMgjDhIT(;z2bGpHpBbg(ZET> z{5N_8K-S-Hi~C1IVw;}#N8V%U^=dKvKS-4Rf6!Xcw-1qTw0&Qwwr|~>p~>lz7_Ke4 z2RO4W0Gx>5{b8?mL971$ds+9dNk`>Muu4tZPzW6i3ec%v@hZTgCyZIgr2hyqe<}@d z!g8UIE%yJwb-_(e6T>1I$%5y$T02-PodzF}qWOC@vb>71NM_Tq`j2ddD?c%kr z6F+MtXxQq$jNgxeW(&QMYTE~<<`SQcz>^R4J*Ackiv@|VE#1H?vsW=^P^L58e?NM& z_Gqm{6=l=0>W5ZqE^zb%s+;#|&E z%`Z}M_LB;g{kG}P@~xho5T0=PyRbqF$V_f9t(zwvuouv6CGz;I@7}~Zu47ZxrXAB~ zzUNe}56e_fYEKcwjOJ)5#cw2~J1ryhDRtC0mN%%}Y^(Boqc0KQA355U?(Gszb8K5U zN+tZB{D@r_K@5HO_iehv`1R#T3zX9pv434;xT!?NG46l&H-K@Gt-iU!G5HZOD#H3% zua+lpX!UA&w_xCv-e&CQ((LEx_x9r+^I68MAJjM4=*+Hft%jEYn*j6Kcg_5bCEu~1 z@72@}$>aEbV7022%mp%7?8&f>??=4T<#E$q3rgp$E%a~q%o{v1Hpiu1{?6H$<0$^z zL8}UZukX-vY8S{88v5t)?Bqai+@ppUt=>eqcFJjS;ymj!xlXFqu^=p4nm7W6We7oORvrW>q|E(7tIb08p{4R zkPB@}2d(@qWuBe_WC6mqyO2r@`Bxi1uQFXbkZil9@tY#KkOOV^&($gO7@uf9I- zPezUgH{NUaHQikJ0-&z&{1)Lj-_=$IF728Vpi$0q>*@wu;_~ICkY}r-5ZdslrSObf zgi9EoyV1qbBtjJ;&&#euV**8vQRLHQ4R0@bXYJ0b+wQPwC=jXLHGIQ=|ZI++7y&XA(Y)CNh%CP5tRI+9S(Gm2Bh~t5?+`fby#Yk zWgsEM*H=IaC_Rr)3)A|3bJi69i8BT~?VKn7MA`%!B`aw*=sKOkPpZ=OuApRis+89Y z9yd==2r+I+at(J^p0{pEx?|{KR^af+la3^m=2ildAOP%wtQNldP+^L9CY)=kSQKtG z8KZW@@Mz~Ea` z;9FD2pm1whTd?~i5oF~inYGdr3IRC%G-lyT0~J=2kmmnh_!-_m6U6G}Qgk|~d1-XD zC$%JUydgyjFdp$oRxpxbV~13oXUpp7+x@6T&IDB0yU1R6CT|0( zAJ&X+=0b)|Zp`=aBO~N??mMBD->4rte2JB;KvK)?TCfS4Zah6x7y}8aFfJV1M#P_s zUCJFg3f<;W|H45K;E2^`_;g?4+&JFn(I~t|a?n7LShXT@{)b_k_1;0Lb-oMD_-$Tf_jVwE| zjT{vif87#nt%M~2nl@a=Rw*DC;E3!R4|1q8u|u41Dp|H}IH28Xx1)_egW^{s8X(3U ztd2Z_=-uUK67tiYZT+1rAv7V@yN8_>htmdO(R(4)pe-Jrx66}>N!9NzQ4Pys$FD%< zov_MfArZm9FB8y=#A`#7zx?hw4{%d2`SB+cH0U8vq6B~3@b&)nw%Hn?c+7_2nM2rU zVYs3~;1VQaR2B?>wbh z^29W#Y-&YC7pbhlN9Vic&QVn5Mu=MU@5yUBpGRO05+p1PwCddg>v8b*^$xvC9k{X)o0mS{iq zGY0_<4e8^;f|F-9q9ohF61s1pb+sHIsH57Q9tC^$#!J68ekM&>Iqq1Nu6)RiX8Npf5m#9??s%TH zV#w`e?yO|7Lg^+$w=4kBec@=HRWveA(Lehi2j3l|S5lnft1-j-jJ+pmlU7_M1bZyk z^WcsjpXukda$UB;s2Y#Mgqsq$%t|=+*hWPo(ztG74QvYnYXx6Cw?qacaq(&?+;GAO z-LkF7Pbd~d8blGZ7;y}!rT|I@b?eMqKJ23w1K$mrI$q_4O4ToeM@(pHG^VPqk=>xd zUJ<$Za;UErxehw;&6Tn8NMCI<2nmTco7o8kBl&4b@o&E{FISp;rRPYhuA!18YVPp( zYIUP)z|P@g=iWShRKMV!Tyj~>4<)T@z(lx^$$~AL(%d0$Rkd>R6;N*h9HT1gnBBYD z$W`3%AOXx`+w!#)jU#1WDPj*`!`>co2nwk5B`cm968!H5zr_71 zvxlik1sePqe=&EhHzD-bVfySE?>GZB#vC$5}fF440)TegI0 zKeE*bz}%q`S^sZ=Hslb;Enjb#jGJvCggl|Ee^J#I;2&b~v)vS=27233F%+%k2Oiw* zgcGY!<`m&ObUQIt{z_2nK2legy_B>xbfX3S{xR8oqz@!y?Ya6ZE@Z@LNoMG?Ls>R_ zay`JvDzJA~kPb>1>k&lrU+F3pP#(DyZ97-NR|Io0NO*kLV+YKOOC_d3upae zGqHD7eew{<3+xL`P)(3*IJ3<)xcWrfVloD{di~~*EUAmyTS!dk-vPf$iL`1L4T)fv#n-qW9UPiI0j`^LFvQrNM&-bN2G$Q-wswY(_y#MqoNTO>sw*xd5;F?Fm zwe#&yx~N|-Z{Fl(nH*`qI^@ATXXMN>K5RP#hl>TGS|m4j6K;_aE0WJuhu~Y+C7&me zu-VfeQ$g+SjaXvcw@+uGi=NYRm&NERtX-+b7>#7vt5cwvs)sx0Mi| zST1%>>1IlirY{E=OT9~|?mDmkSev%G)}pkL*A`sRSoD#4)7;G@D;{1yCuw&Qwm_Sn zGkmZ0V7G%SU0nc27b*02YtDCG#YA%<)w{f`PSj;x*=Y5W*HYMV9}F@uj4;yAhK%2# zqaS93+mCu_b$0(yZ<-DBbCX^&@L2M^X+DntJVS(8@T(CeT{EH?CM-QAziLx(*!kM!ers>Fs~-8k+Ky*joj}Z*0cFqTB%VmOKWaQn~tj z_xGt%hqnC$+yXmJpJVQl+GnxG3zqy)>ON^@Ly|vTv_SKNb}f%<$y0}uQ{jv?w`Ovb ziGnvWll7$-8Ui)FP|8PM5WCE?^0ZkeQW*#CZ5X&%MsaB(w?`O3W3wgxf#AzLBez*wkQX8m8d$QZ;i^?knaXvY;G*6aDelcIsBlZuLER`n?!iBIZk}! z8;=#NkRX--N1}@xz;RRBtLx}MJ`Qd>9xF%em2W89{sz}BCe04)MBs!LSxo2IXTZ9J zAC`Hyw~_PG^HkddJ1Ip`%>a(4yAt%W)sewa>m)OgZ^o&yTi-9JwH0K-P^FopNngUT zYfpf|T>OuneFHVERp!Vo+@{mX;fwX(p_i(UFV3NKifWa#aBX8IorDi0ab33CPAh>9 ze*vBy?`yf~4i7Weq*FEVTPH<1{AicF0nna&335r!Xlb5k`3b^zM^L%}=AK{QkK^G1 ziS1`&KD4_zr8xUjG#Z=q{;OxKWrL-0o1?jlIsTp2r77NIGsf{{Btt%t8wY#c@oeR~ zuYB=nwIDUn<;r=Hh89ih@>oyw4d82ns^?h0hX-_LI*0yueJ)msjD%ql4i^E|a4isjyB}%9s$rBzs}(*v(9w8z#WrJi zNRn8^)3Mbdez38#i(D8DW1}X(-@k3*Sb#(9{9s;Qa9L{!ErDMj@nMOU!Nzw5mHj?p zvKfM%$SxB)A3c(1+NN*FKX9j?t@auG8;Lc4S9txHnA zqNg#ApASNvXxrm93(1M7VCYI0S=ir>&#y5~7k5n#^|~5Qcs|s&Wdo5dH=eM3!4Ilf zi~Lu=t7oNZ3$fRcV%j%u|JCr;kF)pbs*F!ikOLL{G36M{ z+iWH6rZ=EOTMbjh9kJ3`9MrIPbLcLyR8E^AD@XIuAUYfic!!2CAR$ew{qvV0VwAnO zNL|v;@tbIOWh5);j=jUvJ&GZEcZVad8VN%KXKf}rP(q&!O!LVMS|I!d8(MFx{A_&2M;QqBBy8ihW zr|7yc#uA)!$INi7G_jZS6FruNz(n7VIs1iDB*L~(C}3iUFTZBcdBfmX(R2Pos#XNWA6z-txFESMtG>h&wR2YT?vpbZlmnbsb1L54B|6^5+rt z+b+I)$rKlITNI8z5upGEPFzvYPn{f5o%%tBEXY*Bs4VEU@~zroml1jGC{UvRYLNaG z)O)Z*L5FwnMa@kev(+G;hLIJcLIp3?Apcbq5nuWt(&k2rg~_2CDPi{p#T{KC&H&|n zk{B~Ty+DaCs_s4_!N6+v_fg*Qb1@Z1uKUO@?Czn&m}%xEN?c#tBxap21 zN?T5lQDFPTyO2Q>4F#L^82SjZ5qLSsHBm}voP!e-1FDZN*K41l| zh0A0AOY-TXrQQ=k_9;kAmbU66o)Hk^Ukxi>UvN85OzG6+KFgvt+pk$v@F_*KZZEND zMf6?~{Z9PP#Vf}te*?qkfzK$T-r#2aYe06aGLPsn7WtCHV$RJR=7Pbe6y83oph#95 zs7&6z%AhiSn~-H*>IDj=g!!;%adL{r@D|Tg zuwTx@&>tqsh6<3XV;5$B`k83$m6@G%H+{duK&m#}=wh1hoqX4km$m8$NVJg$Hm|dapioz``)} zQ^OfDuJCLjEA3rV_HxIaKOI_~k&}Q;ao5G}CqXC3J93|<3y!Nknro541ECfZKC7bv z=~GqpSUpb{FDrwz*bs;o140@CAx2{@O~i=W zsAY{x7&W`nUjxTKJkl8ZorLlYaAmLHVKZc}2#XkLbjf2^(&h}=HNIDO^ZHBKYsKMJ zDSbJwTnM>)j5ToAWgAC5uhc5MBdk*3;2K;awJV%?lt@c1_gnl7$2IeSBE7yUvEL{} z*%&Ql#bZ58O9VJh=M?hHcOxbO^j>XPhrRu>iksa9;Mmm39)H?s89Ih@l=#Fs9%EOS zL_{0UHN&&fPrXi*upoZ3NxG4)L|#Wb^LORVF>VIJuA+75MC&_iC+F(eOE9-%Q${;^ zL;(4Q^Ls#qqoHEgS8pC?b1Ldf*0eSCgmP4gnm%&CF`>>5Rr zyKOZ#hpeYw$_& zVYQLZLsmNxef4TI+!YMNd3zA-vWP+@6nH_GzNFl%6Sm9O_|v7?P$B(5uq6X0uZ&d{!EqEW&>yGlh2obxe?NB6U6m{hFG57ktx z>qnQkAQL{brs@4zjxb>)l#7NqOx3Q8(H&B~xgerR-xOywtuS!U#gYT9G1fbwH;Zku zH-oK_jkisBZ|X)BE))m{h>=NDu1m@0$F{zR6ilzD%?J}Q)wTA))NFtm>uG&Pn72~x z@V+g#Ua&w1EGV`9UX76{^`lwryKFl*Qt*!2V2jGbk6hy-jE68!02=|aCczGibgOHi zt~5b7q0+d~lN9S39f^10)f-OB3x5|aHyL6br4SdAqb}%rcRf7afw=j#Q}ikehioCf zqeRMB)xZ6W%T1|Tsce6<_l}oS`1v_0H@CK@S?Wh135?|#5Qx^vZ2 z_PNb~CbIUO;F=j!Cy%zj&Z7LX4F6m#d8ANf+_Zb!_DQ{J4cE+)`MtuJz%rcSq|nE(0_h@XiwD1_EG?t zTbo+r@QE(a@bUob;Mf>mz8oZ7z1-h$#TkS5OX|jN&2P0Pzzzno_H?~=DL`it==YgfpBpKpkxUCZZuiK0AY0b#ek8*uQ zVr7uYzbroRbdkyXBH;0(A5i(UQd+o-^G9tV2DfVQv5!N0Q333Jm!SfFUZ2L0y#+oaDv64Soe!e+dCI7ayHPZWo?3-hWh+C^pgv z)NJek_c%!P+8~XZ^>Ip*lH%8GzJ0U{C(Y+lM)_a6KvRK zkEj>)I~JT!b%rO;Y0i_9Z)8FdI=0QVPX947mgE3HFwIFAs|Wbf4IbqyDy5X_;6?=K z_aWq2u*6n#cewIRoUk>KDyhz!=CFC3AEB+X-4gdmSJ^l^Cei6p7>M zfc5X>RCi`+JEbtqKM3ipDY3zx7d*(l<02_8LHuMaEUmlBhUJl3Y)&LKkeA*xKJaZ7IV;_p zfNy*ysKy*~XrRMiH{F=J%C^j$hDw;LZjg~Vw@t^dh7ZMl9UXTqtiEnFC*7U^vGdz( z1M;VL=Q_Qw%)TlH1bT=a4x|+YSZ*6Tz-ky{5WdYWqv*;O+Pnthq-wZENMju)MKz2$ zz48^V?zrr<##U#tW=J&~MmdbyodKgYjTaI>$E<8!DlJypcY0LzjTD8sVCG$X=z#P0 zVVsVRw=BueqPOnY1I#?_Z&|Q86b~KHJ9u_AffoH-D0%TK?cr;u`8r-iVM@|x>xFY* z?1m?0lsnRTboOM4mkU3$ROIf^|9CgW)P@jRX6o*+^Bau2PzD^OPu2&8b@_p~w8EIs?wbJWf%7J_Pe zZr5_m7J{le(1R2@Y(%s^lX65?LaO8jou*U~B`)Z|-lbF$DQkcr>twW0k4~zDwS^ z3tCiF*T75D`~*XrZ9Y@*@ds^EN}gVof9H$zSsW?JhV8GfaOhIGb9Kl~onsUt+v8_8s&H)^rQMKLliV^p*IQuuisZ}g4fB0D$ z`&jRUKCU41Uw|6rpBg_9KjTPB%-DZ5t9H~iIDUU5EyCT_`JMJrGewhJMf$%si$1Cs zb%Ik0HV4R%>VB-no4VblZvojKc}y8cG~xeib4@d7)giO=LrK~S^;~UO(+h?Mt)>2V zLTewFqLXgiZC!ZUkM!_bL4oQ&|Le0YVvg0yQ5f1uV61U%@q$Cn7bufqmlhW66k*=- z75ty=W5&oxwWHo{mlgr|4l}8#L(o1vt&bD4#5$nNqeP>ZMui0hWUDLthA%actkzN~ zxwnP08U}bcvnP;A*bEQ$x)zEJ3-xV~z;KgG3IXV$;NpavuQOrdY^W7~r+Z*+l=zyu zsYXRmc_`5+afOX`HICIk6-cLwfrEDm4!Vs3gaDlSzNaIE%zi1-p&~$v^tFgCpd+Qr zp$RGS;SyjEDRk0wuz-<#FZtH5>`(udJ*1%SR}P`*wD9eb6q{QdI9{B)75ayh1&qS6 z$lQ4R@U;<bvqcHz)3^X-X$yOpg#oyb@ls6nGDpHc zc6gAl&eHzp?2X=Mx^)eiD^wo!=*#$tD_^1b`Cp^@#x*h3p-&yM+%e~;c3OLK7#iJg zM~_StV48VV)0#1HR)FkllFEA8>=Sn6or8i^G8WeICht_jvzbGy^ejlE5R&yb2>MW zyL}wAjR)}gOr?#vbG^@LC0}x1Lpe$3R^F~UA+_bL&dL3nm`a-fU#2~s%ys0g1LqbK znSRit-rs{~R+a$`nbSV-29|i(y3g>ec-X7cIziK5u4lXNmFWkfJpuZwNJ9GWVvk?G zvGnKjuNdMcs?Qezx9DCLI`TG$6OPIXc$ahKxT7W}YcHiB^10RNn4=ue1_4^mb;Y#( zFBPa~k(iQXDXaKBBLcK7Q>cR3Pg2g>*DotT`YVvo3Ung7Re})6`>z|go|6OlM+QHRlVdaS1)%?Q4(4(t=8pgN*vsG{I zt$r^cHZC2}Dm9aeO&gl@lR_1f1_ZYuMraL(>LyI9w4IVmo!g9dbBm#B#8V)LaxD5|s6js?JCp zw`5>5-9{YVOYbyG_o8t8%JBc0I47w~tsTez3><2h%0rHd0o}_)0ZY}u7Rt#0!~Y+W z{Ko=51V1;k{#O$^uobciHc(y`xNmrU?7*wm0#L#KZ6Gd+kphvuEGq`Kur_rnuUcU~ z2sr|W54-(Agn@DxUYK`YOGA1`ZSJ(hZi3ZSd4kcS4l9bC#7uvyD|;b?8;df~|D29u zNyAaJT2GTj`n;>Pbo+gD$L!@Kn~dq(&)6+}HB)w(ztr$E=E=WgAb*WhM`Kg@(aQWx zRUXTtc2=DcM8ML^F1836Oy|i$MAFMHv)v zQI_?+#y~@4T^_?T3U<>Xq*a{hiVMH1nd5i@)}DF7+qHl7`bUaSIYqSsQ&*UNqDNGC zMxxv-ZMtEInLX6Y9~xWiZ7miZIoC)1hV;^Z?Pko)d+lJ)s|}d64*;9vVEyED-4}hA zbfOnA)%4QI@ZzfARR(Hv>tus(e`ZNK6Jty0Jtz_78V|(&rO{4=?=enfA&+VyH*0+B z(XC`2)yj^-Pp(b3k^8rxYA@3>d)AZaS2F5P`6%o9tokpl^u7cfaV9sqgku9t^-}<} z$c}2s;-@CprZUsf7}4t}%l4?&6r}oiv}s?Fz*8C= zaNM8I>fkuVa%v;`9A%jv)vthLzY={hnn&4+Fj=q=F>TKltyx2+=RjF64O|w30UTrY z5i{};lb{0jsOy2J*B{dz@N^bu6tSmtQ2&9Li)&xeiOYZ{$*F(M&75i{r1SWX)BtSY zoCXmhK8d214z>OjkHJ3Jz3-+WF#wxCr$LB_|5H&*1MJ{aFllCJ%cZT?#eGps(XK{{ zFO#X#gq@nB)&z!}T4Pl#=>8Lop0{Cs%#*NbPWMxyYSu;Wu}mc{hh1X-gE}8_NVpGY z(|;Z70^PjrDb*gV>%?EQF2d}UI}_H6_jA&Uvjfj>(#p^fnZ=TWwH7vkJv(Cw{B_=H z-KCIT!ii|&{*Bm!Uvb;^QfjkOPFzLw)}J0_Z^otmr5$9&flmZGG5GIf$(3BoF=a<> zWSzJ2t!GxCG0CsQ+v0x_Dv*5$1wMq{b~HxT|CVKYX7}pB@2f{m86Ra+hBd*jfrRQk zMg=lGu<)Q6EcCPm3ojPI!u4vfuw4%HAfbP3A_nBm6^Xz>C23qSnf9biA~ z3D}=b1@Fut92|7Mt+hW+`+8{a53tunE8T11t z=D4|LI^wz{IH28Bi#g0p824z5kaqAgY2mqq{!gN*{}N5K|HnBxppB)4uV>{9x|maf z_7B*&nf6-NNe&{y*Hiz8+dE*3W7}J9a zcMj?_HAfV{v4u$O@c(hG+Xrmy40~w*6C0E>I9{Ik?C6?Fi0krfkH%gkcF{9oY@t3f z(aJj>i_{L{iqrrfX!nFMmc~eKD{qwzuFI}H8c;WU-7{yfQj@ZE_V8^^i^9 zXGu6qdE`8AFzEQz5dlw?JVO4m15}sTDHtg_*BQVkLfPtz)*qM!VpbM+cqG|9f5v;D zZ1s=7K7LOBMl~-yba<(U0bGCMMe*5mFEXTT4MZEv^W3O3968S)?1PVgrrUd)GCsNq zSax@M@TKGqMuRT!)Pf$|7n(N4xQ(Al{ws668A7pVI1Rw}xeN$6(xI8C27C%fY9FjC zCj7B(tUVhmdBMhHJw)Y6kj`P6M2sSrT|e>~PQyft>*8xHlS16yT^ANtx+`ZF&=a3C z`1pF;xY6OWwy`#AN{~G=jV2a{vLRBQ27pIUFh7D7V<&v#7SyWvHOtIH_$;%(2)@AA zNkx}%FEZ4-^@8sdURGt)>v^?E04DJAm{q(QKd$FrC*$)JcEE;N%j9?k zi6$L9+l$YuPOkU$;R^5lKN+K2JEXwg?UmSpEmkkCqAL(`-UQvtYltN~QeeWBoz%`{ z5;)2KZlXW9|C7o3aQtTo^ClQx1P2>+!h0>fxPVt6Zh;()hiBps`c+}76if)_42%XI z2jD8c$$@}ZJLqY^`8D#kE#rS3EB@}oace!DMQiN}Hv+dc&rcBQA>~g`zx8p=Fq$^c zF1F^d=zf%Yw260V$JC*F{T}4Vph!^SMwE}w6uvloBc%^!pyG~HQl~l^FF+C%j!YLp z6U|4XSNUXh>OpD<6kV=agDjOC-%a@eHAi{CvA+3v!*J?f-^qlw+We~}Q+bMQbUh*C zNj|iO`cMd;$7iVepNixUWZKG>Sn8$UcIP>lpd*K}cHOoUMd(+TjXdt|Ug|HF-hyQg zC?tuwr|;PH(G#;maqQPc=MLM**!UyqPud2D9E}AXoj9fG|9Y((w+g?HJI+EgAbIyB zTsID!*V}fF`8Y{3u|GWSI`Ovq2Z4~3&2Iek8NM5e^*r6}w{+&4wq6<@CH|9$a8*hr zCL}!$abX-Z^;gRK!PR|4$!Ix+AM=`U3j0BXwrIelIQdfQ-iTYj$UHSNcr7 z5VfP3fCrg3W9ail00qN6srP3}lJ&7|ZFDs&iD3q2oIJIBRXU~wH`?$4mkUXx@ZEKP z9Hg=KEjpZR(@2#E>dUD>e^RdJ8;jn6%hrv3ujO~XiZyxshvBUl}F9eaqepSSHk+|lQlWHJKhT> z#TBgBh%w>B9dID@lC;ckZVW}Ax@EFPue2Ri4{jlf_ZkurVwugE?uE^1LO;DK9XCDq z9afohfP~G(9m9PA4IeSmTHATRGn$AZ#^S)LRv^xs^sWlTva}}BJFhn2T`W?U9&7u1 z_4qcdy+`l5Cv zw=^u$W9;0N>m;F>i7j8(E{>cxr}b_qyVO%B%M;!GFKz7Zx%crVxfQ1ieA++H+<`{q z7k+*f?B~f8>At@wVE{=i^^Kxu^W<;8UoK}MM5)diC@}b2Svn1Rv1@m=3@Du zc;sVj+7`o3XhlmoTNPGHm_AI)tF%d72clgKVaM$ZL*G_u6n-IDYhjq-380PtOg5ac z+QvYi>g3Q_Sv>#O^js@V{fU&h#W-567Pe@ap`zJ|Y)CU&x^*kkl;7!QjCAAC=_j5j z+Vl2#JWFW4$E0F6p45+Ed@b>xh<_I`EJJxPZjP9){swIoRrmdPj%X8z3T<)W!0~bx z#?XRup2mvRgknW|N}rM5{w>^VOya-OE`z>NKQn4iV~^0)r2Y z7z-mC^24wYV_lI)AtNG88H+>Z9gB*=@s(o{tJW3uC5Gxz08nMx%CN-oxG+HFT{q4T zzWys6yJu_6#$N4D&8P8^6W()Ofp!t^x{iT8LKb72Pa1!y(V#0bXwjf0Gq}*8jZ>{j z?#0nFemmDuRxsS~)X?hJhdqx$G{k-~2AXJSI+NHbRLkNI_qR+{R%JLngiSytXD+hr zT*VlWAnH*A8;k~KaDlL>1GGn#x)?i$@R0as55aw~lmmEUmAcA*qqinP@QjNrG?=Y0 zxhAw0Lh#-x*F&(3L%|H)^|+&j=#RRI#!9>S&zwk< z`0Pq?V!wZrC>14Mhs!G!VYoOy*4yAHvedw+$BB&*pENys!u>g<2+#DK9?2lA${fUT z+5EoIwq*myc*s^_-P?apTsu(7D{H-xfgKSy+t-`QWtVF4rm~Pz1m8raoU~Qc;IDtO zgVQZo*$HyWid0LzuW~}q@a2)Tz2O5T{w7&zKr$Q!wp2xkdLykrIHmvA2$h9gWDUao zTB*`sCY1O4>xpW=rBI#*yLu+nls^yfP}flwGTaCP`M6TIBxsg3h?Da~t6xhfujFp_ z;HJ_%Iu1n@iA@x;sySL*7L$uE#N5+7NmYy}wGXQ6-#2>78@Z#lUE-`_oJ4q7r_Vgj zGW3NAG227mO;S`P2yyyR2hx;e5jB*>iWR&@EvHw>i;l?=|xmbQ5brMJKZ>) z3rFb~60S?>KV$t(*Mj55UJ3|5+E43e{#~6w8R1>x8hvr*0T3HgumDnOcW2~7(x310Ho!NKS3 zYFb&wQfqow5{iO7L8)Gka*=BO*2s(XoGHt zxtP&lwsJ<>t4#3o9>`$U))TE?>Jx=f$qd0abZZW%zwAVD!M9Pg8X@2vo(SWrjl9T- z42uM(rP?{lhBgGFi@>d>J+;NEpFknwv@A!DJQI6 z+=5eGY$H*{acQ;GiIPn{*s`}$Y3|+;uF(O%JQE{>jy%uvPp;1fo~|~W(ajlyZPrV= z@2#WpE+zbYd05?B7l9j>6J8wy1P1i=6IFC6t>@Q{YHd7z<0H#N(}OnIR!KXQH>JY)EL6~sN0|(tGav7nadSia z0E7F9$G9*6g~t?vAN z=3#4OlNs1SE`B-U=e!WO`mjrot|)qc4bX1r+s6FvPV4Nqlp@F2BFLrY?;6g3?IW5} z9k6EPEI0QxAGnOseYI&5FvrlX(a-x5W9QE@MHtosmw_KErd2p5Ck0TO-N!8&p+9iJ z_hu?%E$HmBz~DnL*kp?t=VWpGlo3-`@k0>r@m_y(_`4Oio1}!Hpgu5aWXzu5pRtpX z>MvD75hK+qQ7QZbUrbcja>Qv&R1ei>^)@Q1dSi=NCHxtJ4l@JH83H~JuwA~Q{WOI) zL-^!sfQh-vRt&3vj|s@tVGpNmE+J*9nNGbQh=w^oXZRbsJlNP4KA?c`qfcJsnn4=Te#=XqRKweL=X6-}va?2ZU3v<18f|rk3(PK@YU>sUd2KGw!BBS*RbJ%#ZjB1z zofI!S!*y4O$&% zyey^N`LZnbJqp4G_R5pGXXdXdzSROKsqlq-huM z)D+a+{#idEU+$FDfGm=g$;^$c2(Rt9m zJhpiHD@sY9ER1R~@~30w1*$}<95z+%^+lj2jH(&F)X8DNJkStE%#3Ook=y}@EvocT zET4 zdl-%WcLU=7dBM$~?E=NnGA_Vecqezedlt=W{jhw~OXJhimD2iR7+)VajF z2hvtLu4Ln?;o5e|eu;nAISwim=47YWV-70RWq7C8&ko3~Ka_M?M85QEC2aZp5c{&C zm0;ut9rzXb_YBDSS%1SSkkwuTbBPUVHZ9@No(}`C!GuM zz?*t6XHT6psR2$Z3)Jp)pP=C0`k+-!D$Bf&TCDPAR6Z?tTuva98nd|Xi?)-GmsARv z6%&69R#o`pB~=1UoKWrasgcA_eZ4~-KYCl04;#2|W1`$5+RsozJBJR_V(t^yaSv3d z$&!5s^iNjAU8FPRzW9!43x5pD0OFS)dMEmSR>V!UGUX_J`?QrZ;eASa0cIlbqVc>7zo&US&jK{3`hAqr%@s9aS-i z--{-T^HOOj_jtCf*IxydM-b zrGXVe3~Hc4;XW<-Bwr=UYAg0T=U)RQ3D;k9xkT+71COx6h|aS|zGXA5ayo}9MjRZj zxwNX~XX&Er;+u|SPTw99kij#O=HlgDd9*E_wLXTwV|-*vkF1VXLozfQbL^s`(2CC}*AKH0F$Q_uVokIdgC-z*DG`zBKDe~$uH4^A&H1Z{=2 zkla9t;1{>&iHbFfp|TIT}RmXvPf)5f03UdUIOlIU1P3)8>ChswvB3 z)GOW$QZ4pP?!*iDTmbPR3aN-;HlH$Pdv|85I+oKA=7;kTMWSg757{wg=Vo42pYZ13=i53c2B2ZBBOw22D zl$Te0f~fm~$;tcBr)X;8VxlggG{^%b@uEnJ|#ih8rySux)7I&w(L(yWT{f75>?)|~a&d#1p&KXWJ zGg(>T;7TB_6jN@F`l4N&bl&S49b9vIM{Y&CPU*+;zc_Az& z+EOUXX8|%AP#L7j7aLLKYVU=<>XkLCU*h@FCx^TcBcoogmUH+77n%Rr@kllcr`jkg z4Kr{e4FkkQU$!yW53TJsf=LzRk&Q=d%=Z0iFvXpBL-EvgZy^R=k=n5pZ0F+C zPV_`BO|atBM-&I)R1+Epqg~&_(woRY@ziDy*lszqo+L+CZkst@NZrvNS_`3b$7=1{f?G@eMGSJTs{!NLs{c}gNIwu)|DGr}iSJ zACy6P33+FCxt{ioq;E-E+p5fduSJE_9bJ?ic^Wqq?rjuLJ+Zlm*Qtkoni8uDUhZ;U z4oiY1Sx~>Qq5M@EfFlC8n0Y-Gy7cDW87<>?xvohj_OH+=vAufPGVI7M$RL9}-LE5vxQ~498Df~eXvA}PD5M=l9|1b&A z{z!h;`meH|;R6~zAN0af!iLR%dP7+sZM+EI6XNLZ0qVzyONUkW@%ktyM*HK|3qlwN zxFm}Y{lF0`)C3&`d3&EAGeQ_fmFI*!9GZM3Q{0w zLUs?|w~oOg#(t3zpsnX6(#pfB$x2q!g5$d$mg2 z@vD7)rZLI>IS$ddIolH8aqqZt15gYjSu7G(J8OEY#js*seyNHxF=9sh z8N1hbW@bYAtp_rWzd^nkzS2?u%vSyR{=}iQ{d~xJI@mL9GWyrP?&=KHaa9CwA0CX# zA&Mx{i~0r5SyDO@b<`~Qg@BAl1V0!P>P1*uCSGY&J@^c5A9ev$ED39hKS+qS01Ez0 zWb&7^n0h>d6i)Uy7*Myj5=09u)FFqGXp(@9vEt5cuNMvU$mWZI2CmAFVJrqln*-+v9*{7Y0Y(H~Y(v%m9ZZ#N zbrDzT`rf`h0hczD-lF`;=@YE;hV+qs-08dH*oJRA2|r&WhpMpFp=ZF?7y9^`1iH?> z-=C8)7m(a|zv5b$n=6piye<-<^!@&4>O(2^aQf@=Ws6rlz`W9jE=8 z=DyhL%RjID z&#PrvX%eJQ9>9mpN9delWG&ua(W8e18+aUSp z<_oc5b@z>JiN|~iPL9XCY0L9`3eMMVtIug&TJd2GB1lB+(YK$im6e))ZM-cX6*T7e z=91JuRZT-4iS+nZY5nj~Mq9}Xo$!^Xtx^%g60A&YsVI;oITEk2$^Y?bdl=k^rF;46 z4@RiLJWaem(=~VWfzML+I-M>wht0g@y#KV`NFf5tD)T~IdXiKTPr1>y(5F`W6Di(; zr#>S}{QRHM)TqP8l0kb;;O{@~%t7VqVz=Os?{te`##h%`JU=nNz$1xS)<0IMBAf(4 zy=s&Qf%k&SMh?Is-YZx3Z*KzpmaT3Rf*@Zts>n`poBfup_gpoF`_4ONP?O6mJp!o4 zUIE1ths-^r8GFbFS@i~SWZF{<4Ql=Oh{~j@ZSP+*28b0l(6OR`lg0;8G*7%4J*dJt zW5Ce=sWNfYl)n^G07M=B5J5-B-&dfdt}?%l9I!zOB)%CJ&zu6JJdh zlmzOcrw7+`+USd1JTdz`QDS5Lw@Z}}pr5!cz2Ni*B@T=Z&lc&v%~RH^ z^-mvhPdTK;bAZx_n^odT!iE;w!d{yxcNehupxXtyBd@U@%9ALKTU7(f?r(28o?{!! zrUv&WhF4ymDcDSI*zh=^XS=4SB2PU9FX3;z9vL*QDaSFlm<|SV8xi`B?s1EjuRZvf z+`W(EV{Tk{<;R?^2=CJaE*&nf3crqj05Yn74=B4n%!jNxG(+1LoWJ zrn|l?ULCDo`xAhH1aJ4Z|2n^Z8@o`AINU(B@4oppJwddJ9NB7k`7h~>j{e= zEzj#Vt*(F#UuY%xc3oiSXAIf?9ZM`k6saSmlR2)`cMV{JEpD7q6=NbOKN1*whs-DP zVJ=Li0BkV5@Lx2!V7_3d5A9}Hn)uxZ6mSqIsFs5edqmWnuz#RBDXejyMH0x=Rxxo^ z-C`s{^|wtk$n*%{5!W|%N5p#nDtsq1`Zo#^E4`NaEh9ZYHbaSqmw4|pIvLjNbGZmd zt{^?tS|X|-Jv}Dc5so+^6K5vsypNF)pYtqC#`EGS`fdLp`0!6*e|(ma$5nhb2XyFG zb;EdkHXl4?jXiO}ld{`eH&kYqhCM}kJ@ zsln`R`z9h5Sa`TsD545FyYXdei#V?qlpRIyucZwbv6*%y!6@DQd0a+gL%-33c%eH7 zPIaS>ZzSRRj9sfFTs+Exg~sTE&rNB9OR8Y)qRJ^kzoY}-n513|y*9OVWiSZ~?;`vd zuM7#q%MRi8^^Z>3DDUt>A}Un-Oxs|PGzqBPpOzE-O*!DzQw#0-;pXj=HMoXt`R!0G z>QAfNX%+*A(PAave+#w!E$42?CzCRt%uoh{F&-|$x{k8~LX8Qags@R+2kw1^#T@Zr zgtU-r_wH+i#XPWsh0>5}=kK?L#axLcg;o#&8%adW6-`{|HwOUhb^3;fMn<ZZY(G?!EoOH%Ciu|DY90iFL`gD+xEUq zk#*h|S$46s?NI^dQ&FBbbKBm^q?tzW-SZnuFiFKGLHofga}I1x!i6L z;tY9{G(J(x90z70yZkapTJ})AiX}d>I*}ATNh}2pM9ZTdVmExKjCGfgD5fzkC6BB@ zM*bOaCVw~+6O+U=q~$)GpEo_fo$4-mv-+8X0z%l2vQ@EIA5YVas*b{{M78{M#@6{ah=5P2zYYq zC^+b;s`O07r%&16m=>*0L~Fk&{s@5@$xcRqi~LR|a<=gplqbR@b&-4_4!0v*J^zJv zjc$PZvRsWZbBK+S5Chw-wg**Sdnp9nFQAN}rO?E>(J%g)Q#;a}!R7?|7jxc;tzE&0 zVEd)->Ywv*t&?AmLF3yjv6rz?waN*prc&86>2-6?n$ zDMUINw6Esvvpz3z>N9($)SU9e-o1^{i3L1hh1_3P0%6iKd4JJ{s`hW zV4J9f-50z?o@BX$6ssb2jY(jNJ`}wmb)7BY6tN0Q_=-ER`YUj*?{gyxdBdC;mf#Xf zD3!?ROLT!`@EuVw;#WOHBpzNWUK-BBGrzb3GL4rG(MCyPdNX<<4e6C}u@Ji>OZbV` zkOVTVzUMnK9ouNc4qcZ5G97nJYth=jq*@B&8nK8KUc=+@<$BSGp05PtVyU?-tQ54p z%J-yaKBc(xMOAb zlxK}X?|q{K<*99xxw?Z&2Lv){&cQ>2JGh#Pl*Vub=7)XqCjEOb&-JTx!V59*m7~(o>fBLXCOPuws43%m_(% zU~)#2PLRNb^L5gR6ppMO9B-#&rX_-aRlyK_TB9@%0uyZ}g9s%yr>>0KaU+oXW{ z0PPuQ$>7QaW&8-2wqc_i(8vFw9@xp9SOMj3{Yg_5?)O4^8T#c2nG)r*9C@zn4bCV2 z6l11XcRCRr!fW-wYW|H1CG>Qawxcdr|Rb>QBu0Qqa*d!?BjH`Cv57e(au zTm$7EXX;VK4T8pJ+EK-x=X>=*@n!HJxc1|Tzejck_lJL@?y~?}?TO>h*h~J~QR1=8 z^Ssl2L&R|d!AW2JX?Hc;L=RtcmY>TN9w^O2wd?JP-yXf)kMlxP6!Dqj<%|`=Q*>33 z_F43`TOsgN`)@agh$F-IoedW5Oc94gQvOU)hb9)@R56EpQr=W?hbX`=;V?ZWf z^cL7U-8=Z(Jni=feyEENnJvBm15UBE4|E(%7LMzFT=DT@fHzp6r%?^d zyFS;LZT3=q+GVXh2-Vo-*QNS0vGNbu+d0LStG(h@Oy(=~17bz^X#SSA%BMM1>(iQ^ zArcm%ob@xv}HnpkKA zLoX1e0>k~#R3$v5iKDG1Q+RN3iq5hLsU)Wfg<&@mh}PUf(*P9?kFDu^NVwAj{SNKU zoC*%^g-bG2zQ`^^MzmI?af*U$lSRuSG2S7Wj!kBqdn!4D;*gN?hdg>BG70S=p^%C+ zuTOrw3!{*?G_T)7yzBEJ*%@gTC-E^J)Iy7bH1Bu`9!6^*hh*qwadFmXGCr~s3wde9 z{Vuo)I6N*>Q43M*>Gb%tcyTtWVoI~FXgKSLI%+e@lGkX@IcFYv3;8Oj3u`7*UdGfw zZ_0F4{ex6jJOv(7Q;aJ(T4=Lsl|i?Y{02>WU8R4xZ~2$>^f{vzh8`3;W_H&hqs|zk z*oK!ZWB6HQonfDXcw|g3gLK6U0s9v^ zIkbq7PL^azEptXt!yFZ2iHh2Kq%`8ykTRi(Mj(iLxDranBU%G4cUQOwU4BnQhH`w6 zyis-zI?OC3AE7r$RDAyty6L8Z4yXqnd7ljqdBLg*9dme3lagDys9aVVHB3cOIet_{ zktN>h3hJK~#SzrIRq{U6ixtBW)T0&45!C$+Bi!*k4ATMBeXRC*lGmi~vIp_-SczMo zLDy12beTxFawG>Uc4yu#11y?sLq&ARj151uXt1gslWBo1!K^5=2gn|c_#$v++!?h8wla0Hh3}H;2i&akL1U!mvaNcet$ynT` zV+M^c$AEPy&2SU!@DUB04w%@cV?Sy5k8Ar>(xZvIiX1b#{z;m!wFbtBS`ss|!{<45 z&(Q>rrj^}f{LC4&^untVwe;!M++!0ksG7?dMFz5j0?qI_)_>;c>_(Fns_OB=2xet+B8dxl1&(qmO1}0O{v~EVY*qOy#uG z+xWFJ#9+1V<%7>SOC?~&;-%y)-!=We=a7iydSBKJ(JK+1f;~KC8!i`UA0C#-s(* zwUoyqQ%RJrAH)Om9SH_Uz%*?Xi)x<0ng%TdZ6iGSV@8kx4=~EP;o@<5t!apXZ3mlZ z`NEz)(55M9?r#r9N!#Ii&YkFS%1C6~P@#)}r`xWJI|f+ja-vZLz{M&+Az1C3VTeFx za;}S`f>SAQqKW6zCMiHc8zY+~X^MX-$nl`TtzH*riL?+}ftB6c8q1`JF6oE{ezad2 z0;||L8YJVf^5o)ENaX6V@??Qj7D#1SP)o^IU||-_hVci4(+#xAaiv`lY@r}cEKFiZ zNmZ8N{|;0S>Wa{&t7+52O4v57z-RU!4(Se{XL@PVTZwWa+CnR^s5V=Byu7ZuR67wd z^Y>9yBI?)pI-5Hs+kU_hvSAH$1js7`0ONnbV+RfZe3tx^UzIVSpGTq1TF1PB-8iPs_qO$> z-T~sz*#0O^X(E(wk1q$UHAdb$4DGM0zeRgwsC0XO)e=>neePdTDa6WFZacc?=Egxf z2sBzdF7!66|F@xE@-n4U+|$bc<2Pf$olcSK*sMj5D{|p90#xjx(P&CI!O1{$6|Q>@ zD%%3t9WR@O@pM0u|D_igCoJK~k8pZT`0LL#rrLw`v$!)X_9R0(qrMKH_GBj`pB~q( zimi9U^xe{-?yaaomV=P9`)1elAa51SR45RQ1 zh?`;Vgjk_yu^4H;UO3O6{ktMYUcdwC=n08n*e#rNoQcohJ+<@zf6U`1hq#fKhahV= z8=v3v*}NQr@5Z7z_<6qUS&A{Ug6XnlqbEDaQTH8E*<6D6#t#|zc^=I}R2+i8j5C3- zZ+dhyuibA7CW2R1pj_QNcXkA&npr-?d(SYfo_TxE(X0*q;Pa%WC2ZD2QD9b*9;Twk zjNua>TDR+|h>h(iOSuRtkzV{p>Sx4rsPGk2)y+wp5<9WXTJiec0RaUJo$6dm=|zH^ zG#s48r5VvQt=I+joDpUQt1|23?N4?1CDwvb(MKr@&FMdd87h)Xj~JSNUT$*=rYJ5F zOprOmmtGt0&J7G&eeStUci$;Hi)o4Sepq}MT{cN=EQ%*!TfMgR7zKprxNd;5l)9@r zr6vOAwAHLdhKw-D)Xc@HDRT0vDQkdg*i@t=dU)>Lps;$47E?fAY$I9`y&(m|KiRIy> zRT-U3-yS#p&`__*&K^SPSl3=cX*qRX0@mn09Hh$qH+pMq9RKQ zRkz{|=1PhhwN>Pz4z+e9n=SwefhDdluQCfbrLAs-5<|%?od0zT_$Qohm7y*^r6bHU zt{439rut|@drK`$MJ%Hl_=-ltine9YN@b;c;vKabxpuje149bkN+oaol90p{_P{dc zUb%F))f}%l9M2j~Fu|j{^Q}&um-v!1x1{IWdAx6?gS*M742%M27-1!1KYZdVDgP)-h*uxStMK@rWDQN**P#_ez zwxtO=l<9Jd7Z$&a*r_2=Jum$GleXpDfo(ctLAPcE8smeWfHT; z=0hVt%Q7FGTD(#w3AHQwsl|-4&CJ~{#IUJ!bhck^8)P&!pG+Lh5>q(ng?Kq9eq;`# z#O4s^a43!5oqt*3kLYa2%-~Q;6^w-^Ft!YzNj}{;vrW>uw=<91)^gurAd<=9fCfFN zRWy}~2SX1hy>0jU3O)Qfx&FykS7jcPCGc>Mnep^9>wfI*rQN#g-E&v(&F{t5%B8Qf zVCrD!D%4*<vYY9uYQna^^5M;c5i{oc zg~X2iY5RJen{k⪙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 system_installed_static_libs{"pcre", "re2", "yaml-cpp", "h3", "kphp-timelib"}; + std::vector system_installed_static_libs{"pcre", "yaml-cpp", "h3", "kphp-timelib"}; #ifdef KPHP_TIMELIB_LIB_DIR ld_flags.value_ += " -L" KPHP_TIMELIB_LIB_DIR; diff --git a/compiler/compiler.cmake b/compiler/compiler.cmake index c99c258312..c5b962b7e4 100644 --- a/compiler/compiler.cmake +++ b/compiler/compiler.cmake @@ -238,6 +238,8 @@ list(APPEND KPHP_COMPILER_SOURCES ${AUTO_DIR}/compiler/rewrite-rules/early_opt.cpp) vk_add_library_no_pic(kphp2cpp_src-no-pic OBJECT ${KPHP_COMPILER_SOURCES}) +add_dependencies(kphp2cpp_src-no-pic OpenSSL::no-pic::Crypto RE2::no-pic::re2) +target_include_directories(kphp2cpp_src-no-pic PUBLIC ${OPENSSL_NO_PIC_INCLUDE_DIRS} ${RE2_NO_PIC_INCLUDE_DIRS}) file(MAKE_DIRECTORY ${KPHP_COMPILER_AUTO_DIR}) add_custom_command(OUTPUT ${KEYWORDS_SET} @@ -274,10 +276,9 @@ set_property(SOURCE ${KPHP_COMPILER_DIR}/kphp2cpp.cpp add_executable(kphp2cpp ${KPHP_COMPILER_DIR}/kphp2cpp.cpp) target_include_directories(kphp2cpp PUBLIC ${KPHP_COMPILER_DIR}) -add_dependencies(kphp2cpp OpenSSL::no-pic::Crypto) -prepare_cross_platform_libs(COMPILER_LIBS yaml-cpp re2) -set(COMPILER_LIBS vk::no-pic::kphp2cpp_src vk::no-pic::tlo_parsing_src vk::no-pic::popular-common ${COMPILER_LIBS} fmt::fmt OpenSSL::no-pic::Crypto pthread) +prepare_cross_platform_libs(COMPILER_LIBS yaml-cpp) +set(COMPILER_LIBS vk::no-pic::kphp2cpp_src vk::no-pic::tlo_parsing_src vk::no-pic::popular-common ${COMPILER_LIBS} fmt::fmt OpenSSL::no-pic::Crypto RE2::no-pic::re2 pthread) if(NOT APPLE) list(APPEND COMPILER_LIBS stdc++fs) endif() diff --git a/compiler/pipes/register-kphp-configuration.cpp b/compiler/pipes/register-kphp-configuration.cpp index 0b339d7664..07a313cfb5 100644 --- a/compiler/pipes/register-kphp-configuration.cpp +++ b/compiler/pipes/register-kphp-configuration.cpp @@ -4,7 +4,7 @@ #include "compiler/pipes/register-kphp-configuration.h" -#include +#include "re2/re2.h" #include "common/algorithms/find.h" #include "compiler/compiler-core.h" diff --git a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md index ae0a36b5e7..33175668b9 100644 --- a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md +++ b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md @@ -53,7 +53,7 @@ Install packages ```bash apt-get update apt install git cmake-data=3.16* cmake=3.16* make g++ gperf python3-minimal python3-jsonschema \ - curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ + curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libpcre3-dev \ libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ postgresql postgresql-server-dev-all libpq-dev libldap-dev libkrb5-dev ``` diff --git a/runtime/confdata-keys.h b/runtime/confdata-keys.h index 8c27f0c5f6..438ef03be8 100644 --- a/runtime/confdata-keys.h +++ b/runtime/confdata-keys.h @@ -4,7 +4,7 @@ #pragma once #include -#include +#include "re2/re2.h" #include #include #include diff --git a/runtime/regexp.cpp b/runtime/regexp.cpp index ede2908cb7..836b0ed497 100644 --- a/runtime/regexp.cpp +++ b/runtime/regexp.cpp @@ -5,7 +5,7 @@ #include "runtime/regexp.h" #include -#include +#include "re2/re2.h" #if ASAN_ENABLED #include #endif diff --git a/runtime/runtime.cmake b/runtime/runtime.cmake index 662dd64495..9e9e7d2bba 100644 --- a/runtime/runtime.cmake +++ b/runtime/runtime.cmake @@ -1,4 +1,4 @@ -# CURL Build +# CURL and deps build include(${THIRD_PARTY_DIR}/nghttp2-cmake/nghttp2.cmake) include(${THIRD_PARTY_DIR}/curl-cmake/curl.cmake) @@ -139,11 +139,11 @@ set(KPHP_RUNTIME_ALL_SOURCES allow_deprecated_declarations(${BASE_DIR}/runtime/allocator.cpp ${BASE_DIR}/runtime/openssl.cpp) allow_deprecated_declarations_for_apple(${BASE_DIR}/runtime/inter-process-mutex.cpp) -prepare_cross_platform_libs(SYSTEM_INSTALLED_LIBS yaml-cpp re2 h3) +prepare_cross_platform_libs(SYSTEM_INSTALLED_LIBS yaml-cpp h3) #### NO PIC vk_add_library_no_pic(kphp-runtime-no-pic STATIC ${KPHP_RUNTIME_ALL_SOURCES}) -target_include_directories(kphp-runtime-no-pic PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) +target_include_directories(kphp-runtime-no-pic PUBLIC ${BASE_DIR}) set(RUNTIME_LIBS_NO_PIC vk::no-pic::kphp-server @@ -160,6 +160,7 @@ set(RUNTIME_LIBS_NO_PIC ZLIB::no-pic::zlib NGHTTP2::no-pic::nghttp2 ZSTD::no-pic::zstd + RE2::no-pic::re2 m pthread ) @@ -171,7 +172,7 @@ combine_static_runtime_library(kphp-runtime-no-pic kphp-full-runtime-no-pic) #### PIC vk_add_library_pic(kphp-runtime-pic STATIC ${KPHP_RUNTIME_ALL_SOURCES}) -target_include_directories(kphp-runtime-pic PUBLIC ${BASE_DIR} ${OPENSSL_INCLUDE_DIR} ${ZLIB_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) +target_include_directories(kphp-runtime-pic PUBLIC ${BASE_DIR}) set(RUNTIME_LIBS_PIC vk::pic::kphp-server @@ -188,6 +189,7 @@ set(RUNTIME_LIBS_PIC ZLIB::pic::zlib NGHTTP2::pic::nghttp2 ZSTD::pic::zstd + RE2::pic::re2 m pthread ) @@ -213,6 +215,7 @@ set(RUNTIME_LIBS ZLIB::${PIC_MODE}::zlib NGHTTP2::${PIC_MODE}::nghttp2 ZSTD::${PIC_MODE}::zstd + RE2::${PIC_MODE}::re2 m pthread ) @@ -266,7 +269,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 ${OPENSSL_INCLUDE_DIR} ${ZLIB_NO_PIC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIRS}) +target_include_directories(php_lib_version_j PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS}) target_compile_options(php_lib_version_j PRIVATE -I. -E) add_dependencies(php_lib_version_j kphp-full-runtime-no-pic kphp-full-runtime-pic) diff --git a/server/confdata-binlog-replay.h b/server/confdata-binlog-replay.h index ad3ae2811c..4b96bc4c1f 100644 --- a/server/confdata-binlog-replay.h +++ b/server/confdata-binlog-replay.h @@ -3,7 +3,7 @@ // Distributed under the GPL v3 License, see LICENSE.notice.txt #pragma once -#include +#include "re2/re2.h" #include "common/stats/provider.h" diff --git a/server/php-engine.cpp b/server/php-engine.cpp index 3543f7f14f..3fec9e3431 100644 --- a/server/php-engine.cpp +++ b/server/php-engine.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include "re2/re2.h" #include #include #include diff --git a/server/server.cmake b/server/server.cmake index fec617ecf4..82bd55b561 100644 --- a/server/server.cmake +++ b/server/server.cmake @@ -73,5 +73,11 @@ set(KPHP_SERVER_ALL_SOURCES ${KPHP_DATABASE_DRIVERS_PGSQL_SOURCES}) allow_deprecated_declarations_for_apple(${BASE_DIR}/server/php-runner.cpp) + vk_add_library_no_pic(kphp-server-no-pic OBJECT ${KPHP_SERVER_ALL_SOURCES}) +add_dependencies(kphp-server-no-pic RE2::no-pic::re2) +target_include_directories(kphp-server-no-pic PUBLIC ${RE2_NO_PIC_INCLUDE_DIRS}) + vk_add_library_pic(kphp-server-pic OBJECT ${KPHP_SERVER_ALL_SOURCES}) +add_dependencies(kphp-server-pic RE2::pic::re2) +target_include_directories(kphp-server-pic PUBLIC ${RE2_NO_PIC_INCLUDE_DIRS}) diff --git a/tests/python/requirements.txt b/tests/python/requirements.txt index c9b35840c8..78fcf4b961 100644 --- a/tests/python/requirements.txt +++ b/tests/python/requirements.txt @@ -11,3 +11,4 @@ pytest-postgresql==4.1.1 psycopg==3.1.9 pytest-xdist==3.3.1 zstandard==0.21.0 +six==1.17.0 diff --git a/third-party/re2 b/third-party/re2 new file mode 160000 index 0000000000..7754dc6e60 --- /dev/null +++ b/third-party/re2 @@ -0,0 +1 @@ +Subproject commit 7754dc6e6084efd10e03ee673d2cfdd1c7579fea diff --git a/third-party/re2-cmake/patches/kphp-unicode-data.patch.template b/third-party/re2-cmake/patches/kphp-unicode-data.patch.template new file mode 100644 index 0000000000..e09bd90849 --- /dev/null +++ b/third-party/re2-cmake/patches/kphp-unicode-data.patch.template @@ -0,0 +1,20 @@ +The Unicode data from the KPHP project should be used, rather than +downloading from unicode.org. + +--- + re2/unicode.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/re2/unicode.py b/re2/unicode.py +index e0f33ef..651b7cc 100644 +--- a/re2/unicode.py ++++ b/re2/unicode.py +@@ -13,7 +13,7 @@ import re + from six.moves import urllib + + # Directory or URL where Unicode tables reside. +-_UNICODE_DIR = "/usr/share/unicode" ++_UNICODE_DIR = "${UNICODE_AUTO_RAW_DATA_DIR}" + + # Largest valid Unicode code value. + _RUNE_MAX = 0x10FFFF diff --git a/third-party/re2-cmake/patches/series b/third-party/re2-cmake/patches/series new file mode 100644 index 0000000000..5559b33018 --- /dev/null +++ b/third-party/re2-cmake/patches/series @@ -0,0 +1 @@ +kphp-unicode-data.patch diff --git a/third-party/re2-cmake/re2.cmake b/third-party/re2-cmake/re2.cmake new file mode 100644 index 0000000000..d4ad0314b7 --- /dev/null +++ b/third-party/re2-cmake/re2.cmake @@ -0,0 +1,118 @@ +update_git_submodule(${THIRD_PARTY_DIR}/re2 "--recursive") +get_submodule_version(${THIRD_PARTY_DIR}/re2 RE2_VERSION) +get_submodule_remote_url(third-party/re2 RE2_SOURCE_URL) + +set(RE2_PROJECT_GENERIC_NAME re2) +set(RE2_PROJECT_GENERIC_NAMESPACE RE2) +set(RE2_ARTIFACT_NAME libre2) + +function(build_re2 PIC_ENABLED) + make_third_party_configuration(${PIC_ENABLED} ${RE2_PROJECT_GENERIC_NAME} ${RE2_PROJECT_GENERIC_NAMESPACE} + project_name + target_name + extra_compile_flags + pic_namespace + pic_lib_specifier + ) + + set(source_dir ${THIRD_PARTY_DIR}/${RE2_PROJECT_GENERIC_NAME}) + set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) + set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) + set(include_dirs ${install_dir}/include) + set(libraries ${install_dir}/lib/${RE2_ARTIFACT_NAME}.a) + set(vendor_patch_dir ${build_dir}/debian/patches/) + set(vendor_patch_series ${build_dir}/debian/patches/series) + set(template_patch_dir ${THIRD_PARTY_DIR}/${RE2_PROJECT_GENERIC_NAME}-cmake/patches) + set(template_patch_series ${THIRD_PARTY_DIR}/${RE2_PROJECT_GENERIC_NAME}-cmake/patches/series) + set(generated_patch_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/patches/) + set(generated_patch_series ${CMAKE_BINARY_DIR}/third-party/${project_name}/patches/series) + + # Ensure the build, installation and "include" directories exists + file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${install_dir}) + file(MAKE_DIRECTORY ${include_dirs}) + + # The configuration has been based on: + # https://sources.debian.org/src/re2/20190101%2Bdfsg-2/debian/rules/#L5 + set(compile_flags "$ENV{CFLAGS} -g0 -Wall -std=c++11 -O3 ${extra_compile_flags}") + + message(STATUS "RE2 Summary: + + PIC enabled: ${PIC_ENABLED} + Version: ${RE2_VERSION} + Source: ${RE2_SOURCE_URL} + Include dirs: ${include_dirs} + Libraries: ${libraries} + Target name: ${target_name} + Compiler: + CXX compiler: ${CMAKE_CXX_COMPILER} + CXX flags: ${compile_flags} + ") + + set(cmake_args + -DCMAKE_CXX_FLAGS=${compile_flags} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_POSITION_INDEPENDENT_CODE=${PIC_ENABLED} + -DBUILD_SHARED_LIBS=OFF + -DUSEPCRE=OFF + -DRE2_BUILD_TESTING=OFF + ) + + # Resolve templated patches + file(READ "${template_patch_series}" series_content) + string(REPLACE "\n" ";" series_list "${series_content}") + foreach(patch IN LISTS series_list) + if(NOT patch STREQUAL "") + configure_file(${template_patch_dir}/${patch}.template ${generated_patch_dir}/${patch}) + endif() + endforeach() + + ExternalProject_Add( + ${project_name} + DEPENDS unicode-data + PREFIX ${build_dir} + SOURCE_DIR ${source_dir} + INSTALL_DIR ${install_dir} + BINARY_DIR ${build_dir} + BUILD_BYPRODUCTS ${libraries} + PATCH_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${source_dir} ${build_dir} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${template_patch_dir} ${generated_patch_dir} + # Vendor patches + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${build_dir} -DPATCH_SERIES=${vendor_patch_series} -DPATCH_DIR=${vendor_patch_dir} -P ../../cmake/apply_patches.cmake + # KPHP patches + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${build_dir} -DPATCH_SERIES=${generated_patch_series} -DPATCH_DIR=${generated_patch_dir} -P ../../cmake/apply_patches.cmake + CONFIGURE_COMMAND + COMMAND pwd && ${Python3_EXECUTABLE} re2/make_unicode_casefold.py > re2/unicode_casefold.cc + COMMAND ${Python3_EXECUTABLE} re2/make_unicode_groups.py > re2/unicode_groups.cc + COMMAND ${PERL_EXECUTABLE} re2/make_perl_groups.pl > re2/perl_groups.cc + COMMAND ${CMAKE_COMMAND} ${cmake_args} -S ${source_dir} -B ${build_dir} + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${INCLUDE_DIR} + BUILD_IN_SOURCE 0 + ) + + add_library(${target_name} STATIC IMPORTED) + set_target_properties(${target_name} PROPERTIES + IMPORTED_LOCATION ${libraries} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} + ) + + # Ensure that the RE2 are built before they are used + add_dependencies(${target_name} ${project_name}) + + # Set variables indicating that RE2 has been installed + set(${RE2_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${RE2_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${RE2_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) +endfunction() + +# PIC is OFF +build_re2(OFF) +# PIC is ON +build_re2(ON) + +set(RE2_FOUND ON) From 0477f7eed937754083a6e0aadd2048f143a6a232 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Mon, 3 Mar 2025 18:12:09 +0300 Subject: [PATCH 19/20] Use target_compile_options instead of set_target_properties Signed-off-by: Petr Shumilov --- cmake/utils.cmake | 4 ++-- runtime-light/runtime-light.cmake | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 38ce0ad5f6..3bd3f47650 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -34,8 +34,8 @@ function(vk_add_library_pic) add_library(${ARGV}) set_target_properties(${ARGV0} PROPERTIES POSITION_INDEPENDENT_CODE 1 - COMPILE_FLAGS "-fPIC" ) + target_compile_options(${ARGV0} PRIVATE -fPIC) add_vk_library_to_pic_namespace(${ARGV0}) endfunction() @@ -43,8 +43,8 @@ function(vk_add_library_no_pic) add_library(${ARGV}) set_target_properties(${ARGV0} PROPERTIES POSITION_INDEPENDENT_CODE 0 - COMPILE_FLAGS "-fno-pic -static" ) + target_compile_options(${ARGV0} PRIVATE -fno-pic -static) add_vk_library_to_no_pic_namespace(${ARGV0}) endfunction() diff --git a/runtime-light/runtime-light.cmake b/runtime-light/runtime-light.cmake index ed75fd5cf7..1c40280f34 100644 --- a/runtime-light/runtime-light.cmake +++ b/runtime-light/runtime-light.cmake @@ -44,7 +44,7 @@ set_target_properties(runtime-light-pic PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${BASE_DIR}/objs) target_compile_options( runtime-light-pic PUBLIC -stdlib=libc++ -iquote ${GENERATED_DIR} - ${THIRD_PARTY_INCLUDE} -fPIC -O3) + ${THIRD_PARTY_INCLUDE} -O3) target_link_options(runtime-light-pic PUBLIC -stdlib=libc++ -static-libstdc++) # add statically linking libraries string(JOIN " " ABSEIL_LIBS ${ABSEIL_LIBS}) From 365eca42a261b405af1cf31c0ca67361f27051c9 Mon Sep 17 00:00:00 2001 From: Petr Shumilov Date: Tue, 4 Mar 2025 17:05:54 +0300 Subject: [PATCH 20/20] Add pcre vendoring Signed-off-by: Petr Shumilov --- .github/workflows/Build.yml | 2 +- .github/workflows/Dockerfile.buster | 2 +- .github/workflows/Dockerfile.focal | 2 +- .gitmodules | 4 + CMakeLists.txt | 4 +- compiler/compiler-settings.cpp | 2 +- .../compiling-kphp-from-sources.md | 6 +- runtime/regexp.h | 2 +- runtime/runtime.cmake | 14 ++- third-party/curl-cmake/curl.cmake | 2 +- third-party/nghttp2-cmake/nghttp2.cmake | 4 +- third-party/pcre | 1 + third-party/pcre-cmake/pcre.cmake | 112 ++++++++++++++++++ third-party/re2-cmake/re2.cmake | 2 +- third-party/zlib-cmake/zlib.cmake | 2 +- third-party/zstd-cmake/zstd.cmake | 2 +- 16 files changed, 141 insertions(+), 22 deletions(-) create mode 160000 third-party/pcre create mode 100644 third-party/pcre-cmake/pcre.cmake diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index 703748e150..32b34d2379 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -146,7 +146,7 @@ jobs: run: | brew tap shivammathur/php brew update - brew install python@3.13 re2c cmake coreutils libiconv pcre yaml-cpp googletest shivammathur/php/php@7.4 + brew install python@3.13 re2c cmake coreutils libiconv yaml-cpp googletest shivammathur/php/php@7.4 brew link --overwrite --force shivammathur/php/php@7.4 /opt/homebrew/opt/python@3.13/libexec/bin/python -m pip install --upgrade pip --break-system-packages && /opt/homebrew/opt/python@3.13/libexec/bin/pip install --break-system-packages jsonschema six diff --git a/.github/workflows/Dockerfile.buster b/.github/workflows/Dockerfile.buster index 3816b6c1fd..e06baa8871 100644 --- a/.github/workflows/Dockerfile.buster +++ b/.github/workflows/Dockerfile.buster @@ -22,7 +22,7 @@ RUN apt-get update && \ git cmake-data=3.18* cmake=3.18* make g++ gperf netcat patch \ python3.7 python3-dev libpython3-dev python3-pip python3-setuptools python3-wheel mysql-server libmysqlclient-dev && \ pip3 install -r /tmp/requirements.txt && \ - apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libpcre3-dev \ + apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev \ libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer && \ rm -rf /var/lib/apt/lists/* && \ diff --git a/.github/workflows/Dockerfile.focal b/.github/workflows/Dockerfile.focal index fba676f9c8..313345b2e9 100644 --- a/.github/workflows/Dockerfile.focal +++ b/.github/workflows/Dockerfile.focal @@ -15,7 +15,7 @@ RUN apt-get update && \ git cmake make clang g++ g++-10 gperf netcat patch \ python3.7 python3-pip python3.7-distutils python3.7-dev libpython3.7-dev python3-jsonschema python3-setuptools mysql-server libmysqlclient-dev && \ python3.7 -m pip install pip && python3.7 -m pip install -r /tmp/requirements.txt && \ - apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev libpcre3-dev \ + apt-get install -y --no-install-recommends kphp-timelib libuber-h3-dev libfmt-dev libgtest-dev libgmock-dev \ libyaml-cpp-dev zlib1g-dev php7.4-dev libldap-dev libkrb5-dev \ libpq5=14.* postgresql-14 postgresql-server-dev-14 libpq-dev=14.* libnuma-dev composer unzip && \ rm -rf /var/lib/apt/lists/* diff --git a/.gitmodules b/.gitmodules index 83496f9e87..7c33fe4f75 100644 --- a/.gitmodules +++ b/.gitmodules @@ -26,3 +26,7 @@ [submodule "third-party/re2"] path = third-party/re2 url = https://github.com/VKCOM/re2.git +[submodule "third-party/pcre"] + path = third-party/pcre + url = https://github.com/PetrShumilov/pcre.git + branch = debian/buster diff --git a/CMakeLists.txt b/CMakeLists.txt index ad510cd5a8..763441392f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,8 +128,8 @@ install(FILES ${AUTO_DIR}/runtime/runtime-headers.h COMPONENT KPHP DESTINATION ${INSTALL_KPHP_SOURCE}/objs/generated/auto/runtime/) -set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "vk-flex-data, libuber-h3, libpcre3-dev, libre2-dev, libyaml-cpp-dev, \ - g++, kphp-timelib, libnuma-dev") +set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "vk-flex-data, libuber-h3, libyaml-cpp-dev, \ + gcc, g++, kphp-timelib, libnuma-dev") if (PDO_DRIVER_MYSQL) set(CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS "${CPACK_DEBIAN_KPHP_PACKAGE_DEPENDS}, libmysqlclient-dev") diff --git a/compiler/compiler-settings.cpp b/compiler/compiler-settings.cpp index 3a790d407b..c09566c79d 100644 --- a/compiler/compiler-settings.cpp +++ b/compiler/compiler-settings.cpp @@ -356,7 +356,7 @@ void CompilerSettings::init() { ld_flags.value_ = extra_ld_flags.get(); append_apple_options(cxx_default_flags, ld_flags.value_); - std::vector system_installed_static_libs{"pcre", "yaml-cpp", "h3", "kphp-timelib"}; + std::vector system_installed_static_libs{"yaml-cpp", "h3", "kphp-timelib"}; #ifdef KPHP_TIMELIB_LIB_DIR ld_flags.value_ += " -L" KPHP_TIMELIB_LIB_DIR; diff --git a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md index 33175668b9..c61b0c4fb3 100644 --- a/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md +++ b/docs/kphp-internals/developing-and-extending-kphp/compiling-kphp-from-sources.md @@ -53,7 +53,7 @@ Install packages ```bash apt-get update apt install git cmake-data=3.16* cmake=3.16* make g++ gperf python3-minimal python3-jsonschema \ - curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libpcre3-dev \ + curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev \ libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ postgresql postgresql-server-dev-all libpq-dev libldap-dev libkrb5-dev ``` @@ -73,7 +73,7 @@ Install packages ```bash apt-get update apt install git cmake make g++ gperf python3-minimal python3-jsonschema \ - curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev libre2-dev libpcre3-dev \ + curl-kphp-vk libuber-h3-dev kphp-timelib libfmt-dev libgtest-dev libgmock-dev \ libyaml-cpp-dev php7.4-dev libmysqlclient-dev libnuma-dev \ postgresql postgresql-server-dev-all libpq-dev libldap-dev libkrb5-dev ``` @@ -85,7 +85,7 @@ Make sure you have `brew` and `clang` (at least `Apple clang version 10.0.0`) # Install dependencies brew tap shivammathur/php brew update -brew install re2c cmake coreutils openssl libiconv re2 pcre yaml-cpp googletest shivammathur/php/php@7.4 +brew install re2c cmake coreutils openssl libiconv yaml-cpp googletest shivammathur/php/php@7.4 brew link --overwrite shivammathur/php/php@7.4 pip3 install jsonschema diff --git a/runtime/regexp.h b/runtime/regexp.h index ac33ebb15a..d426fb8a09 100644 --- a/runtime/regexp.h +++ b/runtime/regexp.h @@ -4,7 +4,7 @@ #pragma once -#include +#include "pcre/pcre.h" #include "common/mixin/not_copyable.h" diff --git a/runtime/runtime.cmake b/runtime/runtime.cmake index 9e9e7d2bba..3025750f94 100644 --- a/runtime/runtime.cmake +++ b/runtime/runtime.cmake @@ -1,4 +1,5 @@ -# CURL and deps build +# Only runtime-related third-parties +include(${THIRD_PARTY_DIR}/pcre-cmake/pcre.cmake) include(${THIRD_PARTY_DIR}/nghttp2-cmake/nghttp2.cmake) include(${THIRD_PARTY_DIR}/curl-cmake/curl.cmake) @@ -161,12 +162,13 @@ set(RUNTIME_LIBS_NO_PIC NGHTTP2::no-pic::nghttp2 ZSTD::no-pic::zstd RE2::no-pic::re2 + PCRE::no-pic::pcre m pthread ) target_link_libraries(kphp-runtime-no-pic PUBLIC ${RUNTIME_LIBS_NO_PIC}) -add_dependencies(kphp-runtime-no-pic kphp-timelib OpenSSL::no-pic::Crypto OpenSSL::no-pic::SSL CURL::no-pic::curl NGHTTP2::no-pic::nghttp2 ZLIB::no-pic::zlib ZSTD::no-pic::zstd) +add_dependencies(kphp-runtime-no-pic kphp-timelib OpenSSL::no-pic::Crypto OpenSSL::no-pic::SSL CURL::no-pic::curl NGHTTP2::no-pic::nghttp2 ZLIB::no-pic::zlib ZSTD::no-pic::zstd RE2::no-pic::re2 PCRE::no-pic::pcre) combine_static_runtime_library(kphp-runtime-no-pic kphp-full-runtime-no-pic) ### @@ -190,12 +192,13 @@ set(RUNTIME_LIBS_PIC NGHTTP2::pic::nghttp2 ZSTD::pic::zstd RE2::pic::re2 + PCRE::pic::pcre m pthread ) target_link_libraries(kphp-runtime-pic PUBLIC ${RUNTIME_LIBS_PIC}) -add_dependencies(kphp-runtime-pic kphp-timelib OpenSSL::pic::Crypto OpenSSL::pic::SSL CURL::pic::curl NGHTTP2::pic::nghttp2 ZLIB::pic::zlib ZSTD::pic::zstd) +add_dependencies(kphp-runtime-pic kphp-timelib OpenSSL::pic::Crypto OpenSSL::pic::SSL CURL::pic::curl NGHTTP2::pic::nghttp2 ZLIB::pic::zlib ZSTD::pic::zstd RE2::pic::re2 PCRE::pic::pcre) combine_static_runtime_library(kphp-runtime-pic kphp-full-runtime-pic) ### @@ -220,12 +223,13 @@ set(RUNTIME_LIBS pthread ) -prepare_cross_platform_libs(SYSTEM_INSTALLED_TEST_LIB pcre kphp-timelib) +prepare_cross_platform_libs(SYSTEM_INSTALLED_TEST_LIB kphp-timelib) set(RUNTIME_LINK_TEST_LIBS vk::${PIC_MODE}::flex-data-src CURL::${PIC_MODE}::curl OpenSSL::${PIC_MODE}::SSL NGHTTP2::${PIC_MODE}::nghttp2 + PCRE::${PIC_MODE}::pcre ${NUMA_LIB} ${SYSTEM_INSTALLED_TEST_LIB} ${EPOLL_SHIM_LIB} @@ -269,7 +273,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_NO_PIC_INCLUDE_DIRS}) +target_include_directories(php_lib_version_j PUBLIC ${ZLIB_NO_PIC_INCLUDE_DIRS} ${PCRE_NO_PIC_INCLUDE_DIRS}) target_compile_options(php_lib_version_j PRIVATE -I. -E) add_dependencies(php_lib_version_j kphp-full-runtime-no-pic kphp-full-runtime-pic) diff --git a/third-party/curl-cmake/curl.cmake b/third-party/curl-cmake/curl.cmake index 6d27bbbc01..0b0178a043 100644 --- a/third-party/curl-cmake/curl.cmake +++ b/third-party/curl-cmake/curl.cmake @@ -104,7 +104,7 @@ function(build_curl PIC_ENABLED) INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} ) - # Ensure that the curl are built before they are used + # Ensure that the curl is built before they are used add_dependencies(${target_name} ${project_name}) # Set variables indicating that curl has been installed diff --git a/third-party/nghttp2-cmake/nghttp2.cmake b/third-party/nghttp2-cmake/nghttp2.cmake index d48a7dd25d..74a200e6a5 100644 --- a/third-party/nghttp2-cmake/nghttp2.cmake +++ b/third-party/nghttp2-cmake/nghttp2.cmake @@ -27,8 +27,6 @@ function(build_nghttp2 PIC_ENABLED) file(MAKE_DIRECTORY ${install_dir}) file(MAKE_DIRECTORY ${include_dirs}) - # The configuration has been based on: - # https://sources.debian.org/src/libzstd/1.4.8%2Bdfsg-2.1/debian/rules/ set(compile_flags "$ENV{CFLAGS} -g0 ${extra_compile_flags}") message(STATUS "NGHTTP2 Summary: @@ -105,7 +103,7 @@ function(build_nghttp2 PIC_ENABLED) INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} ) - # Ensure that the Nghttp2 are built before they are used + # Ensure that the Nghttp2 is built before they are used add_dependencies(${target_name} ${project_name}) # Set variables indicating that Nghttp2 has been installed diff --git a/third-party/pcre b/third-party/pcre new file mode 160000 index 0000000000..8dada3bba9 --- /dev/null +++ b/third-party/pcre @@ -0,0 +1 @@ +Subproject commit 8dada3bba9407c98d80206904e2c11c67423cbeb diff --git a/third-party/pcre-cmake/pcre.cmake b/third-party/pcre-cmake/pcre.cmake new file mode 100644 index 0000000000..c631588098 --- /dev/null +++ b/third-party/pcre-cmake/pcre.cmake @@ -0,0 +1,112 @@ +update_git_submodule(${THIRD_PARTY_DIR}/pcre "--remote") +get_submodule_version(${THIRD_PARTY_DIR}/pcre PCRE_VERSION) +get_submodule_remote_url(third-party/pcre PCRE_SOURCE_URL) + +set(PCRE_PROJECT_GENERIC_NAME pcre) +set(PCRE_PROJECT_GENERIC_NAMESPACE PCRE) +set(PCRE_ARTIFACT_NAME libpcre) + +function(build_pcre PIC_ENABLED) + make_third_party_configuration(${PIC_ENABLED} ${PCRE_PROJECT_GENERIC_NAME} ${PCRE_PROJECT_GENERIC_NAMESPACE} + project_name + target_name + extra_compile_flags + pic_namespace + pic_lib_specifier + ) + + set(source_dir ${THIRD_PARTY_DIR}/${PCRE_PROJECT_GENERIC_NAME}) + set(build_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/build) + set(install_dir ${CMAKE_BINARY_DIR}/third-party/${project_name}/install) + set(include_dirs ${install_dir}/include) + set(libraries ${install_dir}/lib/${PCRE_ARTIFACT_NAME}.a) + set(patch_dir ${build_dir}/debian/patches/) + set(patch_series ${build_dir}/debian/patches/series) + # Ensure the build, installation and "include" directories exists + file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${install_dir}) + file(MAKE_DIRECTORY ${include_dirs}) + + set(compile_flags "$ENV{CFLAGS} -g0 -Wall ${extra_compile_flags}") + + message(STATUS "PCRE Summary: + + PIC enabled: ${PIC_ENABLED} + Version: ${PCRE_VERSION} + Source: ${PCRE_SOURCE_URL} + Include dirs: ${include_dirs} + Libraries: ${libraries} + Target name: ${target_name} + Compiler: + C compiler: ${CMAKE_C_COMPILER} + CFLAGS: ${compile_flags} + ") + + # The configuration has been based on: + # https://sources.debian.org/src/pcre3/2%3A8.39-12/debian/rules/#L30 + set(cmake_args + -DCMAKE_C_FLAGS=${compile_flags} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_FLAGS=${compile_flags} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_POSITION_INDEPENDENT_CODE=${PIC_ENABLED} + -DBUILD_STATIC_LIBS=ON + -DBUILD_SHARED_LIBS=OFF + -DPCRE_BUILD_PCRE8=ON + -DPCRE_BUILD_PCRECPP=OFF + -DPCRE_BUILD_PCREGREP=OFF + -DPCRE_BUILD_TESTS=OFF + -DPCRE_REBUILD_CHARTABLES=OFF + -DPCRE_SUPPORT_JIT=ON + -DPCRE_SUPPORT_UTF=ON + -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON + -DPCRE_SUPPORT_LIBZ=ON + -DZLIB_FOUND=ON + -DZLIB_ROOT=${ZLIB_${pic_lib_specifier}_ROOT} + -DZLIB_LIBRARIES=${ZLIB_${pic_lib_specifier}_LIBRARIES} + -DZLIB_INCLUDE_DIR=${ZLIB_${pic_lib_specifier}_INCLUDE_DIRS}/zlib + ) + + ExternalProject_Add( + ${project_name} + DEPENDS ZLIB::${pic_namespace}::zlib + PREFIX ${build_dir} + SOURCE_DIR ${source_dir} + INSTALL_DIR ${install_dir} + BINARY_DIR ${build_dir} + BUILD_BYPRODUCTS ${libraries} + PATCH_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory ${source_dir} ${build_dir} + COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${build_dir} -DPATCH_SERIES=${patch_series} -DPATCH_DIR=${patch_dir} -P ../../cmake/apply_patches.cmake + CONFIGURE_COMMAND + COMMAND ${CMAKE_COMMAND} ${cmake_args} -S ${source_dir} -B ${build_dir} -Wno-dev + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} --build ${build_dir} --config $ -j + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} --install ${build_dir} --prefix ${install_dir} --config $ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs} ${include_dirs}/${PCRE_PROJECT_GENERIC_NAME} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${include_dirs}/${PCRE_PROJECT_GENERIC_NAME} ${INCLUDE_DIR}/${PCRE_PROJECT_GENERIC_NAME} + BUILD_IN_SOURCE 0 + ) + + add_library(${target_name} STATIC IMPORTED) + set_target_properties(${target_name} PROPERTIES + IMPORTED_LOCATION ${libraries} + INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} + ) + + # Ensure that the PCRE is built before they are used + add_dependencies(${target_name} ${project_name}) + + # Set variables indicating that PCRE has been installed + set(${PCRE_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_ROOT ${install_dir} PARENT_SCOPE) + set(${PCRE_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE) + set(${PCRE_PROJECT_GENERIC_NAMESPACE}_${pic_lib_specifier}_LIBRARIES ${libraries} PARENT_SCOPE) +endfunction() + +# PIC is OFF +build_pcre(OFF) +# PIC is ON +build_pcre(ON) + +set(PCRE_FOUND ON) diff --git a/third-party/re2-cmake/re2.cmake b/third-party/re2-cmake/re2.cmake index d4ad0314b7..2efdf126a9 100644 --- a/third-party/re2-cmake/re2.cmake +++ b/third-party/re2-cmake/re2.cmake @@ -101,7 +101,7 @@ function(build_re2 PIC_ENABLED) INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} ) - # Ensure that the RE2 are built before they are used + # Ensure that the RE2 is built before they are used add_dependencies(${target_name} ${project_name}) # Set variables indicating that RE2 has been installed diff --git a/third-party/zlib-cmake/zlib.cmake b/third-party/zlib-cmake/zlib.cmake index d405019db2..13cf3c356d 100644 --- a/third-party/zlib-cmake/zlib.cmake +++ b/third-party/zlib-cmake/zlib.cmake @@ -66,7 +66,7 @@ function(build_zlib PIC_ENABLED) INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} ) - # Ensure that the zlib are built before they are used + # Ensure that the zlib is built before they are used add_dependencies(${target_name} ${project_name}) # Set variables indicating that zlib has been installed diff --git a/third-party/zstd-cmake/zstd.cmake b/third-party/zstd-cmake/zstd.cmake index 4899067a0c..2448568b3e 100644 --- a/third-party/zstd-cmake/zstd.cmake +++ b/third-party/zstd-cmake/zstd.cmake @@ -81,7 +81,7 @@ function(build_zstd PIC_ENABLED) INTERFACE_INCLUDE_DIRECTORIES ${include_dirs} ) - # Ensure that the ZSTD are built before they are used + # Ensure that the ZSTD is built before they are used add_dependencies(${target_name} ${project_name}) # Set variables indicating that ZSTD has been installed