# 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/compiler/compiler.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//chrome/process_version_rc_template.gni")
import("//components/nacl/features.gni")
import("//third_party/icu/config.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
import("//ui/base/ui_features.gni")
import("//v8/gni/v8.gni")

declare_args() {
  # The Chrome archive is compressed in official builds to reduce the size of
  # the installer. By default: non-official or component builds, a build mode
  # targeting developers, do not compress so as to provide quicker build-test
  # cycles.
  skip_archive_compression = !is_official_build || is_component_build
}

config("mini_installer_compiler_flags") {
  # Disable buffer security checking.
  cflags = [ "/GS-" ]
}

source_set("lib") {
  sources = [
    "appid.h",
    "chrome.release",
    "chrome_appid.cc",
    "configuration.cc",
    "configuration.h",
    "decompress.cc",
    "decompress.h",
    "mini_installer.cc",
    "mini_installer.h",
    "mini_installer.rc",
    "mini_installer_constants.cc",
    "mini_installer_constants.h",
    "mini_installer_resource.h",
    "mini_string.cc",
    "mini_string.h",
    "pe_resource.cc",
    "pe_resource.h",
    "regkey.cc",
    "regkey.h",
  ]

  if (skip_archive_compression) {
    defines = [ "SKIP_ARCHIVE_COMPRESSION" ]
  }

  configs += [ ":mini_installer_compiler_flags" ]
}

process_version_rc_template("version") {
  template_file = "mini_installer_exe_version.rc.version"
  output = "$root_out_dir/mini_installer_exe_version.rc"
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "configuration_test.cc",
    "decompress_test.cc",
    "mini_installer_unittest.cc",
    "mini_string_test.cc",
  ]

  public_deps = [
    ":lib",
  ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//chrome/install_static:install_static_util",
    "//chrome/installer/util:with_no_strings",
    "//testing/gtest",
  ]
}

# The runtime deps are used to tell create_installer_archive what component
# DLLs need to be packaged in a component build.
chrome_runtime_deps = "$root_gen_dir/chrome_component.runtime_deps"
setup_runtime_deps = "$root_gen_dir/setup.runtime_deps"

group("chrome_runtime_deps") {
  write_runtime_deps = chrome_runtime_deps
  data_deps = [
    "//chrome",
    "//chrome/chrome_proxy",
  ]
}

group("setup_runtime_deps") {
  write_runtime_deps = setup_runtime_deps
  data_deps = [
    "//chrome/installer/setup",
  ]
}

# Generates a mini installer.
#
#   out_dir (required)
#     The output directory out_dir where the mini_installer image should be
#     written.
#
#   chrome_dll_file (required)
#     The path to the version of chrome.dll that should be included in the
#     installer archive.
#
#   chrome_dll_target (required)
#     The target that generated chrome_dll_file.
#
#   deps (required)
#     Normal meaning.
template("generate_mini_installer") {
  chrome_dll_file = invoker.chrome_dll_file
  chrome_dll_target = invoker.chrome_dll_target
  output_dir = invoker.out_dir

  packed_files_rc_file = "$target_gen_dir/$target_name/packed_files.rc"
  archive_name = target_name + "_archive"
  staging_dir = "$target_gen_dir/$target_name"

  action(archive_name) {
    script = "//chrome/tools/build/win/create_installer_archive.py"

    release_file = "chrome.release"

    inputs = [
      "$chrome_dll_file",
      "$root_out_dir/chrome.exe",
      "$root_out_dir/locales/en-US.pak",
      "$root_out_dir/setup.exe",
      "//chrome/tools/build/win/makecab.py",
      release_file,
    ]

    outputs = [
      # See also chrome.packed.7z conditionally added below.
      "$output_dir/chrome.7z",
      "$output_dir/setup.ex_",
      packed_files_rc_file,
    ]
    args = [
      "--build_dir",
      rebase_path(root_out_dir, root_build_dir),
      "--staging_dir",
      rebase_path(staging_dir, root_build_dir),
      "--input_file",
      rebase_path(release_file, root_build_dir),
      "--resource_file_path",
      rebase_path(packed_files_rc_file, root_build_dir),
      "--target_arch=$current_cpu",
      "--distribution=_google_chrome",
      "--output_dir",
      rebase_path(output_dir, root_build_dir),
      "--chrome_runtime_deps",
      rebase_path(chrome_runtime_deps, root_build_dir),
      "--setup_runtime_deps",
      rebase_path(setup_runtime_deps, root_build_dir),

      # Optional arguments to generate diff installer.
      #'--last_chrome_installer=C:/Temp/base',
      #'--setup_exe_format=DIFF',
      #'--diff_algorithm=COURGETTE',

      # Optional argument for verbose archiving output.
      #'--verbose',
    ]

    deps = [
      ":chrome_runtime_deps",
      ":setup_runtime_deps",
      "//chrome",
      "//chrome/browser/extensions/default_extensions",
      "//chrome/installer/setup",
      "//third_party/icu:icudata",
      chrome_dll_target,
    ]

    if (enable_hidpi) {
      args += [ "--enable_hidpi=1" ]
    }
    if (is_component_build) {
      args += [ "--component_build=1" ]
    }

    if (skip_archive_compression) {
      args += [ "--skip_archive_compression" ]
    } else {
      outputs += [ "$output_dir/chrome.packed.7z" ]
    }

    if (enable_nacl) {
      inputs += [ "$root_out_dir/nacl_irt_x86_64.nexe" ]
      deps += [ "//ppapi/native_client:irt" ]
      if (current_cpu == "x86") {
        inputs += [
          "$root_out_dir/nacl64.exe",
          "$root_out_dir/nacl_irt_x86_32.nexe",
        ]
        deps += [ "//components/nacl/broker:nacl64" ]
      }
    }

    if (icu_use_data_file) {
      inputs += [ "$root_out_dir/icudtl.dat" ]
    } else {
      inputs += [ "$root_out_dir/icudt.dll" ]
    }

    if (v8_use_external_startup_data) {
      inputs += [ "$root_out_dir/natives_blob.bin" ]
      deps += [ "//v8" ]
      if (use_v8_context_snapshot) {
        inputs += [ "$root_out_dir/v8_context_snapshot.bin" ]
        deps += [ "//tools/v8_context_snapshot" ]
      } else {
        inputs += [ "$root_out_dir/snapshot_blob.bin" ]
      }
    }

    depfile = "$target_gen_dir/archive.d"
    args += [
      "--depfile",
      rebase_path(depfile, root_build_dir),
    ]
  }

  executable(target_name) {
    output_name = "mini_installer"
    sources = [
      "mini_installer_exe_main.cc",
      packed_files_rc_file,
    ]

    # This target is special so we manually override most linker flags and
    # specify our own to keep the size down. Also make sure that we don't use
    # WPO as it's not supported by the mini installer.
    configs -= [
      "//build/config/compiler:default_optimization",
      "//build/config:executable_config",
      "//build/config/win:console",
    ]
    configs += [
      ":mini_installer_compiler_flags",
      "//build/config/compiler:optimize_no_wpo",
      "//build/config/sanitizers:link_executable",
      "//build/config/win:sdk_link",
      "//build/config/win:windowed",
    ]

    ldflags = [
      "/FIXED:NO",
      "/ignore:4199",
      "/NXCOMPAT",
    ]

    libs = [ "setupapi.lib" ]

    deps = [
      ":$archive_name",
      ":lib",
      ":version",
      "//build/win:default_exe_manifest",
    ]

    # In general, mini_installer tries to avoid depending on the C++ standard
    # library for size reasons. This is achieved by:
    #   1. setting a custom entry point which avoids pulling in the standard
    #      library via a link dependency.
    #   2. setting no_default_deps=true to avoid including the implicit
    #      dependency on //buildtools/third_party/libc++ in builds that set
    #      use_custom_libcxx=true.
    #
    # But in asan builds we need to link against the asan runtime library, which
    # in turn depends on the standard library and relies on it to run
    # initializers.
    if (!is_asan) {
      no_default_deps = true
      ldflags += [ "/ENTRY:MainEntryPoint" ]
    }
  }
}

generate_mini_installer("mini_installer") {
  out_dir = root_out_dir
  chrome_dll_file = "$root_out_dir/chrome.dll"
  chrome_dll_target = "//chrome:main_dll"
}

# previous_version_mini_installer.exe can't be generated in an x86 Debug
# component build because it requires too much memory.
# TODO(thakis): Enable this in cross builds, https://crbug.com/799827
if (!(is_component_build && is_debug && target_cpu == "x86") &&
    host_os == "win") {
  action("previous_version_mini_installer") {
    script = "generate_previous_version_mini_installer.py"
    testonly = true
    inputs = [
      "$root_out_dir/alternate_version_generator.exe",
      "$root_out_dir/mini_installer.exe",
    ]
    outputs = [
      "$root_out_dir/$target_name.exe",
    ]
    args = [
      "--out",
      "$target_name.exe",
    ]
    deps = [
      ":mini_installer",
      "//chrome/installer/test:alternate_version_generator",
    ]
  }
}
