bgfx/scripts/genie.lua
2017-12-14 20:40:30 -08:00

505 lines
9.6 KiB
Lua

--
-- Copyright 2010-2017 Branimir Karadzic. All rights reserved.
-- License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
--
newoption {
trigger = "with-amalgamated",
description = "Enable amalgamated build.",
}
newoption {
trigger = "with-ovr",
description = "Enable OculusVR integration.",
}
newoption {
trigger = "with-sdl",
description = "Enable SDL entry.",
}
newoption {
trigger = "with-glfw",
description = "Enable GLFW entry.",
}
newoption {
trigger = "with-profiler",
description = "Enable build with intrusive profiler.",
}
newoption {
trigger = "with-scintilla",
description = "Enable building with Scintilla editor.",
}
newoption {
trigger = "with-shared-lib",
description = "Enable building shared library.",
}
newoption {
trigger = "with-tools",
description = "Enable building tools.",
}
newoption {
trigger = "with-combined-examples",
description = "Enable building examples (combined as single executable).",
}
newoption {
trigger = "with-examples",
description = "Enable building examples.",
}
solution "bgfx"
configurations {
"Debug",
"Release",
}
if _ACTION == "xcode4" then
platforms {
"Universal",
}
else
platforms {
"x32",
"x64",
-- "Xbox360",
"Native", -- for targets where bitness is not specified
}
end
language "C++"
startproject "example-00-helloworld"
MODULE_DIR = path.getabsolute("../")
BGFX_DIR = path.getabsolute("..")
BX_DIR = os.getenv("BX_DIR")
BIMG_DIR = os.getenv("BIMG_DIR")
local BGFX_BUILD_DIR = path.join(BGFX_DIR, ".build")
local BGFX_THIRD_PARTY_DIR = path.join(BGFX_DIR, "3rdparty")
if not BX_DIR then
BX_DIR = path.getabsolute(path.join(BGFX_DIR, "../bx"))
end
if not BIMG_DIR then
BIMG_DIR = path.getabsolute(path.join(BGFX_DIR, "../bimg"))
end
if not os.isdir(BX_DIR) or not os.isdir(BIMG_DIR) then
if not os.isdir(BX_DIR) then
print("bx not found at " .. BX_DIR)
end
if not os.isdir(BIMG_DIR) then
print("bimg not found at " .. BIMG_DIR)
end
print("For more info see: https://bkaradzic.github.io/bgfx/build.html")
os.exit()
end
dofile (path.join(BX_DIR, "scripts/toolchain.lua"))
if not toolchain(BGFX_BUILD_DIR, BGFX_THIRD_PARTY_DIR) then
return -- no action specified
end
function copyLib()
end
if _OPTIONS["with-sdl"] then
if os.is("windows") then
if not os.getenv("SDL2_DIR") then
print("Set SDL2_DIR enviroment variable.")
end
end
end
if _OPTIONS["with-profiler"] then
defines {
"ENTRY_CONFIG_PROFILER=1",
"BGFX_CONFIG_PROFILER=1",
}
end
function exampleProjectDefaults()
debugdir (path.join(BGFX_DIR, "examples/runtime"))
includedirs {
path.join(BX_DIR, "include"),
path.join(BIMG_DIR, "include"),
path.join(BGFX_DIR, "include"),
path.join(BGFX_DIR, "3rdparty"),
path.join(BGFX_DIR, "examples/common"),
}
flags {
"FatalWarnings",
}
links {
"example-common",
"example-glue",
"bgfx",
"bimg_decode",
"bimg",
"bx",
}
if _OPTIONS["with-sdl"] then
defines { "ENTRY_CONFIG_USE_SDL=1" }
links { "SDL2" }
configuration { "osx" }
libdirs { "$(SDL2_DIR)/lib" }
configuration {}
end
if _OPTIONS["with-glfw"] then
defines { "ENTRY_CONFIG_USE_GLFW=1" }
links { "glfw3" }
configuration { "linux or freebsd" }
links {
"Xrandr",
"Xinerama",
"Xi",
"Xxf86vm",
"Xcursor",
}
configuration { "osx" }
linkoptions {
"-framework CoreVideo",
"-framework IOKit",
}
configuration {}
end
if _OPTIONS["with-ovr"] then
configuration { "x32" }
libdirs { path.join("$(OVR_DIR)/LibOVR/Lib/Windows/Win32/Release", _ACTION) }
configuration { "x64" }
libdirs { path.join("$(OVR_DIR)/LibOVR/Lib/Windows/x64/Release", _ACTION) }
configuration { "x32 or x64" }
links { "libovr" }
configuration {}
end
configuration { "vs*", "x32 or x64" }
linkoptions {
"/ignore:4199", -- LNK4199: /DELAYLOAD:*.dll ignored; no imports found from *.dll
}
links { -- this is needed only for testing with GLES2/3 on Windows with VS2008
"DelayImp",
}
configuration { "vs201*", "x32 or x64" }
linkoptions { -- this is needed only for testing with GLES2/3 on Windows with VS201x
"/DELAYLOAD:\"libEGL.dll\"",
"/DELAYLOAD:\"libGLESv2.dll\"",
}
configuration { "mingw*" }
targetextension ".exe"
links {
"gdi32",
"psapi",
}
configuration { "vs20*", "x32 or x64" }
links {
"gdi32",
"psapi",
}
configuration { "durango" }
links {
"d3d11_x",
"d3d12_x",
"combase",
"kernelx",
}
configuration { "winstore*" }
removelinks {
"DelayImp",
"gdi32",
"psapi"
}
links {
"d3d11",
"d3d12",
"dxgi"
}
linkoptions {
"/ignore:4264" -- LNK4264: archiving object file compiled with /ZW into a static library; note that when authoring Windows Runtime types it is not recommended to link with a static library that contains Windows Runtime metadata
}
-- WinRT targets need their own output directories or build files stomp over each other
configuration { "x32", "winstore*" }
targetdir (path.join(BGFX_BUILD_DIR, "win32_" .. _ACTION, "bin", _name))
objdir (path.join(BGFX_BUILD_DIR, "win32_" .. _ACTION, "obj", _name))
configuration { "x64", "winstore*" }
targetdir (path.join(BGFX_BUILD_DIR, "win64_" .. _ACTION, "bin", _name))
objdir (path.join(BGFX_BUILD_DIR, "win64_" .. _ACTION, "obj", _name))
configuration { "ARM", "winstore*" }
targetdir (path.join(BGFX_BUILD_DIR, "arm_" .. _ACTION, "bin", _name))
objdir (path.join(BGFX_BUILD_DIR, "arm_" .. _ACTION, "obj", _name))
configuration { "mingw-clang" }
kind "ConsoleApp"
configuration { "android*" }
kind "ConsoleApp"
targetextension ".so"
linkoptions {
"-shared",
}
links {
"EGL",
"GLESv2",
}
configuration { "nacl*" }
kind "ConsoleApp"
targetextension ".nexe"
links {
"ppapi",
"ppapi_gles2",
"pthread",
}
configuration { "pnacl" }
kind "ConsoleApp"
targetextension ".pexe"
links {
"ppapi",
"ppapi_gles2",
"pthread",
}
configuration { "asmjs" }
kind "ConsoleApp"
targetextension ".bc"
configuration { "linux-* or freebsd", "not linux-steamlink" }
links {
"X11",
"GL",
"pthread",
}
configuration { "linux-steamlink" }
links {
"EGL",
"GLESv2",
"SDL2",
"pthread",
}
configuration { "rpi" }
links {
"X11",
"brcmGLESv2",
"brcmEGL",
"bcm_host",
"vcos",
"vchiq_arm",
"pthread",
}
configuration { "osx" }
linkoptions {
"-framework Cocoa",
"-framework QuartzCore",
"-framework OpenGL",
"-weak_framework Metal",
}
configuration { "ios* or tvos*" }
kind "ConsoleApp"
linkoptions {
"-framework CoreFoundation",
"-framework Foundation",
"-framework OpenGLES",
"-framework UIKit",
"-framework QuartzCore",
"-weak_framework Metal",
}
configuration { "xcode4", "ios" }
kind "WindowedApp"
files {
path.join(BGFX_DIR, "examples/runtime/iOS-Info.plist"),
}
configuration { "xcode4", "tvos" }
kind "WindowedApp"
files {
path.join(BGFX_DIR, "examples/runtime/tvOS-Info.plist"),
}
configuration { "qnx*" }
targetextension ""
links {
"EGL",
"GLESv2",
}
configuration {}
strip()
end
function exampleProject(_combined, ...)
if _combined then
project ("examples")
uuid (os.uuid("examples"))
kind "WindowedApp"
for _, name in ipairs({...}) do
files {
path.join(BGFX_DIR, "examples", name, "**.c"),
path.join(BGFX_DIR, "examples", name, "**.cpp"),
path.join(BGFX_DIR, "examples", name, "**.h"),
}
removefiles {
path.join(BGFX_DIR, "examples", name, "**.bin.h"),
}
end
files {
path.join(BGFX_DIR, "examples/25-c99/helloworld.c"), -- hack for _main_
}
exampleProjectDefaults()
else
for _, name in ipairs({...}) do
project ("example-" .. name)
uuid (os.uuid("example-" .. name))
kind "WindowedApp"
files {
path.join(BGFX_DIR, "examples", name, "**.c"),
path.join(BGFX_DIR, "examples", name, "**.cpp"),
path.join(BGFX_DIR, "examples", name, "**.h"),
}
removefiles {
path.join(BGFX_DIR, "examples", name, "**.bin.h"),
}
defines {
"ENTRY_CONFIG_IMPLEMENT_MAIN=1",
}
exampleProjectDefaults()
end
end
end
dofile "bgfx.lua"
group "libs"
bgfxProject("", "StaticLib", {})
dofile(path.join(BX_DIR, "scripts/bx.lua"))
dofile(path.join(BIMG_DIR, "scripts/bimg.lua"))
dofile(path.join(BIMG_DIR, "scripts/bimg_decode.lua"))
if _OPTIONS["with-tools"] then
dofile(path.join(BIMG_DIR, "scripts/bimg_encode.lua"))
end
if _OPTIONS["with-examples"]
or _OPTIONS["with-combined-examples"]
or _OPTIONS["with-tools"] then
group "examples"
dofile "example-common.lua"
end
if _OPTIONS["with-examples"]
or _OPTIONS["with-combined-examples"] then
group "examples"
exampleProject(_OPTIONS["with-combined-examples"]
, "00-helloworld"
, "01-cubes"
, "02-metaballs"
, "03-raymarch"
, "04-mesh"
, "05-instancing"
, "06-bump"
, "07-callback"
, "08-update"
, "09-hdr"
, "10-font"
, "11-fontsdf"
, "12-lod"
, "13-stencil"
, "14-shadowvolumes"
, "15-shadowmaps-simple"
, "16-shadowmaps"
, "17-drawstress"
, "18-ibl"
, "19-oit"
, "20-nanovg"
, "21-deferred"
, "22-windows"
, "23-vectordisplay"
, "24-nbody"
, "26-occlusion"
, "27-terrain"
, "28-wireframe"
, "29-debugdraw"
, "30-picking"
, "31-rsm"
, "32-particles"
, "33-pom"
, "34-mvs"
, "35-dynamic"
, "36-sky"
)
-- C99 source doesn't compile under WinRT settings
if not premake.vstudio.iswinrt() then
exampleProject(false, "25-c99")
end
end
if _OPTIONS["with-shared-lib"] then
group "libs"
bgfxProject("-shared-lib", "SharedLib", {})
end
if _OPTIONS["with-tools"] then
group "tools"
dofile "shaderc.lua"
dofile "texturec.lua"
dofile "texturev.lua"
dofile "geometryc.lua"
end