In the age of bazels and deterministic builds, a man needs their reinvented wheels. Bootstrap your minimalistic projects based on ancient technologies at the speed of light:
$ git submodule add [email protected]:yuyoyuppe/premake_scaffold.git deps/premake_scaffoldand then your whole premake5.lua is:
ps = require 'deps.premake_scaffold'
workspace "awesome_project"
ps.generate()What you've got? Let's say you've had a project structure like this:
- awesome_project
|- src
|- shaders
|- a.glsl, b.glsl ...
|- engine
| - e1.cxx, e2.cxx ...
|- game
| - g1.cxx, g2.cxx ...
Now your engine and game could be compiled as 64-bit C++latest static libraries with sane-Wall -Werror warning settings, and shaders will use Vulkan SDK to compile in parallel. All build artefacts are placed in awesome_project/build folder by default. You also got new premake5 actions: format, clean and rebuild.
What about executable and dependencies, you say? Sure, create a description.lua in game folder with:
kind 'WindowedApp'
links {'engine'}And now you're done. As you see, you can specify any premake5 API call on a per-module basis using description.lua. Modules without a description.lua use defaults (kind = "ConsoleApp").
- Every software project needs its own philosophy
- Don't waste time
- Use a turn-key solution such as
vcpkg/pacman/brewas much as you can
vcpkg_packages: optional table of vcpkg packages to installsettings: optional table with the following contents:- paths table:
ClangFormatExecutable- absolute path toclang-formatexecutable if you don't have it in PATH
- module_defaults table:
kind- default project kind for all modules (default: "ConsoleApp")
- paths table:
Example with custom module defaults:
ps.generate(nil, {
module_defaults = {
kind = "StaticLib"
}
})- finalize custom types support (shaders)
- integrate scre
- integrate luafmt
- linux/macosx support
- profile configuration