- 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>
94 lines
2.3 KiB
Bash
Executable File
94 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
if [ ! -f .root ]; then
|
|
echo "[*] malformed project structure"
|
|
exit 1
|
|
fi
|
|
|
|
ARTIFACTS_DIR=${1:-}
|
|
OUTPUT_XCFRAMEWORK=${2:-}
|
|
OUTPUT_ZIP=${3:-}
|
|
|
|
if [ -z "$ARTIFACTS_DIR" ] || [ -z "$OUTPUT_XCFRAMEWORK" ]; then
|
|
echo "Usage: $0 <artifacts_dir> <output_xcframework> [output_zip]"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$ARTIFACTS_DIR" ]; then
|
|
echo "[!] artifacts directory not found: $ARTIFACTS_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
XCFRAMEWORK_COMMAND=()
|
|
FOUND_VARIANTS=0
|
|
|
|
verify_headers() {
|
|
local header_dir="$1"
|
|
|
|
if [ ! -f "$header_dir/ghostty.h" ]; then
|
|
echo "[!] missing header: $header_dir/ghostty.h"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$header_dir/module.modulemap" ]; then
|
|
echo "[!] missing module map: $header_dir/module.modulemap"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
add_library() {
|
|
local variant_dir="$1"
|
|
local library_path="$variant_dir/lib/libghostty.a"
|
|
local header_dir="$variant_dir/include"
|
|
|
|
if [ ! -f "$library_path" ]; then
|
|
echo "[!] missing library: $library_path"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$header_dir" ]; then
|
|
echo "[!] missing headers: $header_dir"
|
|
exit 1
|
|
fi
|
|
|
|
verify_headers "$header_dir"
|
|
XCFRAMEWORK_COMMAND+=("-library" "$library_path" "-headers" "$header_dir")
|
|
FOUND_VARIANTS=$((FOUND_VARIANTS + 1))
|
|
}
|
|
|
|
for variant_dir in "$ARTIFACTS_DIR"/*; do
|
|
[ -d "$variant_dir" ] || continue
|
|
[ "$(basename "$variant_dir")" = ".intermediates" ] && continue
|
|
add_library "$variant_dir"
|
|
done
|
|
|
|
if [ "$FOUND_VARIANTS" -eq 0 ]; then
|
|
echo "[!] no staged variants found in $ARTIFACTS_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$(dirname "$OUTPUT_XCFRAMEWORK")"
|
|
rm -rf "$OUTPUT_XCFRAMEWORK"
|
|
|
|
echo "[*] creating static-library xcframework: $OUTPUT_XCFRAMEWORK"
|
|
xcodebuild -create-xcframework \
|
|
-output "$OUTPUT_XCFRAMEWORK" \
|
|
"${XCFRAMEWORK_COMMAND[@]}"
|
|
|
|
./Script/verify-xcframework.sh "$OUTPUT_XCFRAMEWORK"
|
|
|
|
if [ -n "$OUTPUT_ZIP" ]; then
|
|
mkdir -p "$(dirname "$OUTPUT_ZIP")"
|
|
rm -f "$OUTPUT_ZIP"
|
|
(
|
|
cd "$(dirname "$OUTPUT_XCFRAMEWORK")"
|
|
ditto -c -k --sequesterRsrc --keepParent "$(basename "$OUTPUT_XCFRAMEWORK")" "$(basename "$OUTPUT_ZIP")"
|
|
)
|
|
mv "$(dirname "$OUTPUT_XCFRAMEWORK")/$(basename "$OUTPUT_ZIP")" "$OUTPUT_ZIP"
|
|
./Script/verify-xcframework.sh "$OUTPUT_ZIP"
|
|
echo "[*] packed xcframework zip: $OUTPUT_ZIP"
|
|
fi
|