# Copyright 2015 The Crashpad Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../build/crashpad_buildconfig.gni")

static_library("handler") {
  sources = [
    "crash_report_upload_thread.cc",
    "crash_report_upload_thread.h",
    "handler_main.cc",
    "handler_main.h",
    "minidump_to_upload_parameters.cc",
    "minidump_to_upload_parameters.h",
    "prune_crash_reports_thread.cc",
    "prune_crash_reports_thread.h",
    "user_stream_data_source.cc",
    "user_stream_data_source.h",
  ]

  if (crashpad_is_mac) {
    sources += [
      "mac/crash_report_exception_handler.cc",
      "mac/crash_report_exception_handler.h",
      "mac/exception_handler_server.cc",
      "mac/exception_handler_server.h",
      "mac/file_limit_annotation.cc",
      "mac/file_limit_annotation.h",
    ]
  }

  if (crashpad_is_linux || crashpad_is_android) {
    sources += [
      "linux/capture_snapshot.cc",
      "linux/capture_snapshot.h",
      "linux/crash_report_exception_handler.cc",
      "linux/crash_report_exception_handler.h",
      "linux/exception_handler_server.cc",
      "linux/exception_handler_server.h",
    ]
  }

  if (crashpad_is_linux && !crashpad_is_in_starboard &&
      !crashpad_is_in_native_target_build) {
    sources += [
      "linux/cros_crash_report_exception_handler.cc",
      "linux/cros_crash_report_exception_handler.h",
    ]
  }

  if (crashpad_is_win) {
    sources += [
      "win/crash_report_exception_handler.cc",
      "win/crash_report_exception_handler.h",
    ]
  }

  public_configs = [ "..:crashpad_config" ]

  public_deps = [
    "../client",
    "../third_party/mini_chromium:base",
    "../util",
  ]

  deps = [
    "../minidump",
    "../snapshot",
    "../tools:tool_support",
  ]

  if (crashpad_is_in_starboard || crashpad_is_in_native_target_build) {
    sources += [ "../util/net/http_transport_socket.cc" ]
    defines = [ "CRASHPAD_USE_BORINGSSL" ]
    deps += [ "//third_party/boringssl" ]
  }

  if (crashpad_is_win) {
    cflags = [ "/wd4201" ]  # nonstandard extension used : nameless struct/union
  }

  if (crashpad_is_in_starboard) {
    public_deps += [ "//starboard:starboard_group", ]
  }
}

if (crashpad_is_android) {
  # CrashpadHandlerMain is defined in a separate target so that it can be
  # overriden by implementers
  source_set("crashpad_handler_main") {
    sources = [ "crashpad_handler_main.cc" ]

    deps = [ ":handler" ]
  }
}

if (!crashpad_is_in_starboard && !crashpad_is_in_native_target_build) {
source_set("handler_test") {
  testonly = true

  sources = [ "minidump_to_upload_parameters_test.cc" ]

  if (crashpad_is_linux || crashpad_is_android) {
    sources += [ "linux/exception_handler_server_test.cc" ]
  }

  if (crashpad_is_win) {
    sources += [ "crashpad_handler_test.cc" ]
  }

  deps = [
    ":handler",
    "../client",
    "../compat",
    "../snapshot",
    "../snapshot:test_support",
    "../test",
    "../third_party/googletest:googletest",
    "../third_party/mini_chromium:base",
    "../util",
  ]

  if (crashpad_is_win) {
    deps += [ "../minidump:test_support" ]

    data_deps = [
      ":crashpad_handler_test_extended_handler",
      ":fake_handler_that_crashes_at_startup",
    ]
  }
}
}

if (!crashpad_is_ios) {
  if (crashpad_is_in_starboard || crashpad_is_in_native_target_build) {
    config("customized_for_cobalt_crashpad_handler_config") {
      cflags = [
        "-ffunction-sections",
        "-fdata-sections",
      ]
      ldflags = [
        "-Wl,--as-needed",
        "-Wl,-gc-sections",
        "-Wl,-z,noexecstack",
      ]
    }
  }

  crashpad_executable("crashpad_handler") {
    if (crashpad_is_in_starboard) {
      install_target = !crashpad_is_android
      data_deps = [ "//third_party/icu:icudata" ]
    }

    sources = [ "main.cc" ]

    deps = [
      ":handler",
      "../build:default_exe_manifest_win",
      "../compat",
      "../third_party/mini_chromium:base",
      "../tools:tool_support",
    ]

    configs = []
    if (crashpad_is_win) {
      if (crashpad_is_in_chromium || crashpad_is_in_dart) {
        remove_configs = [ "//build/config/win:console" ]
        configs = [ "//build/config/win:windowed" ]
      } else {
        remove_configs =
            [ "//third_party/mini_chromium/mini_chromium/build:win_console" ]
        configs =
            [ "//third_party/mini_chromium/mini_chromium/build:win_windowed" ]
      }
    }

    if (crashpad_is_in_starboard || crashpad_is_in_native_target_build) {
      check_includes = false
      configs += [ ":customized_for_cobalt_crashpad_handler_config" ]
    }

    if (crashpad_is_in_native_target_build) {
      configs += [ "../build:native_target_executable_config" ]
    }
  }
}

# There is not any normal way to package native executables in an Android APK.
# It is normal to package native code as a loadable module but Android's APK
# installer will ignore files not named like a shared object, so give the
# handler executable an acceptable name.
# TODO: b/256660693 Disabled crashpad_handler executables due to build issues on Android
if (crashpad_is_android &&
    !(crashpad_is_in_starboard || crashpad_is_in_native_target_build)) {
  copy("crashpad_handler_named_as_so") {
    deps = [ ":crashpad_handler" ]

    sources = [ "$root_out_dir/crashpad_handler" ]

    outputs = [ "$root_out_dir/libcrashpad_handler.so" ]
  }

  crashpad_executable("crashpad_handler_trampoline") {
    output_name = "libcrashpad_handler_trampoline.so"

    sources = [ "linux/handler_trampoline.cc" ]

    ldflags = [ "-llog" ]

    if (crashpad_is_in_chromium) {
      no_default_deps = true
    }
    remove_configs =
        [ "//build/config/android:default_orderfile_instrumentation" ]
  }
}

if (!crashpad_is_ios && !crashpad_is_in_starboard &&
    !crashpad_is_in_native_target_build) {
  crashpad_executable("crashpad_handler_test_extended_handler") {
    testonly = true

    sources = [ "crashpad_handler_test_extended_handler.cc" ]

    deps = [
      ":handler",
      "../build:default_exe_manifest_win",
      "../compat",
      "../minidump:test_support",
      "../third_party/mini_chromium:base",
      "../tools:tool_support",
    ]
  }
}

if (crashpad_is_win) {
  crashpad_executable("crashpad_handler_com") {
    sources = [ "main.cc" ]

    # Avoid .exp, .ilk, and .lib file collisions with crashpad_handler.exe by
    # having this target produce crashpad_handler_com.com. Don’t use this target
    # directly. Instead, use crashpad_handler_console.
    output_extension = "com"

    deps = [
      ":handler",
      "../build:default_exe_manifest_win",
      "../compat",
      "../third_party/mini_chromium:base",
      "../tools:tool_support",
    ]
  }

  copy("crashpad_handler_console") {
    deps = [ ":crashpad_handler_com" ]
    sources = [ "$root_out_dir/crashpad_handler_com.com" ]
    outputs = [ "$root_out_dir/crashpad_handler.com" ]
  }

  crashpad_executable("crash_other_program") {
    testonly = true

    sources = [ "win/crash_other_program.cc" ]

    deps = [
      "../client",
      "../test",
      "../third_party/googletest:googletest",
      "../third_party/mini_chromium:base",
    ]
  }

  crashpad_executable("crashy_program") {
    testonly = true

    sources = [ "win/crashy_test_program.cc" ]

    deps = [
      "../client",
      "../third_party/mini_chromium:base",
    ]
  }

  crashpad_executable("crashy_signal") {
    testonly = true

    sources = [ "win/crashy_signal.cc" ]

    cflags = [ "/wd4702" ]  # Unreachable code.

    deps = [
      "../client",
      "../third_party/mini_chromium:base",
    ]
  }

  crashpad_executable("fake_handler_that_crashes_at_startup") {
    testonly = true

    sources = [ "win/fake_handler_that_crashes_at_startup.cc" ]
  }

  crashpad_executable("hanging_program") {
    testonly = true

    sources = [ "win/hanging_program.cc" ]

    deps = [
      "../client",
      "../third_party/mini_chromium:base",
    ]
  }

  crashpad_loadable_module("loader_lock_dll") {
    testonly = true

    sources = [ "win/loader_lock_dll.cc" ]
  }

  crashpad_executable("self_destroying_program") {
    testonly = true

    sources = [ "win/self_destroying_test_program.cc" ]

    deps = [
      "../client",
      "../compat",
      "../snapshot",
      "../third_party/mini_chromium:base",
    ]
  }

  if (current_cpu == "x86") {
    # Cannot create an x64 DLL with embedded debug info.
    crashpad_executable("crashy_z7_loader") {
      testonly = true

      sources = [ "win/crashy_test_z7_loader.cc" ]

      deps = [
        "../client",
        "../test",
        "../third_party/mini_chromium:base",
      ]
    }
  }
}
