# 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/clang/clang.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/win/manifest.gni")

# Depending on this target will cause the manifests for Chrome's default
# Windows and common control compatibility and elevation for executables.
windows_manifest("default_exe_manifest") {
  sources = [
    as_invoker_manifest,
    common_controls_manifest,
    default_compatibility_manifest,
  ]
}

if (is_win) {
  action("copy_cdb_to_output") {
    script = "//build/win/copy_cdb_to_output.py"
    inputs = [
      script,
    ]
    outputs = [
      "$root_out_dir/cdb/cdb.exe",
      "$root_out_dir/cdb/dbgeng.dll",
      "$root_out_dir/cdb/dbghelp.dll",
      "$root_out_dir/cdb/dbgmodel.dll",
      "$root_out_dir/cdb/winext/ext.dll",
      "$root_out_dir/cdb/winext/uext.dll",
      "$root_out_dir/cdb/winxp/exts.dll",
      "$root_out_dir/cdb/winxp/ntsdexts.dll",
      "$root_out_dir/cdb/api-ms-win-core-console-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-datetime-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-debug-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-errorhandling-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-file-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-file-l1-2-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-file-l2-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-handle-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-heap-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-interlocked-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-libraryloader-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-localization-l1-2-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-memory-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-namedpipe-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-processenvironment-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-processthreads-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-processthreads-l1-1-1.dll",
      "$root_out_dir/cdb/api-ms-win-core-profile-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-rtlsupport-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-string-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-synch-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-synch-l1-2-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-sysinfo-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-timezone-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-core-util-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-conio-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-convert-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-environment-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-filesystem-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-heap-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-locale-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-math-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-multibyte-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-private-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-process-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-runtime-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-stdio-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-string-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-time-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-crt-utility-l1-1-0.dll",
      "$root_out_dir/cdb/api-ms-win-eventing-provider-l1-1-0.dll",
      "$root_out_dir/cdb/ucrtbase.dll",
    ]
    args = [
      rebase_path("$root_out_dir/cdb", root_out_dir),
      current_cpu,
    ]
  }

  group("runtime_libs") {
    if (is_component_build) {
      # Copy the VS runtime DLLs into the isolate so that they don't have to be
      # preinstalled on the target machine. The debug runtimes have a "d" at
      # the end.
      if (is_debug) {
        vcrt_suffix = "d"
      } else {
        vcrt_suffix = ""
      }

      # These runtime files are copied to the output directory by the
      # vs_toolchain script that runs as part of toolchain configuration.
      data = [
        "$root_out_dir/msvcp140${vcrt_suffix}.dll",
        "$root_out_dir/vccorlib140${vcrt_suffix}.dll",
        "$root_out_dir/vcruntime140${vcrt_suffix}.dll",

        # Universal Windows 10 CRT files
        "$root_out_dir/api-ms-win-core-console-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-datetime-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-debug-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-errorhandling-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-file-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-file-l1-2-0.dll",
        "$root_out_dir/api-ms-win-core-file-l2-1-0.dll",
        "$root_out_dir/api-ms-win-core-handle-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-heap-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-interlocked-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-libraryloader-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-localization-l1-2-0.dll",
        "$root_out_dir/api-ms-win-core-memory-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-namedpipe-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-processenvironment-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-processthreads-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-processthreads-l1-1-1.dll",
        "$root_out_dir/api-ms-win-core-profile-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-rtlsupport-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-string-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-synch-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-synch-l1-2-0.dll",
        "$root_out_dir/api-ms-win-core-sysinfo-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-timezone-l1-1-0.dll",
        "$root_out_dir/api-ms-win-core-util-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-conio-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-convert-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-environment-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-filesystem-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-heap-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-locale-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-math-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-multibyte-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-private-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-process-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-runtime-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-stdio-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-string-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-time-l1-1-0.dll",
        "$root_out_dir/api-ms-win-crt-utility-l1-1-0.dll",
        "$root_out_dir/ucrtbase${vcrt_suffix}.dll",
      ]
      if (is_asan) {
        if (current_cpu == "x64") {
          data += [ "$clang_base_path/lib/clang/$clang_version/lib/windows/clang_rt.asan_dynamic-x86_64.dll" ]
        } else {
          data += [ "$clang_base_path/lib/clang/$clang_version/lib/windows/clang_rt.asan_dynamic-i386.dll" ]
        }
      }
    }
  }
}
