# 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) { set_sources_assignment_filter([]) sources += [ "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_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" ] deps = [ "../client", "../compat", "../minidump", "../snapshot", "../third_party/mini_chromium:base", "../tools:tool_support", "../util", ] if (crashpad_is_win) { cflags = [ "/wd4201" ] # nonstandard extension used : nameless struct/union } } 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", ] } } crashpad_executable("crashpad_handler") { sources = [ "main.cc", ] deps = [ ":handler", "../build:default_exe_manifest_win", "../compat", "../third_party/mini_chromium:base", ] if (crashpad_is_mac && crashpad_is_in_chromium) { if (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/Helpers/ # so set the rpath for that too. "-rpath", "@loader_path/../../../../..", ] } } if (crashpad_is_win) { if (crashpad_is_in_chromium) { 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" ] } } } # 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. if (crashpad_is_android) { copy("crashpad_handler_module") { deps = [ ":crashpad_handler", ] sources = [ "$root_out_dir/crashpad_handler", ] outputs = [ "$root_out_dir/libcrashpad_handler.so", ] } } 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", ] } } }