Files
eepp/premake4.lua
Martín Lucas Golini 266fdb20ea Improved the premake4 script.
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.
2012-12-17 17:09:57 -03:00

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" )