# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//testing/libfuzzer/fuzzer_test.gni") if (is_win) { import("//build/config/win/visual_studio_version.gni") } config("includes") { include_dirs = [ "include" ] } source_set("headers") { sources = [ "include/brotli/decode.h", "include/brotli/encode.h", "include/brotli/port.h", "include/brotli/types.h", ] } common_sources = [ "common/constants.h", "common/dictionary.c", "common/dictionary.h", "common/version.h", ] static_library("common") { sources = common_sources public_configs = [ ":includes" ] deps = [ ":headers", ] } static_library("common_no_dictionary_data") { sources = common_sources public_configs = [ ":includes" ] deps = [ ":headers", ] defines = [ "BROTLI_EXTERNAL_DICTIONARY_DATA" ] } dec_sources = [ "dec/bit_reader.c", "dec/bit_reader.h", "dec/context.h", "dec/decode.c", "dec/huffman.c", "dec/huffman.h", "dec/port.h", "dec/prefix.h", "dec/state.c", "dec/state.h", "dec/transform.h", ] static_library("dec") { sources = dec_sources public_configs = [ ":includes" ] public_deps = [ ":headers", ] deps = [ ":common", ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] # Since we never debug brotli, freeze the optimizations to -O2. configs -= [ "//build/config/compiler:default_optimization" ] configs += [ "//build/config/compiler:optimize_max" ] } static_library("dec_no_dictionary_data") { sources = dec_sources public_configs = [ ":includes" ] public_deps = [ ":headers", ] deps = [ ":common_no_dictionary_data", ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] # Since we never debug brotli, freeze the optimizations to -O2. configs -= [ "//build/config/compiler:default_optimization" ] configs += [ "//build/config/compiler:optimize_max" ] } if (current_toolchain == host_toolchain) { executable("brotli") { sources = [ "common/constants.h", "enc/backward_references.c", "enc/backward_references.h", "enc/backward_references_hq.c", "enc/backward_references_hq.h", "enc/backward_references_inc.h", "enc/bit_cost.c", "enc/bit_cost.h", "enc/bit_cost_inc.h", "enc/block_encoder_inc.h", "enc/block_splitter.c", "enc/block_splitter.h", "enc/block_splitter_inc.h", "enc/brotli_bit_stream.c", "enc/brotli_bit_stream.h", "enc/cluster.c", "enc/cluster.h", "enc/cluster_inc.h", "enc/command.h", "enc/compress_fragment.c", "enc/compress_fragment.h", "enc/compress_fragment_two_pass.c", "enc/compress_fragment_two_pass.h", "enc/context.h", "enc/dictionary_hash.c", "enc/dictionary_hash.h", "enc/encode.c", "enc/entropy_encode.c", "enc/entropy_encode.h", "enc/entropy_encode_static.h", "enc/fast_log.h", "enc/find_match_length.h", "enc/hash.h", "enc/hash_forgetful_chain_inc.h", "enc/hash_longest_match64_inc.h", "enc/hash_longest_match_inc.h", "enc/hash_longest_match_quickly_inc.h", "enc/hash_to_binary_tree_inc.h", "enc/histogram.c", "enc/histogram.h", "enc/histogram_inc.h", "enc/literal_cost.c", "enc/literal_cost.h", "enc/memory.c", "enc/memory.h", "enc/metablock.c", "enc/metablock.h", "enc/metablock_inc.h", "enc/port.h", "enc/prefix.h", "enc/quality.h", "enc/ringbuffer.h", "enc/static_dict.c", "enc/static_dict.h", "enc/static_dict_lut.h", "enc/utf8_util.c", "enc/utf8_util.h", "enc/write_bits.h", "tools/brotli.c", ] public_configs = [ ":includes" ] if (is_win) { # Work around incremental linking randomly creating corrupt binaries, # crbug.com/644525. configs -= [ "//build/config/win:default_incremental_linking" ] configs += [ "//build/config/win:no_incremental_linking" ] } deps = [ ":common", ":dec", ":headers", "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] if (is_win && visual_studio_version == "2015") { # Disabling "result of 32-bit shift implicitly converted to 64 bits", # caused by code like: foo |= (1 << i); // warning 4334 cflags = [ "/wd4334" ] } # Always build release since this is a build tool. if (is_debug) { configs -= [ "//build/config:debug" ] configs += [ "//build/config:release" ] } } } fuzzer_test("brotli_fuzzer") { sources = [ "fuzz/decode_fuzzer.cc", ] deps = [ ":dec", ] libfuzzer_options = [ "max_len=1280" ] }