• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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