# Copyright 2015 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("//build/config/features.gni")
import("//build/config/nacl/config.gni")

if (is_nacl) {
  group("ppapi_lib") {
    deps = [
      "//ppapi/native_client/src/untrusted/irt_stub:ppapi_stub_lib",
    ]
    if (!is_nacl_glibc) {
      # Glibc has its version of pthread library.
      deps += [ "//native_client/src/untrusted/pthread" ]
    }
  }

  executable("nacl_irt") {
    deps = [
      "//base",
      "//components/tracing",
      "//gpu/command_buffer/client",
      "//gpu/command_buffer/common",
      "//gpu/command_buffer/client:gles2_implementation",
      "//gpu/ipc",
      "//ipc",
      "//media:shared_memory_support",
      "//native_client/src/untrusted/irt:irt_core_lib",
      "//native_client/src/shared/srpc",
      "//native_client/src/shared/platform",
      "//native_client/src/tools/tls_edit($host_toolchain)",
      "//native_client/src/untrusted/nacl:imc_syscalls",
      "//native_client/src/shared/gio",
      "//ppapi/native_client/src/untrusted/pnacl_irt_shim:irt",
      "//ppapi/proxy",
      "//ppapi/proxy:ipc",
      "//ppapi/shared_impl",
    ]
  }

  # TODO(phosek): We can remove this ugliness if we change the
  # IRT file name in components/nacl/browser/nacl_browser.cc
  if (target_cpu == "x86") {
    irt_cpu = "x86_32"
  } else if (target_cpu == "x64") {
    irt_cpu = "x86_64"
  } else {
    irt_cpu = target_cpu
  }
  irt_name = "nacl_irt_" + irt_cpu + ".nexe"

  copy("nacl_irt_debug") {
    sources = [
      "${root_out_dir}/exe.unstripped/nacl_irt.nexe",
    ]
    outputs = [
      "${root_build_dir}/${irt_name}.debug",
    ]
    deps = [
      ":nacl_irt",
    ]
  }

  action("nacl_irt_debuglink") {
    deps = [
      ":nacl_irt",
      ":nacl_irt_debug",
    ]

    objcopy = "${nacl_toolprefix}objcopy"
    irt_stripped = "${root_out_dir}/nacl_irt.nexe"
    irt_debug = get_target_outputs(":nacl_irt_debug")
    irt_debug = irt_debug[0]
    irt_final = "${root_build_dir}/${irt_name}"

    inputs = [
      objcopy,
    ]
    sources = [
      irt_debug,
      irt_stripped,
    ]
    outputs = [
      irt_final,
    ]

    script = "irt_debuglink.py"
    args = [
      rebase_path(objcopy),
      rebase_path(irt_debug),
      rebase_path(irt_stripped),
      rebase_path(irt_final),
    ]
  }
}

group("irt") {
  public_deps = [
    ":nacl_irt_debuglink(//build/toolchain/nacl:irt_${target_cpu})",
    ":nacl_irt_debug(//build/toolchain/nacl:irt_${target_cpu})",
  ]
}
