bgfx/scripts/genie.lua

603 lines
12 KiB
Lua
Raw Normal View History

2012-04-04 07:30:07 +04:00
--
2024-01-14 12:56:36 +03:00
-- Copyright 2010-2024 Branimir Karadzic. All rights reserved.
2022-01-15 22:59:06 +03:00
-- License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE
2012-04-04 07:30:07 +04:00
--
2020-09-05 21:24:50 +03:00
MODULE_DIR = path.getabsolute("../")
2014-05-05 02:43:14 +04:00
newoption {
trigger = "with-amalgamated",
description = "Enable amalgamated build.",
2014-05-05 02:43:14 +04:00
}
newoption {
trigger = "with-sdl",
description = "Enable SDL entry.",
}
2015-03-25 08:19:21 +03:00
newoption {
trigger = "with-glfw",
description = "Enable GLFW entry.",
}
2019-03-05 13:21:19 +03:00
newoption {
trigger = "with-wayland",
description = "Use Wayland backend.",
}
2015-11-14 08:11:19 +03:00
newoption {
trigger = "with-profiler",
description = "Enable build with intrusive profiler.",
}
2014-10-20 08:29:27 +04:00
newoption {
trigger = "with-shared-lib",
description = "Enable building shared library.",
}
newoption {
trigger = "with-tools",
description = "Enable building tools.",
2014-10-20 08:29:27 +04:00
}
2017-06-26 08:54:17 +03:00
newoption {
trigger = "with-combined-examples",
description = "Enable building examples (combined as single executable).",
}
newoption {
trigger = "with-examples",
description = "Enable building examples.",
}
2019-02-27 12:49:28 +03:00
newaction {
trigger = "idl",
description = "Generate bgfx interface source code",
2019-03-14 08:26:11 +03:00
execute = function ()
local gen = require "bgfx-codegen"
local function generate(tempfile, outputfile, indent)
local codes = gen.apply(tempfile)
codes = gen.format(codes, {indent = indent})
gen.write(codes, outputfile)
print("Generating: " .. outputfile)
end
generate("temp.bgfx.h" , "../include/bgfx/c99/bgfx.h", " ")
generate("temp.bgfx.idl.inl", "../src/bgfx.idl.inl", "\t")
2019-05-24 06:31:36 +03:00
generate("temp.defines.h", "../include/bgfx/defines.h", "\t")
2019-03-14 08:26:11 +03:00
2019-07-05 02:46:25 +03:00
do
2019-07-06 19:47:45 +03:00
local csgen = require "bindings-cs"
2019-07-05 02:46:25 +03:00
csgen.write(csgen.gen(), "../bindings/cs/bgfx.cs")
csgen.write(csgen.gen_dllname(), "../bindings/cs/bgfx_dllname.cs")
local dgen = require "bindings-d"
dgen.write(dgen.gen(), "../bindings/d/package.d")
dgen.write(dgen.fakeEnumFile, "../bindings/d/fakeenum.d")
local csgen = require "bindings-bf"
csgen.write(csgen.gen(), "../bindings/bf/bgfx.bf")
2022-04-04 04:42:43 +03:00
local ziggen = require "bindings-zig"
ziggen.write(ziggen.gen(), "../bindings/zig/bgfx.zig")
2019-07-05 02:46:25 +03:00
end
2019-06-26 23:43:37 +03:00
os.exit()
end
}
2020-04-02 06:50:44 +03:00
newaction {
trigger = "version",
description = "Generate bgfx version.h",
execute = function ()
local f = io.popen("git rev-list --count HEAD")
local rev = string.match(f:read("*a"), ".*%S")
2022-04-01 06:21:32 +03:00
local codegen = require "codegen"
local idl = codegen.idl "bgfx.idl"
print("1." .. idl._version .. "." .. rev)
2020-04-02 06:50:44 +03:00
f:close()
f = io.popen("git log --format=format:%H -1")
local sha1 = f:read("*a")
f:close()
2020-09-05 21:24:50 +03:00
io.output(path.join(MODULE_DIR, "src/version.h"))
2020-04-02 06:50:44 +03:00
io.write("/*\n")
2024-01-14 12:56:36 +03:00
io.write(" * Copyright 2011-2024 Branimir Karadzic. All rights reserved.\n")
2022-01-15 22:59:06 +03:00
io.write(" * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE\n")
2020-04-02 06:50:44 +03:00
io.write(" */\n")
io.write("\n")
io.write("/*\n")
io.write(" *\n")
io.write(" * AUTO GENERATED! DO NOT EDIT!\n")
io.write(" *\n")
io.write(" */\n")
io.write("\n")
io.write("#define BGFX_REV_NUMBER " .. rev .. "\n")
io.write("#define BGFX_REV_SHA1 \"" .. sha1 .. "\"\n")
io.close()
os.exit()
end
}
2012-04-04 07:30:07 +04:00
solution "bgfx"
configurations {
"Debug",
"Release",
}
if _ACTION ~= nil and _ACTION:match "^xcode" then
platforms {
"Native", -- let xcode decide based on the target output
}
else
platforms {
"x32",
"x64",
-- "Xbox360",
"Native", -- for targets where bitness is not specified
}
end
2012-04-04 07:30:07 +04:00
language "C++"
2014-09-16 07:50:35 +04:00
startproject "example-00-helloworld"
2012-04-04 07:30:07 +04:00
2016-04-22 08:12:35 +03:00
BGFX_DIR = path.getabsolute("..")
BX_DIR = os.getenv("BX_DIR")
BIMG_DIR = os.getenv("BIMG_DIR")
2016-01-10 02:34:41 +03:00
local BGFX_BUILD_DIR = path.join(BGFX_DIR, ".build")
local BGFX_THIRD_PARTY_DIR = path.join(BGFX_DIR, "3rdparty")
2016-01-10 02:34:41 +03:00
if not BX_DIR then
2016-01-10 07:30:15 +03:00
BX_DIR = path.getabsolute(path.join(BGFX_DIR, "../bx"))
2016-01-10 02:34:41 +03:00
end
2012-09-17 04:36:08 +04:00
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
2020-05-09 20:24:23 +03:00
print("bx not found at \"" .. BX_DIR .. "\". git clone https://github.com/bkaradzic/bx?")
end
if not os.isdir(BIMG_DIR) then
2020-05-09 20:24:23 +03:00
print("bimg not found at \"" .. BIMG_DIR .. "\". git clone https://github.com/bkaradzic/bimg?")
end
2015-12-11 09:58:31 +03:00
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
2012-04-04 07:30:07 +04:00
2012-06-02 08:56:20 +04:00
function copyLib()
end
2019-03-05 13:21:19 +03:00
if _OPTIONS["with-wayland"] then
defines { "WL_EGL_PLATFORM=1" }
2019-03-05 13:21:19 +03:00
end
if _OPTIONS["with-sdl"] then
if os.is("windows") then
if not os.getenv("SDL2_DIR") then
print("Set SDL2_DIR environment variable.")
end
end
end
2015-11-14 08:11:19 +03:00
if _OPTIONS["with-profiler"] then
defines {
"ENTRY_CONFIG_PROFILER=1",
2017-10-07 06:10:05 +03:00
"BGFX_CONFIG_PROFILER=1",
2015-11-14 08:11:19 +03:00
}
end
2017-06-25 04:23:43 +03:00
function exampleProjectDefaults()
2013-01-27 04:30:02 +04:00
debugdir (path.join(BGFX_DIR, "examples/runtime"))
2013-01-27 04:30:02 +04:00
includedirs {
2017-04-04 08:42:27 +03:00
path.join(BIMG_DIR, "include"),
path.join(BGFX_DIR, "include"),
path.join(BGFX_DIR, "3rdparty"),
path.join(BGFX_DIR, "examples/common"),
2013-01-27 04:30:02 +04:00
}
2017-03-13 04:25:23 +03:00
flags {
"FatalWarnings",
}
2013-01-27 04:30:02 +04:00
links {
"example-glue",
2019-08-15 07:19:03 +03:00
"example-common",
2013-01-27 04:30:02 +04:00
"bgfx",
2017-04-04 08:42:27 +03:00
"bimg_decode",
"bimg",
2013-01-27 04:30:02 +04:00
}
using_bx()
if _OPTIONS["with-sdl"] then
defines { "ENTRY_CONFIG_USE_SDL=1" }
links { "SDL2" }
2019-03-05 13:21:19 +03:00
configuration { "linux or freebsd" }
if _OPTIONS["with-wayland"] then
links {
"wayland-egl",
}
end
configuration { "osx*" }
2016-01-24 08:07:44 +03:00
libdirs { "$(SDL2_DIR)/lib" }
configuration {}
end
2015-03-25 08:19:21 +03:00
if _OPTIONS["with-glfw"] then
defines { "ENTRY_CONFIG_USE_GLFW=1" }
links { "glfw3" }
2015-03-25 08:19:21 +03:00
2015-04-10 17:46:49 +03:00
configuration { "linux or freebsd" }
2019-03-05 13:21:19 +03:00
if _OPTIONS["with-wayland"] then
links {
"wayland-egl",
}
else
links {
"Xrandr",
"Xinerama",
"Xi",
"Xxf86vm",
"Xcursor",
}
end
2015-03-25 09:21:32 +03:00
configuration { "osx*" }
2015-03-25 08:19:21 +03:00
linkoptions {
"-framework CoreVideo",
}
configuration {}
end
2016-02-26 07:29:09 +03:00
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",
}
2016-02-26 07:29:09 +03:00
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"
2016-02-26 07:29:09 +03:00
links {
"comdlg32",
2016-02-26 07:29:09 +03:00
"gdi32",
"psapi",
}
2016-02-26 07:29:09 +03:00
configuration { "vs20*", "x32 or x64" }
2014-10-16 10:21:46 +04:00
links {
"gdi32",
"psapi",
}
2016-02-26 07:29:09 +03:00
configuration { "durango" }
links {
"d3d11_x",
2016-03-09 03:39:59 +03:00
"d3d12_x",
2016-02-26 07:29:09 +03:00
"combase",
"kernelx",
}
2017-12-15 07:40:30 +03:00
configuration { "winstore*" }
removelinks {
"DelayImp",
"gdi32",
"psapi"
}
links {
"d3d11",
2017-12-14 10:40:39 +03:00
"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
2017-12-15 07:40:30 +03:00
configuration { "x32", "winstore*" }
targetdir (path.join(BGFX_BUILD_DIR, "win32_" .. _ACTION, "bin", _name))
objdir (path.join(BGFX_BUILD_DIR, "win32_" .. _ACTION, "obj", _name))
2017-12-15 07:40:30 +03:00
configuration { "x64", "winstore*" }
targetdir (path.join(BGFX_BUILD_DIR, "win64_" .. _ACTION, "bin", _name))
objdir (path.join(BGFX_BUILD_DIR, "win64_" .. _ACTION, "obj", _name))
2017-12-15 07:40:30 +03:00
configuration { "ARM", "winstore*" }
targetdir (path.join(BGFX_BUILD_DIR, "arm_" .. _ACTION, "bin", _name))
objdir (path.join(BGFX_BUILD_DIR, "arm_" .. _ACTION, "obj", _name))
2014-10-18 10:17:29 +04:00
configuration { "mingw-clang" }
kind "ConsoleApp"
2013-04-17 10:12:03 +04:00
configuration { "android*" }
2013-12-03 07:46:25 +04:00
kind "ConsoleApp"
2013-04-17 10:12:03 +04:00
targetextension ".so"
2013-12-03 07:46:25 +04:00
linkoptions {
"-shared",
}
2013-04-17 10:12:03 +04:00
links {
"EGL",
"GLESv2",
}
configuration { "android*", "Debug" }
linkoptions {
"-Wl,-soname,lib" .. project().name .. "Debug.so"
}
configuration { "android*", "Release" }
linkoptions {
"-Wl,-soname,lib" .. project().name .. "Release.so"
}
configuration { "wasm*" }
2014-03-16 23:38:43 +04:00
kind "ConsoleApp"
2020-01-19 01:41:20 +03:00
linkoptions {
2023-12-15 18:55:48 +03:00
"-sGL_ENABLE_GET_PROC_ADDRESS",
"-s TOTAL_MEMORY=32MB",
"-s ALLOW_MEMORY_GROWTH=1",
"--preload-file ../../../examples/runtime@/"
2020-01-19 01:41:20 +03:00
}
removeflags {
"OptimizeSpeed",
}
flags {
"Optimize"
}
2014-03-16 23:38:43 +04:00
configuration { "linux-* or freebsd" }
2013-01-27 04:30:02 +04:00
links {
2013-04-30 06:35:33 +04:00
"X11",
2013-01-27 04:30:02 +04:00
"GL",
"pthread",
}
2014-08-25 04:41:41 +04:00
configuration { "rpi" }
links {
"X11",
"brcmGLESv2",
"brcmEGL",
2014-08-25 04:41:41 +04:00
"bcm_host",
2014-08-25 07:39:35 +04:00
"vcos",
"vchiq_arm",
2014-08-25 04:41:41 +04:00
"pthread",
}
configuration { "osx*" }
2015-10-07 01:27:54 +03:00
linkoptions {
"-framework Cocoa",
"-framework IOKit",
2015-10-07 01:27:54 +03:00
"-framework OpenGL",
"-framework QuartzCore",
"-weak_framework Metal",
2013-01-27 04:30:02 +04:00
}
2015-10-12 23:32:39 +03:00
configuration { "ios* or tvos*" }
2013-07-22 01:44:53 +04:00
kind "ConsoleApp"
2013-07-13 09:27:46 +04:00
linkoptions {
"-framework CoreFoundation",
"-framework Foundation",
"-framework IOKit",
2013-07-13 09:27:46 +04:00
"-framework OpenGLES",
2013-07-22 01:44:53 +04:00
"-framework QuartzCore",
"-framework UIKit",
"-weak_framework Metal",
2013-07-13 09:27:46 +04:00
}
configuration { "xcode*", "ios" }
kind "WindowedApp"
files {
path.join(BGFX_DIR, "examples/runtime/iOS-Info.plist"),
}
configuration { "xcode*", "tvos" }
2015-10-12 23:32:39 +03:00
kind "WindowedApp"
files {
path.join(BGFX_DIR, "examples/runtime/tvOS-Info.plist"),
}
configuration {}
strip()
2013-01-27 04:30:02 +04:00
end
2017-06-25 04:56:45 +03:00
function exampleProject(_combined, ...)
2017-06-25 04:23:43 +03:00
2017-06-25 04:56:45 +03:00
if _combined then
2017-06-25 04:23:43 +03:00
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
2017-06-26 07:44:04 +03:00
files {
path.join(BGFX_DIR, "examples/25-c99/helloworld.c"), -- hack for _main_
}
2017-06-25 04:23:43 +03:00
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"),
}
2017-06-26 07:44:04 +03:00
defines {
"ENTRY_CONFIG_IMPLEMENT_MAIN=1",
}
2017-06-25 04:23:43 +03:00
exampleProjectDefaults()
end
end
end
2021-10-27 06:13:30 +03:00
group "libs"
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"))
2012-06-02 06:55:56 +04:00
dofile "bgfx.lua"
2014-12-06 23:52:14 +03:00
local function userdefines()
local defines = {}
local BGFX_CONFIG = os.getenv("BGFX_CONFIG")
if BGFX_CONFIG then
for def in BGFX_CONFIG:gmatch "[^%s:]+" do
table.insert(defines, "BGFX_CONFIG_" .. def)
end
end
return defines
end
BGFX_CONFIG = userdefines()
bgfxProject("", "StaticLib", BGFX_CONFIG)
2014-09-11 10:01:22 +04:00
2021-10-27 06:13:30 +03:00
if _OPTIONS["with-shared-lib"] then
group "libs"
bgfxProject("-shared-lib", "SharedLib", BGFX_CONFIG)
end
if _OPTIONS["with-tools"] then
2021-10-27 06:13:30 +03:00
group "libs"
dofile(path.join(BIMG_DIR, "scripts/bimg_encode.lua"))
end
2017-01-09 02:15:22 +03:00
2017-06-26 08:54:17 +03:00
if _OPTIONS["with-examples"]
or _OPTIONS["with-combined-examples"]
or _OPTIONS["with-tools"] then
2016-09-10 19:53:29 +03:00
group "examples"
dofile "example-common.lua"
end
2017-06-26 08:54:17 +03:00
if _OPTIONS["with-examples"]
or _OPTIONS["with-combined-examples"] then
group "examples"
2017-06-25 04:23:43 +03:00
2017-06-26 08:54:17 +03:00
exampleProject(_OPTIONS["with-combined-examples"]
2017-06-25 04:23:43 +03:00
, "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"
, "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"
2017-08-19 20:58:06 +03:00
, "34-mvs"
, "35-dynamic"
, "36-sky"
, "37-gpudrivenrendering"
, "38-bloom"
, "39-assao"
, "40-svt"
, "41-tess"
2020-05-30 20:49:06 +03:00
, "42-bunnylod"
2021-01-02 21:46:43 +03:00
, "43-denoise"
, "44-sss"
, "45-bokeh"
2021-10-07 03:40:57 +03:00
, "46-fsr"
, "47-pixelformats"
, "48-drawindirect"
, "49-hextile"
2017-06-25 04:23:43 +03:00
)
-- 17-drawstress requires multithreading, does not compile for singlethreaded wasm
if premake.gcc.namestyle == nil or not premake.gcc.namestyle == "Emscripten" then
exampleProject(false, "17-drawstress")
end
-- C99 source doesn't compile under WinRT settings
if not premake.vstudio.iswinrt() then
2017-06-25 04:56:45 +03:00
exampleProject(false, "25-c99")
end
end
2014-05-05 02:43:14 +04:00
if _OPTIONS["with-tools"] then
2014-12-06 23:52:14 +03:00
group "tools"
2014-05-05 02:43:14 +04:00
dofile "shaderc.lua"
dofile "texturec.lua"
2016-04-22 08:12:35 +03:00
dofile "texturev.lua"
2014-05-05 02:43:14 +04:00
dofile "geometryc.lua"
2019-06-19 22:37:35 +03:00
dofile "geometryv.lua"
2014-05-05 02:43:14 +04:00
end