Files
terminalX/vendor/libghostty-spm/Script/build.sh
kid aa92d0e676 初始提交:terminalX 可运行态(M0/M1/M1.5 已真机验证)
- M0: libghostty SSH 终端(渲染/输入/连接)+ 白屏修复(OutputGate) + 会话状态机/自动重连
- M1: tsnet 用户态组网 + SSH-over-tsnet(fd 桥),shell 级真机验证;R5(Go+gvisor+C+++Swift 同进程) retire
- M1.5: tmux -CC 原生 tab(MVP)
- 结构: packages/(TXCore·TXTransport), apps/TerminalX, vendor/(libghostty-spm/libssh2/mbedtls/tsnet-bridge), artifacts/
- 文档: CLAUDE.md + docs/HANDOFF.md(新会话入口)
- 环境: 认证代理→依赖 vendor 本地化;Go 在 ~/.local/go;仅模拟器/未签名
- 待续: M2 mosh, tmux 多 pane, M4 安全(host key/SE)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 10:20:46 +08:00

131 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")/.."
if [ ! -f .root ]; then
echo "[*] malformed project structure"
exit 1
fi
usage() {
cat <<'EOF'
Usage: ./build.sh [options]
Options:
--source <path> Use an existing Ghostty checkout.
--ref <tag-or-commit> Checkout the given ref in the source checkout.
--platforms <csv> Build platform groups. Default:
macos,ios,maccatalyst
--download-url <url> Generate Package.swift from Package.swift.template.
--skip-tests Skip local xcodebuild and swift test verification.
-h, --help Show this help.
Notes:
- Default source path is ./References/ghostty-upstream
- This builds real per-target static archives, then assembles
BinaryTarget/GhosttyKit.xcframework and build/GhosttyKit.xcframework.zip
- Upstream Ghostty patches from ./Patches/ghostty are applied automatically
- Current verified groups: macos, ios, maccatalyst
- Current upstream Ghostty crashes for: tvos, visionos, watchos
EOF
}
ROOT_DIR=$(pwd)
SOURCE_DIR="$ROOT_DIR/References/ghostty-upstream"
PLATFORMS="macos,ios,maccatalyst"
DOWNLOAD_URL=${DOWNLOAD_URL:-}
GHOSTTY_REF=
SKIP_TESTS=0
while [ $# -gt 0 ]; do
case "$1" in
--source)
SOURCE_DIR="$2"
shift 2
;;
--ref)
GHOSTTY_REF="$2"
shift 2
;;
--platforms)
PLATFORMS="$2"
shift 2
;;
--download-url)
DOWNLOAD_URL="$2"
shift 2
;;
--skip-tests)
SKIP_TESTS=1
shift
;;
-h | --help)
usage
exit 0
;;
*)
echo "[!] unknown argument: $1"
usage
exit 1
;;
esac
done
if ! command -v zig >/dev/null 2>&1; then
echo "[!] zig not found"
exit 1
fi
if [ ! -d "$SOURCE_DIR" ]; then
echo "[*] ghostty source not found, cloning into $SOURCE_DIR"
mkdir -p "$(dirname "$SOURCE_DIR")"
git clone https://github.com/ghostty-org/ghostty "$SOURCE_DIR"
fi
if [ -n "$GHOSTTY_REF" ]; then
echo "[*] checking out ghostty ref: $GHOSTTY_REF"
git -C "$SOURCE_DIR" fetch --tags origin
git -C "$SOURCE_DIR" checkout "$GHOSTTY_REF"
fi
ARTIFACTS_DIR="$ROOT_DIR/build/artifacts"
XCFRAMEWORK_PATH="$ROOT_DIR/BinaryTarget/GhosttyKit.xcframework"
XCFRAMEWORK_ZIP="$ROOT_DIR/build/GhosttyKit.xcframework.zip"
rm -rf "$ARTIFACTS_DIR" "$XCFRAMEWORK_PATH" "$XCFRAMEWORK_ZIP"
mkdir -p "$ARTIFACTS_DIR" "$(dirname "$XCFRAMEWORK_PATH")"
echo "[*] zig version: $(zig version)"
echo "[*] ghostty source: $SOURCE_DIR"
echo "[*] platform groups: $PLATFORMS"
OLD_IFS=$IFS
IFS=','
set -- $PLATFORMS
IFS=$OLD_IFS
for platform_group in "$@"; do
platform_group=$(echo "$platform_group" | xargs)
[ -n "$platform_group" ] || continue
./Script/build-platform.sh "$SOURCE_DIR" "$platform_group" "$ARTIFACTS_DIR"
done
./Script/merge-xcframework.sh \
"$ARTIFACTS_DIR" \
"$XCFRAMEWORK_PATH" \
"$XCFRAMEWORK_ZIP"
if [ -n "$DOWNLOAD_URL" ]; then
./Script/build-manifest.sh "$XCFRAMEWORK_ZIP" "$DOWNLOAD_URL"
fi
if [ "$SKIP_TESTS" -eq 0 ]; then
./Script/test.sh
swift test
fi
echo "[*] xcframework: $XCFRAMEWORK_PATH"
echo "[*] zip: $XCFRAMEWORK_ZIP"