# 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("config.gni")

assert(relocation_packing_supported)

if (target_arch == "arm") {
  target_define = "TARGET_ARM"
} else if (target_arch == "arm64") {
  target_define = "TARGET_ARM64"
}

if (current_toolchain == host_toolchain) {
  # GYP: //tools/relocation_packer/relocation_packer.gyp:lib_relocation_packer
  source_set("lib_relocation_packer") {
    defines = [ target_define ]
    deps = [ "//third_party/elfutils:libelf" ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    sources = [
      "src/debug.cc",
      "src/delta_encoder.cc",
      "src/elf_file.cc",
      "src/leb128.cc",
      "src/packer.cc",
      "src/sleb128.cc",
      "src/run_length_encoder.cc",
    ]
  }

  # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer
  executable("relocation_packer") {
    defines = [ target_define ]
    deps = [
      ":lib_relocation_packer",
      "//third_party/elfutils:libelf",
    ]
    sources = [ "src/main.cc" ]
  }

  # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_unittests
  test("relocation_packer_unittests") {
    sources = [
      "src/debug_unittest.cc",
      "src/delta_encoder_unittest.cc",
      "src/elf_file_unittest.cc",
      "src/leb128_unittest.cc",
      "src/packer_unittest.cc",
      "src/sleb128_unittest.cc",
      "src/run_length_encoder_unittest.cc",
      "src/run_all_unittests.cc",
    ]
    rebased_test_data = rebase_path("test_data", root_build_dir)
    data = [
      "test_data/elf_file_unittest_relocs_arm32.so",
      "test_data/elf_file_unittest_relocs_arm32_packed.so",
      "test_data/elf_file_unittest_relocs_arm64.so",
      "test_data/elf_file_unittest_relocs_arm64_packed.so",
    ]
    defines = [
      target_define,
      "INTERMEDIATE_DIR=\"$rebased_test_data\""
    ]
    include_dirs = [ "//" ]
    deps = [
      ":lib_relocation_packer",
      ":relocation_packer_test_data",
      "//testing:gtest",
    ]
  }
}

if (current_toolchain == default_toolchain &&
    (target_arch == "arm" || target_arch == "arm64")) {
  # Targets to build test data.  These participate only in building test
  # data for use with elf_file_unittest.cc, and are not part of the main
  # relocation packer build.  Unit test data files are checked in to the
  # source tree as 'golden' data, and are not generated 'on the fly' by
  # the build.
  #
  # See test_data/generate_elf_file_unittest_relocs.sh for instructions.

  # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_test_data
  shared_library("relocation_packer_test_data") {
    cflags = [ "-O0", "-g0" ]
    sources = [
      "test_data/elf_file_unittest_relocs.cc"
    ]
  }

  # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_unittests_test_data
  action("relocation_packer_unittests_test_data") {
    script = "test_data/generate_elf_file_unittest_relocs.py"
    test_file = "$root_build_dir/librelocation_packer_test_data.so"
    if (target_arch == "arm") {
      added_section = ".android.rel.dyn"
      packed_output = "elf_file_unittest_relocs_arm32_packed.so"
      unpacked_output = "elf_file_unittest_relocs_arm32.so"
    } else if (target_arch == "arm64") {
      added_section = ".android.rela.dyn"
      packed_output = "elf_file_unittest_relocs_arm64_packed.so"
      unpacked_output = "elf_file_unittest_relocs_arm64.so"
    } else {
      assert(false, "Unsupported target arch for relocation packer")
    }

    packed_output = "$root_build_dir/$packed_output"
    unpacked_output = "$root_build_dir/$unpacked_output"

    inputs = [
      test_file,
    ]

    deps = [
      ":relocation_packer_test_data",
      ":relocation_packer($host_toolchain)",
    ]

    outputs = [
      packed_output,
      unpacked_output,
    ]

    args = [
      "--android-pack-relocations", rebase_path(relocation_packer_exe, root_build_dir),
      "--android-objcopy", rebase_path(android_objcopy, root_build_dir),
      "--added-section=$added_section",
      "--test-file", rebase_path(test_file, root_build_dir),
      "--packed-output", rebase_path(packed_output, root_build_dir),
      "--unpacked-output", rebase_path(unpacked_output, root_build_dir),
    ]
  }
}
