1# Description: 2# Brotli is a generic-purpose lossless compression algorithm. 3 4load(":compiler_config_setting.bzl", "create_msvc_config") 5 6package( 7 default_visibility = ["//visibility:public"], 8) 9 10licenses(["notice"]) # MIT 11 12exports_files(["LICENSE"]) 13 14config_setting( 15 name = "darwin", 16 values = {"cpu": "darwin"}, 17 visibility = ["//visibility:public"], 18) 19 20config_setting( 21 name = "darwin_x86_64", 22 values = {"cpu": "darwin_x86_64"}, 23 visibility = ["//visibility:public"], 24) 25 26config_setting( 27 name = "windows", 28 values = {"cpu": "x64_windows"}, 29 visibility = ["//visibility:public"], 30) 31 32config_setting( 33 name = "windows_msvc", 34 values = {"cpu": "x64_windows_msvc"}, 35 visibility = ["//visibility:public"], 36) 37 38config_setting( 39 name = "windows_msys", 40 values = {"cpu": "x64_windows_msys"}, 41 visibility = ["//visibility:public"], 42) 43 44create_msvc_config() 45 46STRICT_C_OPTIONS = select({ 47 ":msvc": [], 48 ":clang-cl": [ 49 "/W4", 50 "-Wconversion", 51 "-Wlong-long", 52 "-Wmissing-declarations", 53 "-Wmissing-prototypes", 54 "-Wno-strict-aliasing", 55 "-Wshadow", 56 "-Wsign-compare", 57 "-Wno-sign-conversion", 58 ], 59 "//conditions:default": [ 60 "--pedantic-errors", 61 "-Wall", 62 "-Wconversion", 63 "-Werror", 64 "-Wextra", 65 "-Wlong-long", 66 "-Wmissing-declarations", 67 "-Wmissing-prototypes", 68 "-Wno-strict-aliasing", 69 "-Wshadow", 70 "-Wsign-compare", 71 ], 72}) 73 74filegroup( 75 name = "public_headers", 76 srcs = glob(["c/include/brotli/*.h"]), 77) 78 79filegroup( 80 name = "common_headers", 81 srcs = glob(["c/common/*.h"]), 82) 83 84filegroup( 85 name = "common_sources", 86 srcs = glob(["c/common/*.c"]), 87) 88 89filegroup( 90 name = "dec_headers", 91 srcs = glob(["c/dec/*.h"]), 92) 93 94filegroup( 95 name = "dec_sources", 96 srcs = glob(["c/dec/*.c"]), 97) 98 99filegroup( 100 name = "enc_headers", 101 srcs = glob(["c/enc/*.h"]), 102) 103 104filegroup( 105 name = "enc_sources", 106 srcs = glob(["c/enc/*.c"]), 107) 108 109cc_library( 110 name = "brotli_inc", 111 hdrs = [":public_headers"], 112 copts = STRICT_C_OPTIONS, 113 strip_include_prefix = "c/include", 114) 115 116cc_library( 117 name = "brotlicommon", 118 srcs = [":common_sources"], 119 hdrs = [":common_headers"], 120 copts = STRICT_C_OPTIONS, 121 deps = [":brotli_inc"], 122) 123 124cc_library( 125 name = "brotlidec", 126 srcs = [":dec_sources"], 127 hdrs = [":dec_headers"], 128 copts = STRICT_C_OPTIONS, 129 deps = [":brotlicommon"], 130) 131 132cc_library( 133 name = "brotlienc", 134 srcs = [":enc_sources"], 135 hdrs = [":enc_headers"], 136 copts = STRICT_C_OPTIONS, 137 linkopts = select({ 138 ":clang-cl": [], 139 ":msvc": [], 140 "//conditions:default": ["-lm"], 141 }), 142 deps = [":brotlicommon"], 143) 144 145cc_binary( 146 name = "brotli", 147 srcs = ["c/tools/brotli.c"], 148 copts = STRICT_C_OPTIONS, 149 linkstatic = 1, 150 deps = [ 151 ":brotlidec", 152 ":brotlienc", 153 ], 154) 155 156filegroup( 157 name = "dictionary", 158 srcs = ["c/common/dictionary.bin"], 159) 160