mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-05-28 17:16:29 +03:00
Now is almost feature complete comparing to the old Makefile. iOS support is pending, and may be also Android support. Moved options to "newoption", added libsndfile support and static backend compilation.
448 lines
12 KiB
Lua
448 lines
12 KiB
Lua
newoption { trigger = "with-libsndfile", description = "Build with libsndfile support." }
|
|
newoption { trigger = "with-static-freetype", description = "Build freetype as a static library." }
|
|
newoption { trigger = "with-eepp-static", description = "Force to build the demos and tests with eepp compiled statically" }
|
|
newoption { trigger = "with-static-backend", description = "It will try to compile the library with a static backend (only for gcc and mingw).\n\t\t\t\tThe backend should be placed in libs/your_platform/libYourBackend.a" }
|
|
newoption {
|
|
trigger = "with-backend",
|
|
description = "Select the backend to use for window and input handling.\n\t\t\tIf no backend is selected or if the selected is not installed the script will search for a backend present in the system, and will use it.\n\t\t\tIt's possible to build with more than one backend support.\n\t\t\t\tUse comma to separate the backends to build ( you can't mix SDL and SDL2, you'll get random crashes ).\n\t\t\t\tExample: --with-backend=SDL2,SFML2",
|
|
allowed = {
|
|
{ "SDL", "SDL 1.2" },
|
|
{ "SDL2", "SDL2 (default and recommended)" },
|
|
{ "allegro5", "Allegro 5" },
|
|
{ "SFML", "SFML2 ( SFML 1.6 not supported )" }
|
|
}
|
|
}
|
|
|
|
link_list = { }
|
|
os_links = { }
|
|
backends = { }
|
|
static_backends = { }
|
|
backend_selected = false
|
|
|
|
function table_contains( tb, element )
|
|
for _, value in pairs( tb ) do
|
|
if value == element then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function args_contains( element )
|
|
return table_contains( _ARGS, element )
|
|
end
|
|
|
|
function print_table( table_ref )
|
|
for _, value in pairs( table_ref ) do
|
|
print(value)
|
|
end
|
|
end
|
|
|
|
function multiple_insert( parent_table, insert_table )
|
|
for _, value in pairs( insert_table ) do
|
|
table.insert( parent_table, value )
|
|
end
|
|
end
|
|
|
|
function build_base_configuration( package_name )
|
|
includedirs { "src/eepp/helper/zlib" }
|
|
|
|
configuration "debug"
|
|
defines { "DEBUG" }
|
|
flags { "Symbols" }
|
|
buildoptions{ "-Wall", "-std=gnu99" }
|
|
targetname ( package_name .. "-debug" )
|
|
|
|
configuration "release"
|
|
defines { "NDEBUG" }
|
|
flags { "Optimize" }
|
|
buildoptions{ "-Wall", "-std=gnu99" }
|
|
targetname ( package_name )
|
|
end
|
|
|
|
function build_base_cpp_configuration( package_name )
|
|
configuration "debug"
|
|
defines { "DEBUG" }
|
|
flags { "Symbols" }
|
|
buildoptions{ "-Wall" }
|
|
targetname ( package_name .. "-debug" )
|
|
|
|
configuration "release"
|
|
defines { "NDEBUG" }
|
|
flags { "Optimize" }
|
|
buildoptions{ "-Wall" }
|
|
targetname ( package_name )
|
|
end
|
|
|
|
function build_link_configuration( package_name )
|
|
links { link_list }
|
|
|
|
if package_name ~= "eepp" and package_name ~= "eepp-static" then
|
|
if not _OPTIONS["with-eepp-static"] then
|
|
links { "eepp-shared" }
|
|
else
|
|
links { "eepp-static" }
|
|
add_static_links()
|
|
end
|
|
|
|
if os.is("windows") then
|
|
linkoptions { "-mwindows" }
|
|
end
|
|
end
|
|
|
|
configuration "debug"
|
|
defines { "DEBUG", "EE_DEBUG", "EE_MEMORY_MANAGER" }
|
|
|
|
if package_name == "eepp" then
|
|
defines { "EE_DYNAMIC", "EE_EXPORTS" }
|
|
end
|
|
|
|
flags { "Symbols" }
|
|
buildoptions{ "-Wall -Wno-long-long" }
|
|
targetname ( package_name .. "-debug" )
|
|
|
|
configuration "release"
|
|
defines { "NDEBUG" }
|
|
|
|
if package_name == "eepp" then
|
|
defines { "EE_DYNAMIC", "EE_EXPORTS" }
|
|
end
|
|
|
|
flags { "Optimize" }
|
|
buildoptions { "-fno-strict-aliasing -O3 -s -ffast-math" }
|
|
targetname ( package_name )
|
|
end
|
|
|
|
function generate_os_links()
|
|
if os.is("linux") then
|
|
multiple_insert( os_links, { "rt", "pthread", "X11", "openal", "GL", "Xcursor" } )
|
|
elseif os.is("windows") then
|
|
multiple_insert( os_links, { "OpenAL32", "opengl32", "glu32", "gdi32" } )
|
|
|
|
if ( _ACTION == "gmake" ) then
|
|
table.insert( os_links, "mingw32" )
|
|
end
|
|
elseif os.is("macosx") then
|
|
multiple_insert( os_links, { "OpenGL.framework", "OpenAL.framework", "CoreFoundation.framework", "AGL.framework" } )
|
|
elseif os.is("freebsd") then
|
|
multiple_insert( os_links, { "rt", "pthread", "X11", "openal", "GL", "Xcursor" } )
|
|
elseif os.is("haiku") then
|
|
multiple_insert( os_links, { "openal", "GL" } )
|
|
end
|
|
end
|
|
|
|
function parse_args()
|
|
if args_contains( "GLES2" ) then
|
|
defines { "EE_GLES2", "SOIL_GLES2" }
|
|
end
|
|
|
|
if args_contains( "GLES1" ) then
|
|
defines { "EE_GLES1", "SOIL_GLES1" }
|
|
end
|
|
end
|
|
|
|
function add_static_links()
|
|
-- The linking order DOES matter
|
|
-- Expose the symbols that need one static library AFTER adding that static lib
|
|
|
|
-- Add static backends
|
|
if next(static_backends) ~= nil then
|
|
for _, value in pairs( static_backends ) do
|
|
linkoptions { value }
|
|
end
|
|
end
|
|
|
|
links { "haikuttf-static" }
|
|
|
|
if _OPTIONS["with-static-freetype"] or not os.findlib("freetype") then
|
|
links { "freetype-static" }
|
|
end
|
|
|
|
links { "SOIL2-static",
|
|
"chipmunk-static",
|
|
"glew-static",
|
|
"libzip-static",
|
|
"stb_vorbis-static",
|
|
"jpeg-compressor-static",
|
|
"zlib-static"
|
|
}
|
|
end
|
|
|
|
function can_add_static_backend( name )
|
|
if _OPTIONS["with-static-backend"] then
|
|
local path = "libs/linux/lib" .. name .. ".a"
|
|
return os.isfile(path)
|
|
end
|
|
end
|
|
|
|
function insert_static_backend( name )
|
|
table.insert( static_backends, path.getrelative( "libs/" .. os.get(), "./" ) .. "/libs/linux/lib" .. name .. ".a" )
|
|
end
|
|
|
|
function add_sdl2()
|
|
files { "src/eepp/window/backend/SDL2/*.cpp" }
|
|
defines { "EE_BACKEND_SDL_ACTIVE", "EE_SDL_VERSION_2" }
|
|
|
|
if not can_add_static_backend("SDL2") then
|
|
table.insert( link_list, "SDL2" )
|
|
else
|
|
insert_static_backend( "SDL2" )
|
|
end
|
|
end
|
|
|
|
function add_sdl()
|
|
--- SDL is LGPL. It can't be build as static library
|
|
table.insert( link_list, "SDL" )
|
|
files { "src/eepp/window/backend/SDL/*.cpp" }
|
|
defines { "EE_BACKEND_SDL_ACTIVE", "EE_SDL_VERSION_1_2" }
|
|
end
|
|
|
|
function add_allegro5()
|
|
files { "src/eepp/window/backend/allegro5/*.cpp" }
|
|
defines { "EE_BACKEND_ALLEGRO_ACTIVE" }
|
|
|
|
if not can_add_static_backend("allegro5") then
|
|
table.insert( link_list, "allegro5" )
|
|
else
|
|
insert_static_backend( "allegro5" )
|
|
end
|
|
end
|
|
|
|
function add_sfml()
|
|
files { "src/eepp/window/backend/SFML/*.cpp" }
|
|
defines { "EE_BACKEND_SFML_ACTIVE" }
|
|
|
|
if not can_add_static_backend("SFML") then
|
|
table.insert( link_list, "SFML" )
|
|
else
|
|
insert_static_backend( "SFML" )
|
|
end
|
|
end
|
|
|
|
function backend_is( name )
|
|
if not _OPTIONS["with-backend"] then
|
|
_OPTIONS["with-backend"] = "SDL2"
|
|
end
|
|
|
|
if next(backends) == nil then
|
|
backends = string.explode(_OPTIONS["with-backend"],",")
|
|
end
|
|
|
|
local backend_sel = table_contains( backends, name )
|
|
|
|
local ret_val = os.findlib( name ) and backend_sel
|
|
|
|
if ret_val then
|
|
backend_selected = true
|
|
end
|
|
|
|
return ret_val
|
|
end
|
|
|
|
function select_backend()
|
|
if backend_is( "SDL2" ) then
|
|
add_sdl2()
|
|
end
|
|
|
|
if backend_is( "SDL" ) then
|
|
add_sdl()
|
|
end
|
|
|
|
if backend_is( "allegro5" ) then
|
|
add_allegro5()
|
|
end
|
|
|
|
if backend_is( "SFML" ) then
|
|
add_sfml()
|
|
end
|
|
|
|
-- If the selected backend is not present, try to find one present
|
|
if not backend_selected then
|
|
if os.findlib("SDL") then
|
|
add_sdl()
|
|
elseif os.findlib("SDL2") then
|
|
add_sdl2()
|
|
elseif os.findlib("allegro5") then
|
|
add_allegro5()
|
|
elseif os.findlib("SFML") then
|
|
add_sfml()
|
|
end
|
|
end
|
|
end
|
|
|
|
function build_eepp( build_name )
|
|
includedirs { "include", "src", "src/eepp/helper/freetype2/include", "src/eepp/helper/zlib" }
|
|
|
|
add_static_links()
|
|
|
|
if os.is("windows") then
|
|
files { "src/eepp/system/platform/win/*.cpp" }
|
|
else
|
|
files { "src/eepp/system/platform/posix/*.cpp" }
|
|
end
|
|
|
|
files { "src/eepp/base/*.cpp",
|
|
"src/eepp/math/*.cpp",
|
|
"src/eepp/system/*.cpp",
|
|
"src/eepp/audio/*.cpp",
|
|
"src/eepp/graphics/*.cpp",
|
|
"src/eepp/graphics/renderer/*.cpp",
|
|
"src/eepp/window/*.cpp",
|
|
"src/eepp/window/platform/null/*.cpp",
|
|
"src/eepp/ui/*.cpp",
|
|
"src/eepp/ui/tools/*.cpp",
|
|
"src/eepp/physics/*.cpp",
|
|
"src/eepp/physics/constraints/*.cpp",
|
|
"src/eepp/gaming/*.cpp",
|
|
"src/eepp/gaming/mapeditor/*.cpp"
|
|
}
|
|
|
|
select_backend()
|
|
|
|
if not _OPTIONS["with-static-freetype"] and os.findlib("freetype") then
|
|
table.insert( link_list, "freetype" )
|
|
end
|
|
|
|
if _OPTIONS["with-libsndfile"] then
|
|
defines { "EE_LIBSNDFILE_ENABLED" }
|
|
|
|
if os.is("windows") then
|
|
table.insert( link_list, "libsndfile-1" )
|
|
else
|
|
table.insert( link_list, "sndfile" )
|
|
end
|
|
end
|
|
|
|
multiple_insert( link_list, os_links )
|
|
|
|
links { link_list }
|
|
|
|
configuration "windows"
|
|
files { "src/eepp/window/platform/win/*.cpp" }
|
|
linkoptions { "-mwindows" }
|
|
|
|
if _ACTION == "gmake" then
|
|
linkoptions { "-static-libgcc" } --, "-static-libstdc++" -- this should work, but it's not working with my mingw installation
|
|
end
|
|
|
|
configuration "linux"
|
|
files { "src/eepp/window/platform/x11/*.cpp" }
|
|
|
|
configuration "macosx"
|
|
files { "src/eepp/window/platform/osx/*.cpp" }
|
|
|
|
build_link_configuration( build_name )
|
|
end
|
|
|
|
solution "eepp"
|
|
location("./make/" .. os.get() .. "/")
|
|
targetdir("./")
|
|
configurations { "debug", "release" }
|
|
objdir("obj/" .. os.get() .. "/premake4/")
|
|
|
|
generate_os_links()
|
|
parse_args()
|
|
|
|
project "SOIL2-static"
|
|
kind "StaticLib"
|
|
language "C"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/SOIL2/src/SOIL2/*.c" }
|
|
includedirs { "include/eepp/helper/SOIL2" }
|
|
build_base_configuration( "SOIL2" )
|
|
|
|
project "glew-static"
|
|
kind "StaticLib"
|
|
language "C"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/glew/*.c" }
|
|
includedirs { "include/eepp/helper/glew" }
|
|
build_base_configuration( "glew" )
|
|
|
|
project "zlib-static"
|
|
kind "StaticLib"
|
|
language "C"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/zlib/*.c", "src/eepp/helper/libzip/*.c" }
|
|
build_base_configuration( "zlib" )
|
|
|
|
project "libzip-static"
|
|
kind "StaticLib"
|
|
language "C"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/libzip/*.c" }
|
|
includedirs { "src/eepp/helper/zlib" }
|
|
build_base_configuration( "libzip" )
|
|
|
|
project "freetype-static"
|
|
kind "StaticLib"
|
|
language "C"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
defines { "FT2_BUILD_LIBRARY" }
|
|
files { "src/eepp/helper/freetype2/src/**.c" }
|
|
includedirs { "src/eepp/helper/freetype2/include" }
|
|
build_base_configuration( "freetype" )
|
|
|
|
project "stb_vorbis-static"
|
|
kind "StaticLib"
|
|
language "C"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/stb_vorbis/*.c" }
|
|
build_base_configuration( "stb_vorbis" )
|
|
|
|
project "chipmunk-static"
|
|
kind "StaticLib"
|
|
language "C"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/chipmunk/*.c", "src/eepp/helper/chipmunk/constraints/*.c" }
|
|
includedirs { "include/eepp/helper/chipmunk" }
|
|
build_base_configuration( "chipmunk" )
|
|
|
|
project "haikuttf-static"
|
|
kind "StaticLib"
|
|
language "C++"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/haikuttf/*.cpp" }
|
|
includedirs { "src/eepp/helper/freetype2/include" }
|
|
build_base_cpp_configuration( "haikuttf" )
|
|
|
|
project "jpeg-compressor-static"
|
|
kind "StaticLib"
|
|
language "C++"
|
|
targetdir("libs/" .. os.get() .. "/helpers/")
|
|
files { "src/eepp/helper/jpeg-compressor/*.cpp" }
|
|
build_base_cpp_configuration( "jpeg-compressor" )
|
|
|
|
project "eepp-static"
|
|
kind "StaticLib"
|
|
language "C++"
|
|
targetdir("libs/" .. os.get() .. "/")
|
|
build_eepp( "eepp-static" )
|
|
|
|
project "eepp-shared"
|
|
kind "SharedLib"
|
|
language "C++"
|
|
targetdir("libs/" .. os.get() .. "/")
|
|
build_eepp( "eepp" )
|
|
|
|
project "eepp-test"
|
|
kind "WindowedApp"
|
|
language "C++"
|
|
files { "src/test/*.cpp" }
|
|
includedirs { "include", "src" }
|
|
build_link_configuration( "eetest" )
|
|
|
|
project "eepp-es"
|
|
kind "WindowedApp"
|
|
language "C++"
|
|
files { "src/examples/external_shader/*.cpp" }
|
|
includedirs { "include", "src" }
|
|
build_link_configuration( "eees" )
|
|
|
|
project "eepp-ew"
|
|
kind "WindowedApp"
|
|
language "C++"
|
|
files { "src/examples/empty_window/*.cpp" }
|
|
includedirs { "include", "src" }
|
|
build_link_configuration( "eeew" )
|