summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaikari <[email protected]>2026-04-03 12:05:55 +0300
committerSaikari <[email protected]>2026-04-03 12:05:55 +0300
commit03761ed3cde38efa84bd7f170415ad83bf9d2787 (patch)
tree2e970d7f32b23a051d355f9ba271d3d5f7ed17ed
parent74dbb8e44c4258c491a362dcd4b0583ba1806fd5 (diff)
refactor safety test and toolchain configuration for filc: streamline function pointer test and enhance toolset definitions
-rw-r--r--tests/projects/c/filc/safety_test/src/main.c6
-rw-r--r--tests/projects/c/filc/safety_test/xmake.lua2
-rw-r--r--xmake/toolchains/filc/xmake.lua45
3 files changed, 20 insertions, 33 deletions
diff --git a/tests/projects/c/filc/safety_test/src/main.c b/tests/projects/c/filc/safety_test/src/main.c
index 4f5ad91b9..d23718c3e 100644
--- a/tests/projects/c/filc/safety_test/src/main.c
+++ b/tests/projects/c/filc/safety_test/src/main.c
@@ -7,12 +7,10 @@
#include <stdfil.h>
#include <stdlib.h>
-static void foo(void)
-{
+static void foo(void) {
}
-int main()
-{
+int main() {
void (*my_foo)(void) = (void(*)(void))((char*)foo + 42);
my_foo();
return 0;
diff --git a/tests/projects/c/filc/safety_test/xmake.lua b/tests/projects/c/filc/safety_test/xmake.lua
index e2d47da57..4ebbf9792 100644
--- a/tests/projects/c/filc/safety_test/xmake.lua
+++ b/tests/projects/c/filc/safety_test/xmake.lua
@@ -4,6 +4,6 @@ add_requires("filc")
target("safety_test")
set_kind("binary")
- set_toolchains("filc", {packages = "filc"})
+ set_toolchains("@filc")
add_packages("filc")
add_files("src/*.c")
diff --git a/xmake/toolchains/filc/xmake.lua b/xmake/toolchains/filc/xmake.lua
index 5c7dab2d6..326d50022 100644
--- a/xmake/toolchains/filc/xmake.lua
+++ b/xmake/toolchains/filc/xmake.lua
@@ -22,6 +22,13 @@ toolchain("filc")
set_homepage("https://fil-c.org/")
set_description("A memory safe implementation of the C and C++ programming languages.")
+ set_toolset("cc", "filcc")
+ set_toolset("cxx", "fil++")
+ set_toolset("ld", "filcc")
+ set_toolset("sh", "filcc")
+ set_toolset("ar", "ar")
+ set_toolset("as", "filcc")
+
on_check(function (toolchain)
import("lib.detect.find_tool")
@@ -46,40 +53,28 @@ toolchain("filc")
local filcc = find_tool("filcc", {paths = paths, force = true})
if filcc then
- toolchain:config_set("filcc", filcc.program)
if os.isfile(filcc.program) then
toolchain:config_set("bindir", path.directory(filcc.program))
- end
- -- discover fil++ explicitly rather than inferring from filcc's bindir
- local filxx = find_tool("fil++", {paths = paths, force = true})
- if filxx then
- toolchain:config_set("filxx", filxx.program)
+ -- set sdkdir to the package install root so on_load can find pizfix
+ for _, package in ipairs(toolchain:packages()) do
+ local installdir = package:installdir()
+ if installdir and filcc.program:startswith(installdir) then
+ toolchain:config_set("sdkdir", installdir)
+ break
+ end
+ end
end
return true
end
end)
on_load(function (toolchain)
- local filcc = toolchain:config("filcc") or "filcc"
- local filpp = toolchain:config("filxx") or (function()
- local bindir = toolchain:config("bindir")
- return bindir and path.join(bindir, "fil++") or "fil++"
- end)()
-
- -- filcc/fil++ are the compilers and linker; ar uses the system archiver
- toolchain:set("toolset", "cc", filcc)
- toolchain:set("toolset", "cxx", filpp)
- toolchain:set("toolset", "ld", filcc)
- toolchain:set("toolset", "sh", filcc)
- toolchain:set("toolset", "ar", "ar")
- toolchain:set("toolset", "as", filcc)
-
-- expose host system headers (GL, X11, etc.) via -idirafter so they are
-- searched AFTER filc's own libc++ headers, preventing stdlib.h conflicts
for _, sysdir in ipairs({"/usr/include", "/usr/local/include"}) do
if os.isdir(sysdir) then
- toolchain:add("cflags", "-idirafter", sysdir)
- toolchain:add("cxflags", "-idirafter", sysdir)
+ toolchain:add("cflags", "-idirafter " .. sysdir)
+ toolchain:add("cxflags", "-idirafter " .. sysdir)
end
end
@@ -98,12 +93,6 @@ toolchain("filc")
end
end
end
- for _, package in ipairs(toolchain:packages()) do
- local installdir = package:installdir()
- if installdir then
- _add_pizfix(installdir)
- end
- end
local sdkdir = toolchain:sdkdir()
if sdkdir and os.isdir(sdkdir) then
_add_pizfix(sdkdir)