Skip to content

Commit

Permalink
Quick and dirty translation of GN build rules for zlib
Browse files Browse the repository at this point in the history
  • Loading branch information
npaun committed Aug 27, 2024
1 parent 1e29f25 commit d1b9ac5
Show file tree
Hide file tree
Showing 3 changed files with 215 additions and 13 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,11 @@ jobs:
# 'Show timestamps' on the web interface)
run: |
bazelisk build --remote_download_minimal ${{ matrix.config.bazel-args }} --jobs=32 --disk_cache=~/bazel-disk-cache --remote_cache=https://bazel:${{ secrets.BAZEL_CACHE_KEY }}@bazel-remote-cache.devprod.cloudflare.dev --verbose_failures --config=v8-codegen-opt //...
- name: Upload binary for debugging
uses: actions/upload-artifact@v4
with:
name: ${{ runner.os }}-${{ runner.arch }}-binary
path: bazel-bin/src/workerd/server/workerd${{ runner.os == 'Windows' && '.exe' || '' }}
- name: Bazel test
run: |
bazelisk test --remote_download_minimal ${{ matrix.config.bazel-args }} --jobs=32 --disk_cache=~/bazel-disk-cache --remote_cache=https://bazel:${{ secrets.BAZEL_CACHE_KEY }}@bazel-remote-cache.devprod.cloudflare.dev --keep_going --verbose_failures --test_output=errors --config=v8-codegen-opt //...
Expand Down
3 changes: 0 additions & 3 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -282,9 +282,6 @@ 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`

# 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",
Expand Down
220 changes: 210 additions & 10 deletions build/BUILD.zlib
Original file line number Diff line number Diff line change
@@ -1,17 +1,217 @@
load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
# This config is based on the GN build
#Ref: https://chromium.googlesource.com/chromium/src/third_party/zlib.git/+/refs/heads/main/BUILD.gn
package(default_visibility = ["//visibility:public"])

filegroup(
name = "all_srcs",
srcs = glob(["**"]),
name = "zlib_common_headers",
srcs = [
"chromeconf.h",
"deflate.h",
"inffast.h",
"inffixed.h",
"inflate.h",
"inftrees.h",
"zconf.h",
"zlib.h",
"zutil.h",
],
visibility = ["//visibility:public"],
)

cmake(
name = "zlib",
lib_source = "@zlib//:all_srcs",
X86_DEFINES = ["ADLER32_SIMD_SSSE3"]

X86_WIN_DEFINES = ["X86_WINDOWS"]

X86_NOT_WIN_DEFINES = ["X86_NOT_WINDOWS"]

ARM_DEFINES = ["ADLER32_SIMD_NEON"]

X86_CLANG_FLAGS = ["-mssse3"]

filegroup(
name = "zlib_adler32_simd",
srcs = [
"adler32_simd.c",
"adler32_simd.h",
],
visibility = ["//visibility:public"],
)
#config is internal

ARM_DEFINES += ["CRC32_ARMV8_CRC32"]

ARM_LINUX_DEFINES = ["ARMV8_OS_LINUX"]

ARM_MACOS_DEFINES = ["ARMV8_OS_MACOS"]

ARM_WIN_DEFINES = ["ARMV8_OS_WINDOWS"]

filegroup(
name = "zlib_arm_crc32",
srcs = [
"crc32_simd.c",
"crc32_simd.h",
],
visibility = ["//visibility:public"],
)
# not windows and not clang has other config; don't think we support this
# config is internal

X86_DEFINES += ["INFLATE_CHUNK_SIMD_SSE2"]

X86_64_DEFINES = ["INFLATE_CHUNK_READ_64LE"]

ARM_DEFINES += ["INFLATE_CHUNK_SIMD_NEON"]

ARM_64_DEFINES = ["INFLATE_CHUNK_READ_64LE"]

filegroup(
name = "zlib_inflate_chunk_simd",
srcs = [
"contrib/optimizations/chunkcopy.h",
"contrib/optimizations/inffast_chunk.c",
"contrib/optimizations/inffast_chunk.h",
"contrib/optimizations/inflate.c",
],
visibility = ["//visibility:public"],
)
# config is internal
# warning suppression

X86_DEFINES += ["CRC32_SIMD_SSE42_PCLMUL"]

X86_CLANG_FLAGS += [
"-msse4.2",
"-mpclmul",
]

filegroup(
name = "zlib_crc32_simd",
srcs = [
"crc32_simd.c",
"crc32_simd.h",
"crc_folding.c",
],
visibility = ["//visibility:public"],
)

X86_DEFINES += ["DEFLATE_SLIDE_HASH_SSE2"]

ARM_DEFINES += ["DEFLATE_SLIDE_HASH_NEON"]

filegroup(
name = "zlib_slide_hash_simd",
srcs = [
"slide_hash_simd.h",
],
visibility = ["//visibility:public"],
)

filegroup(
name = "inflate_c",
srcs = [
"inflate.c",
],
visibility = ["//visibility:public"],
)

filegroup(
name = "zlib_files",
srcs = [
"adler32.c",
"chromeconf.h",
"compress.c",
"contrib/optimizations/insert_string.h",
"cpu_features.c",
"cpu_features.h",
"crc32.c",
"crc32.h",
"deflate.c",
"deflate.h",
"gzclose.c",
"gzguts.h",
"gzlib.c",
"gzread.c",
"gzwrite.c",
"infback.c",
"inffast.c",
"inffast.h",
"inffixed.h",
"inflate.h",
"inftrees.c",
"inftrees.h",
"trees.c",
"trees.h",
"uncompr.c",
"zconf.h",
"zlib.h",
"zutil.c",
"zutil.h",
],
visibility = ["//visibility:public"],
)

# phony targets to select the right defines
cc_library(
name = "zlib_x86_64",
defines = X86_DEFINES + X86_64_DEFINES + select({
"@platforms//os:windows": X86_WIN_DEFINES,
"//conditions:default": X86_NOT_WIN_DEFINES,
}),
)

cc_library(
name = "zlib_arm64",
defines = ARM_DEFINES + ARM_64_DEFINES + select({
"@platforms//os:windows": ARM_WIN_DEFINES,
"@platforms//os:macos": ARM_MACOS_DEFINES,
"@platforms//os:linux": ARM_LINUX_DEFINES,
"//conditions:default": [],
}),
)

cc_library(
name = "zlib_no_simd",
srcs = [":inflate_c"],
defines = ["CPU_NO_SIMD"],
)

cc_library(
name = "zlib_sources",
srcs = [
":zlib_adler32_simd",
":zlib_files",
":zlib_inflate_chunk_simd",
":zlib_slide_hash_simd",
] + select({
"@platforms//cpu:aarch64": [":zlib_arm_crc32"],
"@platforms//cpu:x86_64": [":zlib_crc32_simd"],
"//conditions:default": [":inflate_c"],
}),
copts = select({
"@platforms//cpu:x86_64": X86_CLANG_FLAGS, # FIXME: do we support any non-clang builds?
"//conditions:default": [],
}),
visibility = ["//visibility:public"],
# seriously...
lib_name = select({
"@platforms//os:windows": "zlib",
"//conditions:default": "libz",
deps = select({
"@platforms//cpu:aarch64": [":zlib_arm64"],
"@platforms//cpu:x86_64": [":zlib_x86_64"],
"//conditions:default": [":zlib_no_simd"],
}),
)

cc_library(
name = "zlib_headers",
hdrs = [":zlib_common_headers"],
includes = ["."],
visibility = ["//visibility:public"],
)

cc_library(
name = "zlib",
visibility = ["//visibility:public"],
deps = [
":zlib_headers",
":zlib_sources",
],
)

0 comments on commit d1b9ac5

Please sign in to comment.