blob: d25a5dbad2455344d1d7ac0b570d76c2403cfe69 [file] [log] [blame]
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +02001# Description:
2# Brotli is a generic-purpose lossless compression algorithm.
3
4package(
5 default_visibility = ["//visibility:public"],
6)
7
8licenses(["notice"]) # MIT
9
Piotr Sikorad0391c92016-08-23 19:58:51 -070010exports_files(["LICENSE"])
11
Eugene Kliuchnikov03739d22017-05-29 17:55:14 +020012# >>> JNI headers
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
26genrule(
27 name = "copy_link_jni_header",
28 srcs = ["@openjdk_linux//:jni_h"],
29 outs = ["jni/jni.h"],
30 cmd = "cp -f $< $@",
31)
32
33genrule(
34 name = "copy_link_jni_md_header",
35 srcs = select({
36 ":darwin": ["@openjdk_macos//:jni_md_h"],
37 ":darwin_x86_64": ["@openjdk_macos//:jni_md_h"],
38 "//conditions:default": ["@openjdk_linux//:jni_md_h"],
39 }),
40 outs = ["jni/jni_md.h"],
41 cmd = "cp -f $< $@",
42)
43
44cc_library(
45 name = "jni_inc",
Eugene Kliuchnikov19dc9342017-06-01 13:51:18 +020046 hdrs = [
47 ":jni/jni.h",
48 ":jni/jni_md.h",
49 ],
Eugene Kliuchnikov03739d22017-05-29 17:55:14 +020050 includes = ["jni"],
51)
52
53# <<< JNI headers
54
Eugene Kliuchnikovb32cefe2016-06-17 16:24:51 +020055STRICT_C_OPTIONS = [
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020056 "--pedantic-errors",
57 "-Wall",
58 "-Wconversion",
59 "-Werror",
60 "-Wextra",
61 "-Wlong-long",
62 "-Wmissing-declarations",
Eugene Kliuchnikovb32cefe2016-06-17 16:24:51 +020063 "-Wmissing-prototypes",
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020064 "-Wno-strict-aliasing",
65 "-Wshadow",
66 "-Wsign-compare",
67]
68
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020069filegroup(
Eugene Kliuchnikov801f5f32016-08-22 13:28:22 +020070 name = "public_headers",
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020071 srcs = glob(["c/include/brotli/*.h"]),
Eugene Kliuchnikov801f5f32016-08-22 13:28:22 +020072)
73
74filegroup(
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020075 name = "common_headers",
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020076 srcs = glob(["c/common/*.h"]),
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020077)
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020078
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020079filegroup(
80 name = "common_sources",
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020081 srcs = glob(["c/common/*.c"]),
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020082)
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020083
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020084filegroup(
85 name = "dec_headers",
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020086 srcs = glob(["c/dec/*.h"]),
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020087)
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020088
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020089filegroup(
90 name = "dec_sources",
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020091 srcs = glob(["c/dec/*.c"]),
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020092)
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020093
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020094filegroup(
95 name = "enc_headers",
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020096 srcs = glob(["c/enc/*.h"]),
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020097)
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020098
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020099filegroup(
100 name = "enc_sources",
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +0200101 srcs = glob(["c/enc/*.c"]),
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +0200102)
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200103
Piotr Sikora2cc33232016-08-23 15:43:07 -0700104cc_library(
Eugene Kliuchnikov03739d22017-05-29 17:55:14 +0200105 name = "brotli_inc",
Eugene Kliuchnikov81480012016-08-23 14:40:33 +0200106 hdrs = [":public_headers"],
Piotr Sikora2cc33232016-08-23 15:43:07 -0700107 copts = STRICT_C_OPTIONS,
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +0200108 includes = ["c/include"],
Eugene Kliuchnikov81480012016-08-23 14:40:33 +0200109)
110
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200111cc_library(
Frédéric Wanged2748a2016-10-12 18:23:34 +0200112 name = "brotlicommon",
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +0200113 srcs = [":common_sources"],
Eugene Kliuchnikov81480012016-08-23 14:40:33 +0200114 hdrs = [":common_headers"],
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200115 copts = STRICT_C_OPTIONS,
Eugene Kliuchnikov03739d22017-05-29 17:55:14 +0200116 deps = [":brotli_inc"],
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200117)
118
119cc_library(
Frédéric Wanged2748a2016-10-12 18:23:34 +0200120 name = "brotlidec",
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +0200121 srcs = [":dec_sources"],
Eugene Kliuchnikov81480012016-08-23 14:40:33 +0200122 hdrs = [":dec_headers"],
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200123 copts = STRICT_C_OPTIONS,
Frédéric Wanged2748a2016-10-12 18:23:34 +0200124 deps = [":brotlicommon"],
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200125)
126
127cc_library(
Frédéric Wanged2748a2016-10-12 18:23:34 +0200128 name = "brotlienc",
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +0200129 srcs = [":enc_sources"],
Eugene Kliuchnikov81480012016-08-23 14:40:33 +0200130 hdrs = [":enc_headers"],
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200131 copts = STRICT_C_OPTIONS,
Piotr Sikorab4f8c782016-08-29 02:32:12 -0700132 linkopts = ["-lm"],
Frédéric Wanged2748a2016-10-12 18:23:34 +0200133 deps = [":brotlicommon"],
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200134)
135
136cc_binary(
Eugene Kliuchnikov03739d22017-05-29 17:55:14 +0200137 name = "brotli",
138 srcs = ["c/tools/brotli.c"],
Eugene Kliuchnikovb32cefe2016-06-17 16:24:51 +0200139 copts = STRICT_C_OPTIONS,
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +0200140 linkstatic = 1,
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200141 deps = [
Frédéric Wanged2748a2016-10-12 18:23:34 +0200142 ":brotlidec",
143 ":brotlienc",
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +0200144 ],
145)
Eugene Kliuchnikova657d992017-03-22 12:41:19 +0100146
Eugene Kliuchnikov19dc9342017-06-01 13:51:18 +0200147########################################################
148# WARNING: do not (transitively) depend on this target!
149########################################################
150cc_library(
151 name = "jni",
152 srcs = [
153 ":common_sources",
154 ":dec_sources",
155 ":enc_sources",
156 "//java/org/brotli/wrapper/common:jni_src",
157 "//java/org/brotli/wrapper/dec:jni_src",
158 "//java/org/brotli/wrapper/enc:jni_src",
159 ],
160 hdrs = [
161 ":common_headers",
162 ":dec_headers",
163 ":enc_headers",
164 ],
165 deps = [
166 ":brotli_inc",
167 ":jni_inc",
168 ],
169 alwayslink = 1,
170)
171
172########################################################
173# WARNING: do not (transitively) depend on this target!
174########################################################
175cc_library(
176 name = "jni_no_dictionary_data",
177 srcs = [
178 ":common_sources",
179 ":dec_sources",
180 ":enc_sources",
181 "//java/org/brotli/wrapper/common:jni_src",
182 "//java/org/brotli/wrapper/dec:jni_src",
183 "//java/org/brotli/wrapper/enc:jni_src",
184 ],
185 hdrs = [
186 ":common_headers",
187 ":dec_headers",
188 ":enc_headers",
189 ],
190 defines = [
191 "BROTLI_EXTERNAL_DICTIONARY_DATA=",
192 ],
193 deps = [
194 ":brotli_inc",
195 ":jni_inc",
196 ],
197 alwayslink = 1,
198)
199
200filegroup(
201 name = "dictionary",
202 srcs = ["c/common/dictionary.bin"],
203)
204
Eugene Kliuchnikova657d992017-03-22 12:41:19 +0100205load("@io_bazel_rules_go//go:def.bzl", "go_prefix")
206
207go_prefix("github.com/google/brotli")