library: vendors/stb_image + vendors/stb_truetype — stb ships with sx

The stb headers move from the repo-root vendors/ (resolvable only
with CWD = sx repo) into library/vendors/ following the sqlite
convention — bindings module + c/ sources + provenance README — so
'#import "vendors/stb_image/stb_image.sx"' (image v2.30 + image_write
v1.16) and '#import "vendors/stb_truetype/stb_truetype.sx"' (v1.26)
work from any consumer via the stdlib search paths. modules/ffi/stb.sx
dissolves into the stb_image vendor; modules/ffi/stb_truetype.sx keeps
its non-stb text-shaping companions and re-imports the vendored unit.
examples/1625 pins a deterministic in-memory BMP decode; examples/1626
pins font init + metric invariants against the system Helvetica.
This commit is contained in:
agra
2026-06-12 17:50:21 +03:00
parent 2097772ec9
commit 58af806b7a
22 changed files with 163 additions and 12 deletions

20
library/vendors/stb_image/README.md vendored Normal file
View File

@@ -0,0 +1,20 @@
# vendors/stb_image — image decode/encode for sx programs
- stb_image: **v2.30**; stb_image_write: **v1.16** (version comments at
the top of each header)
- Source: <https://github.com/nothings/stb> (`stb_image.h`,
`stb_image_write.h`)
- License: public domain / MIT, dual (see the headers' license blocks)
- Files: `c/stb_image.h` + `c/stb_image_impl.c`, `c/stb_image_write.h`
+ `c/stb_image_write_impl.c` (each impl .c defines the
`*_IMPLEMENTATION` macro and includes its header)
`#import "vendors/stb_image/stb_image.sx"` resolves through the stdlib
search paths; the decls (`stbi_load`, `stbi_load_from_memory`,
`stbi_image_free`, `stbi_write_png`, …) are synthesized from the
headers, and the implementation compiles once per machine through sx's
object cache. `examples/1625-vendor-stb-image-decode.sx` pins an
in-memory BMP decode in the sx suite.
To upgrade: replace the headers under `c/` with newer upstream copies,
update this file, and rebuild (the object cache keys on source bytes).

7988
library/vendors/stb_image/c/stb_image.h vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"

19
library/vendors/stb_image/stb_image.sx vendored Normal file
View File

@@ -0,0 +1,19 @@
// =====================================================================
// vendors/stb_image — Sean Barrett's stb_image (decode) and
// stb_image_write (encode) as one `#import c` unit (c/, see README.md
// for versions + provenance).
//
// `#import "vendors/stb_image/stb_image.sx"` gives any sx program
// image decode/encode with no system dependency and no build flags:
// the decls are synthesized from the headers, and the implementation
// compiles through sx's content-addressed object cache — once per
// machine, not once per run.
// =====================================================================
#import c {
#include "c/stb_image.h";
#source "c/stb_image_impl.c";
#include "c/stb_image_write.h";
#source "c/stb_image_write_impl.c";
};