diff options
| author | Saikari <[email protected]> | 2026-04-03 12:05:55 +0300 |
|---|---|---|
| committer | Saikari <[email protected]> | 2026-04-03 12:05:55 +0300 |
| commit | 03761ed3cde38efa84bd7f170415ad83bf9d2787 (patch) | |
| tree | 2e970d7f32b23a051d355f9ba271d3d5f7ed17ed | |
| parent | 74dbb8e44c4258c491a362dcd4b0583ba1806fd5 (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.c | 6 | ||||
| -rw-r--r-- | tests/projects/c/filc/safety_test/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/toolchains/filc/xmake.lua | 45 |
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) |
