Improve building and conditional declarations.

raylib-lua now manages properly `if defined` declarations.
This commit is contained in:
TSnake41 2021-10-24 13:16:32 +02:00
parent f501ca9512
commit 707d2309b1
5 changed files with 87 additions and 64 deletions

View File

@ -32,10 +32,13 @@ local cflags = os.getenv "CFLAGS" or "-O2 -s"
local ldflags = os.getenv "LDFLAGS" or "-O2 -s -lm" local ldflags = os.getenv "LDFLAGS" or "-O2 -s -lm"
local modules = "raymath rlgl easings gestures physac raygui" local modules = "raymath rlgl easings gestures physac raygui"
local graphics = os.getenv "GRAPHICS" or "GRAPHICS_API_OPENGL_33"
cflags = cflags .. " -Iluajit/src -Iraygui/src -Iraylib/src" cflags = cflags .. " -Iluajit/src -Iraygui/src -Iraylib/src"
ldflags = ldflags .. " luajit/src/libluajit.a raylib/src/libraylib.a luajit/src/libluajit.a" ldflags = ldflags .. " luajit/src/libluajit.a raylib/src/libraylib.a luajit/src/libluajit.a"
cflags = cflags .. " -D" .. graphics
local exe_ldflags = "" local exe_ldflags = ""
if los.type() == "linux" then if los.type() == "linux" then
@ -102,7 +105,7 @@ local raylua_src = {
}, true) }, true)
end) end)
} }
local raylua_obj = c.compile(raylua_src, cflags, "raylua", cc) local raylua_obj = c.compile(raylua_src, cflags .. " -D" .. graphics, "raylua", cc)
local libraylua = c.lib("libraylua.a", raylua_obj, "raylua", ar) local libraylua = c.lib("libraylua.a", raylua_obj, "raylua", ar)

View File

@ -23,7 +23,7 @@ local vars = saphire.map({
{ "RAYLIB_LIB_NAME", "raylib" }, { "RAYLIB_LIB_NAME", "raylib" },
{ "RAYLIB_RES_FILE", "./raylib.dll.rc.data" }, { "RAYLIB_RES_FILE", "./raylib.dll.rc.data" },
{ "PLATFORM", "PLATFORM_DESKTOP" }, { "PLATFORM", "PLATFORM_DESKTOP" },
{ "GRAPHICS", "GRAPHICS_API_OPENGL_43" }, { "GRAPHICS", "GRAPHICS_API_OPENGL_33" },
{ "USE_EXTERNAL_GLFW", "FALSE" }, { "USE_EXTERNAL_GLFW", "FALSE" },
{ "USE_WAYLAND_DISPLAY", "FALSE" } { "USE_WAYLAND_DISPLAY", "FALSE" }
}, function (v) }, function (v)

View File

@ -6,14 +6,16 @@ LUA ?= luajit/src/luajit
WINDRES ?= windres WINDRES ?= windres
CFLAGS += -Iluajit/src -Iraylib/src -Iraygui/src -DSUPPORT_COMPUTE_SHADERS CFLAGS += -Iluajit/src -Iraylib/src -Iraygui/src
LDFLAGS += luajit/src/libluajit.a raylib/src/libraylib.a LDFLAGS += luajit/src/libluajit.a raylib/src/libraylib.a
MODULES := raymath rlgl easings gestures physac raygui MODULES := raymath rlgl easings gestures physac raygui
# raylib settings # raylib settings
PLATFORM ?= PLATFORM_DESKTOP PLATFORM ?= PLATFORM_DESKTOP
GRAPHICS ?= GRAPHICS_API_OPENGL_43 GRAPHICS ?= GRAPHICS_API_OPENGL_33
CFLAGS += -D$(GRAPHICS)
USE_WAYLAND_DISPLAY ?= FALSE USE_WAYLAND_DISPLAY ?= FALSE
USE_EXTERNAL_GLFW ?= FALSE USE_EXTERNAL_GLFW ?= FALSE

View File

@ -31,11 +31,15 @@ local functions = {}
local proto = {} local proto = {}
local counter = 0 local counter = 0
local file = io.open(arg[1], "wb")
local modules = { "api" }
local funcname
local custom_support = { local custom_support = {
["rlgl"] = function (line) ["rlgl"] = function (line)
return line:gsub("([%s*]+)(rl%w+)", function (pre, part) return line:gsub("([%s*]+)(rl%w+)", function (pre, part)
functions[#functions + 1] = part functions[#functions + 1] = part
funcname = part
counter = counter + 1 counter = counter + 1
if counter == 2 then if counter == 2 then
@ -47,66 +51,10 @@ local custom_support = {
end end
} }
local file = io.open(arg[1], "wb")
local modules = { "api" }
for i=2,#arg do for i=2,#arg do
modules[i] = arg[i] modules[i] = arg[i]
end end
for _,modname in ipairs(modules) do
for line in io.lines("tools/" .. modname .. ".h") do
if line:sub(0, 2) ~= "//" then
if custom_support[modname] then
line = custom_support[modname](line)
end
line = line:gsub("(%W)([%l%d][%w_]*)", function (before, part)
for i,keyword in ipairs(keywords) do
if part == keyword
or part == "t" then -- uintX_t workaround
return before .. part
end
end
for i,s in ipairs(rl_structs) do
if part == s then
return before .. part
end
end
return before
end)
line = line:gsub("%u%w+", function (part)
for i,struct in ipairs(structs) do
if part == struct then
return part
end
end
functions[#functions + 1] = part
counter = counter + 1
if count == 2 then
print("WARN: Multiple matches for: " .. line)
end
return "(*)"
end)
-- Strip spaces
line = line:gsub("([(),*.])%s+(%w)", function (a, b) return a .. b end)
line = line:gsub("(%w)%s+([(),*.])", function (a, b) return a .. b end)
proto[#proto + 1] = line
end
end
end
assert(#proto == #functions, "Mismatching proto and function count : " ..
#proto .. " ~= " .. #functions)
file:write [[ file:write [[
struct raylua_bind_entry { struct raylua_bind_entry {
const char *name; const char *name;
@ -117,12 +65,76 @@ struct raylua_bind_entry {
struct raylua_bind_entry raylua_entries[] = { struct raylua_bind_entry raylua_entries[] = {
]] ]]
for i=1,#proto do for _,modname in ipairs(modules) do
local name, proto = functions[i], proto[i] for line in io.lines("tools/" .. modname .. ".h") do
file:write(string.format('{ "%s", "%s", &%s },\n', name, proto, name)) if line:sub(1, 2) ~= "//" then
if line:sub(1, 1) == "#" then
file:write(" " .. line .. "\n")
else
counter = 0
funcname = nil
if custom_support[modname] then
line = custom_support[modname](line)
end
line = line:gsub("(%W)([%l%d][%w_]*)", function (before, part)
for i,keyword in ipairs(keywords) do
if part == keyword
or part == "t" then -- uintX_t workaround
return before .. part
end
end
for i,s in ipairs(rl_structs) do
if part == s then
return before .. part
end
end
return before
end)
line = line:gsub("%u%w+", function (part)
for i,struct in ipairs(structs) do
if part == struct then
return part
end
end
functions[#functions + 1] = part
funcname = part
counter = counter + 1
if counter == 2 then
print("WARN: Multiple matches for: " .. line)
end
return "(*)"
end)
-- Strip spaces
line = line:gsub("([(),*.])%s+(%w)", function (a, b) return a .. b end)
line = line:gsub("(%w)%s+([(),*.])", function (a, b) return a .. b end)
proto[#proto + 1] = line
if funcname and line then
file:write(string.format(' { "%s", "%s", &%s },\n', funcname, line, funcname))
elseif counter == 0 then
print("WARN: Invalid entry", funcname, line)
end
end
end
end
end end
file:write '{ NULL, NULL, NULL },\n' assert(#proto == #functions, "Mismatching proto and function count : " ..
#proto .. " ~= " .. #functions)
print(string.format("Bound %d functions.", #proto))
file:write ' { NULL, NULL, NULL },\n'
file:write "};\n" file:write "};\n"
file:close() file:close()

View File

@ -27,6 +27,10 @@ void rlEnableVertexBufferElement(unsigned int id)
void rlDisableVertexBufferElement(void) void rlDisableVertexBufferElement(void)
void rlEnableVertexAttribute(unsigned int index) void rlEnableVertexAttribute(unsigned int index)
void rlDisableVertexAttribute(unsigned int index) void rlDisableVertexAttribute(unsigned int index)
#if defined(GRAPHICS_API_OPENGL_11)
void rlEnableStatePointer(int vertexAttribType, void *buffer)
void rlDisableStatePointer(int vertexAttribType)
#endif
void rlActiveTextureSlot(int slot) void rlActiveTextureSlot(int slot)
void rlEnableTexture(unsigned int id) void rlEnableTexture(unsigned int id)
void rlDisableTexture(void) void rlDisableTexture(void)
@ -116,6 +120,7 @@ void rlSetUniform(int locIndex, const void *value, int uniformType, int count)
void rlSetUniformMatrix(int locIndex, Matrix mat) void rlSetUniformMatrix(int locIndex, Matrix mat)
void rlSetUniformSampler(int locIndex, unsigned int textureId) void rlSetUniformSampler(int locIndex, unsigned int textureId)
void rlSetShader(unsigned int id, int *locs) void rlSetShader(unsigned int id, int *locs)
#if defined(GRAPHICS_API_OPENGL_43)
unsigned int rlLoadComputeShaderProgram(int shaderId) unsigned int rlLoadComputeShaderProgram(int shaderId)
void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ) void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ)
unsigned int rlLoadShaderBuffer(unsigned long long size, const void *data, int usageHint) unsigned int rlLoadShaderBuffer(unsigned long long size, const void *data, int usageHint)
@ -126,6 +131,7 @@ void rlReadShaderBufferElements(unsigned int id, void *dest, unsigned long long
void rlBindShaderBuffer(unsigned int id, unsigned int index) void rlBindShaderBuffer(unsigned int id, unsigned int index)
void rlCopyBuffersElements(unsigned int destId, unsigned int srcId, unsigned long long destOffset, unsigned long long srcOffset, unsigned long long count) void rlCopyBuffersElements(unsigned int destId, unsigned int srcId, unsigned long long destOffset, unsigned long long srcOffset, unsigned long long count)
void rlBindImageTexture(unsigned int id, unsigned int index, unsigned int format, int readonly) void rlBindImageTexture(unsigned int id, unsigned int index, unsigned int format, int readonly)
#endif
Matrix rlGetMatrixModelview(void) Matrix rlGetMatrixModelview(void)
Matrix rlGetMatrixProjection(void) Matrix rlGetMatrixProjection(void)
Matrix rlGetMatrixTransform(void) Matrix rlGetMatrixTransform(void)