84 lines
2.9 KiB
Lua
84 lines
2.9 KiB
Lua
-- ==============================================
|
||
-- Nintendo Switch 工具链定义
|
||
-- ==============================================
|
||
|
||
function define_switch_toolchain()
|
||
toolchain("switch")
|
||
set_kind("standalone")
|
||
set_description("Nintendo Switch devkitA64 toolchain")
|
||
|
||
-- 检查 DEVKITPRO 环境变量(Windows 上使用 C:/devkitPro)
|
||
local devkitPro = "C:/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 -mtp=soft -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("nx", "m")
|
||
end
|
||
|
||
-- 获取 devkitPro 路径
|
||
function get_devkitpro_path()
|
||
return "C:/devkitPro"
|
||
end
|
||
|
||
-- 获取 Switch 平台包含路径
|
||
function get_switch_includedirs()
|
||
local devkitPro = get_devkitpro_path()
|
||
return {
|
||
path.join(devkitPro, "libnx/include"),
|
||
path.join(devkitPro, "portlibs/switch/include"),
|
||
path.join(devkitPro, "portlibs/switch/include/SDL2")
|
||
}
|
||
end
|
||
|
||
-- 获取 Switch 平台库路径
|
||
function get_switch_linkdirs()
|
||
local devkitPro = get_devkitpro_path()
|
||
return {
|
||
path.join(devkitPro, "libnx/lib"),
|
||
path.join(devkitPro, "portlibs/switch/lib")
|
||
}
|
||
end
|
||
|
||
-- 获取 Switch 平台系统链接库
|
||
function get_switch_syslinks()
|
||
-- 注意:链接顺序很重要!被依赖的库必须放在后面
|
||
-- 依赖链:SDL2 -> EGL -> drm_nouveau
|
||
-- GLESv2 -> glapi -> drm_nouveau
|
||
return {
|
||
"SDL2_mixer", "SDL2",
|
||
"opusfile", "opus", "vorbisidec", "ogg",
|
||
"modplug", "mpg123", "FLAC",
|
||
"GLESv2",
|
||
"EGL",
|
||
"glapi",
|
||
"drm_nouveau"
|
||
}
|
||
end
|