# 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) {
  assert(host_os != "mac" || target_cpu != "x86",
         "Windows cross-builds from Mac must be 64-bit.")

  action("copy_cdb_to_output") {
    script = "//build/win/copy_cdb_to_output.py"
    inputs = [
      script,
      "//build/vs_toolchain.py",
    ]
    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",
    ]
    if (current_cpu != "arm64") {
      # The UCRT files are not redistributable for ARM64 Win32.
      outputs += [
        "$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-downlevel-kernel32-l2-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") {
    data = []
    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",
      ]
      if (current_cpu == "x64") {
        data += [ "$root_out_dir/vcruntime140_1${vcrt_suffix}.dll" ]
      }
      if (is_debug) {
        data += [ "$root_out_dir/ucrtbased.dll" ]
      }
      if (is_asan) {
        assert(target_cpu == "x64",
               "ASan is only supported in 64-bit builds on Windows.")
        data += [ "$clang_base_path/lib/clang/$clang_version/lib/windows/clang_rt.asan_dynamic-x86_64.dll" ]
      }
      if (current_cpu != "arm64") {
        data += [
          # 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/api-ms-win-downlevel-kernel32-l2-1-0.dll",
          "$root_out_dir/api-ms-win-eventing-provider-l1-1-0.dll",
        ]
        if (!is_debug) {
          data += [ "$root_out_dir/ucrtbase.dll" ]
        }
      }
    }
  }
}
