2026-02-21 02:34:51 +08:00
|
|
|
|
|
|
|
|
|
|
target("Frostbite2D")
|
|
|
|
|
|
set_kind("binary")
|
2026-02-22 14:28:20 +08:00
|
|
|
|
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"))
|
2026-02-21 02:34:51 +08:00
|
|
|
|
|
|
|
|
|
|
-- 检查 DEVKITPRO 环境变量(Windows 上使用 C:/devkitPro)
|
|
|
|
|
|
local devkitPro = os.getenv("DEVKITPRO") or "L:/Switch/devkitPro"
|
|
|
|
|
|
local devkitA64 = path.join(devkitPro, "devkitA64")
|
|
|
|
|
|
|
|
|
|
|
|
-- 设置工具链路径
|
|
|
|
|
|
set_toolset("cc", path.join(devkitA64, "bin/aarch64-none-elf-gcc.exe"))
|
|
|
|
|
|
set_toolset("cxx", path.join(devkitA64, "bin/aarch64-none-elf-g++.exe"))
|
|
|
|
|
|
set_toolset("ld", path.join(devkitA64, "bin/aarch64-none-elf-g++.exe"))
|
|
|
|
|
|
set_toolset("ar", path.join(devkitA64, "bin/aarch64-none-elf-gcc-ar.exe"))
|
|
|
|
|
|
set_toolset("strip", path.join(devkitA64, "bin/aarch64-none-elf-strip.exe"))
|
|
|
|
|
|
|
|
|
|
|
|
-- 架构标志
|
2026-02-21 03:34:48 +08:00
|
|
|
|
local arch_flags = "-march=armv8-a+crc+crypto -mtune=cortex-a57 -fPIE"
|
2026-02-21 02:34:51 +08:00
|
|
|
|
add_cxflags(arch_flags)
|
|
|
|
|
|
-- 使用 devkitPro 提供的 switch.specs 文件
|
|
|
|
|
|
add_ldflags("-specs=" .. path.join(devkitPro, "libnx/switch.specs"), "-g", arch_flags)
|
|
|
|
|
|
|
|
|
|
|
|
-- 定义 Switch 平台宏
|
|
|
|
|
|
add_defines("__SWITCH__", "__NX__", "MA_SWITCH", "PFD_SWITCH")
|
|
|
|
|
|
|
|
|
|
|
|
-- SimpleIni 配置:不使用 Windows API
|
|
|
|
|
|
add_defines("SI_NO_CONVERSION")
|
|
|
|
|
|
|
|
|
|
|
|
-- libnx 路径 - 必须在工具链级别添加
|
|
|
|
|
|
add_includedirs(path.join(devkitPro, "libnx/include"))
|
|
|
|
|
|
add_linkdirs(path.join(devkitPro, "libnx/lib"))
|
|
|
|
|
|
|
|
|
|
|
|
-- portlibs 路径(EGL + 桌面 OpenGL + SDL2)
|
|
|
|
|
|
add_includedirs(path.join(devkitPro, "portlibs/switch/include"))
|
|
|
|
|
|
add_includedirs(path.join(devkitPro, "portlibs/switch/include/SDL2"))
|
|
|
|
|
|
add_linkdirs(path.join(devkitPro, "portlibs/switch/lib"))
|
|
|
|
|
|
|
|
|
|
|
|
add_syslinks("SDL2_mixer", "SDL2", "opusfile", "opus", "vorbisidec", "ogg",
|
|
|
|
|
|
"modplug", "mpg123", "FLAC", "GLESv2", "EGL", "glapi", "drm_nouveau",
|
|
|
|
|
|
{public = true})
|
|
|
|
|
|
add_syslinks("nx", "m")
|
|
|
|
|
|
|
|
|
|
|
|
-- 构建后生成 NRO 文件
|
|
|
|
|
|
after_build(function (target)
|
|
|
|
|
|
local elf_file = target:targetfile()
|
|
|
|
|
|
local output_dir = path.directory(elf_file)
|
|
|
|
|
|
local nacp_file = path.join(output_dir, "hello_world.nacp")
|
|
|
|
|
|
local nro_file = path.join(output_dir, "hello_world.nro")
|
|
|
|
|
|
local nacptool = path.join(devkitPro, "tools/bin/nacptool.exe")
|
|
|
|
|
|
local elf2nro = path.join(devkitPro, "tools/bin/elf2nro.exe")
|
|
|
|
|
|
|
|
|
|
|
|
if os.isfile(nacptool) and os.isfile(elf2nro) then
|
|
|
|
|
|
os.vrunv(nacptool, {"--create", "Hello World", "Extra2D Team", "1.0.0", nacp_file})
|
|
|
|
|
|
local romfs = path.join(example_dir, "romfs")
|
|
|
|
|
|
if os.isdir(romfs) then
|
|
|
|
|
|
os.vrunv(elf2nro, {elf_file, nro_file, "--nacp=" .. nacp_file, "--romfsdir=" .. romfs})
|
|
|
|
|
|
else
|
|
|
|
|
|
os.vrunv(elf2nro, {elf_file, nro_file, "--nacp=" .. nacp_file})
|
|
|
|
|
|
end
|
|
|
|
|
|
print("Generated NRO: " .. nro_file)
|
|
|
|
|
|
end
|
|
|
|
|
|
end)
|
|
|
|
|
|
target_end()
|