xref: /aosp_15_r20/external/cronet/third_party/brotli/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport("//testing/libfuzzer/fuzzer_test.gni")
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Workerif (is_win) {
8*6777b538SAndroid Build Coastguard Worker  import("//build/config/win/visual_studio_version.gni")
9*6777b538SAndroid Build Coastguard Worker}
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Workerconfig("brotli_defines") {
12*6777b538SAndroid Build Coastguard Worker  # By default, brotli depends on undefined behavior, but setting
13*6777b538SAndroid Build Coastguard Worker  # BROTLI_BUILD_PORTABLE should result in a build which does not.
14*6777b538SAndroid Build Coastguard Worker  if (is_ubsan) {
15*6777b538SAndroid Build Coastguard Worker    defines = [ "BROTLI_BUILD_PORTABLE" ]
16*6777b538SAndroid Build Coastguard Worker  }
17*6777b538SAndroid Build Coastguard Worker}
18*6777b538SAndroid Build Coastguard Worker
19*6777b538SAndroid Build Coastguard Workerconfig("includes") {
20*6777b538SAndroid Build Coastguard Worker  include_dirs = [ "include" ]
21*6777b538SAndroid Build Coastguard Worker}
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard Workersource_set("headers") {
24*6777b538SAndroid Build Coastguard Worker  sources = [
25*6777b538SAndroid Build Coastguard Worker    "include/brotli/decode.h",
26*6777b538SAndroid Build Coastguard Worker    "include/brotli/encode.h",
27*6777b538SAndroid Build Coastguard Worker    "include/brotli/port.h",
28*6777b538SAndroid Build Coastguard Worker    "include/brotli/types.h",
29*6777b538SAndroid Build Coastguard Worker  ]
30*6777b538SAndroid Build Coastguard Worker}
31*6777b538SAndroid Build Coastguard Worker
32*6777b538SAndroid Build Coastguard Workercommon_sources = [
33*6777b538SAndroid Build Coastguard Worker  "common/constants.c",
34*6777b538SAndroid Build Coastguard Worker  "common/constants.h",
35*6777b538SAndroid Build Coastguard Worker  "common/context.c",
36*6777b538SAndroid Build Coastguard Worker  "common/context.h",
37*6777b538SAndroid Build Coastguard Worker  "common/dictionary.c",
38*6777b538SAndroid Build Coastguard Worker  "common/dictionary.h",
39*6777b538SAndroid Build Coastguard Worker  "common/platform.c",
40*6777b538SAndroid Build Coastguard Worker  "common/platform.h",
41*6777b538SAndroid Build Coastguard Worker  "common/shared_dictionary.c",
42*6777b538SAndroid Build Coastguard Worker  "common/shared_dictionary_internal.h",
43*6777b538SAndroid Build Coastguard Worker  "common/transform.c",
44*6777b538SAndroid Build Coastguard Worker  "common/transform.h",
45*6777b538SAndroid Build Coastguard Worker  "common/version.h",
46*6777b538SAndroid Build Coastguard Worker]
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Workerstatic_library("common") {
49*6777b538SAndroid Build Coastguard Worker  sources = common_sources
50*6777b538SAndroid Build Coastguard Worker  public_configs = [ ":includes" ]
51*6777b538SAndroid Build Coastguard Worker  configs += [ ":brotli_defines" ]
52*6777b538SAndroid Build Coastguard Worker  deps = [ ":headers" ]
53*6777b538SAndroid Build Coastguard Worker}
54*6777b538SAndroid Build Coastguard Worker
55*6777b538SAndroid Build Coastguard Workerstatic_library("common_no_dictionary_data") {
56*6777b538SAndroid Build Coastguard Worker  sources = common_sources
57*6777b538SAndroid Build Coastguard Worker  public_configs = [ ":includes" ]
58*6777b538SAndroid Build Coastguard Worker  configs += [ ":brotli_defines" ]
59*6777b538SAndroid Build Coastguard Worker  deps = [ ":headers" ]
60*6777b538SAndroid Build Coastguard Worker  defines = [ "BROTLI_EXTERNAL_DICTIONARY_DATA" ]
61*6777b538SAndroid Build Coastguard Worker}
62*6777b538SAndroid Build Coastguard Worker
63*6777b538SAndroid Build Coastguard Workerdec_sources = [
64*6777b538SAndroid Build Coastguard Worker  "dec/bit_reader.c",
65*6777b538SAndroid Build Coastguard Worker  "dec/bit_reader.h",
66*6777b538SAndroid Build Coastguard Worker  "dec/decode.c",
67*6777b538SAndroid Build Coastguard Worker  "dec/huffman.c",
68*6777b538SAndroid Build Coastguard Worker  "dec/huffman.h",
69*6777b538SAndroid Build Coastguard Worker  "dec/prefix.h",
70*6777b538SAndroid Build Coastguard Worker  "dec/state.c",
71*6777b538SAndroid Build Coastguard Worker  "dec/state.h",
72*6777b538SAndroid Build Coastguard Worker]
73*6777b538SAndroid Build Coastguard Worker
74*6777b538SAndroid Build Coastguard Workerenc_sources = [
75*6777b538SAndroid Build Coastguard Worker  "enc/backward_references_hq.c",
76*6777b538SAndroid Build Coastguard Worker  "enc/backward_references_hq.h",
77*6777b538SAndroid Build Coastguard Worker  "enc/backward_references_inc.h",
78*6777b538SAndroid Build Coastguard Worker  "enc/backward_references.c",
79*6777b538SAndroid Build Coastguard Worker  "enc/backward_references.h",
80*6777b538SAndroid Build Coastguard Worker  "enc/bit_cost_inc.h",
81*6777b538SAndroid Build Coastguard Worker  "enc/bit_cost.c",
82*6777b538SAndroid Build Coastguard Worker  "enc/bit_cost.h",
83*6777b538SAndroid Build Coastguard Worker  "enc/block_encoder_inc.h",
84*6777b538SAndroid Build Coastguard Worker  "enc/block_splitter_inc.h",
85*6777b538SAndroid Build Coastguard Worker  "enc/block_splitter.c",
86*6777b538SAndroid Build Coastguard Worker  "enc/block_splitter.h",
87*6777b538SAndroid Build Coastguard Worker  "enc/brotli_bit_stream.c",
88*6777b538SAndroid Build Coastguard Worker  "enc/brotli_bit_stream.h",
89*6777b538SAndroid Build Coastguard Worker  "enc/cluster_inc.h",
90*6777b538SAndroid Build Coastguard Worker  "enc/cluster.c",
91*6777b538SAndroid Build Coastguard Worker  "enc/cluster.h",
92*6777b538SAndroid Build Coastguard Worker  "enc/command.c",
93*6777b538SAndroid Build Coastguard Worker  "enc/command.h",
94*6777b538SAndroid Build Coastguard Worker  "enc/compound_dictionary.c",
95*6777b538SAndroid Build Coastguard Worker  "enc/compound_dictionary.h",
96*6777b538SAndroid Build Coastguard Worker  "enc/compress_fragment_two_pass.c",
97*6777b538SAndroid Build Coastguard Worker  "enc/compress_fragment_two_pass.h",
98*6777b538SAndroid Build Coastguard Worker  "enc/compress_fragment.c",
99*6777b538SAndroid Build Coastguard Worker  "enc/compress_fragment.h",
100*6777b538SAndroid Build Coastguard Worker  "enc/dictionary_hash.c",
101*6777b538SAndroid Build Coastguard Worker  "enc/dictionary_hash.h",
102*6777b538SAndroid Build Coastguard Worker  "enc/encode.c",
103*6777b538SAndroid Build Coastguard Worker  "enc/encoder_dict.c",
104*6777b538SAndroid Build Coastguard Worker  "enc/encoder_dict.h",
105*6777b538SAndroid Build Coastguard Worker  "enc/entropy_encode_static.h",
106*6777b538SAndroid Build Coastguard Worker  "enc/entropy_encode.c",
107*6777b538SAndroid Build Coastguard Worker  "enc/entropy_encode.h",
108*6777b538SAndroid Build Coastguard Worker  "enc/fast_log.c",
109*6777b538SAndroid Build Coastguard Worker  "enc/fast_log.h",
110*6777b538SAndroid Build Coastguard Worker  "enc/find_match_length.h",
111*6777b538SAndroid Build Coastguard Worker  "enc/hash_composite_inc.h",
112*6777b538SAndroid Build Coastguard Worker  "enc/hash_forgetful_chain_inc.h",
113*6777b538SAndroid Build Coastguard Worker  "enc/hash_longest_match_inc.h",
114*6777b538SAndroid Build Coastguard Worker  "enc/hash_longest_match_quickly_inc.h",
115*6777b538SAndroid Build Coastguard Worker  "enc/hash_longest_match64_inc.h",
116*6777b538SAndroid Build Coastguard Worker  "enc/hash_rolling_inc.h",
117*6777b538SAndroid Build Coastguard Worker  "enc/hash_to_binary_tree_inc.h",
118*6777b538SAndroid Build Coastguard Worker  "enc/hash.h",
119*6777b538SAndroid Build Coastguard Worker  "enc/histogram_inc.h",
120*6777b538SAndroid Build Coastguard Worker  "enc/histogram.c",
121*6777b538SAndroid Build Coastguard Worker  "enc/histogram.h",
122*6777b538SAndroid Build Coastguard Worker  "enc/literal_cost.c",
123*6777b538SAndroid Build Coastguard Worker  "enc/literal_cost.h",
124*6777b538SAndroid Build Coastguard Worker  "enc/memory.c",
125*6777b538SAndroid Build Coastguard Worker  "enc/memory.h",
126*6777b538SAndroid Build Coastguard Worker  "enc/metablock_inc.h",
127*6777b538SAndroid Build Coastguard Worker  "enc/metablock.c",
128*6777b538SAndroid Build Coastguard Worker  "enc/metablock.h",
129*6777b538SAndroid Build Coastguard Worker  "enc/params.h",
130*6777b538SAndroid Build Coastguard Worker  "enc/prefix.h",
131*6777b538SAndroid Build Coastguard Worker  "enc/quality.h",
132*6777b538SAndroid Build Coastguard Worker  "enc/ringbuffer.h",
133*6777b538SAndroid Build Coastguard Worker  "enc/static_dict_lut.h",
134*6777b538SAndroid Build Coastguard Worker  "enc/static_dict.c",
135*6777b538SAndroid Build Coastguard Worker  "enc/static_dict.h",
136*6777b538SAndroid Build Coastguard Worker  "enc/utf8_util.c",
137*6777b538SAndroid Build Coastguard Worker  "enc/utf8_util.h",
138*6777b538SAndroid Build Coastguard Worker  "enc/write_bits.h",
139*6777b538SAndroid Build Coastguard Worker]
140*6777b538SAndroid Build Coastguard Worker
141*6777b538SAndroid Build Coastguard Workerstatic_library("dec") {
142*6777b538SAndroid Build Coastguard Worker  sources = dec_sources
143*6777b538SAndroid Build Coastguard Worker  public_configs = [ ":includes" ]
144*6777b538SAndroid Build Coastguard Worker  configs += [ ":brotli_defines" ]
145*6777b538SAndroid Build Coastguard Worker  public_deps = [ ":headers" ]
146*6777b538SAndroid Build Coastguard Worker  deps = [ ":common" ]
147*6777b538SAndroid Build Coastguard Worker
148*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
149*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
150*6777b538SAndroid Build Coastguard Worker
151*6777b538SAndroid Build Coastguard Worker  # Since we never debug brotli, freeze the optimizations to -O2.
152*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:default_optimization" ]
153*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:optimize_max" ]
154*6777b538SAndroid Build Coastguard Worker}
155*6777b538SAndroid Build Coastguard Worker
156*6777b538SAndroid Build Coastguard Workerstatic_library("dec_no_dictionary_data") {
157*6777b538SAndroid Build Coastguard Worker  sources = dec_sources
158*6777b538SAndroid Build Coastguard Worker  public_configs = [ ":includes" ]
159*6777b538SAndroid Build Coastguard Worker  configs += [ ":brotli_defines" ]
160*6777b538SAndroid Build Coastguard Worker  public_deps = [ ":headers" ]
161*6777b538SAndroid Build Coastguard Worker  deps = [ ":common_no_dictionary_data" ]
162*6777b538SAndroid Build Coastguard Worker
163*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
164*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
165*6777b538SAndroid Build Coastguard Worker
166*6777b538SAndroid Build Coastguard Worker  # Since we never debug brotli, freeze the optimizations to -O2.
167*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:default_optimization" ]
168*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:optimize_max" ]
169*6777b538SAndroid Build Coastguard Worker}
170*6777b538SAndroid Build Coastguard Worker
171*6777b538SAndroid Build Coastguard Workerstatic_library("enc") {
172*6777b538SAndroid Build Coastguard Worker  sources = enc_sources
173*6777b538SAndroid Build Coastguard Worker  public_configs = [ ":includes" ]
174*6777b538SAndroid Build Coastguard Worker  configs += [ ":brotli_defines" ]
175*6777b538SAndroid Build Coastguard Worker  public_deps = [ ":headers" ]
176*6777b538SAndroid Build Coastguard Worker  deps = [ ":common" ]
177*6777b538SAndroid Build Coastguard Worker
178*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
179*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
180*6777b538SAndroid Build Coastguard Worker
181*6777b538SAndroid Build Coastguard Worker  # Since we never debug brotli, freeze the optimizations to -O2.
182*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:default_optimization" ]
183*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:optimize_max" ]
184*6777b538SAndroid Build Coastguard Worker}
185*6777b538SAndroid Build Coastguard Worker
186*6777b538SAndroid Build Coastguard Workerif (current_toolchain == host_toolchain) {
187*6777b538SAndroid Build Coastguard Worker  executable("brotli") {
188*6777b538SAndroid Build Coastguard Worker    sources = [ "tools/brotli.c" ]
189*6777b538SAndroid Build Coastguard Worker    public_configs = [ ":includes" ]
190*6777b538SAndroid Build Coastguard Worker    configs += [ ":brotli_defines" ]
191*6777b538SAndroid Build Coastguard Worker
192*6777b538SAndroid Build Coastguard Worker    deps = [
193*6777b538SAndroid Build Coastguard Worker      ":common",
194*6777b538SAndroid Build Coastguard Worker      ":dec",
195*6777b538SAndroid Build Coastguard Worker      ":enc",
196*6777b538SAndroid Build Coastguard Worker      ":headers",
197*6777b538SAndroid Build Coastguard Worker      "//build/win:default_exe_manifest",
198*6777b538SAndroid Build Coastguard Worker    ]
199*6777b538SAndroid Build Coastguard Worker
200*6777b538SAndroid Build Coastguard Worker    if (is_win && visual_studio_version == "2015") {
201*6777b538SAndroid Build Coastguard Worker      # Disabling "result of 32-bit shift implicitly converted to 64 bits",
202*6777b538SAndroid Build Coastguard Worker      # caused by code like: foo |= (1 << i);   // warning 4334
203*6777b538SAndroid Build Coastguard Worker      cflags = [ "/wd4334" ]
204*6777b538SAndroid Build Coastguard Worker    }
205*6777b538SAndroid Build Coastguard Worker
206*6777b538SAndroid Build Coastguard Worker    # Always build release since this is a build tool.
207*6777b538SAndroid Build Coastguard Worker    if (is_debug) {
208*6777b538SAndroid Build Coastguard Worker      configs -= [ "//build/config:debug" ]
209*6777b538SAndroid Build Coastguard Worker      configs += [ "//build/config:release" ]
210*6777b538SAndroid Build Coastguard Worker    }
211*6777b538SAndroid Build Coastguard Worker  }
212*6777b538SAndroid Build Coastguard Worker}
213*6777b538SAndroid Build Coastguard Worker
214*6777b538SAndroid Build Coastguard Workerfuzzer_test("brotli_fuzzer") {
215*6777b538SAndroid Build Coastguard Worker  sources = [ "fuzz/decode_fuzzer.c" ]
216*6777b538SAndroid Build Coastguard Worker  deps = [ ":dec" ]
217*6777b538SAndroid Build Coastguard Worker  libfuzzer_options = [ "max_len=1280" ]
218*6777b538SAndroid Build Coastguard Worker}
219