#!/usr/bin/env bash set -euo pipefail if [[ $# -lt 1 || $# -gt 3 ]]; then echo "用法: $0 [output_dir] [--run]" >&2 exit 1 fi input=$1 out_dir="test/test_result/asm" run_exec=false shift while [[ $# -gt 0 ]]; do case "$1" in --run) run_exec=true ;; *) out_dir="$1" ;; esac shift done if [[ ! -f "$input" ]]; then echo "输入文件不存在: $input" >&2 exit 1 fi compiler="./build/bin/compiler" if [[ ! -x "$compiler" ]]; then echo "未找到编译器: $compiler ,请先构建。" >&2 exit 1 fi if ! command -v aarch64-linux-gnu-gcc >/dev/null 2>&1; then echo "未找到 aarch64-linux-gnu-gcc,无法汇编/链接。" >&2 exit 1 fi mkdir -p "$out_dir" base=$(basename "$input") stem=${base%.sy} asm_file="$out_dir/$stem.s" exe="$out_dir/$stem" "$compiler" --emit-asm "$input" > "$asm_file" echo "汇编已生成: $asm_file" aarch64-linux-gnu-gcc "$asm_file" -o "$exe" echo "可执行文件已生成: $exe" if [[ "$run_exec" == true ]]; then if ! command -v qemu-aarch64 >/dev/null 2>&1; then echo "未找到 qemu-aarch64,无法运行生成的可执行文件。" >&2 exit 1 fi echo "运行 $exe ..." set +e qemu-aarch64 -L /usr/aarch64-linux-gnu "$exe" status=$? set -e echo "退出码: $status" fi