Files
eepp/premake5.lua
Martín Lucas Golini 4a2546f6bf TextDocument find and findLast refactor and minor improvements.
premake build now will try to symlink the shared libraries into bin directory.
Binaries rpath is now set to origin (".").
2023-02-01 02:16:59 -03:00

1116 lines
34 KiB
Lua

newoption { trigger = "with-openssl", description = "Enables OpenSSL support ( and disables mbedtls backend )." }
newoption { trigger = "with-dynamic-freetype", description = "Dynamic link against freetype." }
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-mojoal", description = "Compile with mojoAL as OpenAL implementation instead of using openal-soft (requires SDL2 backend)" }
newoption { trigger = "use-frameworks", description = "In macOS it will try to link the external libraries from its frameworks. For example, instead of linking against SDL2 it will link against SDL2.framework." }
newoption { trigger = "windows-vc-build", description = "This is used to build the framework in Visual Studio downloading its external dependencies and making them available to the VS project without having to install them manually." }
newoption { trigger = "windows-mingw-build", description = "This is used to build the framework with mingw downloading its external dependencies." }
newoption { trigger = "with-emscripten-pthreads", description = "Enables emscripten build to use posix threads" }
newoption { trigger = "with-mold-linker", description = "Tries to use the mold linker instead of the default linker of the toolchain" }
newoption { trigger = "with-debug-symbols", description = "Release builds are built with debug symbols." }
newoption { trigger = "thread-sanitizer", description ="Compile with ThreadSanitizer." }
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.",
allowed = {
{ "SDL2", "SDL2" },
}
}
function get_dll_extension()
if os.target("macosx") then
return "dylib"
elseif os.target("windows") then
return "dll"
else
return "so"
end
end
function postsymlinklib(src_path, dst_path, lib)
filter { "configurations:release*", "system:windows" }
postbuildcommands { "mklink \"" .. dst_path .. lib .. ".dll\"" .. " \"" .. src_path .. lib .. ".dll\" || ver>nul" }
filter { "configurations:debug*", "system:windows" }
postbuildcommands { "mklink \"" .. dst_path .. lib .. "-debug.dll\"" .. " \"" .. src_path .. lib .. "-debug.dll\" || ver>nul" }
filter { "configurations:release*", "not system:windows" }
postbuildcommands { "ln -sf \"" .. src_path .. "lib" .. lib .. "." .. get_dll_extension() .. "\" \"" .. dst_path .. "\"" }
filter { "configurations:debug*", "not system:windows" }
postbuildcommands { "ln -sf \"" .. src_path .. "lib" .. lib .. "-debug." .. get_dll_extension() .. "\" \"" .. dst_path .. "\"" }
end
function print_table( table_ref )
for _, value in pairs( table_ref ) do
print(value)
end
end
function table_length(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
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.istarget("macosx") and ( is_xcode() or _OPTIONS["use-frameworks"] ) then
local path = "/Library/Frameworks/" .. name .. ".framework"
if os.isdir( path ) then
return path
end
end
return os.findlib( name )
end
function get_backend_link_name( name )
if os.istarget("macosx") and ( is_xcode() or _OPTIONS["use-frameworks"] ) then
local fname = name .. ".framework"
if os_findlib( name ) then -- Search for the framework
return fname
end
end
return name
end
function string.starts(String,Start)
if ( _ACTION ) then
return string.sub(String,1,string.len(Start))==Start
end
return false
end
function is_vs()
return ( string.starts(_ACTION,"vs") )
end
function is_xcode()
return ( string.starts(_ACTION,"xcode") )
end
function set_kind()
if os.istarget("macosx") then
kind("ConsoleApp")
else
kind("WindowedApp")
end
end
link_list = { }
os_links = { }
backends = { }
static_backends = { }
backend_selected = false
remote_sdl2_version = "SDL2-2.26.2"
remote_sdl2_devel_src_url = "https://libsdl.org/release/SDL2-2.26.2.zip"
remote_sdl2_devel_vc_url = "https://www.libsdl.org/release/SDL2-devel-2.26.2-VC.zip"
remote_sdl2_devel_mingw_url = "https://www.libsdl.org/release/SDL2-devel-2.26.2-mingw.zip"
function incdirs( dirs )
if is_xcode() then
sysincludedirs { dirs }
end
includedirs { dirs }
end
function download_and_extract_sdl(sdl_url)
print("Downloading: " .. sdl_url)
local dest_dir = "src/thirdparty/"
local local_file = dest_dir .. remote_sdl2_version .. ".zip"
local res, response_code = http.download(sdl_url, local_file)
if response_code == 200 then
print("Downloaded successfully to: " .. local_file)
zip.extract(local_file, dest_dir)
print("Extracted " .. local_file .. " into " .. dest_dir)
else
print("Failed to download: " .. sdl_url .. " res: " .. res)
exit(1)
end
end
function version_to_number( version )
versionpart = 0
versionnum = 0
versionmod = 1000
for str in string.gmatch(version, "[^%.]+") do
versionnum = versionnum + tonumber(str) * versionmod
versionpart = versionpart + 1
if versionpart == 1 then
versionmod = 100
elseif versionpart == 2 then
versionmod = 10
end
end
return versionnum
end
function download_and_extract_dependencies()
if not os.isdir("src/thirdparty/" .. remote_sdl2_version) then
if _OPTIONS["windows-vc-build"] then
download_and_extract_sdl(remote_sdl2_devel_vc_url)
elseif _OPTIONS["windows-mingw-build"] then
download_and_extract_sdl(remote_sdl2_devel_mingw_url)
elseif os.istarget("ios") then
download_and_extract_sdl(remote_sdl2_devel_src_url)
end
end
end
function build_arch_configuration()
filter {"architecture:x86", "options:cc=mingw"}
buildoptions { "-B /usr/bin/i686-w64-mingw32-" }
filter {"architecture:x86_64", "options:cc=mingw"}
buildoptions { "-B /usr/bin/x86_64-w64-mingw32-" }
end
function build_base_configuration( package_name )
incdirs { "src/thirdparty/zlib" }
set_ios_config()
set_xcode_config()
build_arch_configuration()
filter "not system:windows"
buildoptions{ "-fPIC" }
filter "configurations:debug*"
targetname ( package_name .. "-debug" )
filter "configurations:release*"
targetname ( package_name )
filter "action:not vs*"
cdialect "gnu99"
buildoptions { "-Wall" }
filter "action:vs*"
incdirs { "src/thirdparty/libzip/vs" }
filter "system:emscripten"
buildoptions { "-O3 -s USE_SDL=2 -s PRECISE_F32=1 -s ENVIRONMENT=worker,web" }
if _OPTIONS["with-emscripten-pthreads"] then
buildoptions { "-s USE_PTHREADS=1" }
end
end
function build_base_cpp_configuration( package_name )
if not os.istarget("windows") then
buildoptions{ "-fPIC" }
end
set_ios_config()
set_xcode_config()
build_arch_configuration()
filter "action:not vs*"
buildoptions { "-Wall" }
filter "configurations:debug*"
defines { "DEBUG", "EE_DEBUG", "EE_MEMORY_MANAGER" }
symbols "On"
targetname ( package_name .. "-debug" )
filter "configurations:release*"
defines { "NDEBUG" }
optimize "Speed"
targetname ( package_name )
filter { "configurations:release*", "options:with-debug-symbols" }
symbols "On"
filter "system:emscripten"
buildoptions { "-O3 -s USE_SDL=2 -s PRECISE_F32=1 -s ENVIRONMENT=worker,web" }
if _OPTIONS["with-emscripten-pthreads"] then
buildoptions { "-s USE_PTHREADS=1" }
end
end
function build_link_configuration( package_name, use_ee_icon )
incdirs { "include" }
local extension = "";
if package_name == "eepp" then
defines { "EE_EXPORTS" }
elseif package_name == "eepp-static" then
defines { "EE_STATIC" }
end
if package_name ~= "eepp" and package_name ~= "eepp-static" then
if not _OPTIONS["with-static-eepp"] then
links { "eepp-shared" }
else
links { "eepp-static" }
defines { "EE_STATIC" }
add_static_links()
links { link_list }
end
end
if _OPTIONS["with-mold-linker"] then
if _OPTIONS.platform == "clang" or _OPTIONS.platform == "clang-analyzer" then
linkoptions { "-fuse-ld=mold" }
else
gccversion = os.outputof( "gcc -dumpfullversion" )
gccversionnumber = version_to_number( gccversion )
if gccversionnumber >= 12110 then
linkoptions { "-fuse-ld=mold" }
else
linkoptions { "-B/usr/bin/mold" }
end
end
end
cppdialect "C++17"
set_ios_config()
set_xcode_config()
build_arch_configuration()
filter { "system:linux or system:macosx or system:haiku or system:bsd", "action:not vs*" }
if package_name ~= "eepp" and package_name ~= "eepp-static" then
linkoptions { "-Wl,-rpath,'$$ORIGIN'" }
end
filter { "system:windows", "action:not vs*", "architecture:x86" }
if ( true == use_ee_icon ) then
linkoptions { "../../bin/assets/icon/ee.res" }
end
filter { "system:windows", "action:not vs*", "architecture:x86_64" }
if ( true == use_ee_icon ) then
linkoptions { "../../bin/assets/icon/ee.x64.res" }
end
filter { "system:windows", "action:vs*" }
files { "bin/assets/icon/ee.rc", "bin/assets/icon/ee.ico" }
vpaths { ['Resources/*'] = { "ee.rc", "ee.ico" } }
filter "action:not vs*"
buildoptions { "-Wall" }
filter { "configurations:debug*", "action:not vs*" }
buildoptions{ "-Wno-long-long" }
filter { "configurations:release*", "action:not vs*" }
buildoptions { "-fno-strict-aliasing -ffast-math" }
filter { "configurations:release*", "action:not vs*", "system:not macosx" }
buildoptions { "-s" }
filter "configurations:debug*"
defines { "DEBUG", "EE_DEBUG", "EE_MEMORY_MANAGER" }
targetname ( package_name .. "-debug" .. extension )
filter "configurations:release*"
defines { "NDEBUG" }
targetname ( package_name .. extension )
filter { "system:windows", "action:not vs*" }
linkoptions { "-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic" }
filter { "system:windows", "action:vs*" }
if table.contains( backends, "SDL2" ) then
links { "SDL2", "SDL2main" }
end
filter { "options:windows-vc-build", "system:windows", "platforms:x86" }
syslibdirs { "src/thirdparty/" .. remote_sdl2_version .."/lib/x86" }
filter { "options:windows-vc-build", "system:windows", "platforms:x86_64" }
syslibdirs { "src/thirdparty/" .. remote_sdl2_version .."/lib/x64" }
filter { "options:windows-mingw-build", "architecture:x86", "options:cc=mingw" }
syslibdirs { "src/thirdparty/" .. remote_sdl2_version .."/i686-w64-mingw32/lib/", "/usr/i686-w64-mingw32/sys-root/mingw/lib/" }
filter { "options:windows-mingw-build", "architecture:x86_64", "options:cc=mingw" }
syslibdirs { "src/thirdparty/" .. remote_sdl2_version .."/x86_64-w64-mingw32/lib/", "/usr/x86_64-w64-mingw32/sys-root/mingw/lib/" }
filter "system:emscripten"
targetname ( package_name .. extension )
linkoptions { "-O3 -s TOTAL_MEMORY=67108864" }
linkoptions { "-s USE_SDL=2" }
buildoptions { "-O3 -s USE_SDL=2 -s PRECISE_F32=1 -s ENVIRONMENT=worker,web" }
if _OPTIONS["with-emscripten-pthreads"] then
buildoptions { "-s USE_PTHREADS=1" }
linkoptions { "-s USE_PTHREADS=1" }
end
if _OPTIONS["with-gles1"] and ( not _OPTIONS["with-gles2"] or _OPTIONS["force-gles1"] ) then
linkoptions{ "-s LEGACY_GL_EMULATION=1" }
end
if _OPTIONS["with-gles2"] and not _OPTIONS["force-gles1"] then
linkoptions{ "-s FULL_ES2=1" }
end
end
function generate_os_links()
if os.istarget("linux") then
multiple_insert( os_links, { "rt", "pthread", "GL", "Xcursor" } )
if _OPTIONS["with-static-eepp"] then
table.insert( os_links, "dl" )
end
elseif os.istarget("windows") then
multiple_insert( os_links, { "opengl32", "glu32", "gdi32", "ws2_32", "winmm", "ole32" } )
elseif os.istarget("mingw32") then
multiple_insert( os_links, { "opengl32", "glu32", "gdi32", "ws2_32", "winmm", "ole32" } )
elseif os.istarget("macosx") then
multiple_insert( os_links, { "OpenGL.framework", "CoreFoundation.framework" } )
elseif os.istarget("bsd") then
multiple_insert( os_links, { "rt", "pthread", "GL" } )
elseif os.istarget("haiku") then
multiple_insert( os_links, { "GL", "network" } )
elseif os.istarget("ios") then
multiple_insert( os_links, { "OpenGLES.framework", "AudioToolbox.framework", "CoreAudio.framework", "Foundation.framework", "CoreFoundation.framework", "UIKit.framework", "QuartzCore.framework", "CoreGraphics.framework", "CoreMotion.framework", "AVFoundation.framework", "GameController.framework" } )
elseif os.istarget("android") then
multiple_insert( os_links, { "GLESv1_CM", "GLESv2", "log" } )
end
if not _OPTIONS["with-mojoal"] then
if os.istarget("linux") or os.istarget("bsd") or os.istarget("haiku") or os.istarget("emscripten") then
multiple_insert( os_links, { "openal" } )
elseif os.istarget("windows") or os.istarget("mingw32") then
multiple_insert( os_links, { "OpenAL32" } )
elseif os.istarget("macosx") or os.istarget("ios") then
multiple_insert( os_links, { "OpenAL.framework" } )
end
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
if _OPTIONS["thread-sanitizer"] then
buildoptions { "-fsanitize=thread" }
linkoptions { "-fsanitize=thread" }
if not os.istarget("macosx") then
links { "tsan" }
end
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
if not _OPTIONS["with-dynamic-freetype"] then
links { "freetype-static", "libpng-static" }
end
links { "SOIL2-static",
"chipmunk-static",
"libzip-static",
"jpeg-compressor-static",
"zlib-static",
"imageresampler-static",
"pugixml-static",
"vorbis-static"
}
if _OPTIONS["with-mojoal"] then
links { "mojoal-static"}
end
if not _OPTIONS["with-openssl"] then
links { "mbedtls-static" }
end
if not os.istarget("haiku") and not os.istarget("ios") and not os.istarget("android") and not os.istarget("emscripten") then
links{ "glew-static" }
end
end
function can_add_static_backend()
if _OPTIONS["with-static-backend"] then
return true
end
return false
end
function insert_static_backend( name )
table.insert( static_backends, "../../libs/" .. os.target() .. "/lib" .. name .. ".a" )
end
function add_sdl2()
print("Using SDL2 backend");
if not can_add_static_backend("SDL2") then
table.insert( link_list, get_backend_link_name( "SDL2" ) )
else
print("Using static backend")
insert_static_backend( "SDL2" )
end
table.insert( backends, "SDL2" )
end
function set_xcode_config()
if is_xcode() or _OPTIONS["use-frameworks"] then
linkoptions { "-F /Library/Frameworks" }
incdirs { "/Library/Frameworks/SDL2.framework/Headers" }
defines { "EE_SDL2_FROM_ROOTPATH" }
end
end
function set_ios_config()
if os.istarget("ios") then
local toolchainpath = os.getenv("TOOLCHAINPATH")
local iosversion = os.getenv("IOSVERSION")
local sysroot_path = os.getenv("SYSROOTPATH")
if nil == os.getenv("TOOLCHAINPATH") then
toolchainpath = os.outputof("xcrun -find -sdk iphonesimulator clang")
end
if nil == os.getenv("IOSVERSION") then
iosversion = os.outputof("xcrun --sdk iphonesimulator --show-sdk-version")
end
if nil == os.getenv("SYSROOTPATH") then
local platform_path = os.outputof("xcrun --sdk iphonesimulator --show-sdk-platform-path")
sysroot_path = platform_path .. "/Developer/SDKs/iPhoneSimulator" .. iosversion .. ".sdk/"
end
local framework_path = sysroot_path .. "/System/Library/Frameworks"
local framework_libs_path = framework_path .. "/usr/lib"
local sysroot_ver = " -miphoneos-version-min=9.0 -isysroot " .. sysroot_path
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 }
includedirs { "src/thirdparty/" .. remote_sdl2_version .. "/include" }
end
end
function backend_is( name, libname )
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( libname ) and backend_sel
if os.istarget("mingw32") or os.istarget("emscripten") then
ret_val = backend_sel
end
if ret_val then
backend_selected = true
end
return ret_val
end
function select_backend()
if backend_is("SDL2", "SDL2") then
print("Selected SDL2")
add_sdl2()
end
-- If the selected backend is not present, try to find one present
if not backend_selected then
if os_findlib("SDL2", "SDL2") then
add_sdl2()
else
print("ERROR: Couldnt find any backend. Forced SDL2.")
add_sdl2()
end
end
end
function check_ssl_support()
if _OPTIONS["with-openssl"] then
if os.istarget("windows") then
table.insert( link_list, get_backend_link_name( "libssl" ) )
table.insert( link_list, get_backend_link_name( "libcrypto" ) )
else
table.insert( link_list, get_backend_link_name( "ssl" ) )
table.insert( link_list, get_backend_link_name( "crypto" ) )
end
files { "src/eepp/network/ssl/backend/openssl/*.cpp" }
defines { "EE_OPENSSL" }
else
files { "src/eepp/network/ssl/backend/mbedtls/*.cpp" }
defines { "EE_MBEDTLS" }
end
defines { "EE_SSL_SUPPORT" }
end
function eepp_module_maps_add()
links { "eepp-maps-static" }
defines { "EE_MAPS_STATIC" }
incdirs { "src/modules/maps/include/", "src/modules/maps/src/" }
end
function eepp_module_physics_add()
links { "eepp-physics-static", "chipmunk-static" }
defines { "EE_PHYSICS_STATIC" }
incdirs { "src/modules/physics/include/", "src/modules/physics/src/" }
end
function build_eepp( build_name )
files { "src/eepp/core/*.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/network/*.cpp",
"src/eepp/network/ssl/*.cpp",
"src/eepp/network/http/*.cpp",
"src/eepp/scene/*.cpp",
"src/eepp/scene/actions/*.cpp",
"src/eepp/ui/*.cpp",
"src/eepp/ui/abstract/*.cpp",
"src/eepp/ui/models/*.cpp",
"src/eepp/ui/css/*.cpp",
"src/eepp/ui/doc/*.cpp",
"src/eepp/ui/tools/*.cpp",
"src/eepp/physics/*.cpp",
"src/eepp/physics/constraints/*.cpp"
}
incdirs { "include",
"src",
"src/thirdparty",
"include/eepp/thirdparty",
"src/thirdparty/freetype2/include",
"src/thirdparty/zlib",
"src/thirdparty/libogg/include",
"src/thirdparty/libvorbis/include",
"src/thirdparty/mbedtls/include"
}
add_static_links()
check_ssl_support()
if table.contains( backends, "SDL2" ) then
files { "src/eepp/window/backend/SDL2/*.cpp" }
defines { "EE_BACKEND_SDL_ACTIVE", "EE_SDL_VERSION_2" }
end
multiple_insert( link_list, os_links )
links { link_list }
build_link_configuration( build_name )
if _OPTIONS["with-dynamic-freetype"] and not os.istarget("ios") and os_findlib("freetype") then
table.insert( link_list, get_backend_link_name( "freetype" ) )
end
cppdialect "C++17"
filter "options:use-frameworks"
defines { "EE_USE_FRAMEWORKS" }
filter { "system:macosx", "action:xcode* or options:use-frameworks" }
libdirs { "/System/Library/Frameworks", "/Library/Frameworks" }
filter "system:windows"
files { "src/eepp/system/platform/win/*.cpp" }
files { "src/eepp/network/platform/win/*.cpp" }
filter "system:not windows"
files { "src/eepp/system/platform/posix/*.cpp" }
files { "src/eepp/network/platform/unix/*.cpp" }
filter "options:with-mojoal"
defines( "AL_LIBTYPE_STATIC" )
incdirs { "src/thirdparty/mojoAL" }
filter "options:windows-vc-build"
incdirs { "src/thirdparty/" .. remote_sdl2_version .. "/include" }
filter { "options:windows-mingw-build", "architecture:x86", "options:cc=mingw" }
incdirs { "src/thirdparty/" .. remote_sdl2_version .."/i686-w64-mingw32/include/" }
filter { "options:windows-mingw-build", "architecture:x86_64", "options:cc=mingw" }
incdirs { "src/thirdparty/" .. remote_sdl2_version .."/x86_64-w64-mingw32/include/" }
filter "action:vs*"
incdirs { "src/thirdparty/libzip/vs" }
end
workspace "eepp"
targetdir("./bin/")
if os.istarget("ios") then
configurations { "debug-x64", "debug-arm64", "release-x64", "release-arm64" }
platforms { "x86_64", "arm64" }
else
configurations { "debug", "release" }
platforms { "x86_64", "x86" }
end
rtti "On"
download_and_extract_dependencies()
select_backend()
generate_os_links()
parse_args()
location("./make/" .. os.target() .. "/")
objdir("obj/" .. os.target() .. "/")
filter "platforms:x86"
architecture "x86"
filter "platforms:arm64 or configurations:debug-arm64 or configurations:release-arm64"
architecture "arm64"
filter "platforms:x86_64 or configurations:debug-x64 or configurations:release-x64"
architecture "x86_64"
filter "system:macosx"
defines { "GL_SILENCE_DEPRECATION" }
filter "configurations:debug*"
defines { "DEBUG" }
symbols "On"
filter "configurations:release*"
optimize "Speed"
filter { "configurations:release*", "options:with-debug-symbols" }
symbols "On"
filter { "system:windows", "action:vs*" }
flags { "MultiProcessorCompile" }
project "SOIL2-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/SOIL2/src/SOIL2/*.c" }
incdirs { "src/thirdparty/SOIL2" }
build_base_configuration( "SOIL2" )
project "glew-static"
kind "StaticLib"
language "C"
defines { "GLEW_NO_GLU", "GLEW_STATIC" }
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/glew/*.c" }
incdirs { "include/thirdparty/glew" }
build_base_configuration( "glew" )
project "mbedtls-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
incdirs { "src/thirdparty/mbedtls/include/" }
files { "src/thirdparty/mbedtls/library/*.c" }
build_base_cpp_configuration( "mbedtls" )
project "vorbis-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
incdirs { "src/thirdparty/libvorbis/lib/", "src/thirdparty/libogg/include", "src/thirdparty/libvorbis/include" }
files { "src/thirdparty/libogg/**.c", "src/thirdparty/libvorbis/**.c" }
build_base_cpp_configuration( "vorbis" )
project "pugixml-static"
kind "StaticLib"
language "C++"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/pugixml/*.cpp" }
build_base_cpp_configuration( "pugixml" )
project "zlib-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/zlib/*.c" }
build_base_configuration( "zlib" )
project "libzip-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/libzip/*.c" }
incdirs { "src/thirdparty/zlib" }
build_base_configuration( "libzip" )
project "libpng-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/libpng/**.c" }
incdirs { "src/thirdparty/libpng/include" }
build_base_configuration( "libpng" )
project "freetype-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
defines { "FT2_BUILD_LIBRARY" }
files { "src/thirdparty/freetype2/src/**.c" }
incdirs { "src/thirdparty/freetype2/include", "src/thirdparty/libpng" }
build_base_configuration( "freetype" )
project "chipmunk-static"
kind "StaticLib"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/chipmunk/*.c", "src/thirdparty/chipmunk/constraints/*.c" }
incdirs { "src/modules/physics/include/eepp/thirdparty/chipmunk" }
build_base_configuration( "chipmunk" )
filter "action:vs*"
language "C++"
buildoptions { "/TP" }
filter "action:not vs*"
language "C"
project "jpeg-compressor-static"
kind "StaticLib"
language "C++"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/jpeg-compressor/*.cpp" }
build_base_cpp_configuration( "jpeg-compressor" )
project "imageresampler-static"
kind "StaticLib"
language "C++"
targetdir("libs/" .. os.target() .. "/thirdparty/")
files { "src/thirdparty/imageresampler/*.cpp" }
build_base_cpp_configuration( "imageresampler" )
project "mojoal-static"
kind "StaticLib"
language "C"
targetdir("libs/" .. os.target() .. "/thirdparty/")
incdirs { "include/eepp/thirdparty/mojoAL" }
defines( "AL_LIBTYPE_STATIC" )
files { "src/thirdparty/mojoAL/*.c" }
build_base_cpp_configuration( "mojoal" )
filter "options:windows-vc-build"
incdirs { "src/thirdparty/" .. remote_sdl2_version .. "/include" }
filter { "options:windows-mingw-build", "architecture:x86", "options:cc=mingw" }
incdirs { "src/thirdparty/" .. remote_sdl2_version .."/i686-w64-mingw32/include/" }
filter { "options:windows-mingw-build", "architecture:x86_64", "options:cc=mingw" }
incdirs { "src/thirdparty/" .. remote_sdl2_version .."/x86_64-w64-mingw32/include/" }
project "efsw-static"
kind "StaticLib"
language "C++"
cppdialect "C++17"
targetdir("libs/" .. os.target() .. "/thirdparty/")
incdirs { "src/thirdparty/efsw/include", "src/thirdparty/efsw/src" }
files { "src/thirdparty/efsw/src/efsw/*.cpp" }
build_base_cpp_configuration( "efsw" )
filter "system:windows"
files { "src/thirdparty/efsw/src/efsw/platform/win/*.cpp" }
excludes {
"src/thirdparty/efsw/src/efsw/WatcherKqueue.cpp",
"src/thirdparty/efsw/src/efsw/WatcherFSEvents.cpp",
"src/thirdparty/efsw/src/efsw/WatcherInotify.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherKqueue.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherInotify.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherFSEvents.cpp"
}
filter "system:linux"
excludes {
"src/thirdparty/efsw/src/efsw/WatcherKqueue.cpp",
"src/thirdparty/efsw/src/efsw/WatcherFSEvents.cpp",
"src/thirdparty/efsw/src/efsw/WatcherWin32.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherKqueue.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherWin32.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherFSEvents.cpp"
}
filter "system:macosx or system:ios"
excludes {
"src/thirdparty/efsw/src/efsw/WatcherInotify.cpp",
"src/thirdparty/efsw/src/efsw/WatcherWin32.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherInotify.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherWin32.cpp"
}
filter "system:bsd"
excludes {
"src/thirdparty/efsw/src/efsw/WatcherInotify.cpp",
"src/thirdparty/efsw/src/efsw/WatcherWin32.cpp",
"src/thirdparty/efsw/src/efsw/WatcherFSEvents.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherInotify.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherWin32.cpp",
"src/thirdparty/efsw/src/efsw/FileWatcherFSEvents.cpp"
}
filter "system:not windows"
files { "src/thirdparty/efsw/src/efsw/platform/posix/*.cpp" }
project "eepp-maps-static"
kind "StaticLib"
language "C++"
cppdialect "C++17"
targetdir("libs/" .. os.target() .. "/")
incdirs { "include", "src/modules/maps/include/","src/modules/maps/src/" }
files { "src/modules/maps/src/**.cpp" }
defines { "EE_MAPS_STATIC" }
build_base_cpp_configuration( "eepp-maps-static" )
filter "action:not vs*"
buildoptions { "-Wall" }
project "eepp-maps"
kind "SharedLib"
language "C++"
cppdialect "C++17"
targetdir("libs/" .. os.target() .. "/")
incdirs { "include", "src/modules/maps/include/","src/modules/maps/src/" }
files { "src/modules/maps/src/**.cpp" }
links { "eepp-shared" }
defines { "EE_MAPS_EXPORTS" }
build_base_cpp_configuration( "eepp-maps" )
postsymlinklib( _MAIN_SCRIPT_DIR .. "/libs/" .. os.target() .. "/", _MAIN_SCRIPT_DIR .. "/bin/", "eepp-maps" )
filter "action:not vs*"
buildoptions { "-Wall" }
project "eepp-physics-static"
kind "StaticLib"
language "C++"
cppdialect "C++17"
targetdir("libs/" .. os.target() .. "/")
incdirs { "include", "src/modules/physics/include/","src/modules/physics/src/" }
files { "src/modules/physics/src/**.cpp", "src/eepp/physics/constraints/*.cpp" }
defines { "EE_PHYSICS_STATIC" }
build_base_cpp_configuration( "eepp-physics-static" )
filter "action:not vs*"
buildoptions { "-Wall" }
project "eepp-physics"
kind "SharedLib"
language "C++"
cppdialect "C++17"
targetdir("libs/" .. os.target() .. "/")
incdirs { "include", "src/modules/physics/include/","src/modules/physics/src/" }
files { "src/modules/physics/src/**.cpp", "src/eepp/physics/constraints/*.cpp" }
links { "chipmunk-static", "eepp-shared" }
defines { "EE_PHYSICS_EXPORTS" }
build_base_cpp_configuration( "eepp-physics" )
postsymlinklib( _MAIN_SCRIPT_DIR .. "/libs/" .. os.target() .. "/", _MAIN_SCRIPT_DIR .. "/bin/", "eepp-physics" )
filter "action:not vs*"
buildoptions { "-Wall" }
project "eterm-static"
kind "StaticLib"
language "C++"
cppdialect "C++17"
targetdir("libs/" .. os.target() .. "/")
incdirs { "include", "src/modules/eterm/include/","src/modules/eterm/src/" }
files { "src/modules/eterm/src/**.cpp" }
links { "chipmunk-static" }
build_base_cpp_configuration( "eterm" )
filter "action:not vs*"
buildoptions { "-Wall" }
-- Library
project "eepp-static"
kind "StaticLib"
language "C++"
targetdir("libs/" .. os.target() .. "/")
build_eepp( "eepp-static" )
project "eepp-shared"
kind "SharedLib"
language "C++"
targetdir("libs/" .. os.target() .. "/")
build_eepp( "eepp" )
postsymlinklib( _MAIN_SCRIPT_DIR .. "/libs/" .. os.target() .. "/", _MAIN_SCRIPT_DIR .. "/bin/", "eepp" )
-- Examples
project "eepp-external-shader"
set_kind()
language "C++"
files { "src/examples/external_shader/*.cpp" }
build_link_configuration( "eepp-external-shader", true )
project "eepp-empty-window"
set_kind()
language "C++"
files { "src/examples/empty_window/*.cpp" }
build_link_configuration( "eepp-empty-window", true )
project "eepp-sound"
kind "ConsoleApp"
language "C++"
files { "src/examples/sound/*.cpp" }
build_link_configuration( "eepp-sound", true )
project "eepp-sprites"
set_kind()
language "C++"
files { "src/examples/sprites/*.cpp" }
build_link_configuration( "eepp-sprites", true )
project "eepp-fonts"
set_kind()
language "C++"
files { "src/examples/fonts/*.cpp" }
build_link_configuration( "eepp-fonts", true )
project "eepp-vbo-fbo-batch"
set_kind()
language "C++"
files { "src/examples/vbo_fbo_batch/*.cpp" }
build_link_configuration( "eepp-vbo-fbo-batch", true )
project "eepp-physics-demo"
set_kind()
language "C++"
files { "src/examples/physics/*.cpp" }
eepp_module_physics_add()
build_link_configuration( "eepp-physics-demo", true )
project "eepp-http-request"
kind "ConsoleApp"
language "C++"
files { "src/examples/http_request/*.cpp" }
incdirs { "src/thirdparty" }
build_link_configuration( "eepp-http-request", true )
project "eepp-ui-hello-world"
set_kind()
language "C++"
files { "src/examples/ui_hello_world/*.cpp" }
incdirs { "src/thirdparty" }
build_link_configuration( "eepp-ui-hello-world", true )
-- Tools
project "eepp-textureatlaseditor"
set_kind()
language "C++"
files { "src/tools/textureatlaseditor/*.cpp" }
build_link_configuration( "eepp-TextureAtlasEditor", true )
project "eepp-mapeditor"
set_kind()
language "C++"
files { "src/tools/mapeditor/*.cpp" }
eepp_module_maps_add()
build_link_configuration( "eepp-MapEditor", true )
project "eepp-uieditor"
set_kind()
language "C++"
incdirs { "src/thirdparty/efsw/include", "src/thirdparty" }
links { "efsw-static", "pugixml-static" }
files { "src/tools/uieditor/*.cpp" }
eepp_module_maps_add()
build_link_configuration( "eepp-UIEditor", true )
filter "system:macosx"
links { "CoreFoundation.framework", "CoreServices.framework" }
filter { "system:not windows", "system:not haiku" }
links { "pthread" }
project "ecode-macos-helper-static"
kind "StaticLib"
language "C++"
targetdir("libs/" .. os.target() .. "/thirdparty/")
filter "system:macosx"
files { "src/tools/ecode/macos/*.m" }
filter { "configurations:debug*", "action:not vs*" }
defines { "DEBUG", "EE_DEBUG", "EE_MEMORY_MANAGER" }
symbols "On"
buildoptions{ "-Wall" }
targetname ( "ecode-macos-helper-static-debug" )
filter { "configurations:release*", "action:not vs*" }
defines { "NDEBUG" }
optimize "Speed"
targetname ( "ecode-macos-helper-static" )
filter { "configurations:release*", "action:not vs*", "options:with-debug-symbols" }
symbols "On"
project "ecode"
set_kind()
language "C++"
files { "src/tools/ecode/**.cpp" }
incdirs { "src/thirdparty/efsw/include", "src/thirdparty", "src/modules/eterm/include/" }
links { "efsw-static", "eterm-static" }
build_link_configuration( "ecode", true )
filter "options:with-debug-symbols"
defines { "ECODE_USE_BACKWARD" }
filter "system:macosx"
links { "CoreFoundation.framework", "CoreServices.framework", "Cocoa.framework" }
links { "ecode-macos-helper-static" }
filter { "system:not windows", "system:not haiku" }
links { "pthread" }
filter "system:linux"
links { "util", "stdc++fs" }
filter { "system:windows", "options:with-debug-symbols" }
links { "dbghelp", "psapi" }
filter { "system:windows", "options:with-debug-symbols", "options:cc=mingw" }
links { "msvcr90" }
filter { "system:linux", "options:with-debug-symbols" }
links { "bfd", "dw", "dl" }
filter "system:haiku"
links { "bsd" }
project "eterm"
set_kind()
language "C++"
incdirs { "src/modules/eterm/include/", "src/thirdparty" }
files { "src/tools/eterm/**.cpp" }
links { "eterm-static" }
build_link_configuration( "eterm", true )
filter "system:linux"
links { "util" }
filter "system:haiku"
links { "bsd" }
project "eepp-texturepacker"
kind "ConsoleApp"
language "C++"
incdirs { "src/thirdparty" }
files { "src/tools/texturepacker/*.cpp" }
build_link_configuration( "eepp-TexturePacker", true )
-- Tests
project "eepp-test"
set_kind()
language "C++"
files { "src/tests/test_all/*.cpp" }
eepp_module_maps_add()
eepp_module_physics_add()
build_link_configuration( "eepp-test", true )
project "eepp-ui-perf-test"
set_kind()
language "C++"
files { "src/tests/ui_perf_test/*.cpp" }
includedirs { "src/thirdparty" }
build_link_configuration( "eepp-ui-perf-test", true )
if os.isfile("external_projects.lua") then
dofile("external_projects.lua")
end