初始提交: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>
This commit is contained in:
93
vendor/libghostty-spm/Script/merge-xcframework.sh
vendored
Executable file
93
vendor/libghostty-spm/Script/merge-xcframework.sh
vendored
Executable file
@@ -0,0 +1,93 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user