| # This file will be copied into //third_party/externals/zlib via the new_local_repository |
| # rule in WORKSPACE.bazel, so all files should be relative to that path. |
| |
| # We define this here because the emscripten toolchain calls the cpu wasm, whereas the |
| # bazelbuild/platforms call it wasm32. https://github.com/emscripten-core/emsdk/issues/919 |
| config_setting( |
| name = "cpu_wasm", |
| values = { |
| "cpu": "wasm", |
| }, |
| ) |
| |
| constraint_value( |
| name = "fuchsia", |
| constraint_setting = "@platforms//os:os", |
| ) |
| |
| config_setting( |
| name = "fuchsia_arm64", |
| constraint_values = [ |
| "@platforms//cpu:arm64", |
| ":fuchsia", |
| ], |
| ) |
| |
| config_setting( |
| name = "linux_x64", |
| constraint_values = [ |
| "@platforms//cpu:x86_64", |
| "@platforms//os:linux", |
| ], |
| ) |
| |
| config_setting( |
| name = "linux_arm64", |
| constraint_values = [ |
| "@platforms//cpu:arm64", |
| "@platforms//os:linux", |
| ], |
| ) |
| |
| config_setting( |
| name = "mac_x64", |
| constraint_values = [ |
| "@platforms//cpu:x86_64", |
| "@platforms//os:macos", |
| ], |
| ) |
| |
| config_setting( |
| name = "mac_arm64", |
| constraint_values = [ |
| "@platforms//cpu:arm64", |
| "@platforms//os:macos", |
| ], |
| ) |
| |
| config_setting( |
| name = "windows_x64", |
| constraint_values = [ |
| "@platforms//cpu:x86_64", |
| "@platforms//os:windows", |
| ], |
| ) |
| |
| ZLIB_SRCS = [ |
| "adler32.c", |
| "compress.c", |
| "contrib/optimizations/insert_string.h", |
| "cpu_features.c", |
| "cpu_features.h", |
| "crc32.h", |
| "crc32.c", |
| "deflate.c", |
| "deflate.h", |
| "gzclose.c", |
| "gzguts.h", |
| "gzlib.c", |
| "gzread.c", |
| "gzwrite.c", |
| "infback.c", |
| "inffast.c", |
| "inffast.h", |
| "inflate.h", |
| "inftrees.c", |
| "inftrees.h", |
| "trees.c", |
| "trees.h", |
| "uncompr.c", |
| "inffixed.h", |
| "zutil.c", |
| "zutil.h", |
| ] + select({ |
| "@platforms//cpu:x86_64": [ |
| "adler32_simd.h", |
| "adler32_simd.c", |
| "contrib/optimizations/chunkcopy.h", |
| "contrib/optimizations/inffast_chunk.h", |
| "contrib/optimizations/inffast_chunk.c", |
| "contrib/optimizations/inflate.c", |
| "crc32_simd.h", |
| "crc32_simd.c", |
| "crc_folding.c", |
| ], |
| "@platforms//cpu:arm64": [ |
| "adler32_simd.h", |
| "adler32_simd.c", |
| "contrib/optimizations/chunkcopy.h", |
| "contrib/optimizations/inffast_chunk.h", |
| "contrib/optimizations/inffast_chunk.c", |
| "contrib/optimizations/inflate.c", |
| "crc32_simd.h", |
| "crc32_simd.c", |
| ], |
| # No SIMD support in wasm for now |
| ":cpu_wasm": ["inflate.c"], |
| # The default is to avoid using SIMD |
| "//conditions:default": ["inflate.c"], |
| }) |
| |
| ZLIB_DEFINES = ["ZLIB_IMPLEMENTATION"] + select({ |
| "@platforms//cpu:x86_64": [ |
| "ADLER32_SIMD_SSSE3", |
| "CRC32_SIMD_SSE42_PCLMUL", |
| "INFLATE_CHUNK_READ_64LE", |
| "INFLATE_CHUNK_SIMD_SSE2", |
| "DEFLATE_FILL_WINDOW_SSE2", |
| ], |
| "@platforms//cpu:arm64": [ |
| "ADLER32_SIMD_NEON", |
| "INFLATE_CHUNK_SIMD_NEON", |
| "INFLATE_CHUNK_READ_64LE", |
| ], |
| ":cpu_wasm": ["CPU_NO_SIMD"], |
| "//conditions:default": ["CPU_NO_SIMD"], |
| }) + select({ |
| ":fuchsia_arm64": [ |
| "X86_NOT_WINDOWS", |
| "ARMV8_OS_FUCHSIA", |
| ], |
| ":linux_x64": ["X86_NOT_WINDOWS"], |
| ":mac_x64": ["X86_NOT_WINDOWS"], |
| ":mac_arm64": [ |
| "ARMV8_OS_MACOS", |
| "CRC32_ARMV8_CRC32", |
| ], |
| ":windows_x64": ["X86_WINDOWS"], |
| # TODO(kjlubick) other arm flavors |
| "//conditions:default": ["X86_NOT_WINDOWS"], |
| }) |
| |
| ZLIB_COPTS = [ |
| "-Wno-unused-function", |
| "-Wno-deprecated-non-prototype", |
| # no-deprecated-non-prototype was added in Clang 14+, used in emscripten for CanvasKit, but |
| # it is not in Clang 13, currently used for Skia. |
| "-Wno-unknown-warning-option", |
| ] + select({ |
| ":linux_x64": [ |
| "-mssse3", |
| "-msse4.2", |
| "-mpclmul", |
| ], |
| ":mac_x64": [ |
| "-mpclmul", |
| ], |
| "@platforms//cpu:arm": ["-march=armv8-a+crc"], |
| # If empty list isn't set for wasm, select picks linux_x64 |
| ":cpu_wasm": [], |
| "//conditions:default": [], |
| }) |
| |
| # TODO(kjlubick) this is not the most optimal build of zlib, but it's good enough for |
| # our tests at the moment. We should re-evaluate how we are compiling in SIMD instructions. |
| cc_library( |
| name = "zlib", |
| srcs = ZLIB_SRCS, |
| hdrs = [ |
| "chromeconf.h", |
| "zconf.h", |
| "zlib.h", |
| ], |
| copts = ZLIB_COPTS, |
| local_defines = ZLIB_DEFINES, |
| visibility = ["//visibility:public"], |
| ) |