m323/m323.xcodeproj/rules_xcodeproj/bazel/generate_index_build_bazel_dependencies.sh
cediackermann b1968074b6
build: generate per-package and aggregate Xcode projects
Add rules_xcodeproj targets to each package BUILD plus a root m323
project, with extra_files filegroups so the full source tree shows in
Xcode. Ignore Scala/Metals build dirs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 14:00:40 +02:00

76 lines
2.5 KiB
Bash
Executable file

#!/bin/bash
set -euo pipefail
cd "$SRCROOT"
readonly config="${BAZEL_CONFIG}_indexbuild"
# Compiled outputs (i.e. swiftmodules) and generated inputs
output_groups=(
# Compile params
"bc $BAZEL_TARGET_ID"
# Indexstores and their filelist. Requesting indexstore directories triggers
# transitive Swift compilation (producing swiftmodules, indexstores, and
# generated headers) without linking, avoiding large product binaries. We use
# `--remote_download_regex` below to download the files we care
# about.
"bi $BAZEL_TARGET_ID"
)
indexstores_filelists=()
if [[ "$IMPORT_INDEX_BUILD_INDEXSTORES" == "YES" ]]; then
output_groups+=(
"index_import"
)
readonly targetid_regex='@{0,2}(.*)//(.*):(.*) ([^\ ]+)$'
if [[ "$BAZEL_TARGET_ID" =~ $targetid_regex ]]; then
repo="${BASH_REMATCH[1]}"
if [[ "$repo" == "@" ]]; then
repo=""
fi
package="${BASH_REMATCH[2]}"
target="${BASH_REMATCH[3]}"
configuration="${BASH_REMATCH[4]}"
filelist="$configuration/bin/${repo:+"external/$repo/"}$package/$target-bi.filelist"
indexstores_filelists+=("$filelist")
fi
readonly indexstores_regex='.*\.indexstore/.*|'
else
readonly indexstores_regex=''
fi
readonly build_pre_config_flags=(
# Include the following:
#
# - .indexstore directories to allow importing indexes
# - .swift{doc,module,sourceinfo} files for indexing
# - compilation input files (.cfg, .c, .C .cc, .cl, .cpp, .cu, .cxx, .c++,
# .def, .h, .H, .hh, .hpp, .hxx, .h++, .hmap, .ilc, .inc, .ipp, .tcc, .tlh,
# .tpp, .m, .modulemap, .mm, .pch, .swift, .yaml) for index compilation
#
# This is brittle. If different file extensions are used for compilation
# inputs, they will need to be added to this list. Ideally we can stop doing
# this once Bazel adds support for a Remote Output Service.
"--remote_download_regex=${indexstores_regex}.*\.(cfg|c|C|cc|cl|cpp|cu|cxx|c++|def|h|H|hh|hpp|hxx|h++|hmap|ilc|inc|inl|ipp|tcc|tlh|tli|tpp|m|modulemap|mm|pch|swift|swiftdoc|swiftmodule|swiftsourceinfo|yaml)$"
)
source "$BAZEL_INTEGRATION_DIR/bazel_build.sh"
# Import indexes
if [ -n "${indexstores_filelists:-}" ]; then
if [[ "${BAZEL_SEPARATE_INDEXBUILD_OUTPUT_BASE:-}" == "YES" ]]; then
"$BAZEL_INTEGRATION_DIR/import_indexstores" \
"$INDEXING_PROJECT_DIR__NO" \
"${indexstores_filelists[@]/#/$output_path/}"
else
"$BAZEL_INTEGRATION_DIR/import_indexstores" \
"$PROJECT_DIR" \
"${indexstores_filelists[@]/#/$BAZEL_OUT/}"
fi
fi