crashpad/DEPS
Nico Weber d7aeda9fca Prepare for building with clang
* Switch to Chromium's clang package on Windows. Fuchsia's clang
  package uses symlinks, which don't Just Work. See comment 3
  on the linked bug for details.

* Also tweak the installed path of the clang package to use
  win-amd64 instead of windows-amd64 to match gn's host_os
  variable, which is needed by the mini_chromium change in the
  roll mentioned below.

* Add `__declspec(noinline)` to sources of some end-to-end test
  binaries where the test expects a certain stack layout that's
  perturbed by inlining

* self_destroying_test_program.cc failed with Access Violation
  instead of with Breakpoint. I'm not 100% sure what's happening
  there as I couldn't reproduce it on my machine. The test uses
  VirtualFree(..., MEM_DECOMMIT) to make parts of the stack unreadable
  to make sure crashpad can handle that. My theory is that clang
  optimized out the call to `_alloca()`, which results in not enough
  of the stack being around for VirtualFree() to be able to decommit.
  https://geidav.wordpress.com/tag/reserved-memory/#:~:text=How%20does%20Windows%20manage%20stack%20memory%3F
  and https://godbolt.org/z/YdbYdKeMh suggest that this theory is
  not completely off -- but the
  `[[maybe_unused]] volatile void* do_not_optimize_away` bit feels
  homeopathic. And yet, with it this seems to pass CQ (see try results
  at patch sets 12 and 20) and without it it doesn't (see patch set 19).
  Maybe this was just luck and the test still feels flakily!
  (The linker's `/STACK` defaults to 1MB stack reserved and 4K
  committed -- 4K kind of seems like it should be enough for that
  VirtualFree call to succeed if that really is the problem.)
  So this part is a bit experimental.

Anyways, nothing uses clang yet, so no behavior change at this point
(other than `gclient sync` downloading less stuff and not failing
by default on Windows).

Includes a one-rev mini_chromium roll:

12ef786772..08d490553b

$ git log 12ef78677..08d490553 --date=short --no-merges --format='%ad %ae %s'
2025-02-13 thakis Prepare mini_chromium for using clang on Windows

Bug: 384682775
Change-Id: I33b54acf18cb6eadfd2167c76c0b4a5824efa64d
Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/6242577
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Nico Weber <thakis@chromium.org>
2025-02-24 11:37:06 -08:00

270 lines
7.9 KiB
Python

# Copyright 2014 The Crashpad Authors
#
# 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.
vars = {
'chromium_git': 'https://chromium.googlesource.com',
'gn_version': 'git_revision:5e19d2fb166fbd4f6f32147fbb2f497091a54ad8',
# ninja CIPD package version.
# https://chrome-infra-packages.appspot.com/p/infra/3pp/tools/ninja
'ninja_version': 'version:2@1.8.2.chromium.3',
'pull_linux_clang': False,
'pull_win_toolchain': False,
# Controls whether crashpad/build/ios/setup-ios-gn.py is run as part of
# gclient hooks. It is enabled by default for developer's convenience. It can
# be disabled with custom_vars (done automatically on the bots).
'run_setup_ios_gn': True,
}
deps = {
'buildtools':
Var('chromium_git') + '/chromium/src/buildtools.git@' +
'efa920ce144e4dc1c1841e73179cd7e23b9f0d5e',
'buildtools/clang_format/script':
Var('chromium_git') +
'/external/github.com/llvm/llvm-project/clang/tools/clang-format.git@' +
'c912837e0d82b5ca4b6e790b573b3956d3744c1c',
'crashpad/third_party/edo/edo': {
'url': Var('chromium_git') + '/external/github.com/google/eDistantObject.git@' +
'727e556705278598fce683522beedbb9946bfda0',
'condition': 'checkout_ios',
},
'crashpad/third_party/googletest/googletest':
Var('chromium_git') + '/external/github.com/google/googletest@' +
'af29db7ec28d6df1c7f0f745186884091e602e07',
'crashpad/third_party/lss/lss':
Var('chromium_git') + '/linux-syscall-support.git@' +
'9719c1e1e676814c456b55f5f070eabad6709d31',
'crashpad/third_party/mini_chromium/mini_chromium':
Var('chromium_git') + '/chromium/mini_chromium@' +
'08d490553b0dcb1324efb59b13be839d7f9f3b62',
'crashpad/third_party/libfuzzer/src':
Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git@' +
'fda403cf93ecb8792cb1d061564d89a6553ca020',
'crashpad/third_party/zlib/zlib':
Var('chromium_git') + '/chromium/src/third_party/zlib@' +
'fef58692c1d7bec94c4ed3d030a45a1832a9615d',
# CIPD packages.
'buildtools/linux64': {
'packages': [
{
'package': 'gn/gn/linux-${{arch}}',
'version': Var('gn_version'),
}
],
'dep_type': 'cipd',
'condition': 'host_os == "linux"',
},
'buildtools/mac': {
'packages': [
{
'package': 'gn/gn/mac-${{arch}}',
'version': Var('gn_version'),
}
],
'dep_type': 'cipd',
'condition': 'host_os == "mac"',
},
'buildtools/win': {
'packages': [
{
'package': 'gn/gn/windows-amd64',
'version': Var('gn_version'),
}
],
'dep_type': 'cipd',
'condition': 'host_os == "win"',
},
'crashpad/build/fuchsia': {
'packages': [
{
'package': 'chromium/fuchsia/test-scripts',
'version': 'latest',
}
],
'condition': 'checkout_fuchsia',
'dep_type': 'cipd',
},
'crashpad/third_party/linux/clang/linux-amd64': {
'packages': [
{
'package': 'fuchsia/third_party/clang/linux-amd64',
'version': 'Tpc85d1ZwSlZ6UKl2d96GRUBGNA5JKholOKe24sRDr0C',
},
],
'condition': 'checkout_linux and pull_linux_clang',
'dep_type': 'cipd'
},
'crashpad/third_party/fuchsia/clang/mac-amd64': {
'packages': [
{
'package': 'fuchsia/third_party/clang/mac-amd64',
'version': 'latest',
},
],
'condition': 'checkout_fuchsia and host_os == "mac"',
'dep_type': 'cipd'
},
'crashpad/third_party/fuchsia/clang/linux-amd64': {
'packages': [
{
'package': 'fuchsia/third_party/clang/linux-amd64',
'version': 'latest',
},
],
'condition': 'checkout_fuchsia and host_os == "linux"',
'dep_type': 'cipd'
},
'crashpad/third_party/windows/clang/win-amd64': {
'bucket': 'chromium-browser-clang',
'objects': [
{
'object_name': 'Win/clang-llvmorg-20-init-17108-g29ed6000-2.tar.xz',
'sha256sum': '1c71efd923a91480480d4f31c2fd5f1369e01e14f15776a9454abbce0bc13548',
'size_bytes': 46357580,
'generation': 1737590897363452,
},
],
'condition': 'checkout_win and host_os == "win"',
'dep_type': 'gcs',
},
'crashpad/third_party/fuchsia-gn-sdk': {
'packages': [
{
'package': 'chromium/fuchsia/gn-sdk',
'version': 'latest'
},
],
'condition': 'checkout_fuchsia',
'dep_type': 'cipd'
},
'crashpad/third_party/fuchsia/sdk/linux-amd64': {
'packages': [
{
'package': 'fuchsia/sdk/core/linux-amd64',
'version': 'latest'
},
],
'condition': 'checkout_fuchsia and host_os == "linux"',
'dep_type': 'cipd'
},
# depot_tools/ninja wrapper calls third_party/ninja/{ninja, ninja.exe}.
# crashpad/third_party/ninja/ninja is another wrapper to call linux ninja
# or mac ninja.
# This allows crashpad developers to work for multiple platforms on the same
# machine.
'crashpad/third_party/ninja': {
'packages': [
{
'package': 'infra/3pp/tools/ninja/${{platform}}',
'version': Var('ninja_version'),
}
],
'condition': 'host_os == "win"',
'dep_type': 'cipd',
},
'crashpad/third_party/ninja/linux': {
'packages': [
{
'package': 'infra/3pp/tools/ninja/${{platform}}',
'version': Var('ninja_version'),
}
],
'condition': 'host_os == "linux"',
'dep_type': 'cipd',
},
'crashpad/third_party/ninja/mac-amd64': {
'packages': [
{
'package': 'infra/3pp/tools/ninja/mac-amd64',
'version': Var('ninja_version'),
}
],
'condition': 'host_os == "mac" and host_cpu == "x64"',
'dep_type': 'cipd',
},
'crashpad/third_party/ninja/mac-arm64': {
'packages': [
{
'package': 'infra/3pp/tools/ninja/mac-arm64',
'version': Var('ninja_version'),
}
],
'condition': 'host_os == "mac" and host_cpu == "arm64"',
'dep_type': 'cipd',
},
'crashpad/third_party/win/toolchain': {
# This package is only updated when the solution in .gclient includes an
# entry like:
# "custom_vars": { "pull_win_toolchain": True }
# This is because the contained bits are not redistributable.
'packages': [
{
'package': 'chrome_internal/third_party/sdk/windows',
'version': 'uploaded:2021-04-28'
},
],
'condition': 'checkout_win and pull_win_toolchain',
'dep_type': 'cipd'
},
}
hooks = [
{
# If using a local clang ("pull_linux_clang" above), also pull down a
# sysroot.
'name': 'sysroot_linux',
'pattern': '.',
'condition': 'checkout_linux and pull_linux_clang',
'action': [
'crashpad/build/install_linux_sysroot.py',
],
},
{
# Avoid introducing unnecessary PRESUBMIT.py file from build/fuchsia.
# Never fail and ignore the error if the file does not exist.
'name': 'Remove the PRESUBMIT.py from build/fuchsia',
'pattern': '.',
'condition': 'checkout_fuchsia',
'action': [
'rm',
'-f',
'crashpad/build/fuchsia/PRESUBMIT.py',
],
},
{
'name': 'Generate Fuchsia Build Definitions',
'pattern': '.',
'condition': 'checkout_fuchsia',
'action': [
'python3',
'crashpad/build/fuchsia_envs.py',
'crashpad/build/fuchsia/gen_build_defs.py'
],
},
{
'name': 'setup_gn_ios',
'pattern': '.',
'condition': 'run_setup_ios_gn and checkout_ios',
'action': [
'python3',
'crashpad/build/ios/setup_ios_gn.py'
],
},
]
recursedeps = [
'buildtools',
]