shed local vendors: stb + kb_text_shape + file_utils now ship with sx

The local vendors/ copies existed because the old modules/ffi/stb*.sx
resolved C paths CWD-relative, forcing every consumer to carry
identically-named copies. sx now ships these as proper library vendors
(#import "vendors/<name>/<name>.sx"), so the copies and the retired
ffi module imports both go. Verified: sx build --target ios-sim
bundles M3te.app; tools/run_tests.sh 23/23.
This commit is contained in:
swipelab
2026-06-12 18:35:12 +03:00
parent 39740a1d36
commit 31d1012806
16 changed files with 7 additions and 45643 deletions

View File

@@ -13,7 +13,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math"; #import "modules/math";
#import "modules/ffi/opengl.sx"; #import "modules/ffi/opengl.sx";
#import "modules/ffi/stb.sx"; #import "vendors/stb_image/stb_image.sx";
#import "modules/gpu/types.sx"; #import "modules/gpu/types.sx";
#import "modules/gpu/api.sx"; #import "modules/gpu/api.sx";
#import "modules/ui/types.sx"; #import "modules/ui/types.sx";

View File

@@ -7,7 +7,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math"; #import "modules/math";
#import "modules/ffi/opengl.sx"; #import "modules/ffi/opengl.sx";
#import "modules/ffi/stb.sx"; #import "vendors/stb_image/stb_image.sx";
#import "modules/gpu/types.sx"; #import "modules/gpu/types.sx";
#import "modules/gpu/api.sx"; #import "modules/gpu/api.sx";
#import "modules/ui/types.sx"; #import "modules/ui/types.sx";

View File

@@ -4,8 +4,10 @@
#import "modules/ffi/opengl.sx"; #import "modules/ffi/opengl.sx";
#import "modules/ffi/sdl3.sx"; #import "modules/ffi/sdl3.sx";
#import "modules/math"; #import "modules/math";
#import "modules/ffi/stb.sx"; #import "vendors/stb_image/stb_image.sx";
#import "modules/ffi/stb_truetype.sx"; #import "vendors/stb_truetype/stb_truetype.sx";
#import "vendors/kb_text_shape/kb_text_shape.sx";
#import "vendors/file_utils/file_utils.sx";
#import "modules/gpu/api.sx"; #import "modules/gpu/api.sx";
#import "modules/gpu/types.sx"; #import "modules/gpu/types.sx";
#import "modules/gpu/metal.sx"; #import "modules/gpu/metal.sx";

View File

@@ -20,7 +20,7 @@
// never hits this — its loops run over 64 board cells, not millions of pixels. // never hits this — its loops run over 64 board cells, not millions of pixels.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math"; #import "modules/math";
#import "modules/ffi/stb.sx"; #import "vendors/stb_image/stb_image.sx";
SRC_PATH :: "/Users/agra/Downloads/m3te_particle.png"; SRC_PATH :: "/Users/agra/Downloads/m3te_particle.png";
OUT_PATH :: "assets/fx/particle.png"; OUT_PATH :: "assets/fx/particle.png";

View File

@@ -1,55 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef __ANDROID__
#include <android/asset_manager.h>
// Caller-installed AAssetManager pointer. Chess's android_main extracts
// it from `app->activity->assetManager` (via sx-side platform module's
// `g_android_asset_manager` global) and feeds it here once at startup.
// Until the setter has been called, Android falls through to fopen —
// gives a predictable "file not found" rather than a NULL-deref.
static AAssetManager* g_aam = NULL;
void sx_android_set_asset_manager(void* m) {
g_aam = (AAssetManager*)m;
}
#endif
unsigned char* read_file_bytes(const char* path, int* out_size) {
#ifdef __ANDROID__
if (g_aam != NULL) {
// AAssetManager paths are relative to the APK's `assets/`
// directory. Strip a leading "assets/" so callers can use the
// same paths across iOS/macOS/Android (those platforms read
// assets via `assets/...` rooted in the bundle or CWD).
const char* lookup = path;
if (strncmp(path, "assets/", 7) == 0) {
lookup = path + 7;
}
AAsset* a = AAssetManager_open(g_aam, lookup, AASSET_MODE_BUFFER);
if (a != NULL) {
off_t n = AAsset_getLength(a);
*out_size = (int)n;
unsigned char* buf = (unsigned char*)malloc((size_t)n);
if (buf != NULL) {
memcpy(buf, AAsset_getBuffer(a), (size_t)n);
}
AAsset_close(a);
return buf;
}
// Falls through to fopen — useful when assets land in the data
// dir via extraction or app updates.
}
#endif
FILE* f = fopen(path, "rb");
if (!f) return 0;
fseek(f, 0, SEEK_END);
*out_size = (int)ftell(f);
fseek(f, 0, SEEK_SET);
unsigned char* buf = (unsigned char*)malloc(*out_size);
fread(buf, 1, *out_size, f);
fclose(f);
return buf;
}

View File

@@ -1,13 +0,0 @@
#ifndef FILE_UTILS_H
#define FILE_UTILS_H
unsigned char* read_file_bytes(const char* path, int* out_size);
#ifdef __ANDROID__
// Install the AAssetManager that `read_file_bytes` consults for paths
// rooted inside the APK. Caller is responsible for passing the manager
// from `ANativeActivity->assetManager` before any read_file_bytes call.
void sx_android_set_asset_manager(void* m);
#endif
#endif

View File

@@ -1,19 +0,0 @@
zlib License
(C) Copyright 2024-2025 Jimmy Lefevre
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +0,0 @@
#define KB_TEXT_SHAPE_IMPLEMENTATION
#include "kb/kb_text_shape.h"

View File

@@ -1,15 +0,0 @@
// Minimal API declarations for SX import.
// Only the functions/types we actually use — avoids parsing the full 30k-line header.
typedef struct kbts_shape_context kbts_shape_context;
typedef struct kbts_font kbts_font;
kbts_shape_context *kbts_CreateShapeContext(void *Allocator, void *AllocatorData);
void kbts_DestroyShapeContext(kbts_shape_context *Context);
kbts_font *kbts_ShapePushFontFromMemory(kbts_shape_context *Context, void *Memory, int Size, int FontIndex);
void kbts_GetFontInfo2(kbts_font *Font, void *Info);
void kbts_ShapeBegin(kbts_shape_context *Context, unsigned int ParagraphDirection, unsigned int Language);
void kbts_ShapeUtf8(kbts_shape_context *Context, const char *Utf8, int Length, unsigned int UserIdGenerationMode);
void kbts_ShapeEnd(kbts_shape_context *Context);
int kbts_ShapeRun(kbts_shape_context *Context, void *Run);
int kbts_GlyphIteratorNext(void *It, void **Glyph);

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +0,0 @@
#define STB_TRUETYPE_IMPLEMENTATION
#include "stb_truetype.h"