- 将stb_image替换为SDL_image以解决Switch平台兼容性问题 - 添加PVF资源包解析器和脚本解析器功能 - 修改各平台配置文件添加SDL_image依赖 - 更新纹理加载逻辑使用SDL_image API - 新增脚本解析相关类用于处理游戏脚本数据
70 lines
2.7 KiB
Lua
70 lines
2.7 KiB
Lua
-- MinGW 编译配置
|
|
set_toolchains("mingw")
|
|
|
|
add_requires("libsdl2", {configs = {shared = true}})
|
|
add_requires("libsdl2_image", {configs = {shared = true}})
|
|
add_requires("glm")
|
|
|
|
target("Frostbite2D")
|
|
set_kind("binary")
|
|
add_files(path.join(os.projectdir(), "Frostbite2D/src/**.cpp"))
|
|
add_files(path.join(os.projectdir(), "Frostbite2D/src/**.c"))
|
|
add_includedirs(path.join(os.projectdir(), "Frostbite2D/include"))
|
|
|
|
add_files(path.join(os.projectdir(), "Game/src/**.cpp"))
|
|
add_includedirs(path.join(os.projectdir(), "Game/include"))
|
|
|
|
add_packages("libsdl2")
|
|
add_packages("libsdl2_image")
|
|
add_packages("glm")
|
|
|
|
-- 复制 assets 目录到输出目录
|
|
after_build(function (target)
|
|
-- 复制 assets 目录
|
|
local assets_dir = path.join(os.projectdir(), "Game/assets")
|
|
local output_dir = target:targetdir()
|
|
local target_assets_dir = path.join(output_dir, "assets")
|
|
|
|
if os.isdir(assets_dir) then
|
|
os.rm(target_assets_dir)
|
|
os.cp(assets_dir, output_dir)
|
|
print("Copy assets directory: " .. assets_dir .. " -> " .. target_assets_dir)
|
|
end
|
|
|
|
-- 复制 SDL2 DLL (Windows 平台)
|
|
if is_plat("mingw") or is_plat("windows") then
|
|
local sdl2_lib = target:pkg("libsdl2")
|
|
if sdl2_lib then
|
|
local libfiles = sdl2_lib:get("libfiles")
|
|
if libfiles then
|
|
for _, libfile in ipairs(libfiles) do
|
|
-- 查找 DLL 文件
|
|
if libfile:endswith(".dll") then
|
|
local target_dll = path.join(output_dir, path.filename(libfile))
|
|
os.cp(libfile, target_dll)
|
|
print("Copy DLL: " .. path.filename(libfile))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 尝试从 xmake 包目录复制 SDL2.dll
|
|
local sdl2_dll_paths = {
|
|
path.join(os.getenv("USERPROFILE") or "", ".xmake/packages/l/libsdl2/**/bin/SDL2.dll"),
|
|
path.join(os.getenv("USERPROFILE") or "", ".xmake/packages/l/libsdl2/**/lib/SDL2.dll"),
|
|
}
|
|
|
|
for _, dll_pattern in ipairs(sdl2_dll_paths) do
|
|
local dll_files = os.files(dll_pattern)
|
|
for _, dll_file in ipairs(dll_files) do
|
|
local target_dll = path.join(output_dir, "SDL2.dll")
|
|
if not os.isfile(target_dll) then
|
|
os.cp(dll_file, target_dll)
|
|
print("Copy SDL2.dll from: " .. dll_file)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
target_end()
|