[bazel] Copy over BUILD.bazel from google3

... to bootstrap Bazel build for crashpad.

NOTE: These BUILD.bazel files don't work as-is since they are from
google3, this CL is to provide a diffbase to ease reviews of
improvements on these files.

Change-Id: Ic2c6fd0b2f3a528be98d89730ef80dbecfe5594f
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/crashpad/+/750242
Reviewed-by: Shai Barack <shayba@google.com>
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..642d753
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,72 @@
+# Description:
+#   Crashpad is a crash-reporting system.
+
+load("//tools/build_defs/testing:bzl_library.bzl", "bzl_library")
+load("//devtools/moe/builddefs:builddefs.bzl", "GenInternalCodebase")
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+
+package(default_visibility = [
+    ":clients",
+    "//third_party/crashpad:__subpackages__",
+])
+
+# Crashpad itself is licensed under the Apache 2.0 license, but (when built for
+# non-Apple systems) has a dependency on a header for the Mach-O loader. This is
+# licensed under the APSL 2.0.
+licenses(["reciprocal"])
+
+exports_files(["LICENSE"])
+
+package_group(
+    name = "clients",
+    includes = [
+        # This takes priority over the `-//googlemac/iPhone/...` in `packages`.
+        "//googlemac/iPhone/Shared/Performance/Primes/v2:internal",
+    ],
+    packages = [
+        # Clients in googlemac/iPhone should use the Primes interface to Crashpad.
+        "-//googlemac/iPhone/...",
+        # Other clients (macOS, Linux, Windows, etc.) can directly use Crashpad.
+        "//...",
+    ],
+)
+
+# Makes crashpad headers available at their subdirectory locations.
+cc_library(
+    name = "internal",
+    hdrs = ["crashpad/package.h"],
+    compatible_with = ["//buildenv/target:non_prod"],
+    copts = CRASHPAD_COMMON_COPTS,
+    includes = ["crashpad"],
+    visibility = ["//third_party:__subpackages__"],
+)
+
+filegroup(
+    name = "opensource_filegroup",
+    srcs = glob([
+        "crashpad/**",
+    ]),
+)
+
+GenInternalCodebase(
+    name = "crashpad_internal_codebase",
+    srcs = [
+        "opensource_filegroup",
+    ],
+    out = "crashpad_internal_codebase.tar",
+)
+
+bzl_library(
+    name = "minimum_os_bzl",
+    srcs = ["minimum_os.bzl"],
+    parse_tests = False,
+    visibility = ["//visibility:private"],
+)
+
+bzl_library(
+    name = "copts_bzl",
+    srcs = ["copts.bzl"],
+    visibility = [
+        "//third_party/crashpad:__subpackages__",
+    ],
+)
diff --git a/client/BUILD.bazel b/client/BUILD.bazel
new file mode 100644
index 0000000..1b63a2b
--- /dev/null
+++ b/client/BUILD.bazel
@@ -0,0 +1,297 @@
+# Copyright 2018 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.
+
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+load("//tools/build_defs/apple:ios.bzl", "ios_unit_test")
+
+licenses(["notice"])
+
+package(
+    default_visibility = [
+        "//third_party/crashpad:__subpackages__",
+        "//third_party/crashpad:clients",
+    ],
+)
+
+CRASHPAD_TEST_SOURCES = [
+    "annotation_list_test.cc",
+    "annotation_test.cc",
+    "prune_crash_reports_test.cc",
+    "settings_test.cc",
+    "simple_address_range_bag_test.cc",
+    "simple_string_dictionary_test.cc",
+]
+
+cc_library(
+    name = "common",
+    srcs = [
+        "annotation.cc",
+        "annotation_list.cc",
+        "crash_report_database.cc",
+        "crashpad_info.cc",
+        "settings.cc",
+    ] + select({
+        "//tools/cc_target_os:apple": [],
+        "//tools/cc_target_os:windows": [
+            "crash_report_database_win.cc",
+        ],
+        "//conditions:default": [
+            "crashpad_info_note.S",
+            "crash_report_database_generic.cc",
+        ],
+    }),
+    hdrs = [
+        "annotation.h",
+        "annotation_list.h",
+        "crash_report_database.h",
+        "crashpad_info.h",
+        "settings.h",
+        "simple_address_range_bag.h",
+        "simple_string_dictionary.h",
+    ],
+    compatible_with = ["//buildenv/target:non_prod"],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    linkopts = select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [
+            "rpcrt4.lib",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_ios": [
+            ":common_apple",
+        ],
+        "//tools/cc_target_os:platform_macos": [":common_apple"],
+        "//conditions:default": [],
+    }),
+)
+
+objc_library(
+    name = "common_apple",
+    srcs = [
+        "annotation.h",
+        "crash_report_database.h",
+        "crashpad_client.h",
+        "settings.h",
+    ],
+    hdrs = select({
+        "//tools/cc_target_os:platform_ios": [
+            "ios_handler/exception_processor.h",
+            "simulate_crash_ios.h",
+            "upload_behavior_ios.h",
+        ],
+        "//conditions:default": [],
+    }),
+    aspect_hints = [
+        # This target's headers contain C++ and cannot be imported from Swift.
+        "//tools/build_defs/swift:no_module",
+    ],
+    compatible_with = ["//buildenv/target:non_prod"],
+    copts = [
+        "-Ithird_party/mini_chromium/mini_chromium",
+    ],
+    features = ["-layering_check"],
+    non_arc_srcs = [
+        "crash_report_database_mac.mm",
+    ] + select({
+        "//tools/cc_target_os:platform_ios": [
+            "ios_handler/exception_processor.mm",
+        ],
+        "//conditions:default": [],
+    }),
+    tags = ["maconly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/crashpad/crashpad/util:util_mac",
+    ],
+)
+
+cc_library(
+    name = "client",
+    srcs = [
+        "prune_crash_reports.cc",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "crashpad_client_mac.cc",
+            "simulate_crash_mac.cc",
+            "simulate_crash_mac.h",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            "crashpad_client_ios.cc",
+            "ios_handler/in_process_handler.cc",
+            "ios_handler/in_process_handler.h",
+            "ios_handler/in_process_intermediate_dump_handler.cc",
+            "ios_handler/in_process_intermediate_dump_handler.h",
+            "ios_handler/prune_intermediate_dumps_and_crash_reports_thread.h",
+            "ios_handler/prune_intermediate_dumps_and_crash_reports_thread.cc",
+            "simulate_crash_ios.h",
+        ],
+        "//tools/cc_target_os:windows": [
+            "crashpad_client_win.cc",
+            "simulate_crash_win.h",
+        ],
+        "//conditions:default": [
+            "client_argv_handling.cc",
+            "client_argv_handling.h",
+            "crashpad_client_linux.cc",
+            "simulate_crash_linux.h",
+        ],
+    }),
+    hdrs = [
+        "annotation.h",
+        "annotation_list.h",
+        "crash_report_database.h",
+        "crashpad_client.h",
+        "crashpad_info.h",
+        "prune_crash_reports.h",
+        "settings.h",
+        "simple_address_range_bag.h",
+        "simple_string_dictionary.h",
+        "simulate_crash.h",
+    ] + select({
+        "//tools/cc_target_os:platform_ios": [
+            "upload_behavior_ios.h",
+        ],
+        "//conditions:default": [
+        ],
+    }),
+    compatible_with = ["//buildenv/target:non_prod"],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    linkopts = select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [
+            "rpcrt4.lib",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":common",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            ":common_apple",
+            "//third_party/crashpad/crashpad/handler:common",
+            "//third_party/crashpad/crashpad/minidump",
+            "//third_party/crashpad/crashpad/snapshot",
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//tools/cc_target_os:windows": [],
+        "//conditions:default": [
+            "//third_party/crashpad/crashpad/external_libraries/lss",
+        ],
+    }),
+)
+
+cc_library(
+    name = "pthread_create",
+    srcs = ["pthread_create_linux.cc"],
+    tags = ["linuxonly"],
+    deps = [
+        ":client",
+        "//third_party/crashpad/crashpad/util:no_cfi_icall",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+objc_library(
+    name = "client_ios_test_lib",
+    testonly = 1,
+    srcs = CRASHPAD_TEST_SOURCES + [
+        "ios_handler/in_process_handler_test.cc",
+        "ios_handler/in_process_intermediate_dump_handler_test.cc",
+    ],
+    features = ["-layering_check"],
+    non_arc_srcs = [
+        "crashpad_client_ios_test.mm",
+        "ios_handler/exception_processor_test.mm",
+    ],
+    tags = ["iosonly"],
+    deps = [
+        ":client",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/apple_frameworks:XCTest",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:testing",
+    ],
+    alwayslink = 1,
+)
+
+ios_unit_test(
+    name = "client_ios_test",
+    minimum_os_version = "13.0",
+    runner = "//testing/utp/ios:IOS_LATEST",
+    tags = ["iosonly"],
+    deps = [
+        ":client_ios_test_lib",
+        "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST",
+    ],
+)
+
+cc_test(
+    name = "client_test",
+    srcs = CRASHPAD_TEST_SOURCES + [
+        # This is !iOS because GTEST_SKIP will fail when using GTM.
+        "crash_report_database_test.cc",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": ["simulate_crash_mac_test.cc"],
+        "//tools/cc_target_os:platform_ios": [],
+        "//tools/cc_target_os:windows": ["crashpad_client_win_test.cc"],
+        "//conditions:default": ["crashpad_client_linux_test.cc"],
+    }),
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-Wno-non-virtual-dtor",
+    ],
+    data = select({
+        "//tools/cc_target_os:windows": [
+            "//third_party/crashpad/crashpad/handler:crashpad_handler.com",
+        ],
+        "//conditions:default": [
+            "//third_party/crashpad/crashpad/handler:crashpad_handler",
+        ],
+    }),
+    features = ["-use_header_modules"],
+    deps = [
+        ":client",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/crashpad/crashpad/test:googlemock_main",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/crashpad/crashpad/util:util_mac",
+        ],
+        "//conditions:default": [],
+    }),
+)
diff --git a/compat/BUILD.bazel b/compat/BUILD.bazel
new file mode 100644
index 0000000..2916b95
--- /dev/null
+++ b/compat/BUILD.bazel
@@ -0,0 +1,196 @@
+# 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.
+
+load("//tools/build_defs/testing:bzl_library.bzl", "bzl_library")
+
+licenses(["notice"])
+
+package(
+    default_visibility = [
+        "//third_party/crashpad:__subpackages__",
+    ],
+)
+
+COMPAT_ANDROID_SOURCES = [
+    "android/dlfcn_internal.cc",
+    "android/sys/epoll.cc",
+    "android/sys/mman_mmap.cc",
+]
+
+COMPAT_ANDROID_HEADERS = [
+    "android/dlfcn_internal.h",
+    "android/elf.h",
+    "android/linux/elf.h",
+    "android/linux/prctl.h",
+    "android/linux/ptrace.h",
+    "android/sched.h",
+    "android/sys/epoll.h",
+    "android/sys/mman.h",
+    "android/sys/syscall.h",
+    "android/sys/user.h",
+]
+
+COMPAT_LINUX_SOURCES = [
+    "linux/sys/mman_memfd_create.cc",
+]
+
+COMPAT_LINUX_HEADERS = [
+    "linux/signal.h",
+    "linux/sys/mman.h",
+    "linux/sys/ptrace.h",
+    "linux/sys/user.h",
+]
+
+COMPAT_APPLE_SOURCES = [
+]
+
+COMPAT_APPLE_HEADERS = [
+    "mac/Availability.h",
+    "mac/AvailabilityVersions.h",
+    "mac/kern/exc_resource.h",
+    "mac/mach/mach.h",
+    "mac/mach-o/loader.h",
+    "mac/sys/resource.h",
+]
+
+COMPAT_MAC_SOURCES = [
+]
+
+COMPAT_MAC_HEADERS = [
+    "mac/mach/i386/thread_state.h",
+]
+
+COMPAT_IOS_SOURCES = [
+]
+
+COMPAT_IOS_HEADERS = [
+    "ios/mach/exc.defs",
+    "ios/mach/mach_exc.defs",
+    "ios/mach/mach_types.defs",
+    "ios/mach/machine/machine_types.defs",
+    "ios/mach/std_types.defs",
+]
+
+COMPAT_NONMAC_SOURCES = [
+]
+
+COMPAT_NONMAC_HEADERS = [
+    "non_mac/mach/mach.h",
+]
+
+COMPAT_WINDOWS_SOURCES = [
+    "win/strings.cc",
+    "win/time.cc",
+]
+
+COMPAT_WINDOWS_HEADERS = [
+    "win/getopt.h",
+    "win/strings.h",
+    "win/sys/time.h",
+    "win/sys/types.h",
+    "win/time.h",
+    "win/winbase.h",
+    "win/winnt.h",
+    "win/winternl.h",
+]
+
+COMPAT_NONWIN_SOURCES = [
+    "non_win/minwinbase.h",
+    "non_win/timezoneapi.h",
+    "non_win/verrsrc.h",
+]
+
+COMPAT_NONWIN_HEADERS = [
+    "non_win/dbghelp.h",
+    "non_win/windows.h",
+    "non_win/winnt.h",
+]
+
+filegroup(
+    name = "src_location",
+    srcs = ["."],
+    compatible_with = ["//buildenv/target:non_prod"],
+    tags = ["maconly"],
+)
+
+cc_library(
+    name = "compat",
+    srcs = select({
+        "//tools/cc_target_os:platform_macos": COMPAT_APPLE_SOURCES + COMPAT_MAC_SOURCES +
+                                               COMPAT_NONWIN_SOURCES,
+        "//tools/cc_target_os:platform_ios": COMPAT_APPLE_SOURCES + COMPAT_IOS_SOURCES +
+                                             COMPAT_NONWIN_SOURCES,
+        "//tools/cc_target_os:android": COMPAT_ANDROID_SOURCES + COMPAT_LINUX_SOURCES +
+                                        COMPAT_NONMAC_SOURCES + COMPAT_NONWIN_SOURCES,
+        "//tools/cc_target_os:windows": COMPAT_WINDOWS_SOURCES + COMPAT_NONMAC_SOURCES,
+        "//conditions:default": COMPAT_LINUX_SOURCES +
+                                COMPAT_NONMAC_SOURCES + COMPAT_NONWIN_SOURCES,
+    }),
+    hdrs = select({
+        "//tools/cc_target_os:platform_macos": COMPAT_APPLE_HEADERS + COMPAT_MAC_HEADERS +
+                                               COMPAT_NONWIN_HEADERS,
+        "//tools/cc_target_os:platform_ios": COMPAT_APPLE_HEADERS + COMPAT_IOS_HEADERS +
+                                             COMPAT_NONWIN_HEADERS,
+        "//tools/cc_target_os:android": COMPAT_ANDROID_HEADERS + COMPAT_LINUX_HEADERS +
+                                        COMPAT_NONMAC_HEADERS + COMPAT_NONWIN_HEADERS,
+        "//tools/cc_target_os:windows": COMPAT_WINDOWS_HEADERS + COMPAT_NONMAC_HEADERS,
+        "//conditions:default": COMPAT_LINUX_HEADERS +
+                                COMPAT_NONMAC_HEADERS + COMPAT_NONWIN_HEADERS,
+    }),
+    compatible_with = ["//buildenv/target:non_prod"],
+    copts = select({
+        "//tools/cc_target_os:android": [
+            "-Ithird_party/crashpad/crashpad/compat/android",
+        ],
+        "//conditions:default": [],
+    }),
+    includes = select({
+        "//tools/cc_target_os:apple": [
+            "non_win",
+        ],
+        "//tools/cc_target_os:windows": [
+            "non_mac",
+            "win",
+        ],
+        "//conditions:default": [
+            "non_mac",
+            "non_win",
+        ],
+    }),
+    linkopts = select({
+        "//tools/cc_target_os:android": ["-ldl"],
+        "//tools/cc_target_os:apple": [],
+        "//tools/cc_target_os:windows": [],
+        "//conditions:default": ["-ldl"],
+    }),
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/util:no_cfi_icall",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:windows": [
+            "//third_party/crashpad/crashpad/external_libraries/getopt",
+        ],
+        "//conditions:default": [
+            "//third_party/crashpad/crashpad/external_libraries/xnu",
+        ],
+    }),
+)
+
+bzl_library(
+    name = "includes_bzl",
+    srcs = ["includes.bzl"],
+    parse_tests = False,
+    visibility = ["//visibility:private"],
+)
diff --git a/compat/includes.bzl b/compat/includes.bzl
new file mode 100644
index 0000000..14acddc
--- /dev/null
+++ b/compat/includes.bzl
@@ -0,0 +1,27 @@
+"""Inclusion entries needed for compat headers."""
+
+CRASHPAD_COMPAT_INCLUDES_COPTS_MACOS = [
+    "-Ithird_party/crashpad/crashpad/compat/mac",
+]
+
+CRASHPAD_COMPAT_INCLUDES_COPTS_IOS = [
+    "-Ithird_party/crashpad/crashpad/compat/mac",
+    "-Ithird_party/crashpad/crashpad/compat/ios",
+]
+
+CRASHPAD_COMPAT_INCLUDES_COPTS_ANDROID = [
+    "-Ithird_party/crashpad/crashpad/compat/linux",
+    "-Ithird_party/crashpad/crashpad/compat/android",
+]
+
+CRASHPAD_COMPAT_INCLUDES_COPTS_DEFAULT = [
+    "-Ithird_party/crashpad/crashpad/compat/linux",
+]
+
+CRASHPAD_COMPAT_INCLUDES_COPTS = select({
+    "//tools/cc_target_os:platform_macos": CRASHPAD_COMPAT_INCLUDES_COPTS_MACOS,
+    "//tools/cc_target_os:platform_ios": CRASHPAD_COMPAT_INCLUDES_COPTS_IOS,
+    "//tools/cc_target_os:windows": [],
+    "//tools/cc_target_os:android": CRASHPAD_COMPAT_INCLUDES_COPTS_ANDROID,
+    "//conditions:default": CRASHPAD_COMPAT_INCLUDES_COPTS_DEFAULT,
+})
diff --git a/copts.bzl b/copts.bzl
new file mode 100644
index 0000000..dc67c59
--- /dev/null
+++ b/copts.bzl
@@ -0,0 +1,69 @@
+"""Common compiler options."""
+
+load(
+    "//third_party/crashpad/crashpad/compat:includes.bzl",
+    "CRASHPAD_COMPAT_INCLUDES_COPTS",
+)
+
+# Keep in sync with config("unicode") from Chromium's build/config/win/BUILD.gn:
+# https://source.chromium.org/chromium/chromium/src/+/main:build/config/win/BUILD.gn;l=570;drc=804d5a91d49d0ad79d3d5529e6ba2610225cfe55
+CRASHPAD_WINDOWS_UNICODE_COPTS = [
+    "-DUNICODE",
+    "-D_UNICODE",
+]
+
+# Keep in sync with config("winver") from Chromium's build/config/win/BUILD.gn:
+# https://source.chromium.org/chromium/chromium/src/+/main:build/config/win/BUILD.gn;l=287;drc=804d5a91d49d0ad79d3d5529e6ba2610225cfe55
+CRASHPAD_WINDOWS_WINVER_COPTS = [
+    "-DNTDDI_VERSION=NTDDI_WIN10_FE",
+    "-D_WIN32_WINNT=0x0A00",
+    "-DWINVER=0x0A00",
+]
+
+# Keep in sync with config("nominmax") from Chromium's build/config/win/BUILD.gn:
+# https://source.chromium.org/chromium/chromium/src/+/main:build/config/win/BUILD.gn;l=592;drc=804d5a91d49d0ad79d3d5529e6ba2610225cfe55
+CRASHPAD_WINDOWS_NOMINMAX_COPTS = [
+    "-DNOMINMAX",
+]
+
+# Keep in sync with config("lean_and_mean") from Chromium's build/config/win/BUILD.gn:
+# https://source.chromium.org/chromium/chromium/src/+/main:build/config/win/BUILD.gn;l=582;drc=804d5a91d49d0ad79d3d5529e6ba2610225cfe55
+CRASHPAD_WINDOWS_LEAN_AND_MEAN_COPTS = [
+    "-DWIN32_LEAN_AND_MEAN",
+]
+
+# Keep in sync with config("runtime_library") from Chromium's build/config/win/BUILD.gn:
+# https://source.chromium.org/chromium/chromium/src/+/main:build/config/win/BUILD.gn;l=216;drc=804d5a91d49d0ad79d3d5529e6ba2610225cfe55
+CRASHPAD_WINDOWS_RUNTIME_LIBRARY_COPTS = [
+    "-D__STD_C",
+    "-D_CRT_RAND_S",
+    "-D_CRT_SECURE_NO_DEPRECATE",
+    "-D_SCL_SECURE_NO_DEPRECATE",
+    "-D_ATL_NO_OPENGL",
+    "-D_WINDOWS",
+    "-DCERT_CHAIN_PARA_HAS_EXTRA_FIELDS",
+    "-DPSAPI_VERSION=2",
+    "-DWIN32",
+    "-D_SECURE_ATL",
+    "-DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP",
+]
+
+# Keep in sync with config("no_exceptions") from Chromium's build/config/compiler/BUILD.gn:
+# https://source.chromium.org/chromium/chromium/src/+/main:build/config/compiler/BUILD.gn;l=1862;drc=cf59bae1055c82caefd5c5f95250ee5f3b4ee05b
+CRASHPAD_WINDOWS_NO_EXCEPTIONS_COPTS = [
+    "-D_HAS_EXCEPTIONS=0",
+]
+
+CRASHPAD_MINI_CHROMIUM_INCLUDES = [
+    "-Ithird_party/mini_chromium/mini_chromium",
+]
+
+WINDOWS_COPTS = CRASHPAD_MINI_CHROMIUM_INCLUDES + CRASHPAD_WINDOWS_UNICODE_COPTS + CRASHPAD_WINDOWS_WINVER_COPTS + CRASHPAD_WINDOWS_NOMINMAX_COPTS + CRASHPAD_WINDOWS_LEAN_AND_MEAN_COPTS + CRASHPAD_WINDOWS_RUNTIME_LIBRARY_COPTS + CRASHPAD_WINDOWS_NO_EXCEPTIONS_COPTS
+DEFAULT_COPTS = CRASHPAD_MINI_CHROMIUM_INCLUDES + ["-Wa,--noexecstack", "-Wno-non-virtual-dtor"]
+
+CRASHPAD_COMMON_COPTS_SELECTOR = {
+    "//tools/cc_target_os:windows": WINDOWS_COPTS,
+    "//conditions:default": DEFAULT_COPTS,
+}
+
+CRASHPAD_COMMON_COPTS = select(CRASHPAD_COMMON_COPTS_SELECTOR) + CRASHPAD_COMPAT_INCLUDES_COPTS
diff --git a/handler/BUILD.bazel b/handler/BUILD.bazel
new file mode 100644
index 0000000..3978cdf
--- /dev/null
+++ b/handler/BUILD.bazel
@@ -0,0 +1,346 @@
+# Copyright 2018 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.
+
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+load(
+    "//tools/build_defs/apple:macos.bzl",
+    "macos_build_test",
+    "macos_command_line_application",
+)
+load("//tools/build_defs/apple:ios.bzl", "ios_unit_test")
+
+licenses(["notice"])
+
+package(
+    default_visibility = [
+        "//third_party/crashpad:__subpackages__",
+        "//third_party/crashpad:clients",
+    ],
+)
+
+MACOS_MINIMUM_OS_VERSION = "10.13"
+
+CRASHPAD_TEST_SOURCES = [
+    "minidump_to_upload_parameters_test.cc",
+]
+
+cc_library(
+    name = "handler_lib",
+    srcs = [
+        "prune_crash_reports_thread.cc",
+        "prune_crash_reports_thread.h",
+        "user_stream_data_source.cc",
+        "user_stream_data_source.h",
+        "handler_main.cc",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "mac/file_limit_annotation.cc",
+            "mac/file_limit_annotation.h",
+            "mac/crash_report_exception_handler.cc",
+            "mac/crash_report_exception_handler.h",
+            "mac/exception_handler_server.cc",
+        ],
+        "//tools/cc_target_os:windows": [
+            "win/crash_report_exception_handler.cc",
+            "win/crash_report_exception_handler.h",
+        ],
+        "//conditions:default": [
+            "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",
+        ],
+    }) + select({
+        "//tools/cc_target_os:chromiumos": [
+            "linux/cros_crash_report_exception_handler.cc",
+            "linux/cros_crash_report_exception_handler.h",
+        ],
+        "//conditions:default": [],
+    }),
+    hdrs = [
+        "handler_main.h",
+    ] + select({
+        "//tools/cc_target_os:apple": [
+            "mac/exception_handler_server.h",
+        ],
+        "//tools/cc_target_os:windows": [],
+        "//conditions:default": [
+            "linux/exception_handler_server.h",
+        ],
+    }),
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-Wno-non-virtual-dtor",
+    ],
+    features = ["-use_header_modules"],
+    deps = [
+        ":common",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/minidump",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/tools:tool_support",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/crashpad/crashpad/util:mach_interfaces",
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+        ],
+        "//tools/cc_target_os:windows": [
+            "//third_party/crashpad/crashpad/util:exception_handler_server",
+        ],
+        "//conditions:default": [
+            "//third_party/libcap",
+        ],
+    }),
+)
+
+cc_library(
+    name = "common",
+    srcs = [
+        "crash_report_upload_thread.cc",
+        "minidump_to_upload_parameters.cc",
+    ] + select({
+        "//tools/cc_target_os:apple": [
+            "mac/file_limit_annotation.cc",
+        ],
+        "//conditions:default": [],
+    }),
+    hdrs = [
+        "crash_report_upload_thread.h",
+        "minidump_to_upload_parameters.h",
+    ] + select({
+        "//tools/cc_target_os:apple": [
+            "mac/file_limit_annotation.h",
+        ],
+        "//conditions:default": [],
+    }),
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        "//third_party/crashpad/crashpad/client:common",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/mini_chromium:base_mac",
+            "//third_party/crashpad/crashpad/util:mach_interfaces",
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/crashpad/crashpad/util:exception_handler_server",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            "//third_party/crashpad/crashpad/util:util_mac",
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
+
+cc_library(
+    name = "handler_mac_lib",
+    srcs = ["main.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["maconly"],
+    deps = [
+        ":handler_lib",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/tools:tool_support",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+macos_command_line_application(
+    name = "handler_mac",
+    bundle_id = "crashpad_handler",
+    minimum_os_version = MACOS_MINIMUM_OS_VERSION,
+    tags = ["maconly"],
+    deps = [
+        ":handler_mac_lib",
+    ],
+)
+
+cc_binary(
+    name = "handler_generic",
+    srcs = ["main.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["linuxonly"],
+    deps = [
+        ":handler_lib",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client:pthread_create",
+        "//third_party/crashpad/crashpad/tools:tool_support",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+genrule(
+    name = "handler_renamed",
+    srcs = select({
+        "//tools/cc_target_os:platform_macos": [":handler_mac"],
+        "//conditions:default": [":handler_generic"],
+    }),
+    outs = ["crashpad_handler"],
+    cmd = "cp $$(echo $(SRCS) | sed 's+\\s*[^ ]*\\.dSYM[^ ]*\\s*++g') $@",
+    output_to_bindir = True,
+    tags = ["posixonly"],
+)
+
+cc_binary(
+    name = "crashpad_handler.exe",
+    srcs = ["main.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    linkopts = [
+        # This prevents opening a console window when crashpad_handler.exe runs.
+        "/SUBSYSTEM:WINDOWS",
+    ],
+    tags = ["windowsonly"],
+    deps = [
+        ":handler_lib",
+        "//third_party/crashpad/crashpad/tools:tool_support",
+        "//third_party/crashpad/crashpad/util:exception_handler_server",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+alias(
+    name = "handler",
+    actual = select({
+        "//tools/cc_target_os:windows": "crashpad_handler.exe",
+        "//conditions:default": "handler_renamed",
+    }),
+)
+
+cc_binary(
+    name = "crashpad_handler.com",
+    srcs = ["main.cc"],
+    linkopts = [
+        "/SUBSYSTEM:CONSOLE",
+    ],
+    tags = ["windowsonly"],
+    deps = [
+        ":handler_lib",
+        "//third_party/crashpad/crashpad/tools:tool_support",
+        "//third_party/crashpad/crashpad/util:exception_handler_server",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+objc_library(
+    name = "handler_ios_test_lib",
+    testonly = 1,
+    srcs = CRASHPAD_TEST_SOURCES,
+    features = ["-layering_check"],
+    tags = ["iosonly"],
+    deps = [
+        ":common",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/apple_frameworks:XCTest",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/snapshot:test_support",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:testing",
+    ],
+    alwayslink = 1,
+)
+
+ios_unit_test(
+    name = "handler_ios_test",
+    minimum_os_version = "13.0",
+    runner = "//testing/utp/ios:IOS_LATEST",
+    tags = ["iosonly"],
+    deps = [
+        ":handler_ios_test_lib",
+        "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST",
+    ],
+)
+
+cc_test(
+    name = "handler_test",
+    srcs = CRASHPAD_TEST_SOURCES + select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [
+            "crashpad_handler_test.cc",
+        ],
+        "//conditions:default": [
+            "linux/exception_handler_server_test.cc",
+        ],
+    }),
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-Wno-non-virtual-dtor",
+    ],
+    data = select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [
+            ":crashpad_handler_test_extended_handler",
+            ":fake_handler_that_crashes_at_startup",
+        ],
+        "//conditions:default": [],
+    }),
+    features = ["-use_header_modules"],
+    deps = [
+        ":common",
+        ":handler_lib",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/minidump:test_support",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/snapshot:test_support",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/crashpad/crashpad/test:googlemock_main",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_handler_test_extended_handler",
+    testonly = True,
+    srcs = [
+        "crashpad_handler_test_extended_handler.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        ":handler_lib",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/minidump:test_support",
+        "//third_party/crashpad/crashpad/tools:tool_support",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "fake_handler_that_crashes_at_startup",
+    testonly = True,
+    srcs = ["win/fake_handler_that_crashes_at_startup.cc"],
+    tags = ["windowsonly"],
+)
+
+macos_build_test(
+    name = "handler_mac_build_test",
+    minimum_os_version = MACOS_MINIMUM_OS_VERSION,
+    tags = ["maconly"],
+    targets = [":handler_mac_lib"],
+)
diff --git a/handler/win/wer/BUILD.bazel b/handler/win/wer/BUILD.bazel
new file mode 100644
index 0000000..7206737
--- /dev/null
+++ b/handler/win/wer/BUILD.bazel
@@ -0,0 +1,63 @@
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+
+licenses(["notice"])
+
+package(
+    default_visibility = [
+        "//third_party/crashpad:__subpackages__",
+        "//third_party/crashpad:clients",
+    ],
+)
+
+cc_library(
+    name = "crashpad_wer_handler",
+    srcs = [
+        "crashpad_wer.cc",
+    ],
+    hdrs = [
+        "crashpad_wer.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/util:util_registration_protocol",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_wer.dll",
+    srcs = [
+        "crashpad_wer_main.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    linkopts = ["/DLL"],
+    linkshared = True,
+    tags = ["windowsonly"],
+    win_def_file = "crashpad_wer.def",
+    deps = [
+        ":crashpad_wer_handler",
+    ],
+)
+
+cc_test(
+    name = "crashpad_wer_test",
+    srcs = [
+        "crashpad_wer_module_unittest.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    data = [
+        ":crashpad_wer.dll",
+    ],
+    features = ["-use_header_modules"],
+    tags = ["windowsonly"],
+    deps = [
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/crashpad/crashpad/test:googlemock_main",
+    ],
+)
diff --git a/minidump/BUILD.bazel b/minidump/BUILD.bazel
new file mode 100644
index 0000000..2996c5b
--- /dev/null
+++ b/minidump/BUILD.bazel
@@ -0,0 +1,247 @@
+# Copyright 2018 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.
+
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+load("//tools/build_defs/apple:ios.bzl", "ios_unit_test")
+
+licenses(["notice"])
+
+package(
+    default_visibility = ["//visibility:public"],
+)
+
+CRASHPAD_TEST_SOURCES = [
+    "minidump_annotation_writer_test.cc",
+    "minidump_byte_array_writer_test.cc",
+    "minidump_context_writer_test.cc",
+    "minidump_crashpad_info_writer_test.cc",
+    "minidump_exception_writer_test.cc",
+    "minidump_file_writer_test.cc",
+    "minidump_handle_writer_test.cc",
+    "minidump_memory_info_writer_test.cc",
+    "minidump_memory_writer_test.cc",
+    "minidump_misc_info_writer_test.cc",
+    "minidump_module_crashpad_info_writer_test.cc",
+    "minidump_module_writer_test.cc",
+    "minidump_rva_list_writer_test.cc",
+    "minidump_simple_string_dictionary_writer_test.cc",
+    "minidump_system_info_writer_test.cc",
+    "minidump_thread_id_map_test.cc",
+    "minidump_thread_name_list_writer_test.cc",
+    "minidump_thread_writer_test.cc",
+    "minidump_unloaded_module_writer_test.cc",
+    "minidump_user_stream_writer_test.cc",
+    "minidump_writable_test.cc",
+]
+
+cc_library(
+    name = "extensions_header",
+    hdrs = [
+        "minidump_extensions.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_library(
+    name = "minidump",
+    srcs = [
+        "minidump_annotation_writer.cc",
+        "minidump_byte_array_writer.cc",
+        "minidump_context_writer.cc",
+        "minidump_crashpad_info_writer.cc",
+        "minidump_exception_writer.cc",
+        "minidump_file_writer.cc",
+        "minidump_handle_writer.cc",
+        "minidump_memory_info_writer.cc",
+        "minidump_memory_writer.cc",
+        "minidump_misc_info_writer.cc",
+        "minidump_module_crashpad_info_writer.cc",
+        "minidump_module_writer.cc",
+        "minidump_rva_list_writer.cc",
+        "minidump_simple_string_dictionary_writer.cc",
+        "minidump_stream_writer.cc",
+        "minidump_string_writer.cc",
+        "minidump_system_info_writer.cc",
+        "minidump_thread_id_map.cc",
+        "minidump_thread_name_list_writer.cc",
+        "minidump_thread_writer.cc",
+        "minidump_unloaded_module_writer.cc",
+        "minidump_user_extension_stream_data_source.cc",
+        "minidump_user_stream_writer.cc",
+        "minidump_writable.cc",
+        "minidump_writer_util.cc",
+        "minidump_writer_util.h",
+    ],
+    hdrs = [
+        "minidump_annotation_writer.h",
+        "minidump_byte_array_writer.h",
+        "minidump_context.h",
+        "minidump_context_writer.h",
+        "minidump_crashpad_info_writer.h",
+        "minidump_exception_writer.h",
+        "minidump_extensions.h",
+        "minidump_file_writer.h",
+        "minidump_handle_writer.h",
+        "minidump_memory_info_writer.h",
+        "minidump_memory_writer.h",
+        "minidump_misc_info_writer.h",
+        "minidump_module_crashpad_info_writer.h",
+        "minidump_module_writer.h",
+        "minidump_rva_list_writer.h",
+        "minidump_simple_string_dictionary_writer.h",
+        "minidump_stream_writer.h",
+        "minidump_string_writer.h",
+        "minidump_system_info_writer.h",
+        "minidump_thread_id_map.h",
+        "minidump_thread_name_list_writer.h",
+        "minidump_thread_writer.h",
+        "minidump_unloaded_module_writer.h",
+        "minidump_user_extension_stream_data_source.h",
+        "minidump_user_stream_writer.h",
+        "minidump_writable.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        ":format",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+# :format is the only part of minidump that snapshot may depend on.
+cc_library(
+    name = "format",
+    srcs = [
+        "minidump_extensions.cc",
+    ],
+    hdrs = [
+        "minidump_context.h",
+        "minidump_extensions.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/snapshot:context",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_library(
+    name = "test_support",
+    testonly = True,
+    srcs = [
+        "test/minidump_byte_array_writer_test_util.cc",
+        "test/minidump_context_test_util.cc",
+        "test/minidump_file_writer_test_util.cc",
+        "test/minidump_memory_writer_test_util.cc",
+        "test/minidump_rva_list_test_util.cc",
+        "test/minidump_string_writer_test_util.cc",
+        "test/minidump_user_extension_stream_util.cc",
+        "test/minidump_writable_test_util.cc",
+    ],
+    hdrs = [
+        "test/minidump_byte_array_writer_test_util.h",
+        "test/minidump_context_test_util.h",
+        "test/minidump_file_writer_test_util.h",
+        "test/minidump_memory_writer_test_util.h",
+        "test/minidump_rva_list_test_util.h",
+        "test/minidump_string_writer_test_util.h",
+        "test/minidump_user_extension_stream_util.h",
+        "test/minidump_writable_test_util.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    deps = [
+        ":minidump",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/snapshot:test_support",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_test(
+    name = "minidump_test",
+    testonly = True,
+    srcs = CRASHPAD_TEST_SOURCES + [
+        "minidump_string_writer_test.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        ":minidump",
+        ":test_support",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/snapshot:test_support",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/crashpad/crashpad/test:googlemock_main",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+objc_library(
+    name = "minidump_ios_test_lib",
+    testonly = 1,
+    # Skipping minidump_string_writer_test.cc because thet test
+    # ConvertInvalidUTF8ToUTF16 causes the iOS test runner to fail.
+    srcs = CRASHPAD_TEST_SOURCES,
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-layering_check"],
+    tags = ["iosonly"],
+    deps = [
+        ":minidump",
+        ":test_support",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/apple_frameworks:XCTest",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/snapshot:test_support",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:testing",
+    ],
+    alwayslink = 1,
+)
+
+ios_unit_test(
+    name = "minidump_ios_test",
+    minimum_os_version = "13.0",
+    runner = "//testing/utp/ios:IOS_LATEST",
+    tags = ["iosonly"],
+    deps = [
+        ":minidump_ios_test_lib",
+        "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST",
+    ],
+)
diff --git a/minimum_os.bzl b/minimum_os.bzl
new file mode 100644
index 0000000..4779f34
--- /dev/null
+++ b/minimum_os.bzl
@@ -0,0 +1,3 @@
+"""Minimum OS version definitions"""
+
+MACOS_MINIMUM_OS = "10.10"
diff --git a/snapshot/BUILD.bazel b/snapshot/BUILD.bazel
new file mode 100644
index 0000000..d944c1b
--- /dev/null
+++ b/snapshot/BUILD.bazel
@@ -0,0 +1,775 @@
+# Copyright 2018 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.
+
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+load("//tools/build_defs/apple:ios.bzl", "ios_unit_test")
+load("//tools/build_defs/apple:resources.bzl", "apple_resource_group")
+
+licenses(["notice"])
+
+package(
+    default_visibility = [
+        "//third_party/crashpad:__subpackages__",
+    ],
+)
+
+CRASHPAD_SNAPSHOT_SOURCES = [
+    "annotation_snapshot.cc",
+    "capture_memory.cc",
+    "capture_memory.h",
+    "crashpad_info_client_options.cc",
+    "handle_snapshot.cc",
+    "memory_snapshot.cc",
+    "memory_snapshot_generic.h",
+    "minidump/exception_snapshot_minidump.cc",
+    "minidump/memory_snapshot_minidump.cc",
+    "minidump/minidump_annotation_reader.cc",
+    "minidump/minidump_context_converter.cc",
+    "minidump/minidump_simple_string_dictionary_reader.cc",
+    "minidump/minidump_simple_string_dictionary_reader.h",
+    "minidump/minidump_string_list_reader.cc",
+    "minidump/minidump_string_list_reader.h",
+    "minidump/minidump_string_reader.cc",
+    "minidump/minidump_string_reader.h",
+    "minidump/module_snapshot_minidump.cc",
+    "minidump/module_snapshot_minidump.h",
+    "minidump/process_snapshot_minidump.cc",
+    "minidump/system_snapshot_minidump.cc",
+    "minidump/thread_snapshot_minidump.cc",
+    "unloaded_module_snapshot.cc",
+]
+
+CRASHPAD_SNAPSHOT_HEADERS = [
+    "annotation_snapshot.h",
+    "cpu_architecture.h",
+    "cpu_context.h",
+    "crashpad_info_client_options.h",
+    "exception_snapshot.h",
+    "handle_snapshot.h",
+    "memory_map_region_snapshot.h",
+    "memory_snapshot.h",
+    "minidump/exception_snapshot_minidump.h",
+    "minidump/memory_snapshot_minidump.h",
+    "minidump/minidump_annotation_reader.h",
+    "minidump/minidump_context_converter.h",
+    "minidump/minidump_stream.h",
+    "minidump/process_snapshot_minidump.h",
+    "minidump/system_snapshot_minidump.h",
+    "minidump/thread_snapshot_minidump.h",
+    "module_snapshot.h",
+    "process_snapshot.h",
+    "system_snapshot.h",
+    "thread_snapshot.h",
+    "unloaded_module_snapshot.h",
+]
+
+CRASHPAD_SNAPSHOT_TEXTUAL_HEADERS = [
+    "snapshot_constants.h",
+]
+
+CRASHPAD_SNAPSHOT_MACOS_SOURCES = [
+    "mac/cpu_context_mac.cc",
+    "mac/exception_snapshot_mac.cc",
+    "mac/mach_o_image_annotations_reader.cc",
+    "mac/mach_o_image_reader.cc",
+    "mac/mach_o_image_segment_reader.cc",
+    "mac/mach_o_image_symbol_table_reader.cc",
+    "mac/mach_o_image_symbol_table_reader.h",
+    "mac/module_snapshot_mac.cc",
+    "mac/process_reader_mac.cc",
+    "mac/process_snapshot_mac.cc",
+    "mac/process_types.cc",
+    "mac/process_types/custom.cc",
+    "mac/system_snapshot_mac.cc",
+    "mac/thread_snapshot_mac.cc",
+]
+
+CRASHPAD_SNAPSHOT_MACOS_HEADERS = [
+    "mac/cpu_context_mac.h",
+    "mac/exception_snapshot_mac.h",
+    "mac/mach_o_image_annotations_reader.h",
+    "mac/mach_o_image_reader.h",
+    "mac/mach_o_image_segment_reader.h",
+    "mac/module_snapshot_mac.h",
+    "mac/process_reader_mac.h",
+    "mac/process_snapshot_mac.h",
+    "mac/process_types.h",
+    "mac/process_types/internal.h",
+    "mac/process_types/traits.h",
+    "mac/system_snapshot_mac.h",
+    "mac/thread_snapshot_mac.h",
+]
+
+CRASHPAD_SNAPSHOT_MACOS_TEXTUAL_HEADERS = [
+    "mac/process_types/all.proctype",
+    "mac/process_types/annotation.proctype",
+    "mac/process_types/crashpad_info.proctype",
+    "mac/process_types/crashreporterclient.proctype",
+    "mac/process_types/dyld_images.proctype",
+    "mac/process_types/flavors.h",
+    "mac/process_types/loader.proctype",
+    "mac/process_types/nlist.proctype",
+]
+
+CRASHPAD_SNAPSHOT_IOS_SOURCES = [
+    "ios/exception_snapshot_ios_intermediate_dump.cc",
+    "ios/intermediate_dump_reader_util.cc",
+    "ios/memory_snapshot_ios_intermediate_dump.cc",
+    "ios/module_snapshot_ios_intermediate_dump.cc",
+    "ios/process_snapshot_ios_intermediate_dump.cc",
+    "ios/system_snapshot_ios_intermediate_dump.cc",
+    "ios/thread_snapshot_ios_intermediate_dump.cc",
+    "mac/cpu_context_mac.cc",
+]
+
+CRASHPAD_SNAPSHOT_IOS_HEADERS = [
+    "ios/exception_snapshot_ios_intermediate_dump.h",
+    "ios/intermediate_dump_reader_util.h",
+    "ios/memory_snapshot_ios_intermediate_dump.h",
+    "ios/module_snapshot_ios_intermediate_dump.h",
+    "ios/process_snapshot_ios_intermediate_dump.h",
+    "ios/system_snapshot_ios_intermediate_dump.h",
+    "ios/thread_snapshot_ios_intermediate_dump.h",
+    "mac/cpu_context_mac.h",
+]
+
+CRASHPAD_SNAPSHOT_POSIX_SOURCES = [
+    "posix/timezone.cc",
+]
+
+CRASHPAD_SNAPSHOT_POSIX_HEADERS = [
+    "posix/timezone.h",
+]
+
+CRASHPAD_SNAPSHOT_LINUX_SOURCES = [
+    "crashpad_types/crashpad_info_reader.cc",
+    "crashpad_types/image_annotation_reader.cc",
+    "elf/elf_dynamic_array_reader.cc",
+    "elf/elf_image_reader.cc",
+    "elf/elf_symbol_table_reader.cc",
+    "elf/module_snapshot_elf.cc",
+    "linux/capture_memory_delegate_linux.h",
+    "linux/capture_memory_delegate_linux.cc",
+    "linux/cpu_context_linux.cc",
+    "linux/cpu_context_linux.h",
+    "linux/debug_rendezvous.cc",
+    "linux/exception_snapshot_linux.cc",
+    "linux/process_reader_linux.cc",
+    "linux/process_snapshot_linux.cc",
+    "linux/system_snapshot_linux.cc",
+    "linux/thread_snapshot_linux.cc",
+    "sanitized/memory_snapshot_sanitized.cc",
+    "sanitized/module_snapshot_sanitized.cc",
+    "sanitized/process_snapshot_sanitized.cc",
+    "sanitized/sanitization_information.cc",
+    "sanitized/thread_snapshot_sanitized.cc",
+]
+
+CRASHPAD_SNAPSHOT_LINUX_HEADERS = [
+    "crashpad_types/crashpad_info_reader.h",
+    "crashpad_types/image_annotation_reader.h",
+    "elf/elf_dynamic_array_reader.h",
+    "elf/elf_image_reader.h",
+    "elf/elf_symbol_table_reader.h",
+    "elf/module_snapshot_elf.h",
+    "linux/debug_rendezvous.h",
+    "linux/exception_snapshot_linux.h",
+    "linux/process_reader_linux.h",
+    "linux/process_snapshot_linux.h",
+    "linux/system_snapshot_linux.h",
+    "linux/thread_snapshot_linux.h",
+    "sanitized/memory_snapshot_sanitized.h",
+    "sanitized/module_snapshot_sanitized.h",
+    "sanitized/process_snapshot_sanitized.h",
+    "sanitized/sanitization_information.h",
+    "sanitized/thread_snapshot_sanitized.h",
+]
+
+CRASHPAD_SNAPSHOT_LINUX_TEXTUAL_HEADERS = [
+    "linux/signal_context.h",
+]
+
+CRASHPAD_SNAPSHOT_WINDOWS_SOURCES = [
+    "crashpad_types/crashpad_info_reader.cc",
+    "crashpad_types/crashpad_info_reader.h",
+    "win/capture_memory_delegate_win.cc",
+    "win/capture_memory_delegate_win.h",
+    "win/cpu_context_win.cc",
+    "win/cpu_context_win.h",
+    "win/exception_snapshot_win.cc",
+    "win/exception_snapshot_win.h",
+    "win/memory_map_region_snapshot_win.cc",
+    "win/memory_map_region_snapshot_win.h",
+    "win/module_snapshot_win.cc",
+    "win/module_snapshot_win.h",
+    "win/pe_image_annotations_reader.cc",
+    "win/pe_image_annotations_reader.h",
+    "win/pe_image_reader.cc",
+    "win/pe_image_reader.h",
+    "win/pe_image_resource_reader.cc",
+    "win/pe_image_resource_reader.h",
+    "win/process_reader_win.cc",
+    "win/process_reader_win.h",
+    "win/process_snapshot_win.cc",
+    "win/process_snapshot_win.h",
+    "win/process_subrange_reader.cc",
+    "win/process_subrange_reader.h",
+    "win/system_snapshot_win.cc",
+    "win/system_snapshot_win.h",
+    "win/thread_snapshot_win.cc",
+    "win/thread_snapshot_win.h",
+]
+
+CRASHPAD_SNAPSHOT_WINDOWS_HEADERS = [
+]
+
+CRASHPAD_SNAPSHOT_X86_SOURCES = [
+    "x86/cpuid_reader.cc",
+    "x86/cpuid_reader.h",
+]
+
+CRASHPAD_TEST_SOURCES = [
+    "cpu_context_test.cc",
+    "memory_snapshot_test.cc",
+    "minidump/process_snapshot_minidump_test.cc",
+]
+
+cc_library(
+    name = "snapshot",
+    srcs = CRASHPAD_SNAPSHOT_SOURCES +
+           select({
+               "//tools/cc_target_os:platform_macos": CRASHPAD_SNAPSHOT_MACOS_SOURCES +
+                                                      CRASHPAD_SNAPSHOT_POSIX_SOURCES,
+               "//tools/cc_target_os:platform_ios": CRASHPAD_SNAPSHOT_IOS_SOURCES +
+                                                    CRASHPAD_SNAPSHOT_POSIX_SOURCES,
+               "//tools/cc_target_os:windows": CRASHPAD_SNAPSHOT_WINDOWS_SOURCES,
+               "//conditions:default": CRASHPAD_SNAPSHOT_LINUX_SOURCES +
+                                       CRASHPAD_SNAPSHOT_POSIX_SOURCES,
+           }) +
+           select({
+               "//tools/target_cpu:k8": CRASHPAD_SNAPSHOT_X86_SOURCES,
+               "//tools/target_cpu:haswell": CRASHPAD_SNAPSHOT_X86_SOURCES,
+               "//tools/target_cpu:x86": CRASHPAD_SNAPSHOT_X86_SOURCES,
+               "//tools/target_cpu:x86_64": CRASHPAD_SNAPSHOT_X86_SOURCES,
+               "//conditions:default": [],
+           }),
+    hdrs = CRASHPAD_SNAPSHOT_HEADERS +
+           select({
+               "//tools/cc_target_os:platform_macos": CRASHPAD_SNAPSHOT_MACOS_HEADERS +
+                                                      CRASHPAD_SNAPSHOT_POSIX_HEADERS,
+               "//tools/cc_target_os:platform_ios": CRASHPAD_SNAPSHOT_IOS_HEADERS +
+                                                    CRASHPAD_SNAPSHOT_POSIX_HEADERS,
+               "//tools/cc_target_os:windows": CRASHPAD_SNAPSHOT_WINDOWS_HEADERS,
+               "//conditions:default": CRASHPAD_SNAPSHOT_LINUX_HEADERS +
+                                       CRASHPAD_SNAPSHOT_POSIX_HEADERS,
+           }),
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    linkopts = select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [
+            "powrprof.lib",
+        ],
+        "//conditions:default": [],
+    }),
+    textual_hdrs = CRASHPAD_SNAPSHOT_TEXTUAL_HEADERS + select({
+        "//tools/cc_target_os:platform_macos": CRASHPAD_SNAPSHOT_MACOS_TEXTUAL_HEADERS,
+        "//tools/cc_target_os:windows": [],
+        "//conditions:default": CRASHPAD_SNAPSHOT_LINUX_TEXTUAL_HEADERS,
+    }),
+    visibility = [
+        "//third_party/crashpad:__subpackages__",
+        "//third_party/crashpad:clients",
+    ],
+    deps = [
+        ":context",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client:common",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/minidump:extensions_header",
+        "//third_party/crashpad/crashpad/minidump:format",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:apple": [
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//conditions:default": [],
+    }),
+)
+
+# :context is the only part of snapshot that minidump may depend on.
+cc_library(
+    name = "context",
+    srcs = [
+        "cpu_context.cc",
+    ],
+    hdrs = [
+        "cpu_architecture.h",
+        "cpu_context.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_library(
+    name = "test_support",
+    testonly = True,
+    srcs = [
+        "test/test_cpu_context.cc",
+        "test/test_exception_snapshot.cc",
+        "test/test_memory_map_region_snapshot.cc",
+        "test/test_memory_snapshot.cc",
+        "test/test_module_snapshot.cc",
+        "test/test_process_snapshot.cc",
+        "test/test_system_snapshot.cc",
+        "test/test_thread_snapshot.cc",
+    ],
+    hdrs = [
+        "test/test_cpu_context.h",
+        "test/test_exception_snapshot.h",
+        "test/test_memory_map_region_snapshot.h",
+        "test/test_memory_snapshot.h",
+        "test/test_module_snapshot.h",
+        "test/test_process_snapshot.h",
+        "test/test_system_snapshot.h",
+        "test/test_thread_snapshot.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    deps = [
+        ":snapshot",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+objc_library(
+    name = "OpenCL",
+    tags = ["maconly"],
+    visibility = ["//visibility:private"],
+    deps = ["//third_party/apple_frameworks:OpenCL"],
+)
+
+apple_resource_group(
+    name = "snapshot_ios_test_resource",
+    structured_resources = glob(["crashpad_test_data/snapshot/ios/testdata/**"]),
+    visibility = ["//visibility:private"],
+)
+
+objc_library(
+    name = "snapshot_ios_test_lib",
+    testonly = 1,
+    srcs = CRASHPAD_TEST_SOURCES + [
+        "ios/process_snapshot_ios_intermediate_dump_test.cc",
+        "mac/cpu_context_mac_test.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    data = [":snapshot_ios_test_resource"],
+    features = ["-layering_check"],
+    tags = ["iosonly"],
+    deps = [
+        ":snapshot",
+        ":test_support",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/apple_frameworks:XCTest",
+        "//third_party/crashpad/crashpad/minidump",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:testing",
+    ],
+    alwayslink = 1,
+)
+
+ios_unit_test(
+    name = "snapshot_ios_test",
+    minimum_os_version = "13.0",
+    runner = "//testing/utp/ios:IOS_LATEST",
+    tags = ["iosonly"],
+    deps = [
+        ":snapshot_ios_test_lib",
+        "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST",
+    ],
+)
+
+cc_test(
+    name = "snapshot_test",
+    srcs = CRASHPAD_TEST_SOURCES + select({
+        "//tools/cc_target_os:platform_macos": [
+            "crashpad_info_client_options_test.cc",
+            "mac/cpu_context_mac_test.cc",
+            "mac/mach_o_image_annotations_reader_test.cc",
+            "mac/mach_o_image_reader_test.cc",
+            "mac/mach_o_image_segment_reader_test.cc",
+            "mac/process_reader_mac_test.cc",
+            "mac/process_types_test.cc",
+            "mac/system_snapshot_mac_test.cc",
+            "posix/timezone_test.cc",
+        ],
+        "//tools/cc_target_os:platform_ios": [],
+        "//tools/cc_target_os:windows": [
+            "crashpad_info_client_options_test.cc",
+            "crashpad_types/crashpad_info_reader_test.cc",
+            "win/cpu_context_win_test.cc",
+            "win/exception_snapshot_win_test.cc",
+            "win/extra_memory_ranges_test.cc",
+            "win/module_snapshot_win_test.cc",
+            "win/pe_image_reader_test.cc",
+            "win/process_reader_win_test.cc",
+            "win/process_snapshot_win_test.cc",
+            "win/system_snapshot_win_test.cc",
+        ],
+        "//conditions:default": [
+            "crashpad_types/crashpad_info_reader_test.cc",
+            "crashpad_types/image_annotation_reader_test.cc",
+            "elf/elf_image_reader_test.cc",
+            "elf/elf_image_reader_test_note.S",
+            "linux/debug_rendezvous_test.cc",
+            "linux/exception_snapshot_linux_test.cc",
+            "linux/process_reader_linux_test.cc",
+            "linux/system_snapshot_linux_test.cc",
+            "linux/test_modules.cc",
+            "linux/test_modules.h",
+            "posix/timezone_test.cc",
+            "sanitized/process_snapshot_sanitized_test.cc",
+            "sanitized/sanitization_information_test.cc",
+        ],
+    }),
+    copts = CRASHPAD_COMMON_COPTS + select({
+        "//conditions:default": ["-ldl"],
+    }),
+    data = [
+        ":crashpad_snapshot_test_module",
+        ":crashpad_snapshot_test_module_large",
+        ":crashpad_snapshot_test_module_small",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            ":crashpad_snapshot_test_module_crashy_initializer.so",
+            ":crashpad_snapshot_test_no_op",
+        ],
+        "//tools/cc_target_os:windows": [
+            ":crashpad_snapshot_test_annotations",
+            ":crashpad_snapshot_test_crashing_child",
+            ":crashpad_snapshot_test_dump_without_crashing",
+            ":crashpad_snapshot_test_extra_memory_ranges",
+            ":crashpad_snapshot_test_image_reader",
+            ":crashpad_snapshot_test_image_reader_module.dll",
+        ],
+        "//conditions:default": [
+            ":crashpad_snapshot_test_both_dt_hash_styles.so",
+        ],
+    }),
+    features = ["-use_header_modules"],
+    linkopts = select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [],
+        "//conditions:default": [
+            "-ldl",
+            "-Wl,--dynamic-list",
+            "$(location :elf/test_exported_symbols.sym.lds)",
+        ],
+    }),
+    deps = [
+        ":context",
+        ":snapshot",
+        ":test_support",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client:common",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/crashpad/crashpad/test:googlemock_main",
+        "//third_party/crashpad/crashpad/minidump:format",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            ":OpenCL",
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            "//third_party/crashpad/crashpad/minidump",
+        ],
+        "//tools/cc_target_os:windows": [
+            "//third_party/crashpad/crashpad/util:exception_handler_server",
+            "//third_party/crashpad/crashpad/client",
+        ],
+        "//conditions:default": [
+            ":elf/test_exported_symbols.sym.lds",
+        ],
+    }),
+)
+
+alias(
+    name = "crashpad_snapshot_test_module",
+    actual = select({
+        "//tools/cc_target_os:windows": ":crashpad_snapshot_test_module.dll",
+        "//conditions:default": ":crashpad_snapshot_test_module.so",
+    }),
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_module.so",
+    testonly = True,
+    srcs = [
+        "crashpad_info_client_options_test_module.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    linkshared = True,
+    tags = ["posixonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_module.dll",
+    testonly = True,
+    srcs = [
+        "crashpad_info_client_options_test_module.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-use_header_modules"],
+    linkopts = ["/DLL"],
+    linkshared = True,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+CRASHPAD_SNAPSHOT_TEST_MODULE_SOURCES = [
+    "crashpad_info_size_test_module.cc",
+] + select({
+    "//tools/cc_target_os:platform_macos": [],
+    "//tools/cc_target_os:windows": [],
+    "//conditions:default": [
+        "crashpad_info_size_test_note.S",
+    ],
+})
+
+alias(
+    name = "crashpad_snapshot_test_module_large",
+    actual = select({
+        "//tools/cc_target_os:windows": ":crashpad_snapshot_test_module_large.dll",
+        "//conditions:default": ":crashpad_snapshot_test_module_large.so",
+    }),
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_module_large.so",
+    testonly = True,
+    srcs = CRASHPAD_SNAPSHOT_TEST_MODULE_SOURCES,
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-DCRASHPAD_INFO_SIZE_TEST_MODULE_LARGE",
+    ],
+    linkshared = True,
+    tags = ["posixonly"],
+    deps = [
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [],
+        "//conditions:default": [
+            "//third_party/crashpad:internal",
+            "//third_party/crashpad/crashpad/util",
+        ],
+    }),
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_module_large.dll",
+    testonly = True,
+    srcs = CRASHPAD_SNAPSHOT_TEST_MODULE_SOURCES,
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-DCRASHPAD_INFO_SIZE_TEST_MODULE_LARGE",
+    ],
+    linkopts = ["/DLL"],
+    linkshared = True,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+alias(
+    name = "crashpad_snapshot_test_module_small",
+    actual = select({
+        "//tools/cc_target_os:windows": ":crashpad_snapshot_test_module_small.dll",
+        "//conditions:default": ":crashpad_snapshot_test_module_small.so",
+    }),
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_module_small.so",
+    testonly = True,
+    srcs = CRASHPAD_SNAPSHOT_TEST_MODULE_SOURCES,
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-DCRASHPAD_INFO_SIZE_TEST_MODULE_SMALL",
+    ],
+    linkshared = True,
+    tags = ["posixonly"],
+    deps = [
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [],
+        "//tools/cc_target_os:windows": [],
+        "//conditions:default": [
+            "//third_party/crashpad:internal",
+            "//third_party/crashpad/crashpad/util",
+        ],
+    }),
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_module_small.dll",
+    testonly = True,
+    srcs = CRASHPAD_SNAPSHOT_TEST_MODULE_SOURCES,
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-DCRASHPAD_INFO_SIZE_TEST_MODULE_SMALL",
+    ],
+    linkopts = ["/DLL"],
+    linkshared = True,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_both_dt_hash_styles.so",
+    testonly = True,
+    srcs = ["hash_types_test.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    linkopts = ["-Wl,--hash-style=both"],
+    linkshared = True,
+    tags = ["linuxonly"],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_module_crashy_initializer.so",
+    testonly = True,
+    srcs = ["mac/mach_o_image_annotations_reader_test_module_crashy_initializer.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    linkshared = True,
+    tags = ["maconly"],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_no_op",
+    testonly = True,
+    srcs = ["mac/mach_o_image_annotations_reader_test_no_op.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["maconly"],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_annotations",
+    testonly = True,
+    srcs = ["win/crashpad_snapshot_test_annotations.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_crashing_child",
+    testonly = True,
+    srcs = ["win/crashpad_snapshot_test_crashing_child.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_dump_without_crashing",
+    testonly = True,
+    srcs = ["win/crashpad_snapshot_test_dump_without_crashing.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_extra_memory_ranges",
+    testonly = True,
+    srcs = ["win/crashpad_snapshot_test_extra_memory_ranges.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_image_reader",
+    testonly = True,
+    srcs = ["win/crashpad_snapshot_test_image_reader.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_snapshot_test_image_reader_module.dll",
+    testonly = True,
+    srcs = ["win/crashpad_snapshot_test_image_reader_module.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    linkopts = ["/DLL"],
+    linkshared = True,
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/mini_chromium:base",
+    ],
+)
diff --git a/test/BUILD.bazel b/test/BUILD.bazel
new file mode 100644
index 0000000..40f9d8a
--- /dev/null
+++ b/test/BUILD.bazel
@@ -0,0 +1,375 @@
+# Copyright 2018 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.
+
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+load("//tools/build_defs/apple:ios.bzl", "ios_application", "ios_ui_test", "ios_unit_test")
+
+licenses(["notice"])
+
+package(
+    default_visibility = [
+        "//third_party/crashpad:__subpackages__",
+    ],
+)
+
+CRASHPAD_TEST_SOURCES = [
+    "errors.cc",
+    "file.cc",
+    "filesystem.cc",
+    "hex_string.cc",
+    "main_arguments.cc",
+    "process_type.cc",
+    "scoped_module_handle.cc",
+    "scoped_temp_dir.cc",
+    "test_paths.cc",
+]
+
+CRASHPAD_MULTIPROCESS_TEST_SOURCES = [
+    "multiprocess_exec.cc",
+]
+
+CRASHPAD_TEST_HEADERS = [
+    "errors.h",
+    "file.h",
+    "filesystem.h",
+    "gtest_death.h",
+    "hex_string.h",
+    "main_arguments.h",
+    "multiprocess.h",
+    "multiprocess_exec.h",
+    "process_type.h",
+    "scoped_guarded_page.h",
+    "scoped_module_handle.h",
+    "scoped_set_thread_name.h",
+    "scoped_temp_dir.h",
+    "test_paths.h",
+]
+
+CRASHPAD_TEST_POSIX_SOURCES = [
+    "scoped_guarded_page_posix.cc",
+    "scoped_set_thread_name_posix.cc",
+    "scoped_temp_dir_posix.cc",
+]
+
+CRASHPAD_TEST_POSIX_MULTIPROCESS_SOURCES = [
+    "multiprocess_exec_posix.cc",
+    "multiprocess_posix.cc",
+]
+
+CRASHPAD_TEST_POSIX_HEADERS = [
+]
+
+CRASHPAD_TEST_MACOS_SOURCES = [
+    "mac/dyld.cc",
+    "mac/exception_swallower.cc",
+    "mac/exception_swallower.h",
+    "mac/mach_errors.cc",
+    "mac/mach_multiprocess.cc",
+]
+
+CRASHPAD_TEST_IOS_SOURCES = [
+    "mac/exception_swallower.h",
+    "mac/mach_errors.cc",
+]
+
+CRASHPAD_TEST_MACOS_HEADERS = [
+    "mac/dyld.h",
+    "mac/mach_errors.h",
+    "mac/mach_multiprocess.h",
+]
+
+CRASHPAD_TEST_WINDOWS_SOURCES = [
+    "multiprocess_exec_win.cc",
+    "scoped_guarded_page_win.cc",
+    "scoped_set_thread_name_win.cc",
+    "scoped_temp_dir_win.cc",
+    "win/child_launcher.cc",
+    "win/child_launcher.h",
+    "win/win_child_process.cc",
+    "win/win_child_process.h",
+    "win/win_multiprocess.cc",
+    "win/win_multiprocess.h",
+    "win/win_multiprocess_with_temp_dir.cc",
+    "win/win_multiprocess_with_temp_dir.h",
+]
+
+CRASHPAD_TEST_WINDOWS_HEADERS = [
+]
+
+CRASHPAD_TEST_LINUX_SOURCES = [
+    "linux/fake_ptrace_connection.cc",
+    "linux/get_tls.cc",
+]
+
+CRASHPAD_TEST_LINUX_HEADERS = [
+    "linux/fake_ptrace_connection.h",
+    "linux/get_tls.h",
+]
+
+cc_library(
+    name = "test",
+    testonly = True,
+    srcs = CRASHPAD_TEST_SOURCES +
+           select({
+               "//tools/cc_target_os:platform_macos": CRASHPAD_TEST_POSIX_SOURCES +
+                                                      CRASHPAD_TEST_POSIX_MULTIPROCESS_SOURCES +
+                                                      CRASHPAD_TEST_MACOS_SOURCES +
+                                                      CRASHPAD_MULTIPROCESS_TEST_SOURCES,
+               "//tools/cc_target_os:platform_ios": CRASHPAD_TEST_POSIX_SOURCES +
+                                                    CRASHPAD_TEST_IOS_SOURCES,
+               "//tools/cc_target_os:windows": CRASHPAD_TEST_WINDOWS_SOURCES +
+                                               CRASHPAD_MULTIPROCESS_TEST_SOURCES,
+               "//conditions:default": CRASHPAD_TEST_LINUX_SOURCES +
+                                       CRASHPAD_TEST_POSIX_SOURCES +
+                                       CRASHPAD_TEST_POSIX_MULTIPROCESS_SOURCES +
+                                       CRASHPAD_MULTIPROCESS_TEST_SOURCES,
+           }),
+    hdrs = CRASHPAD_TEST_HEADERS +
+           select({
+               "//tools/cc_target_os:apple": CRASHPAD_TEST_POSIX_HEADERS +
+                                             CRASHPAD_TEST_MACOS_HEADERS,
+               "//tools/cc_target_os:windows": CRASHPAD_TEST_WINDOWS_HEADERS,
+               "//conditions:default": CRASHPAD_TEST_LINUX_HEADERS +
+                                       CRASHPAD_TEST_POSIX_HEADERS,
+           }),
+    copts = CRASHPAD_COMMON_COPTS,
+    linkopts = select({
+        "//tools/cc_target_os:apple": [
+            "-lbsm",
+        ],
+        "//tools/cc_target_os:windows": [
+            "shell32.lib",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/crashpad/crashpad/handler:handler_lib",
+            "//third_party/crashpad/crashpad/snapshot",
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            "//third_party/crashpad/crashpad/handler:common",
+            "//third_party/crashpad/crashpad/snapshot",
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//conditions:default": [],
+    }),
+)
+
+Fileset(
+    name = "test_data_files",
+    out = "test_data/test",
+    entries = [
+        FilesetEntry(
+            files = [
+                "test_paths_test_data_root.txt",
+            ],
+        ),
+    ],
+)
+
+cc_test(
+    name = "test_test",
+    srcs = [
+        "hex_string_test.cc",
+        "main_arguments_test.cc",
+        "multiprocess_exec_test.cc",
+        "scoped_guarded_page_test.cc",
+        "scoped_temp_dir_test.cc",
+        "test_paths_test.cc",
+    ] + select({
+        "//tools/cc_target_os:apple": [
+            "multiprocess_posix_test.cc",
+            "mac/mach_multiprocess_test.cc",
+        ],
+        "//tools/cc_target_os:windows": [
+            "win/win_child_process_test.cc",
+            "win/win_multiprocess_test.cc",
+        ],
+        "//conditions:default": [
+            "multiprocess_posix_test.cc",
+        ],
+    }),
+    copts = CRASHPAD_COMMON_COPTS,
+    data = [
+        "test_paths_test_data_root.txt",
+        ":crashpad_test_test_multiprocess_exec_test_child",
+    ],
+    deps = [
+        ":googlemock_main",
+        ":test",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/absl/flags:flag",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_test_test_multiprocess_exec_test_child",
+    srcs = ["multiprocess_exec_test_child.cc"],
+    copts = CRASHPAD_COMMON_COPTS,
+    deps = [
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_library(
+    name = "googlemock_main",
+    testonly = True,
+    srcs = ["gtest_main.cc"],
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-DCRASHPAD_TEST_LAUNCHER_GOOGLEMOCK",
+    ],
+    deps = [
+        ":test",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:android": ["//third_party/crashpad/crashpad/util"],
+        "//conditions:default": [],
+    }),
+)
+
+cc_library(
+    name = "googletest_main",
+    testonly = True,
+    srcs = ["gtest_main.cc"],
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-DCRASHPAD_TEST_LAUNCHER_GOOGLETEST",
+    ],
+    deps = [
+        ":test",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:android": ["//third_party/crashpad/crashpad/util"],
+        "//conditions:default": [],
+    }),
+)
+
+objc_library(
+    name = "test_ios_test_lib",
+    testonly = 1,
+    srcs = CRASHPAD_TEST_SOURCES + [
+        "hex_string_test.cc",
+        "scoped_temp_dir_test.cc",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-layering_check"],
+    tags = ["iosonly"],
+    deps = [
+        ":test",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/apple_frameworks:XCTest",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:testing",
+    ],
+    alwayslink = 1,
+)
+
+ios_unit_test(
+    name = "test_ios_test",
+    minimum_os_version = "13.0",
+    runner = "//testing/utp/ios:IOS_LATEST",
+    tags = ["iosonly"],
+    deps = [
+        ":test_ios_test_lib",
+        "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST",
+    ],
+)
+
+objc_library(
+    name = "test_ios_uitest_main_lib",
+    testonly = True,
+    srcs = [
+        "ios/host/cptest_application_delegate.h",
+        "ios/host/cptest_application_delegate.mm",
+        "ios/host/cptest_crash_view_controller.h",
+        "ios/host/cptest_crash_view_controller.mm",
+        "ios/host/cptest_shared_object.h",
+        "ios/host/handler_forbidden_allocators.cc",
+        "ios/host/handler_forbidden_allocators.h",
+        "ios/host/main.mm",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-layering_check"],
+    tags = ["iosonly"],
+    deps = [
+        ":test",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/objective_c/eDistantObject",
+    ],
+)
+
+ios_application(
+    name = "ios_crash_xcuitests",
+    testonly = True,
+    bundle_id = "com.google.googletest.ios-crash-xcuitests",
+    families = [
+        "iphone",
+        "ipad",
+    ],
+    infoplists = ["ios/host/Info.plist"],
+    minimum_os_version = "13.0",
+    tags = ["iosonly"],
+    deps = [
+        ":test_ios_uitest_main_lib",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/objective_c/eDistantObject",
+    ],
+)
+
+objc_library(
+    name = "test_ios_uitestlib",
+    srcs = [
+        "ios/crash_type_xctest.mm",
+        "ios/host/cptest_shared_object.h",
+    ],
+    copts = CRASHPAD_COMMON_COPTS,
+    features = ["-layering_check"],
+    includes = [
+        "../",
+    ],
+    tags = ["iosonly"],
+    deps = [
+        "//third_party/crashpad/crashpad/util:util_mac",
+        "//third_party/objective_c/eDistantObject",
+    ],
+)
+
+ios_ui_test(
+    name = "test_ios_uitest",
+    timeout = "long",
+    # This test is expected to crash on nearly every test case.
+    args = [
+        "--disable_crash_reporter",
+    ],
+    minimum_os_version = "13.0",
+    runner = "//testing/utp/ios:IOS_LATEST",
+    tags = ["iosonly"],
+    test_host = ":ios_crash_xcuitests",
+    deps = [":test_ios_uitestlib"],
+)
diff --git a/third_party/lss/BUILD.bazel b/third_party/lss/BUILD.bazel
new file mode 100644
index 0000000..96dab33
--- /dev/null
+++ b/third_party/lss/BUILD.bazel
@@ -0,0 +1,27 @@
+# Copyright 2020 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.
+
+licenses(["notice"])
+
+package(
+    default_compatible_with = ["//buildenv/target:non_prod"],
+    default_visibility = ["//visibility:public"],
+)
+
+cc_library(
+    name = "lss",
+    hdrs = ["lss.h"],
+    defines = ["CRASHPAD_LSS_SOURCE_EMBEDDED"],
+    deps = ["//third_party/lss"],
+)
diff --git a/third_party/zlib/BUILD.bazel b/third_party/zlib/BUILD.bazel
new file mode 100644
index 0000000..ba6f815
--- /dev/null
+++ b/third_party/zlib/BUILD.bazel
@@ -0,0 +1,23 @@
+# Description:
+#   zlib, a free, highly-portable, general-purpose lossless data-compression
+#   library. This BUILD file provides rules that applications can use to link
+#   with zlib.
+
+licenses(["notice"])
+
+package(
+    default_compatible_with = ["//buildenv/target:non_prod"],
+    default_visibility = ["//visibility:public"],
+)
+
+# Only supports crashpad-style external zlib.
+# TODO(epastor): Add conditions for embedded & system zlib support.
+
+cc_library(
+    name = "zlib",
+    hdrs = [
+        "zlib_crashpad.h",
+    ],
+    defines = ["CRASHPAD_ZLIB_SOURCE_EXTERNAL"],
+    deps = ["//third_party/zlib:zlibsystem"],
+)
diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel
new file mode 100644
index 0000000..361cfd3
--- /dev/null
+++ b/tools/BUILD.bazel
@@ -0,0 +1,256 @@
+# Copyright 2018 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.
+
+load(
+    "//third_party/crashpad/crashpad/compat:includes.bzl",
+    "CRASHPAD_COMPAT_INCLUDES_COPTS",
+)
+load("//third_party/crashpad:minimum_os.bzl", "MACOS_MINIMUM_OS")
+load("//tools/build_defs/apple:macos.bzl", "macos_command_line_application")
+
+licenses(["notice"])
+
+package(
+    default_visibility = ["//visibility:public"],
+)
+
+config_setting(
+    name = "msvc",
+    values = {
+        "compiler": "msvc",
+    },
+)
+
+cc_library(
+    name = "tool_support",
+    srcs = ["tool_support.cc"],
+    hdrs = ["tool_support.h"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_database_util",
+    srcs = [
+        "crashpad_database_util.cc",
+    ],
+    copts = CRASHPAD_COMPAT_INCLUDES_COPTS,
+    deps = [
+        ":tool_support",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_binary(
+    name = "crashpad_http_upload",
+    srcs = [
+        "crashpad_http_upload.cc",
+    ],
+    copts = CRASHPAD_COMPAT_INCLUDES_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        ":tool_support",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/crashpad/crashpad/util:util_mac",
+        ],
+        "//conditions:default": [],
+    }),
+)
+
+cc_binary(
+    name = "base94_encoder",
+    srcs = ["base94_encoder.cc"],
+    deps = [
+        ":tool_support",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/crashpad/crashpad/util:util_mac",
+        ],
+        "//conditions:default": [],
+    }),
+)
+
+cc_library(
+    name = "generate_dump_lib",
+    srcs = select({
+        # MSVC fails to link the final cc_binary unless the main function is provided there.
+        ":msvc": [],
+        "//conditions:default": ["generate_dump.cc"],
+    }),
+    copts = CRASHPAD_COMPAT_INCLUDES_COPTS,
+    features = ["-use_header_modules"],
+    deps = [
+        ":tool_support",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/minidump",
+        "//third_party/crashpad/crashpad/snapshot",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "//third_party/crashpad/crashpad/util:util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//conditions:default": [],
+    }),
+)
+
+macos_command_line_application(
+    name = "generate_dump_mac",
+    bundle_id = "generate_dump",
+    infoplists = [
+        "mac/sectaskaccess_info.plist",
+    ],
+    minimum_os_version = MACOS_MINIMUM_OS,
+    tags = ["maconly"],
+    deps = [
+        ":generate_dump_lib",
+    ],
+)
+
+cc_binary(
+    name = "generate_dump_generic",
+    srcs = select({
+        # MSVC fails to link this cc_binary unless the main function is provided here.
+        ":msvc": ["generate_dump.cc"],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":generate_dump_lib",
+    ],
+)
+
+genrule(
+    name = "generate_dump_tool",
+    srcs = select({
+        "//tools/cc_target_os:platform_macos": [":generate_dump_mac"],
+        "//conditions:default": [":generate_dump_generic"],
+    }),
+    outs = ["generate_dump"],
+    cmd = "cp $$(echo $(SRCS) | sed 's+\\s*[^ ]*\\.dSYM[^ ]*\\s*++g') $@",
+    output_to_bindir = True,
+)
+
+objc_library(
+    name = "run_with_crashpad_lib",
+    srcs = [
+        "run_with_crashpad.cc",
+    ],
+    tags = ["maconly"],
+    deps = [
+        ":tool_support",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:base_mac",
+    ],
+)
+
+macos_command_line_application(
+    name = "run_with_crashpad",
+    minimum_os_version = MACOS_MINIMUM_OS,
+    tags = ["maconly"],
+    deps = [":run_with_crashpad_lib"],
+)
+
+objc_library(
+    name = "catch_exception_tool_lib",
+    srcs = [
+        "mac/catch_exception_tool.cc",
+    ],
+    tags = ["maconly"],
+    deps = [
+        ":tool_support",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/crashpad/crashpad/util:util_mac",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:base_mac",
+    ],
+)
+
+macos_command_line_application(
+    name = "catch_exception_tool",
+    minimum_os_version = MACOS_MINIMUM_OS,
+    tags = ["maconly"],
+    deps = [":catch_exception_tool_lib"],
+)
+
+objc_library(
+    name = "exception_port_tool_lib",
+    srcs = [
+        "mac/exception_port_tool.cc",
+    ],
+    tags = ["maconly"],
+    deps = [
+        ":tool_support",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/crashpad/crashpad/util:util_mac",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:base_mac",
+    ],
+)
+
+macos_command_line_application(
+    name = "exception_port_tool",
+    infoplists = ["mac/sectaskaccess_info.plist"],
+    minimum_os_version = MACOS_MINIMUM_OS,
+    tags = ["maconly"],
+    deps = [":exception_port_tool_lib"],
+)
+
+objc_library(
+    name = "on_demand_service_tool_lib",
+    non_arc_srcs = [
+        "mac/on_demand_service_tool.mm",
+    ],
+    tags = ["maconly"],
+    deps = [
+        ":tool_support",
+        "//third_party/apple_frameworks:CoreFoundation",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/util",
+        "//third_party/crashpad/crashpad/util:util_mac",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:base_mac",
+    ],
+)
+
+macos_command_line_application(
+    name = "on_demand_service_tool",
+    minimum_os_version = MACOS_MINIMUM_OS,
+    tags = ["maconly"],
+    deps = [":on_demand_service_tool_lib"],
+)
diff --git a/util/BUILD.bazel b/util/BUILD.bazel
new file mode 100644
index 0000000..41acb10
--- /dev/null
+++ b/util/BUILD.bazel
@@ -0,0 +1,944 @@
+# Copyright 2018 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.
+
+load("//tools/build_defs/testing:bzl_library.bzl", "bzl_library")
+load("//third_party/crashpad:copts.bzl", "CRASHPAD_COMMON_COPTS")
+load("//third_party/crashpad:minimum_os.bzl", "MACOS_MINIMUM_OS")
+load("//third_party/crashpad/crashpad/util:mig.bzl", "mig")
+load("//third_party/lexan:masm.bzl", "masm_assemble")
+load("//tools/build_defs/apple:macos.bzl", "macos_unit_test")
+load("//tools/build_defs/apple:ios.bzl", "ios_unit_test")
+
+licenses(["notice"])
+
+package(
+    default_visibility = [
+        "//third_party/crashpad:__subpackages__",
+        "//third_party/crashpad:clients",
+    ],
+)
+
+config_setting(
+    name = "windows_x86",
+    flag_values = {
+        "//tools/cpp:cc_target_os": "windows",
+    },
+    values = {
+        "cpu": "win_x86",
+    },
+)
+
+config_setting(
+    name = "windows_x64",
+    flag_values = {
+        "//tools/cpp:cc_target_os": "windows",
+    },
+    values = {
+        "cpu": "win_x64",
+    },
+)
+
+CRASHPAD_UTIL_SOURCES = [
+    "file/delimited_file_reader.cc",
+    "file/file_helper.cc",
+    "file/file_io.cc",
+    "file/file_reader.cc",
+    "file/file_seeker.cc",
+    "file/file_seeker.h",
+    "file/file_writer.cc",
+    "file/output_stream_file_writer.cc",
+    "file/scoped_remove_file.cc",
+    "file/string_file.cc",
+    "misc/initialization_state_dcheck.cc",
+    "misc/lexing.cc",
+    "misc/lexing.h",
+    "misc/metrics.cc",
+    "misc/pdb_structures.cc",
+    "misc/random_string.cc",
+    "misc/range_set.cc",
+    "misc/reinterpret_bytes.cc",
+    "misc/scoped_forbid_return.cc",
+    "misc/symbolic_constants_common.h",
+    "misc/time.cc",
+    "misc/uuid.cc",
+    "misc/zlib.cc",
+    "net/http_body.cc",
+    "net/http_body_gzip.cc",
+    "net/http_multipart_builder.cc",
+    "net/http_transport.cc",
+    "net/url.cc",
+    "numeric/checked_address_range.cc",
+    "process/process_memory.cc",
+    "process/process_memory_range.cc",
+    "stdlib/aligned_allocator.cc",
+    "stdlib/string_number_conversion.cc",
+    "stdlib/strlcpy.cc",
+    "stdlib/strnlen.cc",
+    "stream/base94_output_stream.cc",
+    "stream/file_encoder.cc",
+    "stream/file_output_stream.cc",
+    "stream/log_output_stream.cc",
+    "stream/zlib_output_stream.cc",
+    "string/split_string.cc",
+    "thread/thread.cc",
+    "thread/thread_log_messages.cc",
+    "thread/worker_thread.cc",
+]
+
+CRASHPAD_UTIL_HEADERS = [
+    "file/delimited_file_reader.h",
+    "file/directory_reader.h",
+    "file/file_helper.h",
+    "file/file_io.h",
+    "file/file_reader.h",
+    "file/file_writer.h",
+    "file/filesystem.h",
+    "file/output_stream_file_writer.h",
+    "file/scoped_remove_file.h",
+    "file/string_file.h",
+    "misc/address_sanitizer.h",
+    "misc/address_types.h",
+    "misc/arm64_pac_bti.S",
+    "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.h",
+    "misc/memory_sanitizer.h",
+    "misc/metrics.h",
+    "misc/paths.h",
+    "misc/pdb_structures.h",
+    "misc/random_string.h",
+    "misc/range_set.h",
+    "misc/reinterpret_bytes.h",
+    "misc/scoped_forbid_return.h",
+    "misc/time.h",
+    "misc/tri_state.h",
+    "misc/uuid.h",
+    "misc/zlib.h",
+    "net/http_body.h",
+    "net/http_body_gzip.h",
+    "net/http_headers.h",
+    "net/http_multipart_builder.h",
+    "net/http_transport.h",
+    "net/url.h",
+    "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.h",
+    "process/process_memory_native.h",
+    "process/process_memory_range.h",
+    "stdlib/aligned_allocator.h",
+    "stdlib/map_insert.h",
+    "stdlib/string_number_conversion.h",
+    "stdlib/strlcpy.h",
+    "stdlib/strnlen.h",
+    "stdlib/thread_safe_vector.h",
+    "stream/base94_output_stream.h",
+    "stream/file_encoder.h",
+    "stream/file_output_stream.h",
+    "stream/log_output_stream.h",
+    "stream/output_stream_interface.h",
+    "stream/zlib_output_stream.h",
+    "string/split_string.h",
+    "synchronization/semaphore.h",
+    "thread/stoppable.h",
+    "thread/thread.h",
+    "thread/thread_log_messages.h",
+    "thread/worker_thread.h",
+]
+
+CRASHPAD_UTIL_LINUX_SOURCES = [
+    "linux/auxiliary_vector.cc",
+    "linux/checked_linux_address_range.h",
+    "linux/direct_ptrace_connection.cc",
+    "linux/exception_handler_client.cc",
+    "linux/exception_handler_protocol.cc",
+    "linux/memory_map.cc",
+    "linux/proc_stat_reader.cc",
+    "linux/proc_task_reader.cc",
+    "linux/ptrace_broker.cc",
+    "linux/ptrace_client.cc",
+    "linux/ptracer.cc",
+    "linux/scoped_pr_set_dumpable.cc",
+    "linux/scoped_pr_set_ptracer.cc",
+    "linux/scoped_ptrace_attach.cc",
+    "linux/socket.cc",
+    "linux/thread_info.cc",
+    "misc/capture_context_linux.S",
+    "misc/paths_linux.cc",
+    "misc/time_linux.cc",
+    "net/http_transport_socket.cc",
+    "posix/process_info_linux.cc",
+    "process/process_memory_linux.cc",
+    "process/process_memory_sanitized.cc",
+]
+
+CRASHPAD_UTIL_LINUX_HEADERS = [
+    "linux/address_types.h",
+    "linux/auxiliary_vector.h",
+    "linux/direct_ptrace_connection.h",
+    "linux/exception_handler_client.h",
+    "linux/exception_handler_protocol.h",
+    "linux/exception_information.h",
+    "linux/memory_map.h",
+    "linux/proc_stat_reader.h",
+    "linux/proc_task_reader.h",
+    "linux/ptrace_broker.h",
+    "linux/ptrace_client.h",
+    "linux/ptrace_connection.h",
+    "linux/ptracer.h",
+    "linux/scoped_pr_set_dumpable.h",
+    "linux/scoped_pr_set_ptracer.h",
+    "linux/scoped_ptrace_attach.h",
+    "linux/socket.h",
+    "linux/thread_info.h",
+    "linux/traits.h",
+    "process/process_memory_linux.h",
+    "process/process_memory_sanitized.h",
+]
+
+CRASHPAD_UTIL_MACOS_HEADERS = [
+    "process/process_memory_mac.h",
+    "ios/ios_intermediate_dump_format.h",
+    "ios/scoped_background_task.h",
+]
+
+CRASHPAD_UTIL_POSIX_SOURCES = [
+    "file/directory_reader_posix.cc",
+    "file/file_io_posix.cc",
+    "file/filesystem_posix.cc",
+    "misc/clock_posix.cc",
+    "posix/close_multiple.cc",
+    "posix/close_stdio.cc",
+    "posix/drop_privileges.cc",
+    "posix/scoped_dir.cc",
+    "posix/scoped_mmap.cc",
+    "posix/signals.cc",
+    "posix/spawn_subprocess.cc",
+    "posix/symbolic_constants_posix.cc",
+    "synchronization/semaphore_posix.cc",
+    "thread/thread_posix.cc",
+]
+
+CRASHPAD_UTIL_POSIX_HEADERS = [
+    "posix/close_multiple.h",
+    "posix/close_stdio.h",
+    "posix/drop_privileges.h",
+    "posix/process_info.h",
+    "posix/scoped_dir.h",
+    "posix/scoped_mmap.h",
+    "posix/signals.h",
+    "posix/spawn_subprocess.h",
+    "posix/symbolic_constants_posix.h",
+]
+
+CRASHPAD_UTIL_WINDOWS_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",
+    "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/critical_section_with_debug_info.cc",
+    "win/critical_section_with_debug_info.h",
+    "win/exception_codes.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/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/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_set_event.cc",
+    "win/scoped_set_event.h",
+    "win/session_end_watcher.cc",
+    "win/session_end_watcher.h",
+    "win/termination_codes.h",
+    "win/xp_compat.h",
+]
+
+CRASHPAD_UTIL_WINDOWS_HEADERS = [
+    "process/process_memory_win.h",
+    "win/context_wrappers.h",
+    "win/exception_handler_server.h",
+    "win/loader_lock.h",
+    "win/registration_protocol_win.h",
+    "win/registration_protocol_win_structs.h",
+    "win/scoped_registry_key.h",
+    "win/traits.h",
+]
+
+py_binary(
+    name = "mig_fix",
+    srcs = [
+        "mach/mig_fix.py",
+    ],
+    main = "mach/mig_fix.py",
+    python_version = "PY3",
+)
+
+mig(
+    name = "mig_generated_files",
+    srcs = select({
+        "//tools/cc_target_os:platform_ios": [
+            "//third_party/crashpad/crashpad/external_libraries/xnu:osfmk/mach/exc.defs",
+            "//third_party/crashpad/crashpad/external_libraries/xnu:osfmk/mach/mach_exc.defs",
+        ],
+        "//tools/cc_target_os:platform_macos": [
+            "mach/child_port.defs",
+        ],
+        "//conditions:default": [],
+    }),
+    compatible_with = ["//buildenv/target:non_prod"],
+    include_dirs = select({
+        "//tools/cc_target_os:platform_ios": [
+            "$(location //third_party/crashpad/crashpad/compat:src_location)/mac",
+            "$(location //third_party/crashpad/crashpad/compat:src_location)/ios",
+            "$(location //third_party/crashpad/crashpad/external_libraries/xnu:src_location)/osfmk",
+        ],
+        "//conditions:default": [],
+    }),
+    included_srcs = select({
+        "//tools/cc_target_os:platform_ios": [
+            "//third_party/crashpad/crashpad/external_libraries/xnu:osfmk/mach/mach_types.defs",
+            "//third_party/crashpad/crashpad/external_libraries/xnu:osfmk/mach/machine/machine_types.defs",
+            "//third_party/crashpad/crashpad/external_libraries/xnu:osfmk/mach/std_types.defs",
+        ],
+        "//conditions:default": [],
+    }),
+    output_dir = "mach",
+    sdk_srcs = select({
+        "//tools/cc_target_os:platform_macos": [
+            "usr/include/mach/exc.defs",
+            "usr/include/mach/mach_exc.defs",
+            "usr/include/mach/notify.defs",
+        ],
+        "//conditions:default": [],
+    }),
+    tags = ["maconly"],
+    deps = [
+        "//third_party/crashpad/crashpad/compat:src_location",
+        "//third_party/crashpad/crashpad/external_libraries/xnu:src_location",
+    ],
+)
+
+filegroup(
+    name = "mig_generated_sources",
+    srcs = [":mig_generated_files"],
+    compatible_with = ["//buildenv/target:non_prod"],
+    output_group = "src_files",
+    tags = ["maconly"],
+)
+
+filegroup(
+    name = "mig_generated_headers",
+    srcs = [":mig_generated_files"],
+    compatible_with = ["//buildenv/target:non_prod"],
+    output_group = "hdr_files",
+    tags = ["maconly"],
+)
+
+objc_library(
+    name = "mach_interfaces",
+    srcs = [":mig_generated_sources"],
+    hdrs = [
+        "mach/child_port_types.h",
+        ":mig_generated_headers",
+    ],
+    aspect_hints = [
+        # This target's headers are internal to Crashpad and never imported by Swift.
+        "//tools/build_defs/swift:no_module",
+    ],
+    compatible_with = ["//buildenv/target:non_prod"],
+    tags = ["maconly"],
+    deps = ["//third_party/crashpad:internal"],
+)
+
+# This exists as a separate target from util so that compat may depend on it
+# without cycles.
+cc_library(
+    name = "no_cfi_icall",
+    hdrs = ["misc/no_cfi_icall.h"],
+    compatible_with = ["//buildenv/target:non_prod"],
+    features = ["-use_header_modules"],
+    deps = ["//third_party/mini_chromium:base"],
+)
+
+masm_assemble(
+    name = "windows_asm",
+    srcs = [
+        "misc/capture_context_win.asm",
+        "win/safe_terminate_process.asm",
+    ],
+    asmopts = select({
+        ":windows_x86": ["/safeseh"],
+        "//conditions:default": [],
+    }),
+    tags = ["windowsonly"],
+)
+
+# Used by crashpad_wer_handler to avoid linking all of :util.
+cc_library(
+    name = "util_registration_protocol",
+    hdrs = [
+        "misc/address_types.h",
+        "win/address_types.h",
+        "win/registration_protocol_win_structs.h",
+    ],
+    tags = ["windowsonly"],
+    deps = [
+        "//third_party/crashpad:internal",
+        "//third_party/mini_chromium:base",
+    ],
+)
+
+cc_library(
+    name = "util",
+    srcs = CRASHPAD_UTIL_SOURCES +
+           select({
+               "//tools/cc_target_os:apple": CRASHPAD_UTIL_POSIX_SOURCES,
+               "//tools/cc_target_os:windows": CRASHPAD_UTIL_WINDOWS_SOURCES,
+               "//conditions:default": CRASHPAD_UTIL_LINUX_SOURCES +
+                                       CRASHPAD_UTIL_POSIX_SOURCES,
+           }),
+    hdrs = CRASHPAD_UTIL_HEADERS +
+           select({
+               "//tools/cc_target_os:apple": CRASHPAD_UTIL_POSIX_HEADERS +
+                                             CRASHPAD_UTIL_MACOS_HEADERS,
+               "//tools/cc_target_os:windows": CRASHPAD_UTIL_WINDOWS_HEADERS,
+               "//conditions:default": CRASHPAD_UTIL_LINUX_HEADERS +
+                                       CRASHPAD_UTIL_POSIX_HEADERS,
+           }),
+    compatible_with = ["//buildenv/target:non_prod"],
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-DZLIB_CONST",
+        "-Wno-vla",
+    ],
+    features = ["-use_header_modules"],
+    linkopts = select({
+        "//tools/cc_target_os:android": [],
+        "//tools/cc_target_os:apple": [
+            "-lbsm",
+        ],
+        "//tools/cc_target_os:windows": [
+            "user32.lib",
+            "winhttp.lib",
+
+            # TODO(jperaza): version.lib is needed for Windows 7 compatibility.
+            # mincore.lib may be linked against instead when targeting Windows 8+.
+            "version.lib",
+        ],
+        "//conditions:default": [
+            # There is an intentional reference cycle between thread_posix.cc
+            # and client/pthread_create_linux.cc, which provides an interposer
+            # for pthread_create.
+            "-Wl,--warn-backrefs-exclude=*/pthread_create/pthread_create_linux.*",
+        ],
+    }),
+    deps = [
+        ":no_cfi_icall",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/external_libraries/zlib",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:apple": [
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//tools/cc_target_os:windows": [
+            ":windows_asm",
+        ],
+        "//conditions:default": [
+            "//third_party/crashpad/crashpad/external_libraries/lss",
+        ],
+    }),
+)
+
+objc_library(
+    name = "util_mac",
+    srcs = [
+        "mac/xattr.cc",
+        "mach/composite_mach_message_server.cc",
+        "mach/exc_client_variants.cc",
+        "mach/exc_server_variants.cc",
+        "mach/exception_behaviors.cc",
+        "mach/exception_ports.cc",
+        "mach/mach_extensions.cc",
+        "mach/mach_message.cc",
+        "mach/mach_message_server.cc",
+        "mach/symbolic_constants_mach.cc",
+        "misc/capture_context_mac.S",
+        "misc/clock_mac.cc",
+        "misc/paths_mac.cc",
+        "synchronization/semaphore_mac.cc",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "mac/mac_util.cc",
+            "mac/service_management.cc",
+            "mac/sysctl.cc",
+            "mach/bootstrap.cc",
+            "mach/child_port_handshake.cc",
+            "mach/child_port_server.cc",
+            "mach/exception_types.cc",
+            "mach/notify_server.cc",
+            "mach/scoped_task_suspend.cc",
+            "mach/task_for_pid.cc",
+            "posix/process_info_mac.cc",
+            "process/process_memory_mac.cc",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            "ios/ios_intermediate_dump_data.cc",
+            "ios/ios_intermediate_dump_interface.cc",
+            "ios/ios_intermediate_dump_list.cc",
+            "ios/ios_intermediate_dump_map.cc",
+            "ios/ios_intermediate_dump_object.cc",
+            "ios/ios_intermediate_dump_reader.cc",
+            "ios/ios_intermediate_dump_writer.cc",
+            "ios/ios_system_data_collector.mm",
+            "ios/raw_logging.cc",
+            "ios/scoped_background_task.mm",
+            "ios/scoped_vm_read.cc",
+        ],
+        "//conditions:default": [],
+    }),
+    hdrs = [
+        "mac/xattr.h",
+        "mach/composite_mach_message_server.h",
+        "mach/exc_client_variants.h",
+        "mach/exc_server_variants.h",
+        "mach/exception_behaviors.h",
+        "mach/exception_ports.h",
+        "mach/mach_extensions.h",
+        "mach/mach_message.h",
+        "mach/mach_message_server.h",
+        "mach/symbolic_constants_mach.h",
+        "stdlib/objc.h",
+    ] + select({
+        "//tools/cc_target_os:platform_macos": [
+            "mac/checked_mach_address_range.h",
+            "mac/launchd.h",
+            "mac/mac_util.h",
+            "mac/service_management.h",
+            "mac/sysctl.h",
+            "mach/bootstrap.h",
+            "mach/child_port_handshake.h",
+            "mach/child_port_server.h",
+            "mach/child_port_types.h",
+            "mach/exception_types.h",
+            "mach/notify_server.h",
+            "mach/scoped_task_suspend.h",
+            "mach/task_for_pid.h",
+            "process/process_memory_mac.h",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            "mac/mac_util.h",
+            "mach/bootstrap.h",
+            "mach/exception_types.h",
+            "ios/ios_intermediate_dump_data.h",
+            "ios/ios_intermediate_dump_format.h",
+            "ios/ios_intermediate_dump_interface.h",
+            "ios/ios_intermediate_dump_list.h",
+            "ios/ios_intermediate_dump_map.h",
+            "ios/ios_intermediate_dump_object.h",
+            "ios/ios_intermediate_dump_reader.h",
+            "ios/ios_intermediate_dump_writer.h",
+            "ios/ios_system_data_collector.h",
+            "ios/raw_logging.h",
+            "ios/scoped_background_task.h",
+            "ios/scoped_vm_read.h",
+        ],
+        "//conditions:default": [],
+    }),
+    aspect_hints = [
+        # This target's headers contain C++ and cannot be imported from Swift.
+        "//tools/build_defs/swift:no_module",
+    ],
+    compatible_with = ["//buildenv/target:non_prod"],
+    copts = CRASHPAD_COMMON_COPTS + ["-Wno-non-virtual-dtor"],
+    features = ["-layering_check"],
+    non_arc_srcs = select({
+        "//tools/cc_target_os:platform_macos": [
+            "mac/launchd.mm",
+            "net/http_transport_mac.mm",
+        ],
+        "//tools/cc_target_os:platform_ios": [
+            "net/http_transport_mac.mm",
+        ],
+        "//conditions:default": [],
+    }),
+    tags = ["maconly"],
+    deps = [
+        ":mach_interfaces",
+        ":util",
+        "//third_party/apple_frameworks:CoreFoundation",
+        "//third_party/apple_frameworks:Foundation",
+        "//third_party/apple_frameworks:IOKit",
+        "//third_party/crashpad:internal",
+        "//third_party/mini_chromium:base_mac",
+    ],
+)
+
+cc_library(
+    name = "exception_handler_server",
+    srcs = select({
+        "//tools/cc_target_os:windows": [
+            "win/exception_handler_server.cc",
+        ],
+        "//conditions:default": [],
+    }),
+    copts = CRASHPAD_COMMON_COPTS,
+    linkopts = select({
+        "//tools/cc_target_os:windows": [
+            "user32.lib",
+            "winhttp.lib",
+
+            # TODO(jperaza): version.lib is needed for Windows 7 compatibility.
+            # mincore.lib may be linked against instead when targeting Windows 8+.
+            "version.lib",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":util",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/minidump",
+    ],
+)
+
+CRASHPAD_UTIL_TEST_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/http_transport_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",
+    "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",
+]
+
+CRASHPAD_UTIL_TEST_POSIX_SOURCES = [
+    "posix/process_info_test.cc",
+    "posix/scoped_mmap_test.cc",
+    "posix/signals_test.cc",
+    "posix/symbolic_constants_posix_test.cc",
+]
+
+CRASHPAD_UTIL_TEST_APPLE_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",
+]
+
+CRASHPAD_UTIL_TEST_MACOS_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",
+]
+
+CRASHPAD_UTIL_TEST_IOS_SOURCES = [
+    "ios/ios_intermediate_dump_reader_test.cc",
+    "ios/ios_intermediate_dump_writer_test.cc",
+    "ios/scoped_vm_read_test.cc",
+]
+
+CRASHPAD_UTIL_TEST_IOS_SOURCE_EXCLUSIONS = [
+    "process/process_memory_range_test.cc",
+    "process/process_memory_test.cc",
+    "net/http_transport_test.cc",
+    "net/http_body_test.cc",
+    "net/http_multipart_builder_test.cc",
+    "misc/paths_test.cc",
+]
+
+CRASHPAD_UTIL_TEST_WINDOWS_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",
+]
+
+CRASHPAD_UTIL_TEST_LINUX_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",
+]
+
+cc_test(
+    name = "util_test",
+    testonly = True,
+    srcs = CRASHPAD_UTIL_TEST_SOURCES +
+           select({
+               "//tools/cc_target_os:platform_macos": CRASHPAD_UTIL_TEST_POSIX_SOURCES + CRASHPAD_UTIL_TEST_APPLE_SOURCES +
+                                                      CRASHPAD_UTIL_TEST_MACOS_SOURCES,
+               "//tools/cc_target_os:platform_ios": [],
+               "//tools/cc_target_os:windows": CRASHPAD_UTIL_TEST_WINDOWS_SOURCES,
+               "//conditions:default": CRASHPAD_UTIL_TEST_LINUX_SOURCES +
+                                       CRASHPAD_UTIL_TEST_POSIX_SOURCES,
+           }),
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-Wno-non-virtual-dtor",
+    ],
+    data = [
+        ":http_transport_test_server",
+        "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",
+    ] + select({
+        "//tools/cc_target_os:apple": [],
+        "//tools/cc_target_os:windows": [
+            # ":crashpad_util_test_loader_lock_test",
+            # ":crashpad_util_test_process_info_test_child",
+            # ":crashpad_util_test_safe_terminate_process_test_child",
+        ],
+        "//conditions:default": [],
+    }),
+    # TODO(mark): Add boringssl as an option; define CRASHPAD_USE_BORINGSSL.
+    features = ["-use_header_modules"],
+    linkopts = select({
+        "//tools/cc_target_os:apple": [],
+        "//tools/cc_target_os:windows": [
+            "rpcrt4.lib",
+            "dbghelp.lib",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":no_cfi_icall",
+        ":util",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/client",
+        "//third_party/crashpad/crashpad/compat",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/crashpad/crashpad/test:googlemock_main",
+        "//third_party/crashpad/crashpad/external_libraries/zlib",
+        "//third_party/mini_chromium:base",
+    ] + select({
+        "//tools/cc_target_os:apple": [
+            ":util_mac",
+            "//third_party/mini_chromium:base_mac",
+        ],
+        "//tools/cc_target_os:windows": [
+            ":exception_handler_server",
+        ],
+        "//conditions:default": [
+            "//third_party/crashpad/crashpad/external_libraries/lss",
+        ],
+    }),
+)
+
+cc_binary(
+    name = "http_transport_test_server",
+    testonly = True,
+    srcs = [
+        "net/http_transport_test_server.cc",
+    ],
+    linkopts = select({
+        "//tools/cc_target_os:apple": [],
+        "//tools/cc_target_os:windows": [
+            "ws2_32.lib",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":util",
+        "//third_party/cpp_httplib",
+        "//third_party/crashpad:internal",
+        "//third_party/crashpad/crashpad/external_libraries/zlib",
+        "//third_party/crashpad/crashpad/tools:tool_support",
+        "//third_party/mini_chromium:base",
+    ],
+    # TODO(mark): Add boringssl as an option; define CRASHPAD_USE_BORINGSSL,
+    # generate a test server key, and conditionally add appropriate deps.
+)
+
+objc_library(
+    name = "util_test_mac_lib",
+    testonly = True,
+    srcs = [
+        "mac/service_management_test.mm",
+        "mac/sysctl_test.cc",
+    ],
+    non_arc_srcs = [
+        "mac/launchd_test.mm",
+        "mac/mac_util_test.mm",
+    ],
+    tags = ["maconly"],
+    deps = [
+        ":util_mac",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/crashpad:internal",
+    ],
+    alwayslink = True,
+)
+
+macos_unit_test(
+    name = "util_test_mac",
+    testonly = True,
+    minimum_os_version = MACOS_MINIMUM_OS,
+    tags = ["maconly"],
+    deps = [
+        ":util_test_mac_lib",
+        "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST",
+    ],
+)
+
+objc_library(
+    name = "util_ios_test_lib",
+    testonly = 1,
+    srcs = [t for t in CRASHPAD_UTIL_TEST_SOURCES + CRASHPAD_UTIL_TEST_APPLE_SOURCES +
+                       CRASHPAD_UTIL_TEST_IOS_SOURCES if t not in CRASHPAD_UTIL_TEST_IOS_SOURCE_EXCLUSIONS],
+    copts = CRASHPAD_COMMON_COPTS + [
+        "-Wno-non-virtual-dtor",
+    ],
+    features = ["-layering_check"],
+    tags = ["iosonly"],
+    deps = [
+        ":util",
+        "//testing/base/public:gunit_no_google3",
+        "//third_party/apple_frameworks:XCTest",
+        "//third_party/crashpad/crashpad/test",
+        "//third_party/mini_chromium:base",
+        "//third_party/mini_chromium:testing",
+    ],
+    alwayslink = 1,
+)
+
+ios_unit_test(
+    name = "util_ios_test",
+    minimum_os_version = "13.0",
+    runner = "//testing/utp/ios:IOS_LATEST",
+    tags = ["iosonly"],
+    deps = [
+        ":util_ios_test_lib",
+        "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST",
+    ],
+)
+
+bzl_library(
+    name = "mig_bzl",
+    srcs = ["mig.bzl"],
+    parse_tests = False,
+    visibility = ["//visibility:private"],
+)
diff --git a/util/mig.bzl b/util/mig.bzl
new file mode 100644
index 0000000..d39e792
--- /dev/null
+++ b/util/mig.bzl
@@ -0,0 +1,208 @@
+# Copyright 2018 The Bazel 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.
+
+"""MIG related actions."""
+
+load(
+    "//third_party/bazel_rules/apple_support/lib:apple_support.bzl",
+    "apple_support",
+)
+load(
+    "//third_party/bazel_skylib/lib:dicts.bzl",
+    "dicts",
+)
+load(
+    "//third_party/bazel_skylib/lib:paths.bzl",
+    "paths",
+)
+load("//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
+
+_mig_suffixes = {
+    "user": "User.c",
+    "server": "Server.c",
+    "header": ".h",
+    "sheader": "Server.h",
+}
+
+_migfix_order = ["user", "server", "header", "sheader"]
+
+_migfix_fixed_parameters = {
+    "user": "--fixed_user_c",
+    "server": "--fixed_server_c",
+    "header": "--fixed_user_h",
+    "sheader": "--fixed_server_h",
+}
+
+def _mig_generate(ctx, defs_file, defs_path = None):
+    if (defs_file and defs_path) or (defs_file == None and defs_path == None):
+        fail("_mig_generate accepts exactly one of |defs_file| and |defs_path|; " +
+             "%s and %s were provided." % (defs_file, defs_path))
+    if defs_path == None:
+        defs_path = defs_file.path
+        basename = defs_file.basename
+    else:
+        basename = paths.basename(defs_path)
+
+    raw_interface = {}
+    target_interface = {}
+
+    args = ["mig"]
+
+    arch = None
+    cpu = find_cpp_toolchain(ctx).cpu
+    if cpu.endswith("_arm64"):
+        arch = "arm64"
+    elif cpu.endswith("_armv7"):
+        arch = "armv7"
+    elif cpu.endswith("_x86_64"):
+        arch = "x86_64"
+    else:
+        fail("Could not identify CPU architecture: " + cpu)
+    args.extend(["-arch", arch])
+
+    defs_name = paths.split_extension(basename)[0]
+
+    for target, suffix in _mig_suffixes.items():
+        filename = defs_name + suffix
+        raw_interface[target] = ctx.actions.declare_file("raw_" + filename)
+        if ctx.attr.output_dir:
+            filename = paths.join(ctx.attr.output_dir, filename)
+        target_interface[target] = ctx.actions.declare_file(filename)
+
+        args.extend(["-" + target, raw_interface[target].path])
+
+    args.extend(["-isysroot", apple_common.apple_toolchain().sdk_dir()])
+    args.extend(["-I" + ctx.expand_location(include, ctx.attr.deps) for include in ctx.attr.include_dirs])
+    args.extend(["-Ithird_party/crashpad/crashpad"])
+
+    args.append(defs_path)
+
+    if defs_file:
+        inputs = [defs_file]
+    else:
+        inputs = []
+    apple_support.run(
+        ctx,
+        inputs = inputs + ctx.files.included_srcs,
+        outputs = raw_interface.values(),
+        executable = "xcrun",
+        arguments = args,
+        xcode_path_resolve_level = apple_support.xcode_path_resolve_level.args,
+        mnemonic = "GenerateMachInterface",
+        progress_message = "Generating Mach interface: %s" % basename,
+        execution_requirements = {"no-sandbox": "1"},
+    )
+
+    args = [ctx.executable._migfix.path]
+    for target in _migfix_order:
+        args.append(raw_interface[target].path)
+    for target, parameter in _migfix_fixed_parameters.items():
+        args.extend([parameter, target_interface[target].path])
+
+    ctx.actions.run_shell(
+        inputs = raw_interface.values(),
+        outputs = target_interface.values(),
+        progress_message = "Fixing generated interface: %s" % basename,
+        command = " ".join(args),
+        tools = [ctx.executable._migfix],
+    )
+
+    return target_interface
+
+def _mig_impl(ctx):
+    output_files = []
+
+    src_files = []
+    hdr_files = []
+    client_files = []
+    server_files = []
+
+    defs_files = depset(transitive = [src.files for src in ctx.attr.srcs])
+
+    for defs_file in defs_files.to_list():
+        result_files = _mig_generate(ctx, defs_file)
+        output_files.extend(result_files.values())
+        for target, result_file in result_files.items():
+            if target.endswith("header"):
+                hdr_files.append(result_file)
+            else:
+                src_files.append(result_file)
+
+            if target.startswith("s"):
+                server_files.append(result_file)
+            else:
+                client_files.append(result_file)
+
+    for sdk_defs in ctx.attr.sdk_srcs:
+        defs_path = paths.join(
+            apple_common.apple_toolchain().sdk_dir(),
+            sdk_defs,
+        )
+        result_files = _mig_generate(ctx, None, defs_path)
+        output_files.extend(result_files.values())
+        for target, result_file in result_files.items():
+            if target.endswith("header"):
+                hdr_files.append(result_file)
+            else:
+                src_files.append(result_file)
+
+            if target.startswith("s"):
+                server_files.append(result_file)
+            else:
+                client_files.append(result_file)
+
+    return [
+        DefaultInfo(
+            files = depset(output_files),
+        ),
+        OutputGroupInfo(
+            src_files = depset(src_files),
+            hdr_files = depset(hdr_files),
+            client_files = depset(client_files),
+            server_files = depset(server_files),
+        ),
+    ]
+
+mig = rule(
+    attrs = dicts.add(apple_support.action_required_attrs(), {
+        "srcs": attr.label_list(
+            allow_files = True,
+            mandatory = True,
+        ),
+        "included_srcs": attr.label_list(
+            allow_files = True,
+            mandatory = False,
+        ),
+        "include_dirs": attr.string_list(mandatory = False),
+        "output_dir": attr.string(default = ""),
+        "deps": attr.label_list(mandatory = False),
+        "sdk_srcs": attr.string_list(mandatory = False),
+        "_cc_toolchain": attr.label(
+            default = Label(
+                "//tools/cpp:current_cc_toolchain",
+            ),
+        ),
+        "_migfix": attr.label(
+            cfg = "host",
+            executable = True,
+            default = Label("//third_party/crashpad/crashpad/util:mig_fix"),
+        ),
+    }),
+    fragments = ["apple", "cpp"],
+    implementation = _mig_impl,
+    output_to_genfiles = True,
+    toolchains = [
+        "//tools/cpp:toolchain_type",
+    ],
+)