add new build scripts

This commit is contained in:
Joseph Aquino 2025-12-30 19:40:07 -05:00
parent 4ac23c00c6
commit 4b416772fd
9 changed files with 473 additions and 2 deletions

66
build-flac.lua Normal file
View File

@ -0,0 +1,66 @@
local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
local ogg = require("build-ogg")
function m.generateproject(liboutdir, intdir)
project"flac"
language"C" -- c++ will mangle names and sfml wont build
kind"staticLib"
targetdir (liboutdir)
objdir(intdir)
warnings"Off"
ogg.link()
defines
{
"FLAC__NO_DLL",
"CPU_IS_BIG_ENDIAN=0",
"FLAC__HAS_OGG=1",
"PACKAGE_VERSION=\"\"",
}
filter"system:linux"
defines
{
"HAVE_LROUND",--fix error in lpc.c <Static declaration of 'lround' follows non-static declaration>
"HAVE_STDINT_H", --fix error in alloc.h <# error>
}
includedirs
{
path.join(scriptdir, "flac/include"),
path.join(scriptdir, "flac/src/libFLAC/include"),
}
files
{
path.join(scriptdir, "flac/src/libFLAC/**.c"),
}
removefiles
{
path.join(scriptdir, "flac/src/libFLAC/deduplication/**"),
}
filter"system:windows"
files
{
path.join(scriptdir, "flac/src/share/win_utf8_io/**.c"),
}
filter""
end
function m.link()
externalincludedirs
{
path.join(scriptdir, "flac/include"),
path.join(scriptdir, "flac/src/libFLAC/include"),
}
links {"flac"}
ogg.link()
end
return m

96
build-freetype.lua Normal file
View File

@ -0,0 +1,96 @@
local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
function m.generateproject(liboutdir, intdir)
project"freetype"
kind"staticLib"
language"C" -- c++ will mangle names and sfml wont build
targetdir (liboutdir)
objdir(intdir)
warnings"Off"
includedirs {path.join(scriptdir, "freetype/include")}
defines
{
"FT2_BUILD_LIBRARY",
"NDEBUG", -- have freetype always be in release mode
"FT_DEBUG_LEVEL_ERROR=0", -- fix linking errors <undefined reference...>
"FT_DEBUG_LEVEL_TRACE=0" -- fix linking errors <undefined reference...>
}
files
{
path.join(scriptdir, "freetype/src/autofit/autofit.c"),
path.join(scriptdir, "freetype/src/base/ftbase.c"),
path.join(scriptdir, "freetype/src/base/ftbbox.c"),
path.join(scriptdir, "freetype/src/base/ftbdf.c"),
path.join(scriptdir, "freetype/src/base/ftbitmap.c"),
path.join(scriptdir, "freetype/src/base/ftcid.c"),
path.join(scriptdir, "freetype/src/base/ftfstype.c"),
path.join(scriptdir, "freetype/src/base/ftgasp.c"),
path.join(scriptdir, "freetype/src/base/ftglyph.c"),
path.join(scriptdir, "freetype/src/base/ftgxval.c"),
path.join(scriptdir, "freetype/src/base/ftinit.c"),
path.join(scriptdir, "freetype/src/base/ftmm.c"),
path.join(scriptdir, "freetype/src/base/ftotval.c"),
path.join(scriptdir, "freetype/src/base/ftpatent.c"),
path.join(scriptdir, "freetype/src/base/ftpfr.c"),
path.join(scriptdir, "freetype/src/base/ftstroke.c"),
path.join(scriptdir, "freetype/src/base/ftsynth.c"),
path.join(scriptdir, "freetype/src/base/fttype1.c"),
path.join(scriptdir, "freetype/src/base/ftwinfnt.c"),
path.join(scriptdir, "freetype/src/bdf/bdf.c"),
path.join(scriptdir, "freetype/src/bzip2/ftbzip2.c"),
path.join(scriptdir, "freetype/src/cache/ftcache.c"),
path.join(scriptdir, "freetype/src/cff/cff.c"),
path.join(scriptdir, "freetype/src/cid/type1cid.c"),
path.join(scriptdir, "freetype/src/gzip/ftgzip.c"),
path.join(scriptdir, "freetype/src/lzw/ftlzw.c"),
path.join(scriptdir, "freetype/src/pcf/pcf.c"),
path.join(scriptdir, "freetype/src/pfr/pfr.c"),
path.join(scriptdir, "freetype/src/psaux/psaux.c"),
path.join(scriptdir, "freetype/src/pshinter/pshinter.c"),
path.join(scriptdir, "freetype/src/psnames/psnames.c"),
path.join(scriptdir, "freetype/src/raster/raster.c"),
path.join(scriptdir, "freetype/src/sdf/sdf.c"),
path.join(scriptdir, "freetype/src/sfnt/sfnt.c"),
path.join(scriptdir, "freetype/src/smooth/smooth.c"),
path.join(scriptdir, "freetype/src/svg/svg.c"),
path.join(scriptdir, "freetype/src/truetype/truetype.c"),
path.join(scriptdir, "freetype/src/type1/type1.c"),
path.join(scriptdir, "freetype/src/type42/type42.c"),
path.join(scriptdir, "freetype/src/winfonts/winfnt.c"),
path.join(scriptdir, "freetype/src/base/ftdebug.c"), --fix linking errors related to FT_THROW, et)c
}
filter "system:linux"
defines
{
"HAVE_FCNTL_H",--fix error in ftsystem.c <implicit declaration of function open>
"HAVE_UNISTD_H" --fix error in ftsystem.c <implicit declaration of function read>
}
filter"system:windows"
files
{
path.join(scriptdir, "freetype/builds/windows/ftsystem.c"),
path.join(scriptdir, "freetype/builds/windows/ftdebug.c"),
}
filter"system:linux"
files{path.join(scriptdir, "freetype/builds/unix/ftsystem.c")}
filter "configurations:Debug"
optimize"Speed"
filter""
end
function m.link()
externalincludedirs{path.join(scriptdir, "freetype/include")}
links {"freetype"}
end
return m

43
build-imgui-sfml.lua Normal file
View File

@ -0,0 +1,43 @@
local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
local sfml = require("build-sfml")
function m.generateproject(liboutdir, intdir)
project"imgui-sfml"
cppdialect"c++17"
kind"staticLib"
targetdir (liboutdir)
objdir(intdir)
warnings"Off"
defines{"IMGUI_USER_CONFIG=\"imconfig-SFML.h\""}
sfml.link()
includedirs
{
path.join(scriptdir, "imgui-sfml"),
path.join(scriptdir, "imgui"),
}
files
{
path.join(scriptdir, "imgui-sfml/imgui-SFML.cpp"),
}
end
function m.config() -- use this in build imgui instead of link() to avoid circular dependency
defines { "IMGUI_USER_CONFIG=\"imconfig-SFML.h\"" }
externalincludedirs { path.join(scriptdir, "imgui-sfml") }
sfml.link()
end
function m.link()
links {"imgui-sfml"}
m.config()
end
return m

36
build-imgui.lua Normal file
View File

@ -0,0 +1,36 @@
local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
local imguisfml = require("build-imgui-sfml")
function m.generateproject(liboutdir, intdir)
project"imgui"
cppdialect"c++17"
kind"staticLib"
targetdir (liboutdir)
objdir(intdir)
warnings"Off"
imguisfml.config() -- needed so imgui can be aware of imconfig-sfml.h
includedirs
{
path.join(scriptdir, "imgui"),
}
files
{
path.join(scriptdir, "imgui/imgui.cpp"),
path.join(scriptdir, "imgui/imgui_draw.cpp"),
path.join(scriptdir, "imgui/imgui_tables.cpp"),
path.join(scriptdir, "imgui/imgui_widgets.cpp"),
}
end
function m.link()
links {"imgui"}
externalincludedirs { path.join(scriptdir, "imgui") }
end
return m

28
build-ogg.lua Normal file
View File

@ -0,0 +1,28 @@
local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
function m.generateproject(liboutdir, intdir)
project"ogg"
language"C" -- c++ will mangle names and sfml wont build
kind"staticLib"
targetdir (liboutdir)
objdir(intdir)
warnings"Off"
includedirs {path.join(scriptdir, "ogg/include")}
files
{
path.join(scriptdir, "ogg/src/**.h"),
path.join(scriptdir, "ogg/src/**.c"),
}
end
function m.link()
links{"ogg"}
externalincludedirs{path.join(scriptdir, "ogg/include")}
end
return m

118
build-sfml.lua Normal file
View File

@ -0,0 +1,118 @@
local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
local ogg = require("build-ogg")
local flac = require("build-flac")
local vorbis = require("build-vorbis")
local freetype = require("build-freetype")
function m.generateproject(liboutdir, intdir)
project"sfml"
cppdialect"c++17"
kind "staticLib"
targetdir (liboutdir)
objdir(intdir)
warnings"Off"
freetype.link()
ogg.link()
flac.link()
vorbis.link()
defines
{
"SFML_STATIC",
"MA_NO_MP3",
"MA_NO_FLAC",
"MA_NO_ENCODING",
"MA_NO_RESOURCE_MANAGER",
"MA_NO_GENERATION",
"MA_USE_STDINT",
"STBI_FAILURE_USERMSG",
"SFML_IS_BIG_ENDIAN=0",
"FT2_BUILD_LIBRARY",
"FLAC__NO_DLL",
"OV_EXCLUDE_STATIC_CALLBACKS",
}
includedirs
{
path.join(scriptdir, "SFML/include"),
path.join(scriptdir, "SFML/src"),
path.join(scriptdir, "SFML/extlibs/headers/glad/include"),
path.join(scriptdir, "SFML/extlibs/headers/mingw"),
path.join(scriptdir, "SFML/extlibs/headers/miniaudio"),
path.join(scriptdir, "SFML/extlibs/headers/minimp3"),
path.join(scriptdir, "SFML/extlibs/headers/stb_image"),
path.join(scriptdir, "SFML/extlibs/headers/vulkan"),
}
files
{
path.join(scriptdir, "SFML/include/SFML/**.hpp"),
path.join(scriptdir, "SFML/include/SFML/**.inl"),
path.join(scriptdir, "SFML/src/SFML/**.hpp"),
path.join(scriptdir, "SFML/src/SFML/**.cpp"),
}
filter"system:windows"
removefiles
{
path.join(scriptdir, "SFML/src/SFML/System/Unix/**"),
path.join(scriptdir, "SFML/src/SFML/System/Andriod/**"),
path.join(scriptdir, "SFML/src/SFML/Window/Unix/**"),
path.join(scriptdir, "SFML/src/SFML/Network/Unix/**"),
path.join(scriptdir, "SFML/src/SFML/Window/OpenBSD/**"),
path.join(scriptdir, "SFML/src/SFML/Window/NetBSD/**"),
path.join(scriptdir, "SFML/src/SFML/Window/macOS/**"),
path.join(scriptdir, "SFML/src/SFML/Window/iOS/**"),
path.join(scriptdir, "SFML/src/SFML/Window/FreeBSD/**"),
path.join(scriptdir, "SFML/src/SFML/Window/DRM/**"),
path.join(scriptdir, "SFML/src/SFML/Window/Android/**"),
path.join(scriptdir, "SFML/src/SFML/System/Android/**"),
}
filter"system:linux"
removefiles
{
path.join(scriptdir, "SFML/src/SFML/System/Android/**"),
path.join(scriptdir, "SFML/src/SFML/System/Win32/**"),
path.join(scriptdir, "SFML/src/SFML/Network/Win32/**"),
path.join(scriptdir, "SFML/src/SFML/Window/Win32/**"),
path.join(scriptdir, "SFML/src/SFML/Window/OpenBSD/**"),
path.join(scriptdir, "SFML/src/SFML/Window/NetBSD/**"),
path.join(scriptdir, "SFML/src/SFML/Window/macOS/**"),
path.join(scriptdir, "SFML/src/SFML/Window/iOS/**"),
path.join(scriptdir, "SFML/src/SFML/Window/FreeBSD/**"),
path.join(scriptdir, "SFML/src/SFML/Window/DRM/**"),
path.join(scriptdir, "SFML/src/SFML/Window/Android/**"),
path.join(scriptdir, "SFML/src/SFML/Main/**"),
}
filter""
end
function m.link()
defines{"SFML_STATIC"}
externalincludedirs
{
path.join(scriptdir, "SFML/include"),
}
links{"sfml"}
freetype.link()
flac.link()
vorbis.link()
ogg.link()
filter"system:windows"
links{"legacy_stdio_definitions", "opengl32", "gdi32", "winmm", "ws2_32"}
filter"system:linux"
links{"Xi", "Xrandr", "Xcursor", "X11", "udev", "pthread", "OpenGL"}
end
return m

79
build-vorbis.lua Normal file
View File

@ -0,0 +1,79 @@
local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
local ogg = require("build-ogg")
function m.generateproject(liboutdir, intdir)
project"vorbis"
language"C" -- c++ will mangle names and sfml wont build
kind"staticLib"
targetdir (liboutdir)
objdir(intdir)
warnings"Off"
ogg.link()
includedirs
{
path.join(scriptdir, "vorbis/include"),
path.join(scriptdir, "vorbis/lib"),
}
files
{
path.join(scriptdir, "vorbis/lib/envelope.h"),
path.join(scriptdir, "vorbis/lib/lpc.h"),
path.join(scriptdir, "vorbis/lib/lsp.h"),
path.join(scriptdir, "vorbis/lib/codebook.h"),
path.join(scriptdir, "vorbis/lib/misc.h"),
path.join(scriptdir, "vorbis/lib/psy.h"),
path.join(scriptdir, "vorbis/lib/masking.h"),
path.join(scriptdir, "vorbis/lib/os.h"),
path.join(scriptdir, "vorbis/lib/mdct.h"),
path.join(scriptdir, "vorbis/lib/smallft.h"),
path.join(scriptdir, "vorbis/lib/highlevel.h"),
path.join(scriptdir, "vorbis/lib/registry.h"),
path.join(scriptdir, "vorbis/lib/scales.h"),
path.join(scriptdir, "vorbis/lib/window.h"),
path.join(scriptdir, "vorbis/lib/lookup.h"),
path.join(scriptdir, "vorbis/lib/lookup_data.h"),
path.join(scriptdir, "vorbis/lib/codec_internal.h"),
path.join(scriptdir, "vorbis/lib/backends.h"),
path.join(scriptdir, "vorbis/lib/bitrate.h"),
path.join(scriptdir, "vorbis/lib/mdct.c"),
path.join(scriptdir, "vorbis/lib/smallft.c"),
path.join(scriptdir, "vorbis/lib/block.c"),
path.join(scriptdir, "vorbis/lib/envelope.c"),
path.join(scriptdir, "vorbis/lib/window.c"),
path.join(scriptdir, "vorbis/lib/lsp.c"),
path.join(scriptdir, "vorbis/lib/lpc.c"),
path.join(scriptdir, "vorbis/lib/analysis.c"),
path.join(scriptdir, "vorbis/lib/synthesis.c"),
path.join(scriptdir, "vorbis/lib/psy.c"),
path.join(scriptdir, "vorbis/lib/info.c"),
path.join(scriptdir, "vorbis/lib/floor1.c"),
path.join(scriptdir, "vorbis/lib/floor0.c"),
path.join(scriptdir, "vorbis/lib/res0.c"),
path.join(scriptdir, "vorbis/lib/mapping0.c"),
path.join(scriptdir, "vorbis/lib/registry.c"),
path.join(scriptdir, "vorbis/lib/codebook.c"),
path.join(scriptdir, "vorbis/lib/sharedbook.c"),
path.join(scriptdir, "vorbis/lib/lookup.c"),
path.join(scriptdir, "vorbis/lib/bitrate.c"),
path.join(scriptdir, "vorbis/lib/vorbisfile.c"),
path.join(scriptdir, "vorbis/lib/vorbisenc.c"),
}
filter""
end
function m.link()
links {"vorbis"}
ogg.link()
externalincludedirs
{
path.join(scriptdir, "vorbis/include"),
}
end
return m

View File

@ -1,8 +1,10 @@
local m = {} local m = {}
local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT)) local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT))
local sfml = require("path/to/build-sfml") local sfml = require("path/to/build-sfml")
local imguisfml = require("path/to/build-imgui-sfml") local imguisfml = require("path/to/build-imgui-sfml")
local imgui = require("path/to/build-imgui")
function m.generateproject(bindir, intdir) function m.generateproject(bindir, intdir)
project "example" project "example"
@ -16,6 +18,7 @@ project "example"
debug(scriptdir) -- assuming scriptdir has your assets, config files, etc debug(scriptdir) -- assuming scriptdir has your assets, config files, etc
-- link order matters on GCC/Clang -- link order matters on GCC/Clang
imgui.link()
imguisfml.link() imguisfml.link()
sfml.link() sfml.link()
@ -52,4 +55,4 @@ project "example"
end end
return m return m

View File

@ -1,13 +1,14 @@
local ogg = require("path/to/ogg/build-ogg") local ogg = require("path/to/ogg/build-ogg")
local sfml = require("path/to/sfml/build-sfml") local sfml = require("path/to/sfml/build-sfml")
local flac = require("path/to/flac/build-flac") local flac = require("path/to/flac/build-flac")
local imgui = require("path/to/build-imgui")
local vorbis = require("path/to/vorbis/build-vorbis") local vorbis = require("path/to/vorbis/build-vorbis")
local freetype = require("path/to/freetype/build-freetype") local freetype = require("path/to/freetype/build-freetype")
local imguisfml = require("path/to/imgui-sfml/build-imgui-sfml") local imguisfml = require("path/to/imgui-sfml/build-imgui-sfml")
local exampleproject = require("path/to/project") local exampleproject = require("path/to/project")
-- assuming you are using the modules i provided with premake -- assuming you are using the modules I provided with premake
require ("ecc/ecc") require ("ecc/ecc")
require ("ninja/ninja") require ("ninja/ninja")
@ -44,6 +45,7 @@ workspace "Example"
bindir = "bin/" .. output_dir bindir = "bin/" .. output_dir
liboutdir = "lib/" .. output_dir liboutdir = "lib/" .. output_dir
-- have Dependencies in a different folder for Visual studio
group"Dependencies" group"Dependencies"
ogg.generateproject(liboutdir, intdir) ogg.generateproject(liboutdir, intdir)
sfml.generateproject(liboutdir, intdir) sfml.generateproject(liboutdir, intdir)