From 00128a848614bdaa072c531fed3f568fa9e540b8 Mon Sep 17 00:00:00 2001 From: Nicholas Paun Date: Mon, 12 Aug 2024 15:38:06 -0700 Subject: [PATCH] Use V8's zlib --- WORKSPACE | 44 ++-- build/BUILD.zlib | 13 ++ .../api/node/tests/zlib-nodejs-test.js | 218 +++++++++--------- 3 files changed, 141 insertions(+), 134 deletions(-) create mode 100644 build/BUILD.zlib diff --git a/WORKSPACE b/WORKSPACE index 93b0f511b13..efa4be62ac8 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -280,34 +280,28 @@ http_archive( # the build process. To update the dependency, update the reference commit in # rust-deps/BUILD.bazel and run `bazel run //rust-deps:crates_vendor -- --repin` -# Based on https://github.com/bazelbuild/bazel/blob/master/third_party/zlib/BUILD. -_zlib_build = """ -cc_library( - name = "zlib", - srcs = glob(["*.c"]), - hdrs = glob(["*.h"]), - includes = ["."], - # Workaround for zlib warnings and mac compilation. Some issues were resolved in v1.3, but there are still implicit function declarations. - copts = [ - "-w", - "-Dverbose=-1", - ] + select({ - "@platforms//os:linux": [ "-Wno-implicit-function-declaration" ], - "@platforms//os:macos": [ "-Wno-implicit-function-declaration" ], - "//conditions:default": [], - }), - visibility = ["//visibility:public"], -) -""" +# rules_foreign_cc +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +# Rule repository, note that it's recommended to use a pinned commit to a released version of the rules http_archive( + name = "rules_foreign_cc", + sha256 = "2a4d07cd64b0719b39a7c12218a3e507672b82a97b98c6a89d38565894cf7c51", + strip_prefix = "rules_foreign_cc-0.9.0", + url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.9.0.tar.gz", +) + +load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies") + +# This sets up some common toolchains for building targets. For more details, please see +# https://github.com/bazelbuild/rules_foreign_cc/tree/main/docs#rules_foreign_cc_dependencies +rules_foreign_cc_dependencies() + +git_repository( name = "zlib", - build_file_content = _zlib_build, - sha256 = "38ef96b8dfe510d42707d9c781877914792541133e1870841463bfa73f883e32", - strip_prefix = "zlib-1.3.1", - # Using the .tar.xz artifact from the release page – for many other dependencies we use a - # snapshot based on the tag of a release instead. - urls = ["https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.xz"], + build_file = "//:build/BUILD.zlib", + commit = "71660e196bcfc74b2c657a46b512037cb49079a2", + remote = "https://chromium.googlesource.com/chromium/src/third_party/zlib.git", ) http_file( diff --git a/build/BUILD.zlib b/build/BUILD.zlib new file mode 100644 index 00000000000..fb4e2864309 --- /dev/null +++ b/build/BUILD.zlib @@ -0,0 +1,13 @@ +load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake") + +filegroup( + name = "all_srcs", + srcs = glob(["**"]), +) + +cmake( + name = "zlib", + lib_source = "@zlib//:all_srcs", + visibility = ["//visibility:public"], + lib_name = "libz", +) diff --git a/src/workerd/api/node/tests/zlib-nodejs-test.js b/src/workerd/api/node/tests/zlib-nodejs-test.js index 69c5a48533c..98841a37302 100644 --- a/src/workerd/api/node/tests/zlib-nodejs-test.js +++ b/src/workerd/api/node/tests/zlib-nodejs-test.js @@ -217,114 +217,114 @@ export const crc32Test = { export const constantsTest = { test() { - deepStrictEqual(Object.keys(constants).sort(), [ - "BROTLI_DECODE", - "BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES", - "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP", - "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES", - "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1", - "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2", - "BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS", - "BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET", - "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1", - "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2", - "BROTLI_DECODER_ERROR_FORMAT_CL_SPACE", - "BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT", - "BROTLI_DECODER_ERROR_FORMAT_DICTIONARY", - "BROTLI_DECODER_ERROR_FORMAT_DISTANCE", - "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE", - "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE", - "BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE", - "BROTLI_DECODER_ERROR_FORMAT_PADDING_1", - "BROTLI_DECODER_ERROR_FORMAT_PADDING_2", - "BROTLI_DECODER_ERROR_FORMAT_RESERVED", - "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET", - "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME", - "BROTLI_DECODER_ERROR_FORMAT_TRANSFORM", - "BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS", - "BROTLI_DECODER_ERROR_INVALID_ARGUMENTS", - "BROTLI_DECODER_ERROR_UNREACHABLE", - "BROTLI_DECODER_NEEDS_MORE_INPUT", - "BROTLI_DECODER_NEEDS_MORE_OUTPUT", - "BROTLI_DECODER_NO_ERROR", - "BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION", - "BROTLI_DECODER_PARAM_LARGE_WINDOW", - "BROTLI_DECODER_RESULT_ERROR", - "BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT", - "BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT", - "BROTLI_DECODER_RESULT_SUCCESS", - "BROTLI_DECODER_SUCCESS", - "BROTLI_DEFAULT_MODE", - "BROTLI_DEFAULT_QUALITY", - "BROTLI_DEFAULT_WINDOW", - "BROTLI_ENCODE", - "BROTLI_LARGE_MAX_WINDOW_BITS", - "BROTLI_MAX_INPUT_BLOCK_BITS", - "BROTLI_MAX_QUALITY", - "BROTLI_MAX_WINDOW_BITS", - "BROTLI_MIN_INPUT_BLOCK_BITS", - "BROTLI_MIN_QUALITY", - "BROTLI_MIN_WINDOW_BITS", - "BROTLI_MODE_FONT", - "BROTLI_MODE_GENERIC", - "BROTLI_MODE_TEXT", - "BROTLI_OPERATION_EMIT_METADATA", - "BROTLI_OPERATION_FINISH", - "BROTLI_OPERATION_FLUSH", - "BROTLI_OPERATION_PROCESS", - "BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING", - "BROTLI_PARAM_LARGE_WINDOW", - "BROTLI_PARAM_LGBLOCK", - "BROTLI_PARAM_LGWIN", - "BROTLI_PARAM_MODE", - "BROTLI_PARAM_NDIRECT", - "BROTLI_PARAM_NPOSTFIX", - "BROTLI_PARAM_QUALITY", - "BROTLI_PARAM_SIZE_HINT", - "DEFLATE", - "DEFLATERAW", - "GUNZIP", - "GZIP", - "INFLATE", - "INFLATERAW", - "UNZIP", - "ZLIB_VERNUM", - "Z_BEST_COMPRESSION", - "Z_BEST_SPEED", - "Z_BLOCK", - "Z_BUF_ERROR", - "Z_DATA_ERROR", - "Z_DEFAULT_CHUNK", - "Z_DEFAULT_COMPRESSION", - "Z_DEFAULT_LEVEL", - "Z_DEFAULT_MEMLEVEL", - "Z_DEFAULT_STRATEGY", - "Z_DEFAULT_WINDOWBITS", - "Z_ERRNO", - "Z_FILTERED", - "Z_FINISH", - "Z_FIXED", - "Z_FULL_FLUSH", - "Z_HUFFMAN_ONLY", - "Z_MAX_CHUNK", - "Z_MAX_LEVEL", - "Z_MAX_MEMLEVEL", - "Z_MAX_WINDOWBITS", - "Z_MEM_ERROR", - "Z_MIN_CHUNK", - "Z_MIN_LEVEL", - "Z_MIN_MEMLEVEL", - "Z_MIN_WINDOWBITS", - "Z_NEED_DICT", - "Z_NO_COMPRESSION", - "Z_NO_FLUSH", - "Z_OK", - "Z_PARTIAL_FLUSH", - "Z_RLE", - "Z_STREAM_END", - "Z_STREAM_ERROR", - "Z_SYNC_FLUSH", - "Z_VERSION_ERROR" - ]); + deepStrictEqual(constants, { + "Z_NO_FLUSH": 0, + "Z_PARTIAL_FLUSH": 1, + "Z_SYNC_FLUSH": 2, + "Z_FULL_FLUSH": 3, + "Z_FINISH": 4, + "Z_BLOCK": 5, + "Z_OK": 0, + "Z_STREAM_END": 1, + "Z_NEED_DICT": 2, + "Z_ERRNO": -1, + "Z_STREAM_ERROR": -2, + "Z_DATA_ERROR": -3, + "Z_MEM_ERROR": -4, + "Z_BUF_ERROR": -5, + "Z_VERSION_ERROR": -6, + "Z_NO_COMPRESSION": 0, + "Z_BEST_SPEED": 1, + "Z_BEST_COMPRESSION": 9, + "Z_DEFAULT_COMPRESSION": -1, + "Z_FILTERED": 1, + "Z_HUFFMAN_ONLY": 2, + "Z_RLE": 3, + "Z_FIXED": 4, + "Z_DEFAULT_STRATEGY": 0, + "ZLIB_VERNUM": 4865, + "DEFLATE": 1, + "INFLATE": 2, + "GZIP": 3, + "GUNZIP": 4, + "DEFLATERAW": 5, + "INFLATERAW": 6, + "UNZIP": 7, + "BROTLI_DECODE": 8, + "BROTLI_ENCODE": 9, + "Z_MIN_WINDOWBITS": 8, + "Z_MAX_WINDOWBITS": 15, + "Z_DEFAULT_WINDOWBITS": 15, + "Z_MIN_CHUNK": 64, + "Z_MAX_CHUNK": 131072, + "Z_DEFAULT_CHUNK": 16384, + "Z_MIN_MEMLEVEL": 1, + "Z_MAX_MEMLEVEL": 9, + "Z_DEFAULT_MEMLEVEL": 8, + "Z_MIN_LEVEL": -1, + "Z_MAX_LEVEL": 9, + "Z_DEFAULT_LEVEL": -1, + "BROTLI_OPERATION_PROCESS": 0, + "BROTLI_OPERATION_FLUSH": 1, + "BROTLI_OPERATION_FINISH": 2, + "BROTLI_OPERATION_EMIT_METADATA": 3, + "BROTLI_PARAM_MODE": 0, + "BROTLI_MODE_GENERIC": 0, + "BROTLI_MODE_TEXT": 1, + "BROTLI_MODE_FONT": 2, + "BROTLI_DEFAULT_MODE": 0, + "BROTLI_PARAM_QUALITY": 1, + "BROTLI_MIN_QUALITY": 0, + "BROTLI_MAX_QUALITY": 11, + "BROTLI_DEFAULT_QUALITY": 11, + "BROTLI_PARAM_LGWIN": 2, + "BROTLI_MIN_WINDOW_BITS": 10, + "BROTLI_MAX_WINDOW_BITS": 24, + "BROTLI_LARGE_MAX_WINDOW_BITS": 30, + "BROTLI_DEFAULT_WINDOW": 22, + "BROTLI_PARAM_LGBLOCK": 3, + "BROTLI_MIN_INPUT_BLOCK_BITS": 16, + "BROTLI_MAX_INPUT_BLOCK_BITS": 24, + "BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING": 4, + "BROTLI_PARAM_SIZE_HINT": 5, + "BROTLI_PARAM_LARGE_WINDOW": 6, + "BROTLI_PARAM_NPOSTFIX": 7, + "BROTLI_PARAM_NDIRECT": 8, + "BROTLI_DECODER_RESULT_ERROR": 0, + "BROTLI_DECODER_RESULT_SUCCESS": 1, + "BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT": 2, + "BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT": 3, + "BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION": 0, + "BROTLI_DECODER_PARAM_LARGE_WINDOW": 1, + "BROTLI_DECODER_NO_ERROR": 0, + "BROTLI_DECODER_SUCCESS": 1, + "BROTLI_DECODER_NEEDS_MORE_INPUT": 2, + "BROTLI_DECODER_NEEDS_MORE_OUTPUT": 3, + "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE": -1, + "BROTLI_DECODER_ERROR_FORMAT_RESERVED": -2, + "BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE": -3, + "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET": -4, + "BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME": -5, + "BROTLI_DECODER_ERROR_FORMAT_CL_SPACE": -6, + "BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE": -7, + "BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT": -8, + "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1": -9, + "BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2": -10, + "BROTLI_DECODER_ERROR_FORMAT_TRANSFORM": -11, + "BROTLI_DECODER_ERROR_FORMAT_DICTIONARY": -12, + "BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS": -13, + "BROTLI_DECODER_ERROR_FORMAT_PADDING_1": -14, + "BROTLI_DECODER_ERROR_FORMAT_PADDING_2": -15, + "BROTLI_DECODER_ERROR_FORMAT_DISTANCE": -16, + "BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET": -19, + "BROTLI_DECODER_ERROR_INVALID_ARGUMENTS": -20, + "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES": -21, + "BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS": -22, + "BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP": -25, + "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1": -26, + "BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2": -27, + "BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES": -30, + "BROTLI_DECODER_ERROR_UNREACHABLE": -31 + }); } }