# 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") {
  check_includes = false

  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",
    ]
  }

  if (crashpad_is_fuchsia) {
    sources += [
      "fuchsia/crash_report_exception_handler.cc",
      "fuchsia/crash_report_exception_handler.h",
      "fuchsia/exception_handler_server.cc",
      "fuchsia/exception_handler_server.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:crypto_full" ]
  }

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

  if (crashpad_is_fuchsia) {
    deps += [ "../third_party/fuchsia" ]
  }

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

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/gtest:gtest",
      "../third_party/mini_chromium:base",
      "../util",
    ]

    if (crashpad_is_win) {
      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",
      ]
    }
  }

  if (crashpad_is_in_native_target_build) {
    config("crashpad_handler_native_target_config") {
      # This is to undo the "main=StarboardMain" define added for all targets
      # when final_executable_type == "shared_library", in
      # starboard/build/config/BUILD.gn, which itself is admittedly a hack.
      defines = [ "StarboardMain=main" ]
    }
  }

  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",
    ]

    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 += [ ":crashpad_handler_native_target_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
    }
  }
}

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",
    ]
  }

  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/gtest:gtest",
      "../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",
      ]
    }
  }
}
