|
| 1 | +# CMake build script for the bundled Chromium zlib implementation. So far, it |
| 2 | +# is only supported for x86_64 processors with CLMUL, SSE3, SSE4.2. |
| 3 | +# |
| 4 | +# TODO: The Chromium build file (in deps/chromium-zlib/zlib/BUILD.gn) supports |
| 5 | +# more platforms (like ARM with NEON), more can be enabled as needed. |
| 6 | + |
| 7 | +CMAKE_MINIMUM_REQUIRED(VERSION 3.11) |
| 8 | + |
| 9 | +include(FetchContent) |
| 10 | +include(FindGit) |
| 11 | + |
| 12 | +# Ensure that the git binary is present to download the sources. |
| 13 | +find_package(Git) |
| 14 | +IF(NOT Git_FOUND) |
| 15 | + message(FATAL_ERROR "git is required to download the Chromium zlib sources") |
| 16 | +ENDIF() |
| 17 | + |
| 18 | +FetchContent_Populate(chromium_zlib_src |
| 19 | + GIT_REPOSITORY https://chromium.googlesource.com/chromium/src/third_party/zlib.git |
| 20 | + GIT_TAG 2c183c9f93a328bfb3121284da13cf89a0f7e64a |
| 21 | + QUIET |
| 22 | +) |
| 23 | + |
| 24 | +# The Chromium build globally disables some warnings. |
| 25 | +disable_warnings(implicit-fallthrough) |
| 26 | +disable_warnings(unused-function) |
| 27 | +disable_warnings(unused-parameter) |
| 28 | +disable_warnings(sign-compare) |
| 29 | +disable_warnings(declaration-after-statement) |
| 30 | +disable_warnings(missing-declarations) |
| 31 | + |
| 32 | +# -O3 is also set by the Chromium configuration and has been deemed safe enough |
| 33 | +# for them. |
| 34 | +SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") |
| 35 | +SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") |
| 36 | + |
| 37 | +# Common definitions. |
| 38 | +add_definitions( |
| 39 | + -DSTDC |
| 40 | + -DNO_GZIP |
| 41 | + -DZLIB_IMPLEMENTATION |
| 42 | +) |
| 43 | +list(APPEND SRC_ZLIB |
| 44 | + "${chromium_zlib_src_SOURCE_DIR}/adler32.c" |
| 45 | + "${chromium_zlib_src_SOURCE_DIR}/chromeconf.h" |
| 46 | + "${chromium_zlib_src_SOURCE_DIR}/compress.c" |
| 47 | + "${chromium_zlib_src_SOURCE_DIR}/contrib/optimizations/insert_string.h" |
| 48 | + "${chromium_zlib_src_SOURCE_DIR}/cpu_features.c" |
| 49 | + "${chromium_zlib_src_SOURCE_DIR}/cpu_features.h" |
| 50 | + "${chromium_zlib_src_SOURCE_DIR}/crc32.c" |
| 51 | + "${chromium_zlib_src_SOURCE_DIR}/crc32.h" |
| 52 | + "${chromium_zlib_src_SOURCE_DIR}/deflate.c" |
| 53 | + "${chromium_zlib_src_SOURCE_DIR}/deflate.h" |
| 54 | + "${chromium_zlib_src_SOURCE_DIR}/gzclose.c" |
| 55 | + "${chromium_zlib_src_SOURCE_DIR}/gzguts.h" |
| 56 | + "${chromium_zlib_src_SOURCE_DIR}/gzlib.c" |
| 57 | + "${chromium_zlib_src_SOURCE_DIR}/gzread.c" |
| 58 | + "${chromium_zlib_src_SOURCE_DIR}/gzwrite.c" |
| 59 | + "${chromium_zlib_src_SOURCE_DIR}/infback.c" |
| 60 | + "${chromium_zlib_src_SOURCE_DIR}/inffast.c" |
| 61 | + "${chromium_zlib_src_SOURCE_DIR}/inffast.h" |
| 62 | + "${chromium_zlib_src_SOURCE_DIR}/inffixed.h" |
| 63 | + "${chromium_zlib_src_SOURCE_DIR}/inflate.h" |
| 64 | + "${chromium_zlib_src_SOURCE_DIR}/inftrees.c" |
| 65 | + "${chromium_zlib_src_SOURCE_DIR}/inftrees.h" |
| 66 | + "${chromium_zlib_src_SOURCE_DIR}/trees.c" |
| 67 | + "${chromium_zlib_src_SOURCE_DIR}/trees.h" |
| 68 | + "${chromium_zlib_src_SOURCE_DIR}/uncompr.c" |
| 69 | + "${chromium_zlib_src_SOURCE_DIR}/zconf.h" |
| 70 | + "${chromium_zlib_src_SOURCE_DIR}/zlib.h" |
| 71 | + "${chromium_zlib_src_SOURCE_DIR}/zutil.c" |
| 72 | + "${chromium_zlib_src_SOURCE_DIR}/zutil.h" |
| 73 | +) |
| 74 | + |
| 75 | +# x86_64-specific optimizations |
| 76 | +string(APPEND CMAKE_C_FLAGS " -mssse3 -msse4.2 -mpclmul") |
| 77 | +add_definitions( |
| 78 | + -DCHROMIUM_ZLIB_NO_CHROMECONF |
| 79 | + -DX86_NOT_WINDOWS |
| 80 | + -DADLER32_SIMD_SSSE3 |
| 81 | + -DCRC32_SIMD_SSE42_PCLMUL |
| 82 | + -DDEFLATE_FILL_WINDOW_SSE2 |
| 83 | + -DINFLATE_CHUNK_READ_64LE |
| 84 | + -DINFLATE_CHUNK_SIMD_SSE2 |
| 85 | +) |
| 86 | +list(APPEND SRC_ZLIB |
| 87 | + "${chromium_zlib_src_SOURCE_DIR}/adler32_simd.c" |
| 88 | + "${chromium_zlib_src_SOURCE_DIR}/adler32_simd.h" |
| 89 | + "${chromium_zlib_src_SOURCE_DIR}/contrib/optimizations/chunkcopy.h" |
| 90 | + "${chromium_zlib_src_SOURCE_DIR}/contrib/optimizations/inffast_chunk.c" |
| 91 | + "${chromium_zlib_src_SOURCE_DIR}/contrib/optimizations/inffast_chunk.h" |
| 92 | + "${chromium_zlib_src_SOURCE_DIR}/contrib/optimizations/inflate.c" |
| 93 | + "${chromium_zlib_src_SOURCE_DIR}/crc32_simd.c" |
| 94 | + "${chromium_zlib_src_SOURCE_DIR}/crc32_simd.h" |
| 95 | + "${chromium_zlib_src_SOURCE_DIR}/crc_folding.c" |
| 96 | + "${chromium_zlib_src_SOURCE_DIR}/fill_window_sse.c" |
| 97 | +) |
| 98 | + |
| 99 | +list(SORT SRC_ZLIB) |
| 100 | +include_directories("${chromium_zlib_src_SOURCE_DIR}") |
| 101 | +add_library(chromium_zlib OBJECT ${SRC_ZLIB}) |
0 commit comments