# 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.

if (is_win) {
  import("//build/config/win/visual_studio_version.gni")
}

config("includes") {
  include_dirs = [ "include" ]
}

static_library("common") {
  sources = [
    "common/constants.h",
    "common/dictionary.c",
    "common/dictionary.h",
    "common/version.h",
  ]
  public_configs = [ ":includes" ]
}

static_library("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",
  ]
  public_configs = [ ":includes" ]

  deps = [
    ":common",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  # Since we are 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("bro") {
    sources = [
      "common/constants.h",
      "enc/backward_references.c",
      "enc/backward_references.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.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_match_inc.h",
      "enc/hash_longest_match_quickly_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/bro.c",
    ]
    public_configs = [ ":includes" ]

    deps = [
      ":common",
      ":dec",
      "//build/config/sanitizers: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" ]
    }
  }
}
