重构平台条件编译,剥离 LightGame 调试内容到 Debug 配置
- 把 USE_FRAMEBUFFER 替换为 TARGET_IMX / TARGET_PC 双正向互斥宏,由 CMake 选项 TARGET_IMX 推导,代码层只用 #ifdef 正向判断 - 新增 IMX6U_DEBUG 宏,通过 $<$<CONFIG:Debug>:...> 只在 Debug 构建中注入 - LightGame 关卡编辑器(LevelEditor + ImGui)改为仅 PC + Debug 编入,Release 不参与编译 - LightGame draw_debug、debug_mode_、--debug 命令行、[INFO] 启动日志全部用 IMX6U_DEBUG 门控,Release 二进制中完全消失 - [WARN] 硬件初始化失败提示保留在 Release,作为现场诊断信息 - README、APP_AND_CORE_ARCHITECTURE、Game README 同步新宏命名,并新增「构建类型与调试开关」小节
This commit is contained in:
@@ -51,6 +51,26 @@ IMX6U 运行时性能预算较紧,后续开发必须遵守 `docs/DEVELOPMENT_G
|
||||
cd IMX6U-Game
|
||||
```
|
||||
|
||||
### 构建类型与调试开关
|
||||
|
||||
项目有两根独立的条件编译轴,组合出常用的构建形态:
|
||||
|
||||
| 轴 | CMake 参数 | 编译宏 | 默认 |
|
||||
|---|---|---|---|
|
||||
| 平台软件栈 | `-DTARGET_IMX=ON/OFF` | `TARGET_IMX` 或 `TARGET_PC`(互斥、双正向) | `OFF` → `TARGET_PC` |
|
||||
| 构建类型 | `-DCMAKE_BUILD_TYPE=Debug/Release` | `IMX6U_DEBUG`(仅 Debug 配置注入) | `Release` |
|
||||
|
||||
`IMX6U_DEBUG` 控制开发期辅助内容是否参与构建。当前 LightGame 中下列内容只在 Debug 构建中存在,Release 构建会被完全剔除(不参与编译,不进入二进制):
|
||||
|
||||
- 关卡编辑器(`LevelEditor` + ImGui,按 `F1` 切换)
|
||||
- 碰撞框可视化(`LevelRenderer::draw_debug` 与 `LightGameApp::debug_mode_`)
|
||||
- `--debug` 命令行开关
|
||||
- `[INFO] LightGame started …` 启动日志
|
||||
|
||||
硬件初始化失败的 `[WARN]` 提示无论 Debug/Release 都保留,作为现场诊断信息。
|
||||
|
||||
> 多配置生成器(Visual Studio)下 `CMAKE_BUILD_TYPE` 在 configure 阶段被忽略,应在构建阶段用 `--config Debug|Release` 选择;单配置生成器(Makefile/Ninja)使用 `-DCMAKE_BUILD_TYPE=...` 在 configure 阶段决定。
|
||||
|
||||
### Windows(Visual Studio / MSVC)
|
||||
|
||||
仓库已自带 SDL2 开发库(`libs/Win/SDL2`),无需额外安装。
|
||||
@@ -67,6 +87,13 @@ cmake --build build-win --config Release --target IMX6U-Game
|
||||
cmake --build build-win --config Release --target IMX6U-Demo
|
||||
```
|
||||
|
||||
启用 LightGame 关卡编辑器和调试显示,使用 Debug 构建:
|
||||
|
||||
```bash
|
||||
cmake --build build-win --config Debug --target IMX6U-LightGame
|
||||
./build-win/Debug/IMX6U-LightGame.exe
|
||||
```
|
||||
|
||||
构建 `IMX6U-Game` 时会自动重新生成 Tom 的 atlas 头文件;也可以单独执行:
|
||||
|
||||
```bash
|
||||
@@ -136,12 +163,18 @@ sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
|
||||
- **SDL2 后端**:目标是后续游戏主路径;SDL2 负责显示、输入和最终 framebuffer 提交,时间源使用独立的 `Platform::ITimeSource`。
|
||||
- **Framebuffer 后端**:作为极简依赖和显示通路对照测试。
|
||||
|
||||
> CMake 选项 `TARGET_IMX` 控制的不是"是否交叉编译",而是"使用哪一套软件栈":
|
||||
> - `TARGET_IMX=ON` —— framebuffer (`/dev/fb0`) + Alsa 音频 + evdev 输入 + AP3216C 光敏,对应 IMX6U 板载硬件。
|
||||
> - `TARGET_IMX=OFF` —— SDL2 显示/音频/输入/光敏,PC 调试和 ARM-SDL 对照路径共用这一栈。
|
||||
>
|
||||
> 因此 ARM 交叉编译 + SDL2 后端使用 `-DTARGET_IMX=OFF`,与"运行在 PC"无关。
|
||||
|
||||
构建(Framebuffer 对照后端):
|
||||
|
||||
```bash
|
||||
cmake -B build-arm-fb \
|
||||
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm-linux-gnueabihf.cmake \
|
||||
-DUSE_FRAMEBUFFER=ON .
|
||||
-DTARGET_IMX=ON .
|
||||
cmake --build build-arm-fb
|
||||
```
|
||||
|
||||
@@ -154,7 +187,7 @@ cmake --build build-arm-fb
|
||||
```bash
|
||||
cmake -B build-arm-sdl \
|
||||
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm-linux-gnueabihf.cmake \
|
||||
-DUSE_FRAMEBUFFER=OFF .
|
||||
-DTARGET_IMX=OFF .
|
||||
cmake --build build-arm-sdl
|
||||
```
|
||||
|
||||
@@ -281,7 +314,7 @@ assets/font/font_atlas.h
|
||||
└──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
切换显示后端不应影响应用层和核心绘制逻辑;当前 CMake 通过 `USE_FRAMEBUFFER` 在 SDL2 与 framebuffer 后端间切换。
|
||||
切换显示后端不应影响应用层和核心绘制逻辑;当前 CMake 通过 `TARGET_IMX` 在 framebuffer (IMX6U) 与 SDL2 (PC) 后端间切换,对应代码层的 `TARGET_IMX` / `TARGET_PC` 双正向宏。
|
||||
|
||||
## 目录结构
|
||||
|
||||
|
||||
Reference in New Issue
Block a user