Appearance
源码兼容与适配 (Source Compatibility & Adaptation)
同一份 C 源码,既能编译为 GBA ROM,也能编译为 WebAssembly——这是 pokeemerald-wasm 最精巧的工程实践之一。通过
#if WASM条件编译守卫、include/wasm/标准库垫片、以及唯一的 WASM 专用源文件,项目在不修改原始游戏逻辑的前提下实现了跨平台适配。
涵盖内容
| 章节 | 核心主题 |
|---|---|
| 兼容性概念 | 条件编译模式、垫片头文件、适配策略 |
| 练习 | 守卫分析、垫片编写、兼容性设计 |
| 代码走读 | 逐文件解读 WASM 兼容层代码 |
核心概念
pokeemerald-wasm 的源码兼容策略遵循最小侵入原则:
- 条件编译(
#if WASM):在原始源码中用预处理器守卫隔离平台差异代码,约 30 处#if WASM分布在 15+ 个源文件中 - 头文件垫片(
include/wasm/):提供stdio.h、stdlib.h、string.h的最小声明,避免 Clang 内建函数与 GBA 工具链声明冲突 - WASM 专用文件(
wasm_field_effect_scripts.c):唯一一个 WASM 专属源文件,用 C 结构体重写 GBA 汇编实现的场景特效脚本表
关键数字:
- 仅 1 个 WASM 专用源文件(
wasm_field_effect_scripts.c) - 3 个 垫片头文件(
stdio.h、stdlib.h、string.h) - 约 30 处
#if WASM条件编译守卫 - 原始 GBA 构建路径(
make/make modern)完全不受影响
前置知识
| 知识点 | 说明 |
|---|---|
| C 预处理器 | 理解 #if、#ifdef、#define 条件编译机制 |
| C 标准库函数 | 了解 memcpy、sprintf、abs 等常用函数的声明 |
| [[topics/wasm-compilation/index | WASM 编译管线]] |
| [[topics/project-overview/index | 项目架构概览]] |
学习路径
→ 本主题是理解项目工程实践的核心环节,完成后可以更深入地阅读各子系统代码。