diff --git a/build-flac.lua b/build-flac.lua new file mode 100644 index 0000000..b2e08e1 --- /dev/null +++ b/build-flac.lua @@ -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 + "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 diff --git a/build-freetype.lua b/build-freetype.lua new file mode 100644 index 0000000..ab9ea48 --- /dev/null +++ b/build-freetype.lua @@ -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 + "FT_DEBUG_LEVEL_TRACE=0" -- fix linking errors + } + + 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 + "HAVE_UNISTD_H" --fix error in ftsystem.c + } + + 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 \ No newline at end of file diff --git a/build-imgui-sfml.lua b/build-imgui-sfml.lua new file mode 100644 index 0000000..7f5e969 --- /dev/null +++ b/build-imgui-sfml.lua @@ -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 \ No newline at end of file diff --git a/build-imgui.lua b/build-imgui.lua new file mode 100644 index 0000000..d271cf7 --- /dev/null +++ b/build-imgui.lua @@ -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 \ No newline at end of file diff --git a/build-ogg.lua b/build-ogg.lua new file mode 100644 index 0000000..f4c2490 --- /dev/null +++ b/build-ogg.lua @@ -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 \ No newline at end of file diff --git a/build-sfml.lua b/build-sfml.lua new file mode 100644 index 0000000..5e4218d --- /dev/null +++ b/build-sfml.lua @@ -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 diff --git a/build-vorbis.lua b/build-vorbis.lua new file mode 100644 index 0000000..915df75 --- /dev/null +++ b/build-vorbis.lua @@ -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 \ No newline at end of file diff --git a/example-project.txt b/example-project.txt index 315659e..f44b9f7 100644 --- a/example-project.txt +++ b/example-project.txt @@ -1,8 +1,10 @@ local m = {} local scriptdir = path.getabsolute(path.getdirectory(_SCRIPT)) + local sfml = require("path/to/build-sfml") local imguisfml = require("path/to/build-imgui-sfml") +local imgui = require("path/to/build-imgui") function m.generateproject(bindir, intdir) project "example" @@ -16,6 +18,7 @@ project "example" debug(scriptdir) -- assuming scriptdir has your assets, config files, etc -- link order matters on GCC/Clang + imgui.link() imguisfml.link() sfml.link() @@ -52,4 +55,4 @@ project "example" end -return m \ No newline at end of file +return m diff --git a/example-workspace.txt b/example-workspace.txt index 8e4f7c8..a386231 100644 --- a/example-workspace.txt +++ b/example-workspace.txt @@ -1,13 +1,14 @@ local ogg = require("path/to/ogg/build-ogg") local sfml = require("path/to/sfml/build-sfml") local flac = require("path/to/flac/build-flac") +local imgui = require("path/to/build-imgui") local vorbis = require("path/to/vorbis/build-vorbis") local freetype = require("path/to/freetype/build-freetype") local imguisfml = require("path/to/imgui-sfml/build-imgui-sfml") 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 ("ninja/ninja") @@ -44,6 +45,7 @@ workspace "Example" bindir = "bin/" .. output_dir liboutdir = "lib/" .. output_dir + -- have Dependencies in a different folder for Visual studio group"Dependencies" ogg.generateproject(liboutdir, intdir) sfml.generateproject(liboutdir, intdir)