Files
eepp/premake4.lua
Martín Lucas Golini b08de8b32d Fixed some bugs in Vector2.
Added some accesors to Quad2, Trangle2, Polygon2.
Reimplemented tColor and tColorA.
Fixed mingw32 build with premake4.
Fixed some minor bugs.
2013-01-06 03:21:30 -03:00

633 lines
18 KiB
Lua

function newplatform(plf)
local name = plf.name
local description = plf.description
-- Register new platform
premake.platforms[name] = {
cfgsuffix = "_"..name,
iscrosscompiler = true
}
-- Allow use of new platform in --platfroms
table.insert(premake.option.list["platform"].allowed, { name, description })
table.insert(premake.fields.platforms.allowed, name)
-- Add compiler support
premake.gcc.platforms[name] = plf.gcc
end
function newgcctoolchain(toolchain)
newplatform {
name = toolchain.name,
description = toolchain.description,
gcc = {
cc = toolchain.prefix .. "gcc",
cxx = toolchain.prefix .. "g++",
ar = toolchain.prefix .. "ar",
cppflags = "-MMD " .. toolchain.cppflags
}
}
end
newplatform {
name = "clang",
description = "Clang",
gcc = {
cc = "clang",
cxx = "clang++",
ar = "ar",
cppflags = "-MMD "
}
}
newgcctoolchain {
name = "mingw32",
description = "Mingw32 to cross-compile windows binaries from *nix",
prefix = "i686-w64-mingw32-",
cppflags = ""
}
newgcctoolchain {
name ="android-arm7",
description = "Android ARMv7 (not implemented)",
prefix = iif( os.getenv("ANDROID_NDK"), os.getenv("ANDROID_NDK"), "" ) .. "arm-linux-androideabi-",
cppflags = "-MMD -arch=armv7 -march=armv7 -marm -mcpu=cortex-a8"
}
toolchain_path = os.getenv("TOOLCHAINPATH")
if not toolchain_path then
toolchain_path = ""
end
-- cross compiling from linux, totally experimental, using: http://code.google.com/p/ios-toolchain-based-on-clang-for-linux/
newplatform {
name = "ios-cross-arm7",
description = "iOS ARMv7 (not implemented)",
gcc = {
cc = iif( toolchain_path, toolchain_path .. "ios-clang", "clang" ),
cxx = iif( toolchain_path, toolchain_path .. "ios-clang++", "clang++" ),
ar = iif( toolchain_path, "ar", "ar" ),
cppflags = "-MMD"
}
}
newgcctoolchain {
name ="ios-arm7",
description = "iOS ARMv7 (not implemented)",
prefix = iif( os.getenv("TOOLCHAINPATH"), os.getenv("TOOLCHAINPATH"), "" ),
cppflags = "-MMD -arch=armv7 -march=armv7 -marm -mcpu=cortex-a8"
}
newgcctoolchain {
name ="ios-x86",
description = "iOS x86 (not implemented)",
prefix = iif( os.getenv("TOOLCHAINPATH"), os.getenv("TOOLCHAINPATH"), "" ),
cppflags = "-m32 -march=i386"
}
if _OPTIONS.platform then
-- overwrite the native platform with the options::platform
premake.gcc.platforms['Native'] = premake.gcc.platforms[_OPTIONS.platform]
end
newoption { trigger = "with-libsndfile", description = "Build with libsndfile support." }
newoption { trigger = "with-static-freetype", description = "Build freetype as a static library." }
newoption { trigger = "with-static-eepp", 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-gles2", description = "Compile with GLES2 support" }
newoption { trigger = "with-gles1", description = "Compile with GLES1 support" }
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 )" }
}
}
function os.get_real()
if _OPTIONS.platform == "ios-arm7" or
_OPTIONS.platform == "ios-x86" or
_OPTIONS.platform == "ios-cross-arm7" then
return "ios"
end
if _OPTIONS.platform == "android-arm7" then
return "android"
end
if _OPTIONS.platform == "mingw32" then
return _OPTIONS.platform
end
return os.get()
end
function os.is_real( os_name )
return os.get_real() == os_name
end
function print_table( table_ref )
for _, value in pairs( table_ref ) do
print(value)
end
end
function args_contains( element )
return table.contains( _ARGS, element )
end
function multiple_insert( parent_table, insert_table )
for _, value in pairs( insert_table ) do
table.insert( parent_table, value )
end
end
function os_findlib( name )
if os.is("macosx") then
local path = os.findlib( name .. ".framework" )
if path then
return path
end
end
return os.findlib( name )
end
function get_backend_link_name( name )
if os.is("macosx") then
local fname = name .. ".framework"
if os.findlib( fname ) then -- Search for the framework
return fname
end
end
return name
end
link_list = { }
os_links = { }
backends = { }
static_backends = { }
backend_selected = false
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 add_cross_config_links()
if _ACTION == "gmake" then
if os.is_real("mingw32") or os.is_real("ios") then -- if is crosscompiling from *nix
if os.is_real("mingw32") then
links { "mingw32" }
end
linkoptions { "-static-libgcc", "-static-libstdc++" }
end
end
end
function build_link_configuration( package_name )
includedirs { "include", "src" }
if package_name ~= "eepp" and package_name ~= "eepp-static" then
if not _OPTIONS["with-static-eepp"] then
links { "eepp-shared" }
else
links { "eepp-static" }
add_static_links()
links { link_list }
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 )
configuration "windows"
add_cross_config_links()
set_ios_config()
end
function generate_os_links()
if os.is_real("linux") then
multiple_insert( os_links, { "rt", "pthread", "X11", "openal", "GL", "Xcursor" } )
elseif os.is_real("windows") then
multiple_insert( os_links, { "OpenAL32", "opengl32", "glu32", "gdi32" } )
elseif os.is_real("mingw32") then
multiple_insert( os_links, { "OpenAL32", "opengl32", "glu32", "gdi32" } )
elseif os.is_real("macosx") then
multiple_insert( os_links, { "OpenGL.framework", "OpenAL.framework", "CoreFoundation.framework", "AGL.framework" } )
elseif os.is_real("freebsd") then
multiple_insert( os_links, { "rt", "pthread", "X11", "openal", "GL", "Xcursor" } )
elseif os.is_real("haiku") then
multiple_insert( os_links, { "openal", "GL" } )
elseif os.is_real("ios") then
multiple_insert( os_links, { "OpenGLES.framework", "OpenAL.framework", "AudioToolbox.framework", "CoreAudio.framework", "Foundation.framework", "CoreFoundation.framework", "UIKit.framework", "QuartzCore.framework", "CoreGraphics.framework" } )
end
end
function parse_args()
if _OPTIONS["with-gles2"] then
defines { "EE_GLES2", "SOIL_GLES2" }
end
if _OPTIONS["with-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/" .. os.get_real() .. "/lib" .. name .. ".a"
return os.isfile(path)
end
end
function insert_static_backend( name )
table.insert( static_backends, path.getrelative( "libs/" .. os.get_real(), "./" ) .. "/libs/" .. os.get_real() .. "/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, get_backend_link_name( "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, get_backend_link_name( "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, get_backend_link_name( "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, get_backend_link_name( "SFML" ) )
else
insert_static_backend( "SFML" )
end
end
function set_ios_config()
if _OPTIONS.platform == "ios-arm7" or
_OPTIONS.platform == "ios-x86" or
_OPTIONS.platform == "ios-cross-arm7" then
local err = false
if nil == os.getenv("TOOLCHAINPATH") then
print("You must set TOOLCHAINPATH enviroment variable.")
print("\tExample: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/")
err = true
end
if nil == os.getenv("SYSROOTPATH") then
print("You must set SYSROOTPATH enviroment variable.")
print("\tExample: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk")
err = true
end
if nil == os.getenv("IOSVERSION") then
print("You must set IOSVERSION enviroment variable.")
print("\tExample: 5.0")
err = true
end
if err then
os.exit(1)
end
local sysroot_path = os.getenv("SYSROOTPATH")
local framework_path = sysroot_path .. "/System/Library/Frameworks"
local framework_libs_path = framework_path .. "/usr/lib"
local sysroot_ver = "-miphoneos-version-min=" .. os.getenv("IOSVERSION") .. " -isysroot " .. sysroot_path
configuration { "ios-arm", "ios-x86" }
buildoptions { sysroot_ver .. "-I" .. sysroot_path .. "/usr/include" }
linkoptions { sysroot_ver }
libdirs { framework_libs_path }
linkoptions { "-F" .. framework_path .. " -L" .. framework_libs_path .. " -isysroot " .. sysroot_path }
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()
else
print("ERROR: Couldnt find any backend. Forced SDL.")
add_sdl()
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, get_backend_link_name( "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 }
build_link_configuration( build_name )
set_ios_config()
configuration "windows"
files { "src/eepp/window/platform/win/*.cpp" }
add_cross_config_links()
configuration "linux"
files { "src/eepp/window/platform/x11/*.cpp" }
configuration "macosx"
files { "src/eepp/window/platform/osx/*.cpp" }
end
solution "eepp"
location("./make/" .. os.get_real() .. "/")
targetdir("./")
configurations { "debug", "release" }
objdir("obj/" .. os.get_real() .. "/")
generate_os_links()
parse_args()
project "SOIL2-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.get_real() .. "/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_real() .. "/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_real() .. "/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_real() .. "/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_real() .. "/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_real() .. "/helpers/")
files { "src/eepp/helper/stb_vorbis/*.c" }
build_base_configuration( "stb_vorbis" )
project "chipmunk-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.get_real() .. "/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_real() .. "/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_real() .. "/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_real() .. "/")
build_eepp( "eepp-static" )
project "eepp-shared"
kind "SharedLib"
language "C++"
targetdir("libs/" .. os.get_real() .. "/")
build_eepp( "eepp" )
project "eepp-test"
kind "WindowedApp"
language "C++"
files { "src/test/*.cpp" }
build_link_configuration( "eetest" )
project "eepp-es"
kind "WindowedApp"
language "C++"
files { "src/examples/external_shader/*.cpp" }
build_link_configuration( "eees" )
project "eepp-ew"
kind "WindowedApp"
language "C++"
files { "src/examples/empty_window/*.cpp" }
build_link_configuration( "eeew" )