update embedding launcher to cooperate with 3m GC
This commit is contained in:
parent
ca7466f388
commit
74daa90c95
7
Makefile
7
Makefile
|
@ -21,12 +21,15 @@ all: setup exec-in-container
|
|||
|
||||
# rerun inside container
|
||||
exec-in-container: setup
|
||||
rsync -av $(RKT_NAME) main.c Makefile $(CACHE_DIR)/alpine/build/
|
||||
rsync -av $(RKT_NAME) main_bc.c Makefile $(CACHE_DIR)/alpine/build/
|
||||
sudo systemd-nspawn -UD $(CACHE_DIR)/alpine -- sh -c "cd build; make $(APP_NAME)"
|
||||
cp $(CACHE_DIR)/alpine/build/$(APP_NAME) .
|
||||
|
||||
clean-in-container:
|
||||
sudo systemd-nspawn -UD $(CACHE_DIR)/alpine -- sh -c "cd build; rm -rf *"
|
||||
|
||||
# main build stuff
|
||||
$(APP_NAME): main.c app.o
|
||||
$(APP_NAME): main_bc.c app.o
|
||||
$(CC) -o $@ -pipe -O3 -DAPP_NAME='"$(APP_NAME)"' -static $^ -lracket3m -lrktio -lucontext -lffi
|
||||
|
||||
# this is faster than --c-mods by a lot
|
||||
|
|
25
main.c
25
main.c
|
@ -1,25 +0,0 @@
|
|||
#include <racket/scheme.h>
|
||||
#include <stdio.h>
|
||||
|
||||
extern const char _binary_app_zo_start;
|
||||
extern const char _binary_app_zo_end;
|
||||
|
||||
static int run(Scheme_Env *e, int argc, char *argv[]) {
|
||||
Scheme_Object *a[2];
|
||||
|
||||
size_t load_size = ((uintptr_t) &_binary_app_zo_end) - ((uintptr_t) &_binary_app_zo_start);
|
||||
scheme_register_embedded_load(load_size, &_binary_app_zo_start);
|
||||
scheme_embedded_load(load_size, &_binary_app_zo_start, 1);
|
||||
|
||||
a[0] = scheme_make_pair(scheme_intern_symbol("quote"),
|
||||
scheme_make_pair(scheme_intern_symbol(APP_NAME), scheme_make_null()));
|
||||
a[1] = scheme_false;
|
||||
|
||||
scheme_dynamic_require(2, a);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
return scheme_main_setup(1, run, argc, argv);
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
#define MZ_PRECISE_GC
|
||||
|
||||
#include <racket/scheme.h>
|
||||
#include <stdio.h>
|
||||
|
||||
extern const char _binary_app_zo_start;
|
||||
extern const char _binary_app_zo_end;
|
||||
|
||||
static int run_bc(Scheme_Env *e, int argc, char *argv[]) {
|
||||
Scheme_Object *l = NULL;
|
||||
Scheme_Object *a[2] = { NULL, NULL };
|
||||
|
||||
MZ_GC_DECL_REG(5);
|
||||
MZ_GC_VAR_IN_REG(0, e);
|
||||
MZ_GC_VAR_IN_REG(1, l);
|
||||
MZ_GC_ARRAY_VAR_IN_REG(2, a, 2);
|
||||
MZ_GC_REG();
|
||||
|
||||
size_t load_size = ((uintptr_t) &_binary_app_zo_end) - ((uintptr_t) &_binary_app_zo_start);
|
||||
scheme_register_embedded_load(load_size, &_binary_app_zo_start);
|
||||
scheme_embedded_load(load_size, &_binary_app_zo_start, 1);
|
||||
|
||||
l = scheme_make_null();
|
||||
l = scheme_make_pair(scheme_intern_symbol(APP_NAME), l);
|
||||
l = scheme_make_pair(scheme_intern_symbol("quote"), l);
|
||||
|
||||
a[0] = l;
|
||||
a[1] = scheme_false;
|
||||
|
||||
scheme_dynamic_require(2, a);
|
||||
|
||||
MZ_GC_UNREG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
return scheme_main_setup(1, run_bc, argc, argv);
|
||||
}
|
Loading…
Reference in New Issue