| # Copyright 2014 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. |
| |
| # TODO(crbug.com/753619): Enable crash reporting on Fuchsia. |
| assert(!is_ios && !is_fuchsia) |
| |
| import("//components/gwp_asan/buildflags/buildflags.gni") |
| |
| if (is_android) { |
| import("//build/config/android/config.gni") |
| } |
| |
| source_set("lib") { |
| visibility = [ ":*" ] |
| |
| sources = [ |
| "crash_reporter_client.cc", |
| "crash_reporter_client.h", |
| ] |
| |
| deps = [ |
| "//base", |
| ] |
| } |
| |
| source_set("crashpad_handler_main") { |
| sources = [ |
| "crashpad_handler_main.cc", |
| ] |
| |
| deps = [ |
| "//components/gwp_asan/buildflags", |
| "//third_party/crashpad/crashpad/handler:handler", |
| ] |
| |
| if (enable_gwp_asan) { |
| deps += [ "//components/gwp_asan/crash_handler" ] |
| } |
| } |
| |
| static_library("app") { |
| sources = [ |
| "crash_export_thunks.h", |
| "crash_switches.cc", |
| "crash_switches.h", |
| "crashpad.h", |
| "crashpad_android.cc", |
| "crashpad_linux.cc", |
| "crashpad_mac.mm", |
| "crashpad_win.cc", |
| ] |
| |
| if (is_mac || is_win || is_android || is_linux) { |
| sources += [ "crashpad.cc" ] |
| } |
| |
| if (is_linux) { |
| sources += [ |
| "breakpad_linux.cc", |
| "breakpad_linux.h", |
| "breakpad_linux_impl.h", |
| ] |
| } |
| |
| defines = [ "CRASH_IMPLEMENTATION" ] |
| |
| public_deps = [ |
| ":lib", |
| ] |
| deps = [ |
| "//base", |
| "//build:branding_buildflags", |
| ] |
| |
| if (is_mac || is_win || is_android || is_linux) { |
| deps += [ |
| "//third_party/crashpad/crashpad/client", |
| "//third_party/crashpad/crashpad/util", |
| ] |
| } |
| |
| if (is_android) { |
| deps += [ |
| ":crashpad_handler_main", |
| "//components/crash/android:jni_headers", |
| "//third_party/crashpad/crashpad/handler", |
| "//third_party/crashpad/crashpad/snapshot", |
| ] |
| } |
| |
| if (is_android || is_linux) { |
| deps += [ |
| "//base:base_static", |
| "//components/crash/core/common", |
| "//content/public/common:content_descriptors", |
| "//content/public/common:result_codes", |
| "//sandbox", |
| ] |
| } |
| |
| if (is_linux) { |
| deps += [ |
| "//content/public/common", |
| "//third_party/breakpad:client", |
| ] |
| } |
| |
| if (is_win) { |
| sources += [ |
| "dump_hung_process_with_ptype.cc", |
| "dump_hung_process_with_ptype.h", |
| "minidump_with_crashpad_info.cc", |
| "minidump_with_crashpad_info.h", |
| ] |
| |
| deps += [ |
| "//third_party/crashpad/crashpad/client", |
| "//third_party/crashpad/crashpad/handler", |
| "//third_party/crashpad/crashpad/minidump", |
| "//third_party/crashpad/crashpad/util", |
| ] |
| } |
| |
| if (is_mac) { |
| deps += [ |
| "//third_party/crashpad/crashpad/minidump", |
| "//third_party/crashpad/crashpad/snapshot", |
| ] |
| } |
| |
| if (is_android) { |
| libs = [ "log" ] |
| } |
| |
| if (is_linux) { |
| data_deps = [ |
| "//third_party/crashpad/crashpad/handler:crashpad_handler", |
| ] |
| } |
| } |
| |
| if (is_win) { |
| static_library("run_as_crashpad_handler") { |
| sources = [ |
| "crash_switches.cc", |
| "crash_switches.h", |
| "fallback_crash_handler_launcher_win.cc", |
| "fallback_crash_handler_launcher_win.h", |
| "fallback_crash_handler_win.cc", |
| "fallback_crash_handler_win.h", |
| "fallback_crash_handling_win.cc", |
| "fallback_crash_handling_win.h", |
| "minidump_with_crashpad_info.cc", |
| "minidump_with_crashpad_info.h", |
| "run_as_crashpad_handler_win.cc", |
| "run_as_crashpad_handler_win.h", |
| ] |
| |
| deps = [ |
| "//base", |
| "//components/browser_watcher:crash_stability", |
| "//components/gwp_asan/buildflags", |
| "//third_party/crashpad/crashpad/client", |
| "//third_party/crashpad/crashpad/handler", |
| "//third_party/crashpad/crashpad/minidump", |
| "//third_party/crashpad/crashpad/util", |
| ] |
| |
| if (enable_gwp_asan) { |
| deps += [ "//components/gwp_asan/crash_handler" ] |
| } |
| } |
| |
| # This source set contains the include file that declares the export thunks. |
| # Any target that gets compiled into both test and release code needs to |
| # depend on this for the include alone. The binary it's linked into then needs |
| # to depend on either :crash_export_thunks or :test_support, or in the case of |
| # release binaries, on //chrome_elf, which re-exports the thunks. |
| source_set("crash_export_thunk_include") { |
| sources = [ |
| "crash_export_thunks.h", |
| ] |
| } |
| |
| # This source set contains a set of functions that allow using the crashpad |
| # handler across a module boundary. The intent is for these functions to be |
| # built into a dynamic library, which the user of the crashpad handler then |
| # has a link-time dependency on. This will result in an import dependency |
| # from the user to the dynamic library that will be bound at load time. |
| # In a single-module project, this source set can alternatively be included in |
| # the sole module, in which case the implementation will be bound at link |
| # time. |
| source_set("crash_export_thunks") { |
| sources = [ |
| "crash_export_thunks.cc", |
| "crash_export_thunks.h", |
| ] |
| |
| deps = [ |
| ":app", |
| "//base", |
| "//third_party/crashpad/crashpad/client", |
| ] |
| } |
| |
| # This source set contains a set of test stubs for the functions above. |
| # time. |
| source_set("crash_export_stubs") { |
| testonly = true |
| |
| sources = [ |
| "crash_export_stubs.cc", |
| "crash_export_thunks.h", |
| ] |
| |
| deps = [ |
| ":app", |
| "//base", |
| ] |
| } |
| } |
| |
| if (is_mac || is_android) { |
| # We build a chromium-specific crashpad_handler executable so that we can |
| # define custom UserStreamDataSources. |
| executable("chrome_crashpad_handler") { |
| sources = [ |
| "chrome_crashpad_handler.cc", |
| ] |
| |
| deps = [ |
| ":crashpad_handler_main", |
| "//third_party/crashpad/crashpad/handler", |
| ] |
| |
| if (is_mac && is_component_build) { |
| ldflags = [ |
| # The handler is in |
| # Chromium.app/Contents/Versions/X/Chromium Framework.framework/Versions/A/Helpers/ |
| # so set rpath up to the base. |
| "-rpath", |
| "@loader_path/../../../../../../../..", |
| |
| # The handler is also in |
| # Content Shell.app/Contents/Frameworks/Content Shell Framework.framework/Versions/C/Helpers/ |
| # so set the rpath for that too. |
| "-rpath", |
| "@loader_path/../../../../../../..", |
| |
| # The handler can also be executed in an unbundled framework at |
| # Chromium Framework.framework/Versions/A/Helpers/ |
| "-rpath", |
| "@loader_path/../../../..", |
| |
| # The handler can be executed from headless_browsertests in Helpers/ |
| "-rpath", |
| "@loader_path/..", |
| ] |
| } |
| } |
| } |
| |
| if (is_android) { |
| # 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. |
| copy("chrome_crashpad_handler_named_as_so") { |
| deps = [ |
| ":chrome_crashpad_handler", |
| ] |
| |
| sources = [ |
| "$root_out_dir/chrome_crashpad_handler", |
| ] |
| |
| outputs = [ |
| "$root_out_dir/libchrome_crashpad_handler.so", |
| ] |
| } |
| } |
| |
| # This source set provides the functionality required for tests, which on Windows |
| # link the export thunks directly into the test binary. |
| source_set("test_support") { |
| testonly = true |
| |
| deps = [ |
| ":lib", |
| ] |
| |
| if (is_win) { |
| deps += [ ":crash_export_stubs" ] |
| } |
| } |
| |
| # TODO(crbug.com/565771): This target and :deprecated_breakpad_win should be |
| # removed. |
| if (is_win) { |
| static_library("deprecated_breakpad_win") { |
| visibility = [ "//components/nacl/broker:nacl64" ] |
| |
| sources = [ |
| "breakpad_win.cc", |
| "breakpad_win.h", |
| "hard_error_handler_win.cc", |
| "hard_error_handler_win.h", |
| ] |
| |
| defines = [ "CRASH_IMPLEMENTATION" ] |
| |
| deps = [ |
| ":lib", |
| "//base", |
| "//base:base_static", |
| "//components/crash/core/common", |
| "//content/public/common:result_codes", |
| "//sandbox", |
| "//third_party/breakpad:breakpad_handler", |
| "//third_party/breakpad:client", |
| ] |
| |
| include_dirs = [ "../../../../third_party/breakpad/breakpad/src" ] |
| |
| libs = [ "userenv.lib" ] |
| } |
| } |
| |
| source_set("unit_tests") { |
| testonly = true |
| sources = [ |
| "fallback_crash_handler_launcher_win_unittest.cc", |
| "fallback_crash_handler_win_unittest.cc", |
| "fallback_crash_handling_win_unittest.cc", |
| ] |
| deps = [ |
| ":lib", |
| "//base", |
| "//base/test:test_support", |
| "//testing/gmock", |
| "//testing/gtest", |
| ] |
| |
| if (is_win) { |
| deps += [ |
| ":run_as_crashpad_handler", |
| "//third_party/breakpad:client", |
| "//third_party/crashpad/crashpad/client:client", |
| "//third_party/crashpad/crashpad/snapshot:snapshot", |
| "//third_party/crashpad/crashpad/util", |
| ] |
| } |
| } |