# 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")
import("net/tls.gni")

if (crashpad_is_in_chromium) {
  import("//build/config/sanitizers/sanitizers.gni")
}

if (crashpad_is_mac || crashpad_is_ios) {
  if (crashpad_is_in_chromium || crashpad_is_in_fuchsia) {
    import("//build/config/sysroot.gni")
  } else if (crashpad_is_external) {
    import("../../../mini_chromium/mini_chromium/build/sysroot.gni")
  } else {
    import("//third_party/mini_chromium/mini_chromium/build/sysroot.gni")
  }

  action_foreach("mig") {
    script = "mach/mig.py"
    inputs = [
      "mach/mig_fix.py",
      "mach/mig_gen.py",
    ]

    if (crashpad_is_in_fuchsia) {
      # TODO(https://fxbug.dev/68780): Remove suppression when fixed.
      hermetic_deps = false
    }

    if (crashpad_is_mac) {
      sources = [
        "$sysroot/usr/include/mach/exc.defs",
        "$sysroot/usr/include/mach/mach_exc.defs",
        "$sysroot/usr/include/mach/notify.defs",
        "mach/child_port.defs",
      ]
    } else if (crashpad_is_ios) {
      sources = [
        # The iOS SDK doesn’t have any .defs files. Get them directly from xnu.
        "../third_party/xnu/osfmk/mach/exc.defs",
        "../third_party/xnu/osfmk/mach/mach_exc.defs",
      ]
    }

    outputs = [
      "$target_gen_dir/mach/{{source_name_part}}User.c",
      "$target_gen_dir/mach/{{source_name_part}}Server.c",
      "$target_gen_dir/mach/{{source_name_part}}.h",
      "$target_gen_dir/mach/{{source_name_part}}Server.h",
    ]

    args = [ "{{source}}" ]
    args += rebase_path(outputs, root_build_dir)
    if (crashpad_is_in_chromium) {
      if (!use_system_xcode) {
        import("//build/config/clang/clang.gni")
        import("//build/config/mac/mac_sdk.gni")
        clang_path =
            rebase_path("$clang_base_path/bin/", root_build_dir) + "clang"
        mig_path = "$mac_bin_path" + "mig"
        migcom_path = "$mac_bin_path" + "../libexec/migcom"

        args += [
          "--clang-path",
          clang_path,
          "--mig-path",
          mig_path,
          "--migcom-path",
          migcom_path,
        ]
      }
      deps = [ "//build/config/mac:sdk_inputs" ]
    }
    if (sysroot != "") {
      if (crashpad_is_in_chromium) {
        # Chromium often brings along its own SDK and wants to keep paths
        # relative…
        args += [
          "--sdk",
          rebase_path(sysroot, root_build_dir),
        ]
      } else {
        # …but that’s not an option in the standalone Crashpad build, where the
        # SDK is installed on the system and is absolute. (But use rebase_path
        # just to be sure.)
        args += [
          "--sdk",
          rebase_path(sysroot, ""),
        ]
      }
    }
    args += [
      "--include",
      rebase_path("..", root_build_dir),
      "--include",
      rebase_path("../compat/mac", root_build_dir),
    ]
    if (crashpad_is_ios) {
      args += [
        "--include",
        rebase_path("../compat/ios", root_build_dir),
      ]
    }
    if (current_cpu == "x86") {
      args += [
        "--arch",
        "i386",
      ]
    } else if (current_cpu == "x64") {
      args += [
        "--arch",
        "x86_64",
      ]
    } else if (current_cpu == "arm") {
      args += [
        "--arch",
        "armv7",
      ]
    } else if (current_cpu == "arm64") {
      args += [
        "--arch",
        "arm64",
      ]
    } else if (crashpad_is_mac && current_cpu == "mac_universal") {
      args += [
        "--arch",
        "x86_64",
        "--arch",
        "arm64",
      ]
    } else {
      assert(false, "Unsupported architecture")
    }
  }

  static_library("mig_output") {
    deps = [ ":mig" ]
    sources = get_target_outputs(":mig")
    if (crashpad_is_in_chromium) {
      # mig output contains unreachable code, which irks -Wunreachable-code.
      configs -= [ "//build/config/compiler:chromium_code" ]
      configs += [ "//build/config/compiler:no_chromium_code" ]
    }
    public_configs = [ "..:crashpad_config" ]
  }
}

crashpad_static_library("util") {
  sources = [
    "file/delimited_file_reader.cc",
    "file/delimited_file_reader.h",
    "file/directory_reader.h",
    "file/file_helper.cc",
    "file/file_helper.h",
    "file/file_io.cc",
    "file/file_io.h",
    "file/file_reader.cc",
    "file/file_reader.h",
    "file/file_seeker.cc",
    "file/file_seeker.h",
    "file/file_writer.cc",
    "file/file_writer.h",
    "file/filesystem.h",
    "file/output_stream_file_writer.cc",
    "file/output_stream_file_writer.h",
    "file/scoped_remove_file.cc",
    "file/scoped_remove_file.h",
    "file/string_file.cc",
    "file/string_file.h",
    "misc/address_sanitizer.h",
    "misc/address_types.h",
    "misc/arraysize.h",
    "misc/as_underlying_type.h",
    "misc/capture_context.h",
    "misc/clock.h",
    "misc/elf_note_types.h",
    "misc/from_pointer_cast.h",
    "misc/implicit_cast.h",
    "misc/initialization_state.h",
    "misc/initialization_state_dcheck.cc",
    "misc/initialization_state_dcheck.h",
    "misc/lexing.cc",
    "misc/lexing.h",
    "misc/memory_sanitizer.h",
    "misc/metrics.cc",
    "misc/metrics.h",
    "misc/paths.h",
    "misc/pdb_structures.cc",
    "misc/pdb_structures.h",
    "misc/random_string.cc",
    "misc/random_string.h",
    "misc/range_set.cc",
    "misc/range_set.h",
    "misc/reinterpret_bytes.cc",
    "misc/reinterpret_bytes.h",
    "misc/scoped_forbid_return.cc",
    "misc/scoped_forbid_return.h",
    "misc/symbolic_constants_common.h",
    "misc/time.cc",
    "misc/time.h",
    "misc/tri_state.h",
    "misc/uuid.cc",
    "misc/uuid.h",
    "misc/zlib.cc",
    "misc/zlib.h",
    "net/http_body.cc",
    "net/http_body.h",
    "net/http_body_gzip.cc",
    "net/http_body_gzip.h",
    "net/http_headers.h",
    "net/http_multipart_builder.cc",
    "net/http_multipart_builder.h",
    "net/http_transport.cc",
    "net/http_transport.h",
    "net/url.cc",
    "net/url.h",
    "numeric/checked_address_range.cc",
    "numeric/checked_address_range.h",
    "numeric/checked_range.h",
    "numeric/checked_vm_address_range.h",
    "numeric/in_range_cast.h",
    "numeric/int128.h",
    "numeric/safe_assignment.h",
    "process/process_id.h",
    "process/process_memory.cc",
    "process/process_memory.h",
    "process/process_memory_native.h",
    "process/process_memory_range.cc",
    "process/process_memory_range.h",
    "stdlib/aligned_allocator.cc",
    "stdlib/aligned_allocator.h",
    "stdlib/map_insert.h",
    "stdlib/objc.h",
    "stdlib/string_number_conversion.cc",
    "stdlib/string_number_conversion.h",
    "stdlib/strlcpy.cc",
    "stdlib/strlcpy.h",
    "stdlib/strnlen.cc",
    "stdlib/strnlen.h",
    "stdlib/thread_safe_vector.h",
    "stream/base94_output_stream.cc",
    "stream/base94_output_stream.h",
    "stream/file_encoder.cc",
    "stream/file_encoder.h",
    "stream/file_output_stream.cc",
    "stream/file_output_stream.h",
    "stream/log_output_stream.cc",
    "stream/log_output_stream.h",
    "stream/output_stream_interface.h",
    "stream/zlib_output_stream.cc",
    "stream/zlib_output_stream.h",
    "string/split_string.cc",
    "string/split_string.h",
    "synchronization/semaphore.h",
    "thread/stoppable.h",
    "thread/thread.cc",
    "thread/thread.h",
    "thread/thread_log_messages.cc",
    "thread/thread_log_messages.h",
    "thread/worker_thread.cc",
    "thread/worker_thread.h",
  ]

  defines = [ "ZLIB_CONST" ]

  if (crashpad_is_posix || crashpad_is_fuchsia) {
    sources += [
      "file/directory_reader_posix.cc",
      "file/file_io_posix.cc",
      "file/filesystem_posix.cc",
      "misc/clock_posix.cc",
      "posix/close_stdio.cc",
      "posix/close_stdio.h",
      "posix/scoped_dir.cc",
      "posix/scoped_dir.h",
      "posix/scoped_mmap.cc",
      "posix/scoped_mmap.h",
      "posix/signals.cc",
      "posix/signals.h",
      "synchronization/semaphore_posix.cc",
      "thread/thread_posix.cc",
    ]

    if (!crashpad_is_fuchsia) {
      sources += [
        "posix/close_multiple.cc",
        "posix/close_multiple.h",
        "posix/double_fork_and_exec.cc",
        "posix/double_fork_and_exec.h",
        "posix/drop_privileges.cc",
        "posix/drop_privileges.h",
        "posix/process_info.h",

        # These map signals to and from strings. While Fuchsia defines some of
        # the common SIGx defines, signals are never raised on Fuchsia, so
        # there's need to include this mapping code.
        "posix/symbolic_constants_posix.cc",
        "posix/symbolic_constants_posix.h",
      ]
    }
  }

  if (crashpad_is_mac || crashpad_is_ios) {
    sources += [
      "mac/xattr.cc",
      "mac/xattr.h",
      "mach/composite_mach_message_server.cc",
      "mach/composite_mach_message_server.h",
      "mach/exc_client_variants.cc",
      "mach/exc_client_variants.h",
      "mach/exc_server_variants.cc",
      "mach/exc_server_variants.h",
      "mach/exception_behaviors.cc",
      "mach/exception_behaviors.h",
      "mach/exception_ports.cc",
      "mach/exception_ports.h",
      "mach/mach_extensions.cc",
      "mach/mach_extensions.h",
      "mach/mach_message.cc",
      "mach/mach_message.h",
      "mach/mach_message_server.cc",
      "mach/mach_message_server.h",
      "mach/symbolic_constants_mach.cc",
      "mach/symbolic_constants_mach.h",
      "misc/capture_context_mac.S",
      "misc/clock_mac.cc",
      "misc/paths_mac.cc",
      "synchronization/semaphore_mac.cc",
    ]
  }

  if (crashpad_is_mac) {
    sources += [
      "mac/checked_mach_address_range.h",
      "mac/launchd.h",
      "mac/launchd.mm",
      "mac/mac_util.cc",
      "mac/mac_util.h",
      "mac/service_management.cc",
      "mac/service_management.h",
      "mac/sysctl.cc",
      "mac/sysctl.h",
      "mach/bootstrap.cc",
      "mach/bootstrap.h",
      "mach/child_port_handshake.cc",
      "mach/child_port_handshake.h",
      "mach/child_port_server.cc",
      "mach/child_port_server.h",
      "mach/child_port_types.h",
      "mach/exception_types.cc",
      "mach/exception_types.h",
      "mach/notify_server.cc",
      "mach/notify_server.h",
      "mach/scoped_task_suspend.cc",
      "mach/scoped_task_suspend.h",
      "mach/task_for_pid.cc",
      "mach/task_for_pid.h",
      "net/http_transport_mac.mm",
      "posix/process_info_mac.cc",
      "process/process_memory_mac.cc",
      "process/process_memory_mac.h",
    ]
  }

  if (crashpad_is_ios) {
    sources += [
      "ios/exception_processor.h",
      "ios/exception_processor.mm",
      "ios/ios_system_data_collector.h",
      "ios/ios_system_data_collector.mm",
    ]
  }

  deps = []

  if (crashpad_is_linux || crashpad_is_fuchsia || crashpad_is_android) {
    sources += [ "net/http_transport_socket.cc" ]
    if (crashpad_use_boringssl_for_http_transport_socket) {
      defines += [ "CRASHPAD_USE_BORINGSSL" ]

      if (crashpad_is_in_chromium || crashpad_is_in_fuchsia) {
        deps += [ "//third_party/boringssl" ]
      } else {
        libs = [
          "crypto",
          "ssl",
        ]
      }
    }
  }

  if (crashpad_is_android) {
    sources += [
      "linux/initial_signal_dispositions.cc",
      "linux/initial_signal_dispositions.h",
    ]
  }

  if (crashpad_is_linux || crashpad_is_android) {
    sources += [
      "linux/address_types.h",
      "linux/auxiliary_vector.cc",
      "linux/auxiliary_vector.h",
      "linux/checked_linux_address_range.h",
      "linux/direct_ptrace_connection.cc",
      "linux/direct_ptrace_connection.h",
      "linux/exception_handler_client.cc",
      "linux/exception_handler_client.h",
      "linux/exception_handler_protocol.cc",
      "linux/exception_handler_protocol.h",
      "linux/exception_information.h",
      "linux/memory_map.cc",
      "linux/memory_map.h",
      "linux/proc_stat_reader.cc",
      "linux/proc_stat_reader.h",
      "linux/proc_task_reader.cc",
      "linux/proc_task_reader.h",
      "linux/ptrace_broker.cc",
      "linux/ptrace_broker.h",
      "linux/ptrace_client.cc",
      "linux/ptrace_client.h",
      "linux/ptrace_connection.h",
      "linux/ptracer.cc",
      "linux/ptracer.h",
      "linux/scoped_pr_set_dumpable.cc",
      "linux/scoped_pr_set_dumpable.h",
      "linux/scoped_pr_set_ptracer.cc",
      "linux/scoped_pr_set_ptracer.h",
      "linux/scoped_ptrace_attach.cc",
      "linux/scoped_ptrace_attach.h",
      "linux/socket.cc",
      "linux/socket.h",
      "linux/thread_info.cc",
      "linux/thread_info.h",
      "linux/traits.h",
      "misc/capture_context_linux.S",
      "misc/paths_linux.cc",
      "misc/time_linux.cc",
      "posix/process_info_linux.cc",
      "process/process_memory_linux.cc",
      "process/process_memory_linux.h",
      "process/process_memory_sanitized.cc",
      "process/process_memory_sanitized.h",
    ]
  }

  if (crashpad_is_win) {
    sources += [
      "file/directory_reader_win.cc",
      "file/file_io_win.cc",
      "file/filesystem_win.cc",
      "misc/clock_win.cc",
      "misc/paths_win.cc",
      "misc/time_win.cc",
      "net/http_transport_win.cc",
      "process/process_memory_win.cc",
      "process/process_memory_win.h",
      "synchronization/semaphore_win.cc",
      "thread/thread_win.cc",
      "win/address_types.h",
      "win/checked_win_address_range.h",
      "win/command_line.cc",
      "win/command_line.h",
      "win/context_wrappers.h",
      "win/critical_section_with_debug_info.cc",
      "win/critical_section_with_debug_info.h",
      "win/exception_handler_server.cc",
      "win/exception_handler_server.h",
      "win/get_function.cc",
      "win/get_function.h",
      "win/get_module_information.cc",
      "win/get_module_information.h",
      "win/handle.cc",
      "win/handle.h",
      "win/initial_client_data.cc",
      "win/initial_client_data.h",
      "win/loader_lock.cc",
      "win/loader_lock.h",
      "win/module_version.cc",
      "win/module_version.h",
      "win/nt_internals.cc",
      "win/nt_internals.h",
      "win/ntstatus_logging.cc",
      "win/ntstatus_logging.h",
      "win/process_info.cc",
      "win/process_info.h",
      "win/process_structs.h",
      "win/registration_protocol_win.cc",
      "win/registration_protocol_win.h",
      "win/safe_terminate_process.h",
      "win/scoped_handle.cc",
      "win/scoped_handle.h",
      "win/scoped_local_alloc.cc",
      "win/scoped_local_alloc.h",
      "win/scoped_process_suspend.cc",
      "win/scoped_process_suspend.h",
      "win/scoped_registry_key.h",
      "win/scoped_set_event.cc",
      "win/scoped_set_event.h",
      "win/session_end_watcher.cc",
      "win/session_end_watcher.h",
      "win/termination_codes.h",
      "win/traits.h",
      "win/xp_compat.h",
    ]

    # There's no ml.exe yet in cross builds, so provide broken-but-not-asm
    # versions of the functions defined in .asm files.
    #
    # CaptureContext() in capture_context_broken.cc just calls CHECK(false).
    # SafeTerminateProcess() in safe_terminate_process.cc just calls regular
    # TerminateProcess() without the protection against broken third-party
    # patching of TerminateProcess().
    #
    # TODO(thakis): Use the .asm file in cross builds somehow,
    # https://crbug.com/762167.
    if (host_os == "win") {
      if (current_cpu != "arm64") {
        sources += [
          "misc/capture_context_win.asm",
          "win/safe_terminate_process.asm",
        ]
      } else {
        # Most Crashpad builds use Microsoft's armasm64.exe macro assembler for
        # .asm source files. When building in Chromium, clang-cl is used as the
        # assembler instead. Since the two assemblers recognize different
        # assembly dialects, the same .asm file can't be used for each. As a
        # workaround, use a prebuilt .obj file when the Microsoft-dialect
        # assembler isn't available.
        if (crashpad_is_in_chromium) {
          sources += [ "misc/capture_context_win_arm64.obj" ]
        } else {
          sources += [ "misc/capture_context_win_arm64.asm" ]
        }
      }
    } else {
      sources += [
        "misc/capture_context_broken.cc",
        "win/safe_terminate_process_broken.cc",
      ]
    }
  }

  if (crashpad_is_fuchsia) {
    sources += [
      "fuchsia/koid_utilities.cc",
      "fuchsia/koid_utilities.h",
      "fuchsia/scoped_task_suspend.cc",
      "fuchsia/scoped_task_suspend.h",
      "fuchsia/traits.h",
      "misc/capture_context_fuchsia.S",
      "misc/paths_fuchsia.cc",
      "process/process_memory_fuchsia.cc",
      "process/process_memory_fuchsia.h",
    ]
  }

  public_configs = [ "..:crashpad_config" ]

  # Include generated files starting with "util".
  if (crashpad_is_in_fuchsia) {
    include_dirs = [ "$root_gen_dir/third_party/crashpad" ]
  } else {
    include_dirs = [ "$root_gen_dir/third_party/crashpad/crashpad" ]
  }

  public_deps = [
    ":no_cfi_icall",
    "../compat",
    "../third_party/zlib",
  ]

  deps += [ "../third_party/mini_chromium:base" ]

  if (crashpad_is_mac || crashpad_is_ios) {
    include_dirs += [ "$root_build_dir/gen" ]
    deps += [ ":mig_output" ]
  }

  if (crashpad_is_mac) {
    libs = [ "bsm" ]
    frameworks = [
      "CoreFoundation.framework",
      "Foundation.framework",
      "IOKit.framework",
    ]
    deps += [ "../third_party/apple_cf:apple_cf" ]
  }

  if (crashpad_is_win) {
    libs = [
      "user32.lib",

      # TODO(jperaza): version.lib is needed for Windows 7 compatibility.
      # mincore.lib may be linked against instead when targeting Windows 8+.
      "version.lib",

      "winhttp.lib",
    ]

    cflags = [ "/wd4201" ]  # nonstandard extension used: nameless struct/union.

    if (current_cpu == "x86") {
      asmflags = [ "/safeseh" ]
    }
  }

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

  if (crashpad_is_android || crashpad_is_linux) {
    deps += [ "../third_party/lss" ]
  }
}

if (!crashpad_is_android && !crashpad_is_ios) {
  crashpad_executable("http_transport_test_server") {
    testonly = true
    sources = [ "net/http_transport_test_server.cc" ]

    deps = [
      ":util",
      "../third_party/cpp-httplib",
      "../third_party/mini_chromium:base",
      "../third_party/zlib",
      "../tools:tool_support",
    ]

    if (crashpad_is_standalone) {
      remove_configs = [ "//third_party/mini_chromium/mini_chromium/build/config:Wexit_time_destructors" ]
    } else if (crashpad_is_external) {
      remove_configs = [ "//../../mini_chromium/mini_chromium/build/config:Wexit_time_destructors" ]
    }

    if (crashpad_is_win) {
      libs = [ "ws2_32.lib" ]
    }

    if (crashpad_use_boringssl_for_http_transport_socket) {
      defines = [ "CRASHPAD_USE_BORINGSSL" ]

      if (crashpad_is_in_chromium || crashpad_is_in_fuchsia) {
        deps += [ "//third_party/boringssl" ]
      } else {
        libs = [
          "crypto",
          "ssl",
        ]
      }
    }
  }
}

# This exists as a separate target from util so that compat may depend on it
# without cycles.
source_set("no_cfi_icall") {
  sources = [ "misc/no_cfi_icall.h" ]
  public_configs = [ "..:crashpad_config" ]
  public_deps = [ "../third_party/mini_chromium:build" ]
}

source_set("util_test") {
  testonly = true

  sources = [
    "file/delimited_file_reader_test.cc",
    "file/directory_reader_test.cc",
    "file/file_io_test.cc",
    "file/file_reader_test.cc",
    "file/filesystem_test.cc",
    "file/string_file_test.cc",
    "misc/arraysize_test.cc",
    "misc/capture_context_test.cc",
    "misc/capture_context_test_util.h",
    "misc/clock_test.cc",
    "misc/from_pointer_cast_test.cc",
    "misc/initialization_state_dcheck_test.cc",
    "misc/initialization_state_test.cc",
    "misc/no_cfi_icall_test.cc",
    "misc/paths_test.cc",
    "misc/random_string_test.cc",
    "misc/range_set_test.cc",
    "misc/reinterpret_bytes_test.cc",
    "misc/scoped_forbid_return_test.cc",
    "misc/time_test.cc",
    "misc/uuid_test.cc",
    "net/http_body_gzip_test.cc",
    "net/http_body_test.cc",
    "net/http_body_test_util.cc",
    "net/http_body_test_util.h",
    "net/http_multipart_builder_test.cc",
    "net/url_test.cc",
    "numeric/checked_address_range_test.cc",
    "numeric/checked_range_test.cc",
    "numeric/in_range_cast_test.cc",
    "numeric/int128_test.cc",
    "process/process_memory_range_test.cc",
    "process/process_memory_test.cc",
    "stdlib/aligned_allocator_test.cc",
    "stdlib/map_insert_test.cc",
    "stdlib/string_number_conversion_test.cc",
    "stdlib/strlcpy_test.cc",
    "stdlib/strnlen_test.cc",
    "stdlib/thread_safe_vector_test.cc",
    "stream/base94_output_stream_test.cc",
    "stream/file_encoder_test.cc",
    "stream/log_output_stream_test.cc",
    "stream/test_output_stream.cc",
    "stream/test_output_stream.h",
    "stream/zlib_output_stream_test.cc",
    "string/split_string_test.cc",
    "synchronization/semaphore_test.cc",
    "thread/thread_log_messages_test.cc",
    "thread/thread_test.cc",
    "thread/worker_thread_test.cc",
  ]

  if (!crashpad_is_android && !crashpad_is_ios) {
    # Android requires an HTTPTransport implementation.
    sources += [ "net/http_transport_test.cc" ]
  }

  if (crashpad_is_posix || crashpad_is_fuchsia) {
    if (!crashpad_is_fuchsia && !crashpad_is_ios) {
      sources += [
        "posix/process_info_test.cc",
        "posix/signals_test.cc",
        "posix/symbolic_constants_posix_test.cc",
      ]
    }
    sources += [ "posix/scoped_mmap_test.cc" ]
  }

  if (crashpad_is_mac || crashpad_is_ios) {
    sources += [
      "mac/xattr_test.cc",
      "mach/composite_mach_message_server_test.cc",
      "mach/exc_server_variants_test.cc",
      "mach/exception_behaviors_test.cc",
      "mach/mach_extensions_test.cc",
      "mach/mach_message_test.cc",
      "mach/symbolic_constants_mach_test.cc",
      "misc/capture_context_test_util_mac.cc",
    ]
  }

  if (crashpad_is_mac) {
    sources += [
      "mac/launchd_test.mm",
      "mac/mac_util_test.mm",
      "mac/service_management_test.mm",
      "mac/sysctl_test.cc",
      "mach/bootstrap_test.cc",
      "mach/child_port_handshake_test.cc",
      "mach/child_port_server_test.cc",
      "mach/exc_client_variants_test.cc",
      "mach/exception_ports_test.cc",
      "mach/exception_types_test.cc",
      "mach/mach_message_server_test.cc",
      "mach/notify_server_test.cc",
      "mach/scoped_task_suspend_test.cc",
      "process/process_memory_mac_test.cc",
    ]
  }

  if (crashpad_is_ios) {
    sources += [ "ios/exception_processor_test.mm" ]

    sources -= [
      "process/process_memory_range_test.cc",
      "process/process_memory_test.cc",
    ]
  }

  if (crashpad_is_linux || crashpad_is_android) {
    sources += [
      "linux/auxiliary_vector_test.cc",
      "linux/memory_map_test.cc",
      "linux/proc_stat_reader_test.cc",
      "linux/proc_task_reader_test.cc",
      "linux/ptrace_broker_test.cc",
      "linux/ptracer_test.cc",
      "linux/scoped_ptrace_attach_test.cc",
      "linux/socket_test.cc",
      "misc/capture_context_test_util_linux.cc",
      "process/process_memory_sanitized_test.cc",
    ]
  }

  if (crashpad_is_fuchsia) {
    sources += [ "misc/capture_context_test_util_fuchsia.cc" ]
  }

  if (crashpad_is_win) {
    sources += [
      "misc/capture_context_test_util_win.cc",
      "win/command_line_test.cc",
      "win/critical_section_with_debug_info_test.cc",
      "win/exception_handler_server_test.cc",
      "win/get_function_test.cc",
      "win/handle_test.cc",
      "win/initial_client_data_test.cc",
      "win/loader_lock_test.cc",
      "win/process_info_test.cc",
      "win/registration_protocol_win_test.cc",
      "win/safe_terminate_process_test.cc",
      "win/scoped_process_suspend_test.cc",
      "win/session_end_watcher_test.cc",
    ]

    if (crashpad_is_in_chromium && is_asan && is_component_build) {
      # TODO(crbug.com/856174): Re-enable these once Windows ASan is fixed.
      sources -= [ "stdlib/string_number_conversion_test.cc" ]
    }
  }

  data = [
    "net/testdata/ascii_http_body.txt",
    "net/testdata/binary_http_body.dat",
    "net/testdata/crashpad_util_test_cert.pem",
    "net/testdata/crashpad_util_test_key.pem",
  ]

  deps = [
    ":util",
    "../client",
    "../compat",
    "../test",
    "../third_party/googletest:googlemock",
    "../third_party/googletest:googletest",
    "../third_party/mini_chromium:base",
    "../third_party/zlib",
  ]

  if (!crashpad_is_android && !crashpad_is_ios) {
    data_deps = [ ":http_transport_test_server" ]

    if (crashpad_use_boringssl_for_http_transport_socket) {
      defines = [ "CRASHPAD_USE_BORINGSSL" ]
    }
  }

  if (crashpad_is_mac) {
    frameworks = [ "Foundation.framework" ]
  }

  if (crashpad_is_ios) {
    deps += [ ":util_test_bundle_data" ]
  }

  if (crashpad_is_android || crashpad_is_linux) {
    deps += [ "../third_party/lss" ]
  }

  if (crashpad_is_win) {
    libs = [
      "rpcrt4.lib",
      "dbghelp.lib",
    ]
    data_deps += [
      ":crashpad_util_test_loader_lock_test",
      ":crashpad_util_test_process_info_test_child",
      ":crashpad_util_test_safe_terminate_process_test_child",
    ]
  }
}

if (crashpad_is_ios) {
  bundle_data("util_test_bundle_data") {
    testonly = true

    sources = [
      "net/testdata/ascii_http_body.txt",
      "net/testdata/binary_http_body.dat",
    ]

    outputs = [ "{{bundle_resources_dir}}/crashpad_test_data/" +
                "{{source_root_relative_dir}}/{{source_file_part}}" ]
  }
}

if (crashpad_is_win) {
  crashpad_executable("crashpad_util_test_process_info_test_child") {
    testonly = true
    sources = [ "win/process_info_test_child.cc" ]
  }

  crashpad_executable("crashpad_util_test_safe_terminate_process_test_child") {
    testonly = true
    sources = [ "win/safe_terminate_process_test_child.cc" ]
  }

  crashpad_loadable_module("crashpad_util_test_loader_lock_test") {
    testonly = true
    sources = [ "win/loader_lock_test_dll.cc" ]
    deps = [ ":util" ]
  }
}
