From 744f64b83b0d981924ba4c1e3e7426459a12f7bc Mon Sep 17 00:00:00 2001 From: John Alanbrook Date: Fri, 5 Dec 2025 19:31:56 -0600 Subject: [PATCH] remove sdl header reqs; better compile invalidation --- scripts/crypto.c | 2 +- scripts/fd.c | 4 +- scripts/shop.cm | 144 ++++++++++++++++++++++++++++++++--------- source/cell.h | 3 +- source/cell_internal.h | 4 +- 5 files changed, 120 insertions(+), 37 deletions(-) diff --git a/scripts/crypto.c b/scripts/crypto.c index 20f8ef54..5dca343c 100644 --- a/scripts/crypto.c +++ b/scripts/crypto.c @@ -101,7 +101,7 @@ JSValue js_crypto_blake2(JSContext *js, JSValue self, int argc, JSValue *argv) size_t data_bits; uint8_t *data = get_blob_any(js, argv[0], &data_bits, "crypto.blake2 data"); - if (data == -1) return JS_EXCEPTION; + if (!data) return JS_EXCEPTION; int32_t hash_len = 32; if (argc > 1) { diff --git a/scripts/fd.c b/scripts/fd.c index c7373f43..70b5c2ba 100644 --- a/scripts/fd.c +++ b/scripts/fd.c @@ -466,7 +466,7 @@ JSC_CCALL(fd_is_file, struct stat st; if (stat(path, &st) != 0) { JS_FreeCString(js, path); - return JS_NewBool(js, false); + return JS_NewBool(js, 0); } JS_FreeCString(js, path); @@ -480,7 +480,7 @@ JSC_CCALL(fd_is_dir, struct stat st; if (stat(path, &st) != 0) { JS_FreeCString(js, path); - return JS_NewBool(js, false); + return JS_NewBool(js, 0); } JS_FreeCString(js, path); diff --git a/scripts/shop.cm b/scripts/shop.cm index 745ff2c8..4ea4f742 100644 --- a/scripts/shop.cm +++ b/scripts/shop.cm @@ -1156,6 +1156,10 @@ Shop.build_package = function(package) else use_prefix = 'js_' + package.replace(/\//g, '_').replace(/\./g, '_').replace(/-/g, '_') + '_' var c_objects = [] + + function get_hash(str) { + return text(crypto.blake2(utf8.encode(str)), 'h') + } for (var i=0; i st_obj.mtime) { + log.console(`${header_full} out of date`) + needs_compile = true; break; + } + } + } + } } } if (needs_compile) { log.console("Compiling " + src_path + " -> " + obj_path) - var comp_src = file - var comp_obj = file + '.o' - var cmd = 'cd ' + module_dir + ' && cc -fPIC -c ' + comp_src + ' -O3 -DCELL_USE_NAME=' + use_name + ' -o ' + comp_obj - if (cflags != '') cmd += ' ' + cflags - var ret = os.system(cmd) + // 1. Generate dependencies + var deps_file = comp_obj + '.d' + // Use same flags but with -M + var deps_cmd = 'cd ' + module_dir + ' && ' + base_cmd + '-MM ' + compile_flags + ' > ' + deps_file + os.system(deps_cmd) + + var headers = [] + var deps_full_path = module_dir + '/' + deps_file + + if (fd.is_file(deps_full_path)) { + var deps_content = text(fd.slurp(deps_full_path)) + deps_content = deps_content.replace(/\\\n/g, ' ').replace(/\\\r\n/g, ' ').replace(/\n/g, ' ') + + var parts = deps_content.split(' ') + for (var p=0; p 0) { var lib_name = build_dir + '/cellmod' + dylib_ext + var lib_meta_path = lib_name + '.meta' + var link_flags = '-fPIC -shared' + + var ldflags = get_flags(config, platform, 'LDFLAGS') + if (ldflags != '') link_flags += ' ' + ldflags + + var temp_lib = 'cellmod' + dylib_ext + var objs_str = '' + for (var i=0; i lib_time) { - needs_link = true - break + + if (fd.is_file(lib_name) && fd.is_file(lib_meta_path)) { + var meta = null + try { + meta = json.decode(text(fd.slurp(lib_meta_path))) + } catch(e) {} + + if (meta && meta.cmd_hash == link_cmd_hash) { + var lib_time = fd.stat(lib_name).mtime + needs_link = false + for (var i=0; i lib_time) { + needs_link = true + break + } } } } @@ -1228,24 +1322,14 @@ Shop.build_package = function(package) if (needs_link) { log.console("Linking " + lib_name) - var link_flags = '-fPIC -shared' - - var ldflags = get_flags(config, platform, 'LDFLAGS') - if (ldflags != '') link_flags += ' ' + ldflags - - var temp_lib = 'cellmod' + dylib_ext - var objs_str = '' - for (var i=0; i #include "quickjs.h" #include "blob.h" @@ -20,7 +19,7 @@ double cell_random(); uint64_t cell_random_fit(); int JS_ArrayLength(JSContext *js, JSValue a); - + int js2bool(JSContext *js, JSValue v); JSValue bool2js(JSContext *js, int b); double js2number(JSContext *js, JSValue v); diff --git a/source/cell_internal.h b/source/cell_internal.h index b0710f91..f1a59cdb 100644 --- a/source/cell_internal.h +++ b/source/cell_internal.h @@ -48,10 +48,10 @@ mi_heap_t *heap; letter *letters; /* CHANGED FOR EVENTS: a separate lock for the actor->events queue */ - struct { Uint32 key; JSValue value; } *timers; + struct { uint32_t key; JSValue value; } *timers; int state; - Uint32 ar; // timer for unneeded + uint32_t ar; // timer for unneeded double ar_secs; // time for unneeded JSValue unneeded; // fn to call before unneeded