This commit is contained in:
2026-05-17 08:47:25 +08:00
parent 1159d86b8b
commit 45513fe334
27 changed files with 4734 additions and 2 deletions
+93
View File
@@ -0,0 +1,93 @@
#!/usr/bin/env python3
"""
build_engines.py — 跨平台一键编译所有引擎。
用法:
py -3 build_engines.py # 本地编译
py -3 build_engines.py --target c # 只编译 C 引擎
py -3 build_engines.py --release # Release 模式
py -3 build_engines.py --clean # 清理构建目录
依赖: cmake (>= 3.15)
"""
import argparse
import os
import subprocess
import sys
import platform
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
BUILD_DIR = os.path.join(SCRIPT_DIR, "build")
def run(cmd, **kwargs):
print(f"[build] {' '.join(cmd)}")
result = subprocess.run(cmd, cwd=SCRIPT_DIR, **kwargs)
if result.returncode != 0:
sys.exit(result.returncode)
return result
def main():
parser = argparse.ArgumentParser(description="一键编译 Dynamics 引擎")
parser.add_argument("--target", "-t", default="all-engines",
help="编译目标: dynamics_c, dynamics_cpp, dynamics_f90, all-engines (默认)")
parser.add_argument("--release", action="store_true", help="Release 模式")
parser.add_argument("--debug", action="store_true", help="Debug 模式")
parser.add_argument("--clean", action="store_true", help="清理后重新编译")
parser.add_argument("--toolchain", help="交叉编译工具链文件路径")
args = parser.parse_args()
# 检查 cmake
try:
subprocess.run(["cmake", "--version"], capture_output=True, check=True)
except (FileNotFoundError, subprocess.CalledProcessError):
print("[build] 错误: 未找到 cmake,请先安装:")
system = platform.system().lower()
if system == "windows":
print(" 下载安装: https://cmake.org/download/")
print(" 或: winget install Kitware.CMake")
elif system == "darwin":
print(" brew install cmake")
else:
print(" apt install cmake # Ubuntu/Debian")
print(" dnf install cmake # Fedora")
sys.exit(1)
# 确定构建类型
if args.debug:
build_type = "Debug"
elif args.release:
build_type = "Release"
else:
build_type = "Release"
# 清理
if args.clean and os.path.exists(BUILD_DIR):
import shutil
shutil.rmtree(BUILD_DIR)
print(f"[build] 已清理: {BUILD_DIR}")
# cmake 配置
config_cmd = ["cmake", "-B", BUILD_DIR,
f"-DCMAKE_BUILD_TYPE={build_type}"]
if args.toolchain:
config_cmd.append(f"-DCMAKE_TOOLCHAIN_FILE={args.toolchain}")
# 并行编译
nproc = os.cpu_count() or 4
build_cmd = ["cmake", "--build", BUILD_DIR,
"--target", args.target,
"--parallel", str(nproc)]
# 执行
print(f"[build] 目标: {args.target}")
print(f"[build] 模式: {build_type}")
print(f"[build] 系统: {platform.system()} {platform.machine()}")
run(config_cmd)
run(build_cmd)
print(f"\n[build] 完成!")
print(f"[build] 可执行文件位置: engines/*/build/")
if __name__ == "__main__":
main()