Skip to content

源码兼容与适配 (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.hstdlib.hstring.h 的最小声明,避免 Clang 内建函数与 GBA 工具链声明冲突
  • WASM 专用文件wasm_field_effect_scripts.c):唯一一个 WASM 专属源文件,用 C 结构体重写 GBA 汇编实现的场景特效脚本表

关键数字:

  • 1 个 WASM 专用源文件(wasm_field_effect_scripts.c
  • 3 个 垫片头文件(stdio.hstdlib.hstring.h
  • 30 处 #if WASM 条件编译守卫
  • 原始 GBA 构建路径(make / make modern完全不受影响

前置知识

知识点说明
C 预处理器理解 #if#ifdef#define 条件编译机制
C 标准库函数了解 memcpysprintfabs 等常用函数的声明
[[topics/wasm-compilation/indexWASM 编译管线]]
[[topics/project-overview/index项目架构概览]]

学习路径

→ 本主题是理解项目工程实践的核心环节,完成后可以更深入地阅读各子系统代码。