merge dirs

wasm
Alexander Bentkamp 1 year ago
parent 3d79c4ea60
commit 3ff46aeb54

@ -10,3 +10,8 @@ lean_exe gameserver {
root := `Main root := `Main
supportInterpreter := true supportInterpreter := true
} }
@[default_target]
lean_lib WasmServer where
defaultFacets := #[LeanLib.staticFacet]

@ -7,7 +7,7 @@ extern lean_object* game_send_message(lean_object*, lean_object*);
extern void lean_initialize_runtime_module(); extern void lean_initialize_runtime_module();
extern void lean_initialize(); extern void lean_initialize();
extern void lean_io_mark_end_initialization(); extern void lean_io_mark_end_initialization();
extern lean_object * initialize_RFFI(uint8_t builtin, lean_object *); extern lean_object * initialize_WasmServer(uint8_t builtin, lean_object *);
int main() { int main() {
lean_initialize(); lean_initialize();
@ -16,7 +16,7 @@ int main() {
// use same default as for Lean executables // use same default as for Lean executables
uint8_t builtin = 1; uint8_t builtin = 1;
lean_object * io_world = lean_io_mk_world(); lean_object * io_world = lean_io_mk_world();
res = initialize_RFFI(builtin, io_world); res = initialize_WasmServer(builtin, io_world);
if (lean_io_result_is_ok(res)) { if (lean_io_result_is_ok(res)) {
lean_dec_ref(res); lean_dec_ref(res);
} else { } else {

@ -1,2 +0,0 @@
/main
/out

@ -1,55 +0,0 @@
.PHONY: all run lake
OUT_DIR = ../../client/public
LEAN_SYSROOT ?= /home/alex/Projects/lean4/build/release/stage1
LEAN_LIBDIR := $(LEAN_SYSROOT)/lib/lean
all: $(OUT_DIR)/server.js
# Link C binary against Lake package dynamic library
lake:
lake --dir=lib build
$(OUT_DIR):
mkdir -p $@
ifneq ($(OS),Windows_NT)
# Add shared library paths to loader path (no Windows equivalent)
LINK_FLAGS=-Wl,-rpath,$(LEAN_LIBDIR) -Wl,-rpath,$(PWD)/lib/build/lib
endif
$(OUT_DIR)/server.js: main.c lake | $(OUT_DIR)
# Add library paths for Lake package and for Lean itself
emcc -o $@ $< -I $(LEAN_SYSROOT)/include -L $(LEAN_LIBDIR) lib/build/ir/RFFI.c -lInit -lLean -lleancpp -lleanrt $(LINK_FLAGS) \
-sFORCE_FILESYSTEM -lnodefs.js -s EXIT_RUNTIME=0 -s MAIN_MODULE=1 -s LINKABLE=1 -s EXPORT_ALL=1 -s ALLOW_MEMORY_GROWTH=1 -fwasm-exceptions -pthread -flto
# Alternatively, we can copy all shared lib dependencies to the current directory
# in order to avoid path set up and obtain a more portable executable
# ifeq ($(OS),Windows_NT)
# SHLIB_PREFIX :=
# SHLIB_EXT := dll
# LEAN_SHLIB := $(LEAN_SYSROOT)/bin/libleanshared.$(SHLIB_EXT)
# else
# SHLIB_PREFIX := lib
# # Add current directory to loader path (default on Windows)
# ifeq ($(shell uname -s),Darwin)
# LINK_FLAGS_LOCAL := -Wl,-rpath,@executable_path
# SHLIB_EXT := dylib
# else
# LINK_FLAGS_LOCAL := -Wl,-rpath,'$${ORIGIN}'
# SHLIB_EXT := so
# endif
# LEAN_SHLIB=$(LEAN_LIBDIR)/libleanshared.$(SHLIB_EXT)
# endif
# $(OUT_DIR)/main-local: main.c lake | $(OUT_DIR)
# cp -f $(LEAN_SHLIB) lib/build/lib/$(SHLIB_PREFIX)RFFI.$(SHLIB_EXT) $(OUT_DIR)
# cc -o $@ $< -I $(LEAN_SYSROOT)/include -L $(OUT_DIR) -lRFFI -lleanshared $(LINK_FLAGS_LOCAL)
# run-local: $(OUT_DIR)/main-local
# $(OUT_DIR)/main-local

@ -1,3 +0,0 @@
# Reverse FFI
This a simple example of how a Lake library (`lib/`) can be used from a foreign language and build system (`main.c` and `Makefile`).

@ -1 +0,0 @@
rm -rf out lib/build lib/lakefile.olean lib/lake-manifest.json

@ -1,3 +0,0 @@
/build
/lakefile.olean
/lake-manifest.json

@ -1,8 +0,0 @@
import Lake
open System Lake DSL
package rffi
@[default_target]
lean_lib RFFI where
defaultFacets := #[LeanLib.sharedFacet]

@ -1,5 +0,0 @@
set -ex
./clean.sh
make

@ -0,0 +1,14 @@
#!/bin/bash
cd server
lake build
OUT_DIR=../client/public
LEAN_SYSROOT=/home/alex/Projects/lean4/build/release/stage1
LEAN_LIBDIR=$LEAN_SYSROOT/lib/lean
emcc -o $OUT_DIR/server.js main.c -I $LEAN_SYSROOT/include -L $LEAN_LIBDIR build/ir/WasmServer.c -lInit -lLean -lleancpp -lleanrt \
-sFORCE_FILESYSTEM -lnodefs.js -s EXIT_RUNTIME=0 -s MAIN_MODULE=1 -s LINKABLE=1 -s EXPORT_ALL=1 -s ALLOW_MEMORY_GROWTH=1 -fwasm-exceptions -pthread -flto
Loading…
Cancel
Save