Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/velox_backend_arm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ jobs:
- name: Build Gluten native libraries
run: |
df -a
pip install cmake==3.31.4
bash dev/ci-velox-buildstatic-centos-9.sh
ccache -s
- name: "Save ccache"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/velox_backend_x86.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1178,7 +1178,7 @@ jobs:
mkdir -p /work/.ccache

cd /work
bash dev/builddeps-veloxbe.sh --run_setup_script=OFF --build_arrow=OFF --build_tests=ON --build_benchmarks=ON --enable_gpu=ON
bash dev/builddeps-veloxbe.sh --run_setup_script=ON --build_arrow=OFF --build_tests=ON --build_benchmarks=ON --enable_gpu=ON
rm -rf ep/build-velox/build/velox_ep
build/mvn clean package -Pbackends-velox -Pspark-3.4 -DskipTests
ccache -s
Expand Down
45 changes: 45 additions & 0 deletions cpp/velox/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,51 @@ else()
endif()
target_link_libraries(velox PUBLIC external::geos)

find_package(veloxthrift CONFIG)
if(veloxthrift_FOUND AND TARGET veloxthrift::veloxthrift)
add_library(external::veloxthrift ALIAS veloxthrift::veloxthrift)
else()
message(STATUS "import Velox bundled veloxthrift")
import_library(external::veloxthrift ${VELOX_BUILD_PATH}/velox/dwio/parquet/thrift/libvelox_dwio_parquet_thrift_raw.a)
endif()
target_link_libraries(velox PUBLIC external::veloxthrift)

# Link thrift libraries - check vcpkg first, then fall back to system libraries
# Determine vcpkg triplet directory based on architecture
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
set(VCPKG_TRIPLET_DIR "x64-linux-avx")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(aarch64)|(arm64)")
set(VCPKG_TRIPLET_DIR "arm64-linux-neon")
else()
message(WARNING "Unknown processor type for vcpkg: ${CMAKE_SYSTEM_PROCESSOR}, defaulting to x64-linux-avx")
set(VCPKG_TRIPLET_DIR "x64-linux-avx")
endif()

if(DEFINED VCPKG_INSTALLED_DIR AND EXISTS "${VCPKG_INSTALLED_DIR}/${VCPKG_TRIPLET_DIR}/lib/libthriftcpp2.a")
message(STATUS "Using vcpkg thrift libraries from ${VCPKG_INSTALLED_DIR}/${VCPKG_TRIPLET_DIR}")
target_link_libraries(
velox
PRIVATE
${VCPKG_INSTALLED_DIR}/${VCPKG_TRIPLET_DIR}/lib/libthriftcpp2.a
${VCPKG_INSTALLED_DIR}/${VCPKG_TRIPLET_DIR}/lib/libthriftprotocol.a
)
else()
message(STATUS "Using system thrift libraries from /usr/local/lib")
find_library(THRIFTCPP2_LIB NAMES thriftcpp2 PATHS /usr/local/lib NO_DEFAULT_PATH)
find_library(THRIFTPROTOCOL_LIB NAMES thriftprotocol PATHS /usr/local/lib NO_DEFAULT_PATH)

if(THRIFTCPP2_LIB AND THRIFTPROTOCOL_LIB)
target_link_libraries(
velox
PRIVATE
${THRIFTCPP2_LIB}
${THRIFTPROTOCOL_LIB}
)
else()
message(FATAL_ERROR "Could not find thrift libraries. Please install them or use vcpkg.")
endif()
endif()

find_package(simdjson CONFIG)
if(simdjson_FOUND AND TARGET simdjson::simdjson)
target_link_libraries(velox PUBLIC simdjson::simdjson)
Expand Down
2 changes: 0 additions & 2 deletions cpp/velox/utils/ConfigExtractor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,6 @@ std::shared_ptr<facebook::velox::config::ConfigBase> createHiveConnectorSessionC
configs[facebook::velox::connector::hive::HiveConfig::kReadTimestampUnitSession] = std::string("6");
configs[facebook::velox::connector::hive::HiveConfig::kMaxPartitionsPerWritersSession] =
conf->get<std::string>(kMaxPartitions, "10000");
configs[facebook::velox::connector::hive::HiveConfig::kMaxTargetFileSize] =
conf->get<std::string>(kMaxTargetFileSize, "0B"); // 0 means no limit on target file size
configs[facebook::velox::connector::hive::HiveConfig::kIgnoreMissingFilesSession] =
conf->get<bool>(kIgnoreMissingFiles, false) ? "true" : "false";
configs[facebook::velox::connector::hive::HiveConfig::kParquetUseColumnNamesSession] =
Expand Down
6 changes: 1 addition & 5 deletions dev/build-arrow.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ function build_arrow_cpp() {
-DARROW_PROTOBUF_USE_SHARED=OFF \
-DARROW_DEPENDENCY_USE_SHARED=OFF \
-DARROW_DEPENDENCY_SOURCE=BUNDLED \
-DARROW_WITH_THRIFT=ON \
-DARROW_WITH_LZ4=ON \
-DARROW_WITH_SNAPPY=ON \
-DARROW_WITH_ZLIB=${ARROW_WITH_ZLIB} \
-DARROW_WITH_ZSTD=ON \
-DBoost_NO_BOOST_CMAKE=TRUE \
-DARROW_JEMALLOC=OFF \
-DARROW_SIMD_LEVEL=NONE \
-DARROW_RUNTIME_SIMD_LEVEL=NONE \
Expand All @@ -68,10 +68,6 @@ function build_arrow_cpp() {
-DARROW_BUILD_SHARED=OFF \
-DARROW_BUILD_STATIC=ON

# Install thrift.
cd _build/thrift_ep-prefix/src/thrift_ep-build
${SUDO} cmake --install ./ --prefix "${INSTALL_PREFIX}"/
popd
}

function build_arrow_java() {
Expand Down
2 changes: 1 addition & 1 deletion dev/ci-velox-buildshared-centos-9.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ if [ "$(uname -m)" = "aarch64" ]; then
export VCPKG_FORCE_SYSTEM_BINARIES=1;
fi

./dev/builddeps-veloxbe.sh --run_setup_script=OFF --build_arrow=OFF --build_tests=ON \
./dev/builddeps-veloxbe.sh --run_setup_script=ON --build_arrow=ON --build_tests=ON \
--build_examples=ON --build_benchmarks=ON
2 changes: 1 addition & 1 deletion dev/ci-velox-buildstatic-centos-7.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@

set -e

export NUM_THREADS=4
cp ep/build-velox/src/socket.h /usr/include/asm-generic/socket.h
./dev/builddeps-veloxbe.sh --enable_vcpkg=ON --build_arrow=OFF --build_tests=OFF --build_benchmarks=OFF \
--build_examples=OFF --enable_s3=ON --enable_gcs=ON --enable_hdfs=ON --enable_abfs=ON
4 changes: 2 additions & 2 deletions dev/vcpkg/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ cd "$SCRIPT_ROOT"
if [ ! -d "$VCPKG_ROOT" ] || [ -z "$(ls "$VCPKG_ROOT")" ]; then
# The builtin-baseline (commit hash) specified in vcpkg.json should exist in this branch.
# Therefore, upgrading the builtin-baseline may require updating the branch.
git clone https://github.com/microsoft/vcpkg.git --branch 2025.09.17 "$VCPKG_ROOT"
git clone https://github.com/microsoft/vcpkg.git --branch 2026.03.18 "$VCPKG_ROOT"
fi
[ -f "$VCPKG" ] || "$VCPKG_ROOT/bootstrap-vcpkg.sh" -disableMetrics

Expand All @@ -92,7 +92,7 @@ if [ "${VCPKG_DYNAMIC_OPENSSL:-OFF}" = "ON" ]; then
fi


$VCPKG install --no-print-usage \
$VCPKG install --no-print-usage --allow-unsupported \
--triplet="${VCPKG_TRIPLET}" --host-triplet="${VCPKG_TRIPLET}" ${EXTRA_FEATURES}

# For fixing a build error like below when gluten's build type is Debug:
Expand Down
23 changes: 23 additions & 0 deletions dev/vcpkg/ports/fbthrift/compactv1-protocol-refiller.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--- a/thrift/lib/cpp2/protocol/ProtocolReaderWithRefill.h
+++ b/thrift/lib/cpp2/protocol/ProtocolReaderWithRefill.h
@@ -172,6 +172,20 @@
protocol_.skipBytes(bytes);
}

+ protected:
+ /**
+ * Allow derived refill readers to use this helper where they cannot access
+ * CompactProtocolReader::in_ directly (due to not having a friend
+ * declaration).
+ * Allows users to implement refill readers for CompactV1ProtocolReader if
+ * necessary, without supporting it in the Thrift codebase or having to patch
+ * in a friend declaration.
+ */
+ template <typename T>
+ T readLEFromBuffer() {
+ return protocol_.in_.template readLE<T>();
+ }
+
private:
/**
* Make sure a varint can be read from the current buffer after idx bytes.
47 changes: 47 additions & 0 deletions dev/vcpkg/ports/fbthrift/fix-deps.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2f214f5..b45f528 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -118,12 +118,15 @@ endif ()

# Find required dependencies for thrift/lib
if (THRIFT_LIB_ONLY OR build_all)
- find_package(Gflags REQUIRED)
- find_package(Glog REQUIRED)
+ find_package(gflags CONFIG REQUIRED)
+ set(LIBGFLAGS_LIBRARY gflags::gflags)
+ find_package(glog CONFIG REQUIRED)
+ set(GLOG_LIBRARIES glog::glog)
find_package(fizz CONFIG REQUIRED)
find_package(wangle CONFIG REQUIRED)
find_package(ZLIB REQUIRED)
- find_package(Zstd REQUIRED)
+ find_package(zstd CONFIG REQUIRED)
+ set(ZSTD_LIBRARIES zstd::libzstd)
find_package(Xxhash REQUIRED)
find_package(mvfst CONFIG REQUIRED)
# https://cmake.org/cmake/help/v3.9/module/FindThreads.html
diff --git a/thrift/cmake/FBThriftConfig.cmake.in b/thrift/cmake/FBThriftConfig.cmake.in
index e279485..4dd8bd1 100644
--- a/thrift/cmake/FBThriftConfig.cmake.in
+++ b/thrift/cmake/FBThriftConfig.cmake.in
@@ -29,9 +29,16 @@ else()
set_and_check(FBTHRIFT_COMPILER "@PACKAGE_BIN_INSTALL_DIR@/thrift1")
endif()

-find_dependency(Xxhash REQUIRED)
-find_dependency(ZLIB REQUIRED)
-find_package(mvfst CONFIG REQUIRED)
+find_dependency(xxHash CONFIG)
+find_dependency(ZLIB)
+find_dependency(mvfst CONFIG)
+find_dependency(fizz CONFIG)
+find_dependency(fmt CONFIG)
+find_dependency(folly CONFIG)
+find_dependency(gflags CONFIG)
+find_dependency(glog CONFIG)
+find_dependency(wangle CONFIG)
+find_dependency(zstd CONFIG)

if (NOT TARGET FBThrift::thriftcpp2)
include("${FBTHRIFT_CMAKE_DIR}/FBThriftTargets.cmake")
13 changes: 13 additions & 0 deletions dev/vcpkg/ports/fbthrift/fix-fmt-include.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/thrift/lib/cpp2/server/RoundRobinRequestPile.h b/thrift/lib/cpp2/server/RoundRobinRequestPile.h
index 3a06c5b..bae9387 100644
--- a/thrift/lib/cpp2/server/RoundRobinRequestPile.h
+++ b/thrift/lib/cpp2/server/RoundRobinRequestPile.h
@@ -21,6 +21,8 @@
#include <limits>
#include <memory>

+#include <fmt/ranges.h>
+
#include <folly/Executor.h>
#include <folly/concurrency/UnboundedQueue.h>
#include <folly/io/async/AtomicNotificationQueue.h>
16 changes: 16 additions & 0 deletions dev/vcpkg/ports/fbthrift/fix-test.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
diff --git a/thrift/lib/cpp2/CMakeLists.txt b/thrift/lib/cpp2/CMakeLists.txt
index 439f0814..3374dd34 100644
--- a/thrift/lib/cpp2/CMakeLists.txt
+++ b/thrift/lib/cpp2/CMakeLists.txt
@@ -15,11 +15,6 @@
# Set the cpp2 directory
set(LIB_CPP2_HOME ${CMAKE_CURRENT_SOURCE_DIR})

-if (enable_tests)
- add_subdirectory(protocol/test)
-endif ()
-add_subdirectory(test)
-
#######
# CMAKE variables only have local/subdirectory scope
# So even though this is defined in ../thrift/CMakeLists.txt as a variable
13 changes: 13 additions & 0 deletions dev/vcpkg/ports/fbthrift/folly-has-liburing.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/thrift/lib/cpp2/security/SSLUtil.cpp b/thrift/lib/cpp2/security/SSLUtil.cpp
index 571ffef..8803f37 100644
--- a/thrift/lib/cpp2/security/SSLUtil.cpp
+++ b/thrift/lib/cpp2/security/SSLUtil.cpp
@@ -144,7 +144,7 @@ folly::AsyncSocketTransport::UniquePtr toFDSocket(

auto sock = fizzSock->template getUnderlyingTransport<folly::AsyncSocket>();
folly::AsyncSocketTransport::UniquePtr ret;
-#if defined(__linux__) && __has_include(<liburing.h>)
+#if defined(__linux__) && FOLLY_HAS_LIBURING
if (!sock &&
fizzSock->template getUnderlyingTransport<folly::AsyncIoUringSocket>()) {
// `AsyncFdSocket` currently lacks uring support, so hardcode `AsyncSocket`
102 changes: 102 additions & 0 deletions dev/vcpkg/ports/fbthrift/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO facebook/fbthrift
REF "v${VERSION}"
SHA512 32f2a648496a321b6aaf55197c2dc1412d030ca82f8d8a5ca0516379379a0f71dc17e2edcb2be3972f76603935c7dcae29769c067caa1ec8a33e7f4efb251581
HEAD_REF main
PATCHES
fix-deps.patch
folly-has-liburing.diff
fix-fmt-include.patch
compactv1-protocol-refiller.patch
)

file(REMOVE "${SOURCE_PATH}/thrift/cmake/FindGMock.cmake")
file(REMOVE "${SOURCE_PATH}/thrift/cmake/FindOpenSSL.cmake")
file(REMOVE "${SOURCE_PATH}/thrift/cmake/FindZstd.cmake")
file(REMOVE "${SOURCE_PATH}/build/fbcode_builder/CMake/FindGflags.cmake")
file(REMOVE "${SOURCE_PATH}/build/fbcode_builder/CMake/FindGlog.cmake")
file(REMOVE "${SOURCE_PATH}/build/fbcode_builder/CMake/FindGMock.cmake")
file(REMOVE "${SOURCE_PATH}/build/fbcode_builder/CMake/FindLibEvent.cmake")
file(REMOVE "${SOURCE_PATH}/build/fbcode_builder/CMake/FindSodium.cmake")
file(REMOVE "${SOURCE_PATH}/build/fbcode_builder/CMake/FindZstd.cmake")

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
"-Dthriftpy=OFF"
"-Denable_tests=OFF"
)
vcpkg_cmake_install()
vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/fbthrift)

file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")

# There should be no empty directories in vcpkg/packages/fbthrift_x64-linux
file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/include/thrift/common/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp/transport/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp/util/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/async/metadata/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/debug_thrift_data_difference/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/detail/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/dynamic/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/folly_dynamic/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/frozen/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/patch/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/protocol/detail/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/protocol/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/protocol/tool"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/reflection/demo"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/reflection/docs"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/runtime/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/schema/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/security/extensions/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/security/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/server/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/core/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/http2/common/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/http2/server/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/http2/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/inmemory/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/rocket/client/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/rocket/compression/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/rocket/core/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/rocket/framing/parser/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/rocket/payload/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/transport/rocket/server/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/util/gtest/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/util/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/cpp2/visitation/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/py3/benchmark"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/py3/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/any/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/benchmark"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/capi/benchmark"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/conformance"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/conformance/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/server/interceptor/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/server/test"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/test/adapters"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/test/cpp_conversion"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/python/test/request_context_extractor"
"${CURRENT_PACKAGES_DIR}/include/thrift/lib/thrift/annotation"
)
vcpkg_copy_tools(TOOL_NAMES thrift1 AUTO_CLEAN)
vcpkg_copy_pdbs()

if(EXISTS "${CURRENT_PACKAGES_DIR}/share/fbthrift/FBThriftConfig.cmake")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/fbthrift/FBThriftConfig.cmake"
"${PACKAGE_PREFIX_DIR}/lib/cmake/fbthrift" "${PACKAGE_PREFIX_DIR}/share/fbthrift")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/fbthrift/FBThriftConfig.cmake"
"${PACKAGE_PREFIX_DIR}/bin/thrift1.exe" "${PACKAGE_PREFIX_DIR}/tools/fbthrift/thrift1.exe")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/fbthrift/FBThriftConfig.cmake"
"${PACKAGE_PREFIX_DIR}/bin/thrift1" "${PACKAGE_PREFIX_DIR}/tools/fbthrift/thrift1")
endif()

# Only used internally and removed in master
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/fbthrift/FBThriftTargets.cmake" "LOCATION_HH=\\\"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/thrift/compiler/location.hh\\\"" "" IGNORE_UNCHANGED)

vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
35 changes: 35 additions & 0 deletions dev/vcpkg/ports/fbthrift/vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "fbthrift",
"version-string": "2026.02.23.00",
"description": "Facebook's branch of Apache Thrift, including a new C++ server.",
"homepage": "https://github.com/facebook/fbthrift",
"license": "Apache-2.0",
"supports": "x64 & static",
"dependencies": [
"boost-context",
"boost-filesystem",
"boost-program-options",
"boost-regex",
"boost-system",
"boost-thread",
"fizz",
"fmt",
"folly",
"gflags",
"glog",
"mvfst",
"openssl",
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
},
"wangle",
"xxhash",
"zlib",
"zstd"
]
}
Loading
Loading