| #!/bin/bash | |
| # Copyright 2026 The Chromium Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| set -euo pipefail | |
| # Resolve the directory containing this script. | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| STARLARK_DIR="${SCRIPT_DIR}/../starlark" | |
| LOCAL_BIN_DIR="${SCRIPT_DIR}/.bin" | |
| if [ ! -f "${LOCAL_BIN_DIR}/bin/cxxbridge" ]; then | |
| echo "Fetching cargo dependencies to ensure cxx is in cache..." | |
| cargo fetch --manifest-path "${STARLARK_DIR}/Cargo.toml" | |
| echo "Locating cxxbridge source in cargo cache..." | |
| CMD_DIR=$(find "${HOME}/.cargo/git/checkouts" -type d -path "*/cxx-*/bridge/cmd" 2>/dev/null | head -n 1) | |
| if [ -z "${CMD_DIR}" ]; then | |
| echo "Error: Could not find cxx checkout under ~/.cargo/git/checkouts/" >&2 | |
| exit 1 | |
| fi | |
| echo "Compiling cxxbridge tool from cargo cache..." | |
| cargo install --path "${CMD_DIR}" --root "${LOCAL_BIN_DIR}" | |
| fi | |
| ( | |
| echo "// This file is generated by src/gn/ffi/update_bridge.sh. Do not edit manually." | |
| echo "// Source: cxxbridge --header" | |
| "${LOCAL_BIN_DIR}/bin/cxxbridge" --header | |
| ) > "${SCRIPT_DIR}/../starlark/vendor/cxx/include/cxx.h" | |
| ( | |
| echo "// This file is generated by src/gn/ffi/update_bridge.sh. Do not edit manually." | |
| echo "// Source: src/gn/ffi/starlark/crates/ffi/src/bridge.rs" | |
| "${LOCAL_BIN_DIR}/bin/cxxbridge" "${SCRIPT_DIR}/../starlark/crates/ffi/src/bridge.rs" --header | |
| ) > "${SCRIPT_DIR}/bridge.h" | |
| ( | |
| echo "// This file is generated by src/gn/ffi/update_bridge.sh. Do not edit manually." | |
| echo "// Source: src/gn/ffi/starlark/crates/ffi/src/bridge.rs" | |
| "${LOCAL_BIN_DIR}/bin/cxxbridge" "${SCRIPT_DIR}/../starlark/crates/ffi/src/bridge.rs" | |
| ) > "${SCRIPT_DIR}/bridge.cc" |