2026-02-11 19:40:26 +08:00
|
|
|
|
-- ==============================================
|
|
|
|
|
|
-- Extra2D 引擎库共享配置
|
|
|
|
|
|
-- 被主项目和示例共享使用
|
2026-02-15 12:36:36 +08:00
|
|
|
|
--
|
2026-02-17 00:06:31 +08:00
|
|
|
|
-- 窗口后端支持 SDL2 和 GLFW:
|
|
|
|
|
|
-- - Windows (MinGW) - 支持 SDL2 和 GLFW
|
|
|
|
|
|
-- - Linux - 支持 SDL2 和 GLFW
|
|
|
|
|
|
-- - macOS - 支持 SDL2 和 GLFW
|
|
|
|
|
|
-- - Nintendo Switch - 使用系统提供的后端
|
2026-02-11 19:40:26 +08:00
|
|
|
|
-- ==============================================
|
|
|
|
|
|
|
|
|
|
|
|
-- 获取当前平台
|
|
|
|
|
|
local function get_current_plat()
|
|
|
|
|
|
return get_config("plat") or os.host()
|
|
|
|
|
|
end
|
|
|
|
|
|
|
2026-02-17 00:06:31 +08:00
|
|
|
|
-- 获取窗口后端
|
|
|
|
|
|
local function get_window_backend()
|
|
|
|
|
|
return get_config("window_backend") or "sdl2"
|
|
|
|
|
|
end
|
|
|
|
|
|
|
2026-02-17 14:48:04 +08:00
|
|
|
|
-- 获取渲染后端
|
|
|
|
|
|
local function get_render_backend()
|
|
|
|
|
|
return get_config("render_backend") or "opengl"
|
|
|
|
|
|
end
|
|
|
|
|
|
|
2026-02-11 19:40:26 +08:00
|
|
|
|
-- 定义 Extra2D 引擎库目标
|
|
|
|
|
|
function define_extra2d_engine()
|
|
|
|
|
|
target("extra2d")
|
|
|
|
|
|
set_kind("static")
|
|
|
|
|
|
|
2026-02-17 14:48:04 +08:00
|
|
|
|
-- 引擎核心源文件(后端无关)
|
|
|
|
|
|
add_files("Extra2D/src/**.cpp|platform/backends/**.cpp|graphics/backends/**.cpp")
|
|
|
|
|
|
|
|
|
|
|
|
-- 渲染后端源文件
|
|
|
|
|
|
local render_backend = get_render_backend()
|
2026-02-18 17:15:49 +08:00
|
|
|
|
-- 图形后端工厂(始终编译)
|
|
|
|
|
|
add_files("Extra2D/src/graphics/backends/backend_factory.cpp")
|
2026-02-17 14:48:04 +08:00
|
|
|
|
if render_backend == "vulkan" then
|
|
|
|
|
|
add_files("Extra2D/src/graphics/backends/vulkan/*.cpp")
|
|
|
|
|
|
add_defines("E2D_BACKEND_VULKAN")
|
|
|
|
|
|
else
|
|
|
|
|
|
add_files("Extra2D/src/graphics/backends/opengl/*.cpp")
|
|
|
|
|
|
add_files("Extra2D/src/glad/glad.c")
|
|
|
|
|
|
add_defines("E2D_BACKEND_OPENGL")
|
|
|
|
|
|
end
|
2026-02-11 19:40:26 +08:00
|
|
|
|
|
2026-02-17 00:06:31 +08:00
|
|
|
|
-- 窗口后端源文件
|
|
|
|
|
|
local backend = get_window_backend()
|
|
|
|
|
|
if backend == "glfw" then
|
|
|
|
|
|
add_files("Extra2D/src/platform/backends/glfw/*.cpp")
|
|
|
|
|
|
add_defines("E2D_BACKEND_GLFW")
|
|
|
|
|
|
else
|
|
|
|
|
|
add_files("Extra2D/src/platform/backends/sdl2/*.cpp")
|
|
|
|
|
|
add_defines("E2D_BACKEND_SDL2")
|
|
|
|
|
|
end
|
2026-02-15 00:22:24 +08:00
|
|
|
|
|
2026-02-11 19:40:26 +08:00
|
|
|
|
-- 头文件路径
|
|
|
|
|
|
add_includedirs("Extra2D/include", {public = true})
|
|
|
|
|
|
add_includedirs("Extra2D/include/extra2d/platform", {public = true})
|
|
|
|
|
|
|
|
|
|
|
|
-- 平台配置
|
2026-02-15 12:36:36 +08:00
|
|
|
|
local plat = get_current_plat()
|
|
|
|
|
|
|
2026-02-19 17:36:37 +08:00
|
|
|
|
-- 通用依赖包
|
|
|
|
|
|
add_packages("glm", "nlohmann_json", {public = true})
|
|
|
|
|
|
|
|
|
|
|
|
-- simdutf 已包含在项目中
|
|
|
|
|
|
add_includedirs("Extra2D/include/simdutf", {public = true})
|
|
|
|
|
|
|
|
|
|
|
|
-- 压缩和加密库
|
|
|
|
|
|
add_packages("zlib", "lz4", "zstd", "openssl", {public = true})
|
|
|
|
|
|
|
2026-02-11 19:40:26 +08:00
|
|
|
|
if plat == "switch" then
|
2026-02-15 12:36:36 +08:00
|
|
|
|
-- Nintendo Switch 平台配置
|
2026-02-11 19:40:26 +08:00
|
|
|
|
local devkitPro = os.getenv("DEVKITPRO") or "C:/devkitPro"
|
|
|
|
|
|
add_includedirs(devkitPro .. "/portlibs/switch/include", {public = true})
|
|
|
|
|
|
add_linkdirs(devkitPro .. "/portlibs/switch/lib")
|
2026-02-17 00:06:31 +08:00
|
|
|
|
|
|
|
|
|
|
-- Switch 平台根据后端选择链接库
|
|
|
|
|
|
local backend = get_window_backend()
|
|
|
|
|
|
if backend == "glfw" then
|
|
|
|
|
|
-- GLFW 后端(使用 libnx 提供的 GLFW)
|
|
|
|
|
|
add_syslinks("glfw", "GLESv2", "EGL", "glapi", "drm_nouveau", "nx", "m",
|
|
|
|
|
|
{public = true})
|
|
|
|
|
|
else
|
|
|
|
|
|
-- SDL2 后端
|
|
|
|
|
|
add_syslinks("SDL2", "GLESv2", "EGL", "glapi", "drm_nouveau", "nx", "m",
|
|
|
|
|
|
{public = true})
|
|
|
|
|
|
end
|
2026-02-15 12:36:36 +08:00
|
|
|
|
elseif plat == "mingw" or plat == "windows" then
|
|
|
|
|
|
-- Windows (MinGW) 平台配置
|
2026-02-17 00:06:31 +08:00
|
|
|
|
local backend = get_window_backend()
|
|
|
|
|
|
if backend == "glfw" then
|
|
|
|
|
|
add_packages("glfw", {public = true})
|
|
|
|
|
|
else
|
|
|
|
|
|
add_packages("libsdl2", {public = true})
|
|
|
|
|
|
end
|
2026-02-15 12:36:36 +08:00
|
|
|
|
add_syslinks("opengl32", "glu32", "winmm", "imm32", "version", "setupapi",
|
|
|
|
|
|
{public = true})
|
|
|
|
|
|
elseif plat == "linux" then
|
|
|
|
|
|
-- Linux 平台配置
|
2026-02-17 00:06:31 +08:00
|
|
|
|
local backend = get_window_backend()
|
|
|
|
|
|
if backend == "glfw" then
|
|
|
|
|
|
add_packages("glfw", {public = true})
|
|
|
|
|
|
else
|
|
|
|
|
|
add_packages("libsdl2", {public = true})
|
|
|
|
|
|
end
|
2026-02-15 12:36:36 +08:00
|
|
|
|
add_syslinks("GL", "dl", "pthread", {public = true})
|
|
|
|
|
|
elseif plat == "macosx" then
|
|
|
|
|
|
-- macOS 平台配置
|
2026-02-17 00:06:31 +08:00
|
|
|
|
local backend = get_window_backend()
|
|
|
|
|
|
if backend == "glfw" then
|
|
|
|
|
|
add_packages("glfw", {public = true})
|
|
|
|
|
|
else
|
|
|
|
|
|
add_packages("libsdl2", {public = true})
|
|
|
|
|
|
end
|
2026-02-15 12:36:36 +08:00
|
|
|
|
add_frameworks("OpenGL", "Cocoa", "IOKit", "CoreVideo", {public = true})
|
2026-02-11 19:40:26 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- 编译器标志 (C 和 C++ 共用)
|
|
|
|
|
|
add_cxflags("-Wall", "-Wextra", {force = true})
|
|
|
|
|
|
add_cxflags("-Wno-unused-variable", "-Wno-unused-function", "-Wno-unused-parameter", {force = true})
|
|
|
|
|
|
add_cxflags("-Wno-strict-aliasing", "-Wno-implicit-fallthrough", {force = true})
|
|
|
|
|
|
add_cxflags("-Wno-missing-field-initializers", {force = true})
|
|
|
|
|
|
|
|
|
|
|
|
-- C++ 专用编译器标志
|
|
|
|
|
|
add_cxxflags("-Wno-deprecated-copy", "-Wno-class-memaccess", {force = true})
|
|
|
|
|
|
|
|
|
|
|
|
if is_mode("debug") then
|
|
|
|
|
|
add_defines("E2D_DEBUG", "_DEBUG", {public = true})
|
|
|
|
|
|
add_cxxflags("-O0", "-g", {force = true})
|
|
|
|
|
|
else
|
|
|
|
|
|
add_defines("NDEBUG", {public = true})
|
|
|
|
|
|
add_cxxflags("-O2", {force = true})
|
|
|
|
|
|
end
|
|
|
|
|
|
target_end()
|
|
|
|
|
|
end
|