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")) -- 检查 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")) -- 架构标志 local arch_flags = "-march=armv8-a+crc+crypto -mtune=cortex-a57 -fPIE" 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") local icon_file = path.join(os.projectdir(), "assets/icons/icon.bmp") if os.isfile(nacptool) and os.isfile(elf2nro) then os.vrunv(nacptool, {"--create", "Hello World", "Frostbite2D Team", "1.0.0", nacp_file}) local romfs = path.join(example_dir, "romfs") local icon_param = os.isfile(icon_file) and ("--icon=" .. icon_file) or "" if os.isdir(romfs) then os.vrunv(elf2nro, {elf_file, nro_file, "--nacp=" .. nacp_file, icon_param, "--romfsdir=" .. romfs}) else os.vrunv(elf2nro, {elf_file, nro_file, "--nacp=" .. nacp_file, icon_param}) end print("Generated NRO: " .. nro_file) end -- 复制 shaders 目录 local shaders_dir = path.join(os.projectdir(), "Game/shaders") local target_shaders_dir = path.join(output_dir, "shaders") if os.isdir(shaders_dir) then -- 确保目标目录存在 if not os.isdir(target_shaders_dir) then os.mkdir(target_shaders_dir) end -- 复制所有着色器文件 for _, file in ipairs(os.files(path.join(shaders_dir, "*.*"))) do local filename = path.filename(file) local target_file = path.join(target_shaders_dir, filename) os.cp(file, target_file) print("Copy shader: " .. filename) end end end) target_end()