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

static_library("courgette_lib") {
  sources = [
    "adjustment_method.cc",
    "adjustment_method_2.cc",
    "adjustment_method.h",
    "assembly_program.cc",
    "assembly_program.h",
    "third_party/bsdiff.h",
    "third_party/bsdiff_apply.cc",
    "third_party/bsdiff_create.cc",
    "third_party/paged_array.h",
    "courgette.h",
    "crc.cc",
    "crc.h",
    "difference_estimator.cc",
    "difference_estimator.h",
    "disassembler.cc",
    "disassembler.h",
    "disassembler_elf_32.cc",
    "disassembler_elf_32.h",
    "disassembler_elf_32_arm.cc",
    "disassembler_elf_32_arm.h",
    "disassembler_elf_32_x86.cc",
    "disassembler_elf_32_x86.h",
    "disassembler_win32_x86.cc",
    "disassembler_win32_x86.h",
    "disassembler_win32_x64.cc",
    "disassembler_win32_x64.h",
    "encoded_program.cc",
    "encoded_program.h",
    "ensemble.cc",
    "ensemble.h",
    "ensemble_apply.cc",
    "ensemble_create.cc",
    "memory_allocator.cc",
    "memory_allocator.h",
    "region.h",
    "simple_delta.cc",
    "simple_delta.h",
    "streams.cc",
    "streams.h",
    "types_elf.h",
    "types_win_pe.h",
    "patch_generator_x86_32.h",
    "patcher_x86_32.h",
  ]

  deps = [
    "//base",
    "//third_party/lzma_sdk",
  ]
}

executable("courgette") {
  if (is_win && cpu_arch == "x64") {
    # The build infrastructure needs courgette to be named courgette64.
    output_name = "courgette64"
  }

  sources = [
    "courgette_tool.cc",
  ]

  if (is_win) {
    ldflags = [ "/LARGEADDRESSAWARE" ]
  }

  deps = [
    ":courgette_lib",
    "//base",
  ]
}

executable("courgette_minimal_tool") {
  sources = [
    "courgette_minimal_tool.cc",
  ]

  deps = [
    ":courgette_lib",
    "//base",
  ]
}

test("courgette_unittests") {
  sources = [
    "adjustment_method_unittest.cc",
    "bsdiff_memory_unittest.cc",
    "base_test_unittest.cc",
    "base_test_unittest.h",
    "difference_estimator_unittest.cc",
    "disassembler_elf_32_x86_unittest.cc",
    "disassembler_win32_x86_unittest.cc",
    "disassembler_win32_x64_unittest.cc",
    "encoded_program_unittest.cc",
    "encode_decode_unittest.cc",
    "ensemble_unittest.cc",
    "streams_unittest.cc",
    "typedrva_unittest.cc",
    "versioning_unittest.cc",
    "third_party/paged_array_unittest.cc",
  ]

  if (is_win) {
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]
  }

  deps = [
    ":courgette_lib",
    "//base",
    "//base:i18n",
    "//base/allocator",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//testing/gtest",
  ]
}

test("courgette_fuzz") {
  sources = [
    "base_test_unittest.cc",
    "base_test_unittest.h",
    "encoded_program_fuzz_unittest.cc",
  ]
  deps = [
    ":courgette_lib",
    "//base",
    "//base:i18n",
    "//base/test:test_support",
    "//testing/gtest",
  ]
}
