refactor: 源码迁至 engines/src/,删除旧的 engines/{c,cpp,fortran}/

- 删除 engines/{c,cpp,fortran}/ 目录(源码和 Makefile 已移至 src/)
- engines/src/{c,cpp,fortran}/: 清理 main.*/bak 等无用文件
- Makefile 改为直接编译 DLL 到 engines/release/
- .gitignore: 更新路径指向 engines/src/*/build/
- engine_dll.py: 更新注释中的编译命令路径
This commit is contained in:
2026-06-21 05:42:29 +08:00
parent e371fa8db1
commit 7fb2b730e9
14 changed files with 48 additions and 4917 deletions
+13 -55
View File
@@ -1,82 +1,40 @@
# engines/c/Makefile
# 跨平台编译:make → 本地系统编译
# make linux → Linux 交叉编译(需 x86_64-linux-gnu-gcc
# make windows → Windows 交叉编译(需 x86_64-w64-mingw32-gcc
# make macos → macOS 交叉编译(需 osxcross 工具链)
# engines/src/c/Makefile
# 编译 DLL 到 engines/release/(主程序通过 ctypes 直接调用)
CC = gcc
CFLAGS = -O3 -march=native -Wall -Wextra
LDFLAGS = -lm
SRCS = main.c
LIB_SRC = dynamics_lib.c
# 自动检测系统
UNAME_S := $(shell uname -s 2>/dev/null || echo Windows)
# 目标文件名:统一使用 .exe 后缀(方便 Python 跨平台调用)
TARGET = build/dynamics_c.exe
# DLL 输出到 engines/release/
DLL_DIR = ../../release
# DLL 目标(平台自动选择后缀)
ifeq ($(UNAME_S),Linux)
DLL_TARGET = build/dynamics_c.so
DLL_TARGET = $(DLL_DIR)/dynamics_c.so
DLL_FLAGS = -shared -fPIC
else ifeq ($(UNAME_S),Darwin)
DLL_TARGET = build/dynamics_c.dylib
DLL_TARGET = $(DLL_DIR)/dynamics_c.dylib
DLL_FLAGS = -dynamiclib
else
DLL_TARGET = build/dynamics_c.dll
DLL_TARGET = $(DLL_DIR)/dynamics_c.dll
DLL_FLAGS = -shared
endif
# ── 本地编译 ─────────────────────────────────
.PHONY: all dll clean linux windows macos
.PHONY: all dll clean
all: $(TARGET)
all: dll
dll: $(DLL_TARGET)
$(TARGET): $(SRCS) | build
$(CC) $(CFLAGS) -o $@ $(SRCS) $(LDFLAGS)
@echo " === C engine built: $@ ==="
$(DLL_TARGET): $(LIB_SRC) | build
$(DLL_TARGET): $(LIB_SRC) | $(DLL_DIR)
$(CC) $(CFLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC) $(LDFLAGS)
@echo " === C DLL built: $@ ==="
build:
mkdir -p build
# ── 交叉编译 ─────────────────────────────────
# Linux → Linux (x86_64)
linux: CROSS_PREFIX = x86_64-linux-gnu-
linux: CC = $(CROSS_PREFIX)gcc
linux: CFLAGS = -O3 -march=x86-64 -Wall -Wextra
linux: $(SRCS) | build
$(CC) $(CFLAGS) -o build/dynamics_c_linux.exe $(SRCS) $(LDFLAGS)
@echo " === Linux binary: build/dynamics_c_linux.exe ==="
# 任意平台 → Windows (x86_64)
# 需要安装 MinGW 交叉编译器:
# apt install mingw-w64 (Debian/Ubuntu)
# brew install mingw-w64 (macOS)
windows: CROSS_PREFIX = x86_64-w64-mingw32-
windows: CC = $(CROSS_PREFIX)gcc
windows: CFLAGS = -O3 -march=x86-64 -Wall -Wextra
windows: $(SRCS) | build
$(CC) $(CFLAGS) -o build/dynamics_c_win.exe $(SRCS) $(LDFLAGS)
@echo " === Windows binary: build/dynamics_c_win.exe ==="
# 任意平台 → macOS (x86_64)
# 需要安装 osxcross 工具链
macos: CROSS_PREFIX = x86_64-apple-darwin-
macos: CC = $(CROSS_PREFIX)gcc
macos: CFLAGS = -O3 -march=x86-64 -Wall -Wextra
macos: $(SRCS) | build
$(CC) $(CFLAGS) -o build/dynamics_c_mac.exe $(SRCS) $(LDFLAGS)
@echo " === macOS binary: build/dynamics_c_mac.exe ==="
# ── 编译所有平台 ──────────────────────────────
all-platforms: linux windows macos
$(DLL_DIR):
mkdir -p $(DLL_DIR)
clean:
rm -rf build *.o
rm -f $(DLL_TARGET)
-1114
View File
File diff suppressed because it is too large Load Diff
+13 -16
View File
@@ -1,49 +1,46 @@
# engines/cpp/Makefile
# engines/src/cpp/Makefile
# 编译 DLL 到 engines/release/(主程序通过 ctypes 直接调用)
CXX = g++
SRCS = main.cpp
LIB_SRC = dynamics_lib.cpp
UNAME_S := $(shell uname -s 2>/dev/null || echo Windows)
CXXFLAGS = -O3 -march=native -std=c++17 -Wall -Wextra -D_USE_MATH_DEFINES
# Windows 下静态链接运行时,避免 libstdc++-6.dll / libgcc_s_seh-1.dll 版本冲突
# Windows 下静态链接运行时
ifeq ($(UNAME_S),Windows)
STATIC_FLAGS = -static-libgcc -static-libstdc++
else
STATIC_FLAGS =
endif
TARGET = build/dynamics_cpp.exe
# DLL 输出到 engines/release/
DLL_DIR = ../../release
ifeq ($(UNAME_S),Linux)
DLL_TARGET = build/dynamics_cpp.so
DLL_TARGET = $(DLL_DIR)/dynamics_cpp.so
DLL_FLAGS = -shared -fPIC
else ifeq ($(UNAME_S),Darwin)
DLL_TARGET = build/dynamics_cpp.dylib
DLL_TARGET = $(DLL_DIR)/dynamics_cpp.dylib
DLL_FLAGS = -dynamiclib
else
DLL_TARGET = build/dynamics_cpp.dll
DLL_TARGET = $(DLL_DIR)/dynamics_cpp.dll
DLL_FLAGS = -shared
endif
.PHONY: all dll clean
all: $(TARGET)
all: dll
dll: $(DLL_TARGET)
$(TARGET): $(SRCS) | build
$(CXX) $(CXXFLAGS) $(STATIC_FLAGS) -o $@ $(SRCS)
@echo " === C++ engine built: $@ ==="
$(DLL_TARGET): $(LIB_SRC) | build
$(DLL_TARGET): $(LIB_SRC) | $(DLL_DIR)
$(CXX) $(CXXFLAGS) $(STATIC_FLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC)
@echo " === C++ DLL built: $@ ==="
build:
mkdir -p build
$(DLL_DIR):
mkdir -p $(DLL_DIR)
clean:
rm -rf build *.o
rm -f $(DLL_TARGET)
File diff suppressed because it is too large Load Diff
+13 -16
View File
@@ -1,47 +1,44 @@
# engines/fortran/Makefile
# engines/src/fortran/Makefile
# 编译 DLL 到 engines/release/(主程序通过 ctypes 直接调用)
FC = gfortran
FFLAGS = -O3 -march=native -Wall -Wextra
SRCS = main.f90
LIB_SRC = dynamics_lib.f90
UNAME_S := $(shell uname -s 2>/dev/null || echo Windows)
ifeq ($(UNAME_S),Windows)
STATIC_FLAGS = -static-libgcc -static-libgfortran -static-libquadmath
STATIC_FLAGS = -static
else
STATIC_FLAGS =
endif
TARGET = build/dynamics_f90.exe
# DLL 输出到 engines/release/
DLL_DIR = ../../release
ifeq ($(UNAME_S),Linux)
DLL_TARGET = build/dynamics_f90.so
DLL_TARGET = $(DLL_DIR)/dynamics_f90.so
DLL_FLAGS = -shared -fPIC
else ifeq ($(UNAME_S),Darwin)
DLL_TARGET = build/dynamics_f90.dylib
DLL_TARGET = $(DLL_DIR)/dynamics_f90.dylib
DLL_FLAGS = -dynamiclib
else
DLL_TARGET = build/dynamics_f90.dll
DLL_TARGET = $(DLL_DIR)/dynamics_f90.dll
DLL_FLAGS = -shared -fPIC
endif
.PHONY: all dll clean
all: $(TARGET)
all: dll
dll: $(DLL_TARGET)
$(TARGET): $(SRCS) | build
$(FC) $(FFLAGS) $(STATIC_FLAGS) -o $@ $(SRCS)
@echo " === Fortran engine built: $@ ==="
$(DLL_TARGET): $(LIB_SRC) | build
$(DLL_TARGET): $(LIB_SRC) | $(DLL_DIR)
$(FC) $(FFLAGS) $(STATIC_FLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC)
@echo " === Fortran DLL built: $@ ==="
build:
mkdir -p build
$(DLL_DIR):
mkdir -p $(DLL_DIR)
clean:
rm -rf build *.o *.mod
rm -f $(DLL_TARGET)
File diff suppressed because it is too large Load Diff