aboutsummaryrefslogtreecommitdiff
path: root/premake5.lua
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-25 15:06:40 +0200
committerhachem <im@hachem.wtf>2026-08-25 15:06:40 +0200
commit77cbb7bdd8ddbb8ff379aa43abfa10cd69239db5 (patch)
tree3f0c8dfbed383fcaa775fc4b54bbca4f758e3bc5 /premake5.lua
parent5fd7d073b7247de8e763e520cd0892bebab0415a (diff)
[refactor]: cleanup premake"
Diffstat (limited to 'premake5.lua')
-rw-r--r--premake5.lua407
1 files changed, 159 insertions, 248 deletions
diff --git a/premake5.lua b/premake5.lua
index 22e1a1d..d0678d6 100644
--- a/premake5.lua
+++ b/premake5.lua
@@ -1,102 +1,119 @@
--- premake5's built-in `clean` action is unported ("has not yet been ported"),
--- so provide our own: wipe the build output and the generated project files.
+output_dir = "%{cfg.buildcfg}-%{cfg.system}"
+include_dir = {
+ glm = "ext/glm",
+ glfw = "ext/glfw/include",
+ glad = "ext/glad/include",
+ imgui = "ext/imgui",
+ imguizmo = "ext/ImGuizmo",
+ imgui_backends = "ext/imgui/backends",
+ toml11 = "ext/toml11/include",
+ nlohmann = "ext/json/single_include",
+ stb = "ext/stb",
+}
+
+function setup_target()
+ targetdir ("bin/" .. output_dir)
+ objdir ("bin-int/" .. output_dir .. "/%{prj.name}")
+ staticruntime "On"
+end
+
+function setup_c_target()
+ setup_target()
+
+ filter "configurations:debug"
+ runtime "Debug"
+ symbols "On"
+ filter { "configurations:release", "configurations:dist" }
+ runtime "Release"
+ optimize "Speed"
+ filter "configurations:dist"
+ symbols "Off"
+ filter {}
+end
+
+function setup_cpp_target()
+ setup_target()
+
+ filter "configurations:debug"
+ runtime "Debug"
+ symbols "On"
+ filter { "configurations:release", "configurations:dist" }
+ runtime "Release"
+ optimize "Speed"
+ filter "configurations:dist"
+ symbols "Off"
+ filter {}
+end
+
newaction {
- trigger = "clean",
- description = "Remove build output (bin, bin-int) and generated project files",
+ trigger = "clean",
+ description = "Remove build output and generated project files",
+
execute = function()
os.rmdir("bin")
os.rmdir("bin-int")
os.remove("Makefile")
- for _, f in ipairs(os.matchfiles("*.make")) do os.remove(f) end
- -- runtime state (all gitignored; the app regenerates it on next run)
+
+ for _, file in ipairs(os.matchfiles("*.make")) do
+ os.remove(file)
+ end
+
os.rmdir("logs")
os.remove("config/settings.toml")
os.remove("imgui.ini")
- print("Cleaned: bin/, bin-int/, Makefile, *.make, logs/, config/settings.toml, imgui.ini")
+
+ print("Cleaned build output and generated project files")
end
}
-workspace "Donut"
+workspace "donut"
architecture "x64"
- startproject "Donut"
+ startproject "donut"
+ multiprocessorcompile "On"
- configurations
- {
- "Debug",
- "Release",
- "Dist"
+ configurations {
+ "debug",
+ "release",
+ "dist",
}
- multiprocessorcompile "On"
-
filter "system:windows"
defines "DONUT_WINDOWS"
filter "system:linux"
defines "DONUT_LINUX"
filter "system:macosx"
- defines "DONUT_MACOS"
- -- Build natively for Apple Silicon (was x86_64 under Rosetta). Native
- -- arm64 is required for clean Metal work and better performance.
architecture "ARM64"
+ defines "DONUT_MACOS"
filter {}
-outputdir = "%{cfg.buildcfg}-%{cfg.system}/%{prj.name}"
-
-IncludeDir = {}
-IncludeDir["glm"] = "ext/glm"
-IncludeDir["glfw"] = "ext/glfw/include"
-IncludeDir["glad"] = "ext/glad/include"
-IncludeDir["imgui"] = "ext/imgui"
-IncludeDir["imgui_backends"] = "ext/imgui/backends"
-IncludeDir["imguizmo"] = "ext/ImGuizmo"
-IncludeDir["toml11"] = "ext/toml11/include"
-IncludeDir["nlohmann"] = "ext/json/single_include"
-IncludeDir["stb"] = "ext/stb"
-
-group "Dependencies"
-
-project "GLAD"
- kind "StaticLib"
- language "C"
- staticruntime "on"
- targetdir ("bin/" .. outputdir)
- objdir ("bin-int/" .. outputdir)
-
- files
- {
- "ext/glad/include/glad/glad.h",
- "ext/glad/include/KHR/khrplatform.h",
-
- "ext/glad/src/glad.c"
- }
+group "dependencies"
+project "glad"
+ kind "StaticLib"
+ language "C"
+ warnings "Off"
- includedirs
- {
- "ext/glad/include"
- }
+ setup_c_target()
- filter "system:windows"
- systemversion "latest"
+ files {
+ "ext/glad/include/glad/glad.h",
+ "ext/glad/include/KHR/khrplatform.h",
+ "ext/glad/src/glad.c",
+ }
- filter "configurations:Debug"
- runtime "Debug"
- symbols "on"
+ includedirs "%{include_dir.glad}"
- filter "configurations:Release"
- runtime "Release"
- optimize "on"
+ filter "system:windows"
+ systemversion "latest"
+ filter {}
-project "GLFW"
+project "glfw"
kind "StaticLib"
language "C"
- staticruntime "on"
- warnings "off"
+ warnings "Off"
- targetdir ("bin/" .. outputdir)
- objdir ("bin-int/" .. outputdir)
+ setup_c_target()
- files
- {
+ files {
"ext/glfw/src/context.c",
"ext/glfw/src/init.c",
"ext/glfw/src/input.c",
@@ -119,10 +136,8 @@ project "GLFW"
filter "system:linux"
pic "On"
- systemversion "latest"
- files
- {
+ files {
"ext/glfw/src/x11_init.c",
"ext/glfw/src/x11_monitor.c",
"ext/glfw/src/x11_platform.h",
@@ -146,19 +161,15 @@ project "GLFW"
"ext/glfw/src/osmesa_context.c",
"ext/glfw/src/linux_joystick.c",
- "ext/glfw/src/linux_joystick.h"
+ "ext/glfw/src/linux_joystick.h",
}
- defines
- {
- "_GLFW_X11"
- }
+ defines "_GLFW_X11"
filter "system:macosx"
pic "On"
- files
- {
+ files {
"ext/glfw/src/cocoa_init.m",
"ext/glfw/src/cocoa_joystick.h",
"ext/glfw/src/cocoa_joystick.m",
@@ -174,19 +185,15 @@ project "GLFW"
"ext/glfw/src/posix_module.c",
"ext/glfw/src/posix_thread.c",
- "ext/glfw/src/posix_thread.h"
+ "ext/glfw/src/posix_thread.h",
}
- defines
- {
- "_GLFW_COCOA"
- }
+ defines "_GLFW_COCOA"
filter "system:windows"
systemversion "latest"
- files
- {
+ files {
"ext/glfw/src/win32_init.c",
"ext/glfw/src/win32_joystick.c",
"ext/glfw/src/win32_joystick.h",
@@ -200,150 +207,82 @@ project "GLFW"
"ext/glfw/src/win32_window.c",
"ext/glfw/src/wgl_context.c",
"ext/glfw/src/egl_context.c",
- "ext/glfw/src/osmesa_context.c"
+ "ext/glfw/src/osmesa_context.c",
}
- defines
- {
+ defines {
"_GLFW_WIN32",
"_CRT_SECURE_NO_WARNINGS",
}
-
- filter "configurations:Debug"
- runtime "Debug"
- symbols "on"
-
- filter { "system:windows", "configurations:Debug-AS" }
- runtime "Debug"
- symbols "on"
- sanitize { "Address" }
- runtimechecks "Off"
- incrementallink "Off"
-
- filter "configurations:Release"
- runtime "Release"
- optimize "speed"
-
- filter "configurations:Dist"
- runtime "Release"
- optimize "speed"
- symbols "off"
-
-project "ImGui"
+ filter {}
+project "imgui"
kind "StaticLib"
language "C++"
- staticruntime "on"
+ cppdialect "C++17"
- targetdir ("bin/" .. outputdir)
- objdir ("bin-int/" .. outputdir)
+ setup_cpp_target()
- files
- {
+ files {
"ext/imgui/imgui.cpp",
"ext/imgui/imgui_draw.cpp",
"ext/imgui/imgui_tables.cpp",
"ext/imgui/imgui_widgets.cpp",
"ext/imgui/imgui_demo.cpp",
- -- the platform/renderer backends live here, not in the app, so they aren't
- -- held to the app's -Wall -Wextra -Werror -pedantic.
"ext/imgui/backends/imgui_impl_glfw.cpp",
- "ext/imgui/backends/imgui_impl_opengl3.cpp"
+ "ext/imgui/backends/imgui_impl_opengl3.cpp",
}
- includedirs
- {
- "%{IncludeDir.imgui}",
- "%{IncludeDir.glfw}"
+ includedirs {
+ "%{include_dir.imgui}",
+ "%{include_dir.glfw}",
}
- filter "system:windows"
- systemversion "latest"
- cppdialect "C++17"
-
filter "system:linux"
pic "On"
- systemversion "latest"
- cppdialect "C++17"
-
filter "system:macosx"
- files { "ext/imgui/backends/imgui_impl_vulkan.cpp" } -- Vulkan via MoltenVK, macOS only
- externalincludedirs { "/opt/homebrew/include" }
-
- filter "configurations:Debug"
- runtime "Debug"
- symbols "on"
-
- filter "configurations:Release"
- runtime "Release"
- optimize "on"
-
- filter "configurations:Dist"
- runtime "Release"
- optimize "on"
- symbols "off"
-
-project "ImGuizmo"
+ files "ext/imgui/backends/imgui_impl_vulkan.cpp"
+ externalincludedirs "/opt/homebrew/include"
+ filter "system:windows"
+ systemversion "latest"
+ filter {}
+project "imguizmo"
kind "StaticLib"
language "C++"
- staticruntime "on"
+ cppdialect "C++17"
- targetdir ("bin/" .. outputdir)
- objdir ("bin-int/" .. outputdir)
+ setup_cpp_target()
- files
- {
+ files {
"ext/ImGuizmo/ImGuizmo.cpp",
- "ext/ImGuizmo/ImGuizmo.h"
+ "ext/ImGuizmo/ImGuizmo.h",
}
- includedirs
- {
- "%{IncludeDir.imgui}",
- "%{IncludeDir.imguizmo}"
+ includedirs {
+ "%{include_dir.imgui}",
+ "%{include_dir.imguizmo}",
}
- filter "system:windows"
- systemversion "latest"
- cppdialect "C++17"
-
filter "system:linux"
pic "On"
+ filter "system:windows"
systemversion "latest"
- cppdialect "C++17"
-
- filter "configurations:Debug"
- runtime "Debug"
- symbols "on"
-
- filter "configurations:Release"
- runtime "Release"
- optimize "on"
-
- filter "configurations:Dist"
- runtime "Release"
- optimize "on"
- symbols "off"
-
+ filter {}
group ""
-project "Donut"
+project "donut"
kind "ConsoleApp"
language "C++"
cppdialect "C++20"
- staticruntime "on"
- targetdir ("bin/" .. outputdir)
- objdir ("bin-int/" .. outputdir)
+ setup_target()
- defines
- {
+ defines {
"_CRT_SECURE_NO_WARNINGS",
- "GLFW_INCLUDE_NONE"
+ "GLFW_INCLUDE_NONE",
}
- files
- {
+ files {
"ext/glm/glm/**.hpp",
"ext/glm/glm/**.inl",
@@ -352,97 +291,69 @@ project "Donut"
"assets/fonts/inter/static/Inter_18pt-Regular.ttf",
"assets/fonts/inter/static/Inter_18pt-Bold.ttf",
- "assets/fonts/inter/static/Inter_18pt-Light.ttf"
+ "assets/fonts/inter/static/Inter_18pt-Light.ttf",
}
- includedirs
- {
- "src"
+ includedirs "src"
+
+ externalincludedirs {
+ "%{include_dir.glm}",
+ "%{include_dir.glfw}",
+ "%{include_dir.glad}",
+ "%{include_dir.imgui}",
+ "%{include_dir.imgui_backends}",
+ "%{include_dir.imguizmo}",
+ "%{include_dir.toml11}",
+ "%{include_dir.nlohmann}",
+ "%{include_dir.stb}",
}
- -- vendored deps are external: -isystem so their warnings don't trip our
- -- -Werror, and we aren't on the hook for making glm/imgui/toml11 -pedantic.
- externalincludedirs
- {
- "%{IncludeDir.glm}",
- "%{IncludeDir.glfw}",
- "%{IncludeDir.glad}",
- "%{IncludeDir.imgui}",
- "%{IncludeDir.imgui_backends}",
- "%{IncludeDir.imguizmo}",
- "%{IncludeDir.toml11}",
- "%{IncludeDir.nlohmann}",
- "%{IncludeDir.stb}",
+ links {
+ "glfw",
+ "glad",
+ "imgui",
+ "imguizmo",
}
- externalwarnings "Off"
- -- our own code is held to strict warnings (clang/gcc only; MSVC uses /W).
filter { "system:macosx or system:linux" }
- buildoptions { "-Wall", "-Wextra", "-Werror", "-pedantic" }
- filter {}
+ buildoptions {
+ "-Wall",
+ "-Wextra",
+ "-Werror",
+ "-pedantic",
+ }
- -- Vulkan create-info structs use aggregate init (VkFoo{ TYPE }); pNext etc.
- -- are zero-initialised, so -Wmissing-field-initializers is just noise there.
+ filter {}
filter { "system:macosx or system:linux", "files:src/platform/vulkan/**" }
- buildoptions { "-Wno-missing-field-initializers" }
+ buildoptions "-Wno-missing-field-initializers"
filter {}
- links
- {
- "GLFW",
- "GLAD",
- "ImGui",
- "ImGuizmo"
- }
-
filter "system:windows"
systemversion "latest"
-
- links
- {
- "opengl32.lib",
- }
+ links "opengl32.lib"
filter "system:macosx"
- -- Objective-C++ (Metal) sources compile only on macOS.
- files
- {
- "src/**.mm"
- }
+ files "src/**.mm"
- -- Compile the Slang shaders to assets/shaders/generated/ before building.
- -- Requires tools/slang (tools/fetch-slang.sh) and spirv-cross on PATH.
- prebuildcommands
- {
- 'bash "%{wks.location}/tools/compile-shaders.sh"'
- }
+ prebuildcommands 'bash "%{wks.location}/tools/compile-shaders.sh"'
- -- Vulkan (via MoltenVK) from Homebrew; see tools/vulkan-env.sh for runtime.
- externalincludedirs { "/opt/homebrew/include" }
- libdirs { "/opt/homebrew/lib" }
+ externalincludedirs "/opt/homebrew/include"
+ libdirs "/opt/homebrew/lib"
- links
- {
+ links {
"Cocoa.framework",
"IOKit.framework",
"CoreFoundation.framework",
"QuartzCore.framework",
"Metal.framework",
"Foundation.framework",
- "vulkan"
+ "vulkan",
}
- filter "configurations:Debug"
+ filter "configurations:debug"
defines "DONUT_DEBUG"
- runtime "Debug"
- symbols "on"
-
- filter "configurations:Release"
+ filter "configurations:release"
defines "DONUT_RELEASE"
- runtime "Release"
- optimize "on"
-
- filter "configurations:Dist"
+ filter "configurations:dist"
defines "DONUT_DIST"
- runtime "Release"
- optimize "on"
+ filter {}