本仓库是 LÖVE 2D 游戏框架的 Lua 5.4 移植分支,基于 LÖVE 12.0 (main) 修改,使其能够使用 Lua 5.4.7 替代默认的 LuaJIT / Lua 5.1 进行编译和运行。
LÖVE 官方默认使用 LuaJIT 作为脚本引擎,但 LuaJIT 长期停留在 Lua 5.1 语法级别。本仓库的目标是让 LÖVE 支持 Lua 5.4 的全部新特性,包括:
<const>/<close>变量属性//整数除法运算符- 原生位运算符(
&,|,~,<<,>>) math.type()区分 integer / float- 内置
utf8标准库 warn()警告系统math.maxinteger/math.mininteger- 整数与浮点数的严格类型区分
- 编译器: GCC 14.2.0 (MSYS2 MinGW-w64)
- 构建系统: CMake 3.31+
- Lua: 5.4.7 (
pacman -S mingw-w64-x86_64-lua) - 平台: Windows (MSYS2 MinGW64)
cmake -B build -S . -G "MinGW Makefiles" -DLOVE_JIT=OFF
cmake --build build -j$(nproc)相对于 LÖVE 12.0 官方 main 分支,本仓库做了以下修改:
- Lua 5.4 查找与兼容宏:将
find_package(Lua51)改为find_package(Lua 5.4),添加LUA_COMPAT_5_3编译宏以保留向后兼容 API - CPack 空目标修复:为
$<TARGET_FILE:${MEGA_SDL3}>添加if(MEGA_SDL3)守护,修复非 MEGA 构建时的 CMake 生成器表达式语法错误 - MinGW 链接器循环依赖修复:GCC 单遍链接器无法自动处理 LÖVE 静态库间的循环引用,显式列出所有 STATIC 库目标并重复两次来解决
- luahttps Windows 库链接:将
wininet、ws2_32、secur32的链接条件从if(MSVC)扩展为if(MSVC OR MINGW)
- lua_cpcall 兼容:
lua_cpcall在 Lua 5.2+ 中被移除,添加条件编译使用lua_pushcfunction+lua_pcall替代
- utf8 库预加载:Lua 5.4 内置
utf8标准库,在LUA_VERSION_NUM >= 504时跳过 LÖVE 自定义的luaopen_luautf8预加载
- 添加
/build/目录
构建产物通过了 8 项 Lua 5.4 特性验证测试(见 snake/ 目录中的贪吃蛇示例游戏):
✓ 1. <const> 变量属性
✓ 2. // 整数除法
✓ 3. 位运算符 &, |, <<
✓ 4. math.type() 类型区分
✓ 5. 内置 utf8 标准库
✓ 6. warn() 警告系统
✓ 7. math.maxinteger 常量
✓ 8. 整数/浮点严格区分
$ lovec --version
LOVE 12.0 (Bestest Friend)