diff --git a/examples/ffi-07-c-import-block.sx b/examples/ffi-07-c-import-block.sx new file mode 100644 index 0000000..eeb6643 --- /dev/null +++ b/examples/ffi-07-c-import-block.sx @@ -0,0 +1,25 @@ +// Phase 0 baseline (PLAN-FFI.md step 0.7): `#import c { #include / +// #source }` end-to-end, with the new stdlib-path resolution +// (src/imports.zig added this session). The header + .c live ONLY +// under `library/vendors/sx_ffi_resolve_test/` — not the sx repo +// root vendors/ — so the path can be found only by the stdlib +// search branch (`/../../library` etc.), not by the CWD or +// importing-file's-dir branches. +// +// `#include` triggers c_import.zig's auto-synthesis of `#foreign` +// fn decls from the C header; `#source` adds the .c to the build's +// object list. Together they let the sx side call the C functions +// by their declared names with no manual decls. + +#import "modules/std.sx"; + +#import c { + #include "vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.h"; + #source "vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.c"; +}; + +main :: () -> s32 { + print("add(3, 4) = {}\n", sx_ffi_resolve_test_add(3, 4)); + print("mul(6, 7) = {}\n", sx_ffi_resolve_test_mul(6, 7)); + 0; +} diff --git a/library/vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.c b/library/vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.c new file mode 100644 index 0000000..12d2fc5 --- /dev/null +++ b/library/vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.c @@ -0,0 +1,4 @@ +#include "sx_ffi_resolve_test.h" + +int sx_ffi_resolve_test_add(int a, int b) { return a + b; } +int sx_ffi_resolve_test_mul(int a, int b) { return a * b; } diff --git a/library/vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.h b/library/vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.h new file mode 100644 index 0000000..b601a71 --- /dev/null +++ b/library/vendors/sx_ffi_resolve_test/sx_ffi_resolve_test.h @@ -0,0 +1,7 @@ +// Lives in library/vendors/ (NOT alongside the sx repo root vendors/), +// so the only way the build can find this from `vendors/...` is via +// imports.zig's stdlib-path resolution chain. Used as a regression net +// for that resolution branch — see examples/ffi-07-c-import-block.sx. + +int sx_ffi_resolve_test_add(int a, int b); +int sx_ffi_resolve_test_mul(int a, int b); diff --git a/tests/expected/ffi-07-c-import-block.exit b/tests/expected/ffi-07-c-import-block.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/expected/ffi-07-c-import-block.exit @@ -0,0 +1 @@ +0 diff --git a/tests/expected/ffi-07-c-import-block.txt b/tests/expected/ffi-07-c-import-block.txt new file mode 100644 index 0000000..ab26723 --- /dev/null +++ b/tests/expected/ffi-07-c-import-block.txt @@ -0,0 +1,2 @@ +add(3, 4) = 7 +mul(6, 7) = 42