diff options
| author | hachem <im@hachem.wtf> | 2026-08-25 15:06:40 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-25 15:06:40 +0200 |
| commit | 77cbb7bdd8ddbb8ff379aa43abfa10cd69239db5 (patch) | |
| tree | 3f0c8dfbed383fcaa775fc4b54bbca4f758e3bc5 /premake5.lua | |
| parent | 5fd7d073b7247de8e763e520cd0892bebab0415a (diff) | |
[refactor]: cleanup premake"
Diffstat (limited to 'premake5.lua')
| -rw-r--r-- | premake5.lua | 407 |
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 {} |
