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