1DOLLY 32MODULE libffi34REQUIRES HEADER libc5REQUIRES TOOL   ar6REQUIRES TOOL   cc7REQUIRES TOOL   make8REQUIRES TOOL   rm9REQUIRES TOOL   slop10REQUIRES TOOL   tar1112SOURCE HOST /static/python/libffi.tar /tmp/libffi.tar 0b9478e1c8726962026fc4fe97e647b60b00497f52e9709a8206daa5d7f5dc7113SLOP tar \14  -xf /tmp/libffi.tar \15  -C /1617SOURCE HOST /static/python/runtimes/libffi-dolly.c /usr/src/libffi/src/dolly.c a253e2ff15cc13e771341792b3ac6b6c534af4b04e015f184e12593285877b121819FILE /tmp/libffi/Makefile20    .RECIPEPREFIX := >21    CC := cc22    AR := ar23    ROOT := /usr/src/libffi24    CFLAGS := -O1 -std=c17 -DDOLLY -DHAVE_CONFIG_H -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/src25    NAMES := prep_cif types raw_api java_raw_api closures tramp dolly26    OBJECTS := $(addprefix /tmp/libffi/,$(addsuffix .o,$(NAMES)))27    all: /usr/lib/libffi.a28    /tmp/libffi/%.o: $(ROOT)/src/%.c29    >$(CC) $(CFLAGS) -c $< -o $@30    /usr/lib/libffi.a: $(OBJECTS)31    >$(AR) rcs $@ $^32SLOP make \33  -f /tmp/libffi/Makefile3435FILE /tmp/libffi-check.c36    #include <ffi.h>37    #include <stdio.h>38    static int add(int left, int right) { return left + right; }39    static void add_closure(ffi_cif *cif, void *result, void **arguments,40                            void *context) {41      (void)cif;42      *(int *)result = *(int *)arguments[0] + *(int *)context;43    }44    int main(void) {45      ffi_cif cif;46      ffi_type *types[] = {&ffi_type_sint32, &ffi_type_sint32};47      int left = 19, right = 23, answer = 0;48      void *values[] = {&left, &right};49      if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,50                       &ffi_type_sint32, types) != FFI_OK) return 10;51      ffi_call(&cif, FFI_FN(add), &answer, values);52      if (answer != 42) return 11;53      void *code = 0;54      ffi_closure *closure = ffi_closure_alloc(sizeof(*closure), &code);55      ffi_type *one_type[] = {&ffi_type_sint32};56      if (closure == 0 ||57          ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,58                       &ffi_type_sint32, one_type) != FFI_OK ||59          ffi_prep_closure_loc(closure, &cif, add_closure, &right, code) != FFI_OK) {60        return 12;61      }62      int (*callback)(int) = code;63      answer = callback(19);64      ffi_closure_free(closure);65      if (answer != 42) return 13;66      return puts("LIBFFI-WASM64-OK") < 0 ? 14 : 0;67    }68SLOP cc \69  -O1 \70  -std=c17 \71  /tmp/libffi-check.c \72  -o /tmp/libffi-check \73  -lffi74SLOP slop \75  -c \76  /tmp/libffi-check7778EXPORTS LIB    ffi       /usr/lib/libffi.a79EXPORTS HEADER ffi       /usr/include/ffi.h80EXPORTS HEADER ffitarget /usr/include/ffitarget.h81FILE /usr/share/licenses/libffi/LICENSE8283SLOP rm \84  -rf \85  /tmp/libffi \86  /tmp/libffi-check \87  /tmp/libffi-check.c \88  /tmp/libffi.tar \89  /usr/src/libffi90