removed the containing subdir

This commit is contained in:
2023-10-02 21:04:28 +09:00
parent 5b2953c9c7
commit ea73f9f8d2
163 changed files with 0 additions and 0 deletions

2
wasm/Makefile.am Normal file
View File

@ -0,0 +1,2 @@
AUTOMAKE_OPTIONS = nostdinc

461
wasm/Makefile.in Normal file
View File

@ -0,0 +1,461 @@
# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = wasm
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
$(top_srcdir)/m4/ax_numval.m4 $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/moo-cfg.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_MODE = @BUILD_MODE@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DL_LIBS = @DL_LIBS@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
DYNCALL_LIBS = @DYNCALL_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FFI_LIBS = @FFI_LIBS@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBM = @LIBM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTDL_LIBS = @LTDL_LIBS@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MOO_PROJECT_AUTHOR = @MOO_PROJECT_AUTHOR@
MOO_PROJECT_URL = @MOO_PROJECT_URL@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
PACKAGE_VERSION_PATCH = @PACKAGE_VERSION_PATCH@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
QUADMATH_LIBS = @QUADMATH_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SOCKET_LIBS = @SOCKET_LIBS@
STRIP = @STRIP@
TERMINAL_LIBS = @TERMINAL_LIBS@
UNICOWS_LIBS = @UNICOWS_LIBS@
UNWIND_LIBS = @UNWIND_LIBS@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = nostdinc
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign wasm/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign wasm/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
tags TAGS:
ctags CTAGS:
cscope cscopelist:
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
cscopelist-am ctags-am distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags-am uninstall uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

26
wasm/build.sh Normal file
View File

@ -0,0 +1,26 @@
# temporary build script.
# must integrate the build process into automake
topdir=../../..
blddir=${topdir}/bld/emcc
emcc -Wall -O2 -g \
${blddir}/lib/.libs/libmoo.a \
${blddir}/lib/.libs/libmoox.a \
${topdir}/wasm/main.c \
-DMOO_HAVE_CFG_H \
-I${blddir}/lib \
-I${topdir}/lib\
-s WASM=1 \
-s LINKABLE=1 \
-s ALLOW_MEMORY_GROWTH=1 \
-s EXTRA_EXPORTED_RUNTIME_METHODS="['ccall','cwrap']" \
-o libmoo.js \
--embed-file ${topdir}/kernel/ \
--pre-js ${topdir}/wasm/moo.cb.js
##-s USE_PTHREADS=1 -s ERROR_ON_UNDEFINED_SYMBOLS=0 \
##cp -pf ${topdir}/wasm/moo.html .
##cp -pf ${topdir}/wasm/moo.worker.js .
ln -sf ${topdir}/wasm/moo.html moo.html
ln -sf ${topdir}/wasm/moo.worker.js moo.worker.js

103
wasm/emcc.txt Normal file
View File

@ -0,0 +1,103 @@
Temporary notes on how to build libmoo to web assembly with emscripten.
#### emscriptten APIS to look into
emscripten_set_main_loop();
#### How to Build
mkdir -p bld/emcc
cd blc/emcc
## run configure and make under emconfigure and emmake respectively
emconfigure ../../configure --prefix=${HOME}/xxx-emcc --disable-shared --enable-dynamic-module --disable-mod-x11 --disable-mod-con --disable-mod-sck CFLAGS="-Wall -O2 -g"
emmake make
## convert the library to web assembly - the command produces libmoo.js and libmoo.wasm
##emcc lib/.libs/libmoo.a -s WASM=1 -s EXPORT_ALL=1 -s LINKABLE=1 -o libmoo.js
#if you have defined MOO_EXPORT as EMSCRIPTEN_KEEPALIVE, the following will do
##emcc lib/.libs/libmoo.a -s WASM=1 -s -s LINKABLE=1 -o libmoo.js
###emcc lib/.libs/libmoo.a lib/.libs/libmoox.a -s WASM=1 -s LINKABLE=1 -o libmoo.js
## -s ALLOW_MEMORY_GROWTH=1
emcc lib/.libs/libmoo.a lib/.libs/libmoox.a -s WASM=1 -s LINKABLE=1 -s EXTRA_EXPORTED_RUNTIME_METHODS="['ccall','cwrap']" -o libmoo.js --embed-file ../../kernel/
### --embed-file, if given a directory, includes all files under the directory.
### the result libmoo.js will contain lines like below:
### Module['FS_createDataFile']('/kernel', 'Apex.moo', fileData35, true, true, false);
### var fileData36 = [];
### fileData36.push.apply(fileData36, [35, 105, ...
###
## when i executed the command above, some versions of wasm-ld complained like below
## if the library is compiled with -pthread.
## wasm-ld: error: 'atomics' feature is disallowed by atomic_2835fb94.c.o, so --shared-memory must not be used
## a quick work around was to remove -pthread before building with 'emmake make'
## if defined some javascript functions in moo.cb.js...
emcc -Wall -O2 -g lib/.libs/libmoo.a ws.c -DMOO_HAVE_CFG_H -Ilib -I../../lib -s WASM=1 -s LINKABLE=1 -s EXTRA_EXPORTED_RUNTIME_METHODS="['ccall','cwrap']" -o libmoo.js --pre-js moo.cb.js
#### moo.worker.js
self.importScripts('libmoo.js');
self.__ready = false;
Module.onRuntimeInitialized = function()
{
self.__ready = true;
console.log ('runtime is ready now...');
}
const libmoo = {
open: Module.cwrap('moo_openstd', 'number', ['number', 'number', 'number']),
close: Module.cwrap('moo_close', '', ['number'])
};
self.onmessage = function (evt) {
var objData = evt.data;
var cmd = objData.cmd;
if (cmd === "test-moo")
{
//var x = Module.ccall('moo_openstd', [0, null, null]);
//Module.ccall('moo_close', x);
if (self.__ready)
{
var moo = libmoo.open(0, null, null);
self.postMessage ('XXXXXXXXXXXXXXXx - ' + moo);
libmoo.close (moo);
}
}
}
#### moo.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /></head>
<body>
<input type="button" value="Test" onclick="do_test();" />
<script type="text/javascript">
//var g_WebWorker = new Worker("moo.worker.js");
var g_WebWorker = new SharedWorker("moo.worker.js");
//if (typeof(WebAssembly) === 'undefined')
//{
// alert ('No web assebly support in this browser');
//}
g_WebWorker.onerror = function (evt) { console.log(`Error from Web Worker: ${evt.message}`); }
g_WebWorker.onmessage = function (evt) { console.log(`Message from the Web Worker:\n\n ${evt.data}`); }
function do_test() {
g_WebWorker.postMessage({ "cmd": "test-moo", "data": "nothing as of now.." });
}
</script>
</body>
</html>

129
wasm/main.c Normal file
View File

@ -0,0 +1,129 @@
#include <emscripten/emscripten.h>
#include <moo.h>
#include <stdlib.h>
#include <string.h>
static void* sys_alloc (moo_mmgr_t* mmgr, moo_oow_t size)
{
return malloc(size);
}
static void* sys_realloc (moo_mmgr_t* mmgr, void* ptr, moo_oow_t size)
{
return realloc(ptr, size);
}
static void sys_free (moo_mmgr_t* mmgr, void* ptr)
{
free (ptr);
}
static moo_mmgr_t sys_mmgr =
{
sys_alloc,
sys_realloc,
sys_free,
MOO_NULL
};
/* ========================================================================= */
extern void jsGetTime (moo_ntime_t* now);
extern void jsSleep (const moo_ntime_t* now);
static void vm_gettime (moo_t* moo, moo_ntime_t* now)
{
jsGetTime(now);
}
static void vm_sleep (moo_t* moo, const moo_ntime_t* dur)
{
jsSleep (dur);
}
EMSCRIPTEN_KEEPALIVE int open_moo (void)
{
moo_ntime_t now;
vm_gettime (NULL, &now);
now.sec = 1;
now.nsec = 500;
vm_sleep (NULL, &now);
return now.sec;
#if 0
moo_t* moo;
moo_vmprim_t vmprim;
moo_evtcb_t evtcb;
xtn_t* xtn;
MOO_MEMSET(&vmprim, 0, MOO_SIZEOF(vmprim));
if (cfg && cfg->large_pages)
{
vmprim.alloc_heap = alloc_heap;
vmprim.free_heap = free_heap;
}
vmprim.log_write = ((cfg && cfg->log_write)? cfg->log_write: log_write);
vmprim.syserrstrb = syserrstrb;
vmprim.assertfail = assert_fail;
vmprim.dl_startup = dl_startup;
vmprim.dl_cleanup = dl_cleanup;
vmprim.dl_open = dl_open;
vmprim.dl_close = dl_close;
vmprim.dl_getsym = dl_getsym;
vmprim.vm_startup = vm_startup;
vmprim.vm_cleanup = vm_cleanup;
vmprim.vm_gettime = vm_gettime;
vmprim.vm_muxadd = vm_muxadd;
vmprim.vm_muxdel = vm_muxdel;
vmprim.vm_muxmod = vm_muxmod;
vmprim.vm_muxwait = vm_muxwait;
vmprim.vm_sleep = vm_sleep;
moo = moo_open(&sys_mmgr, MOO_SIZEOF(xtn_t) + xtnsize, ((cfg && cfg->cmgr)? cfg->cmgr: moo_get_utf8_cmgr()), &vmprim, (cfg? cfg->gc_type: MOO_GC_TYPE_DEFAULT), errinfo);
if (!moo) return MOO_NULL;
/* adjust the object size by the sizeof xtn_t so that qse_getxtn() returns the right pointer. */
moo->_instsize += MOO_SIZEOF(xtn_t);
xtn = GET_XTN(moo);
MOO_MEMSET (&evtcb, 0, MOO_SIZEOF(evtcb));
evtcb.fini = fini_moo;
moo_regevtcb (moo, &evtcb);
{
moo_bitmask_t bm = 0;
moo_getoption (moo, MOO_OPTION_TRAIT, &bm);
/*bm |= MOO_TRAIT_NOGC;*/
bm |= MOO_TRAIT_AWAIT_PROCS;
moo_setoption (moo, MOO_OPTION_TRAIT, &bm);
/* disable GC logs */
moo_getoption (moo, MOO_OPTION_LOG_MASK, &bm);
bm = ~MOO_LOG_GC;
moo_setoption (moo, MOO_OPTION_LOG_MASK, &bm);
}
return moo;
#endif
}
EMSCRIPTEN_KEEPALIVE moo_bch_t* get_errmsg_from_moo (moo_t* moo)
{
#if defined(MOO_OOCH_IS_UCH)
/* TODO: no static.... error check... */
static moo_bch_t bm[256];
moo_oow_t bl = MOO_COUNTOF(bm);
moo_convutobcstr (moo, moo_geterrmsg(moo), MOO_NULL, bm, &bl);
return bm;
#else
return moo_geterrmsg(moo);
#endif
}
EMSCRIPTEN_KEEPALIVE void switch_process_in_moo (moo_t* moo)
{
moo_switchprocess(moo);
}

23
wasm/moo.cb.js Normal file
View File

@ -0,0 +1,23 @@
//function _jsGetTime(pointer) <--- doesn't work as emcc produces this
var _jsGetTime = function(pointer)
{
var pos = pointer / 4;
var now = (new Date()).getTime();
HEAP32[pos] = Math.floor(now / 1000);
HEAP32[pos + 1] = (now % 1000) * 1000000;
}
var _jsSleep = function(pointer)
{
/*
var pos = pointer / 4;
var msec = (HEAP32[POS] * 1000) + (HEAP32[pos + 1] / 1000000);
var prom = new Promise(function (resolve, reject) {
setTimeout (function() { resolve("xxxx"); }, msec);
});
await prom;
*/
}

55
wasm/moo.html Normal file
View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /></head>
<body>
<input type="button" value="Open" onclick="do_open();" />
<input type="button" value="Run" onclick="do_run();" />
<input type="button" value="Close" onclick="do_close();" />
<script type="text/javascript">
var g_WebWorker = new Worker("moo.worker.js");
if (typeof(WebAssembly) === 'undefined')
{
alert ('No web assebly support in this browser');
}
/*
window.addEventListener('beforeunload', function(event) {
//g_WebWorker.terminate ();
//g_WebWorkder = null;
var confirmationMessage = "\o/";
(event || window.event).returnValue = confirmationMessage; //Gecko + IE
return confirmationMessage;
});
*/
g_WebWorker.onerror = function (evt) {
console.log(`Error from Web Worker: ${evt.message}`);
};
g_WebWorker.onmessage = function (evt) {
console.log(`Message from the Web Worker:\n\n ${evt.data}`);
};
function do_open()
{
g_WebWorker.postMessage({ "cmd": "open-moo", "data": "nothing as of now.." });
}
function do_run()
{
g_WebWorker.postMessage({ "cmd": "run-moo", "data": "nothing as of now.." });
}
function do_close()
{
g_WebWorker.postMessage({ "cmd": "close-moo", "data": "nothing as of now.." });
}
</script>
</body>
</html>

108
wasm/moo.worker.js Normal file
View File

@ -0,0 +1,108 @@
self.importScripts('libmoo.js');
self.libmoo = null;
self.moo = null;
Module.noExitRuntime = false;
Module.onExit = function (status) {
console.log ('exiting....');
};
Module.onRuntimeInitialized = function()
{
console.log ('runtime is ready now...');
self.libmoo = {
open: Module.cwrap('moo_openstd', 'number', ['number', 'number', 'number']),
close: Module.cwrap('moo_close', '', ['number']),
ignite: Module.cwrap('moo_ignite', 'number', ['number', 'number']),
initdbgi: Module.cwrap('moo_initdbgi', 'number', ['number', 'number']),
compilefile: Module.cwrap('moo_compilefileb', 'number', ['number', 'string']),
invoke: Module.cwrap('moo_invokebynameb', 'number', ['number', 'string', 'string']),
geterrmsg: Module.cwrap('get_errmsg_from_moo', 'string', ['number']),
switchprocess: Module.cwrap('switch_process_in_moo', 'undefined', ['number'])
};
};
//self.onmessage = function (evt) {
self.addEventListener ('message', function (evt) {
var objData = evt.data;
var cmd = objData.cmd;
if (cmd === "run-moo")
{
//var x = Module.ccall('moo_openstd', [0, null, null]);
//Module.ccall('moo_close', x);
if (self.moo !== null)
{
var tmp, msg = "";
//var ticker;
// while self.libmoo.invoke() is running, setInterval() is unable to trigger the timed event.
// it's an architectural issue. emscripten doesn't implement setitimer() yet.
// the moo program should 'yield' manually for process switching for now.
//ticker = setInterval(function() { self.libmoo.switchprocess (self.moo); console.log("ticking"); }, 100);
tmp = self.libmoo.invoke(self.moo, "MyObject", "main");
msg = msg.concat("invoke - " + tmp);
//clearInterval (ticker);
self.postMessage (msg);
}
else
{
self.postMessage ("not open");
}
}
else if (cmd == "open-moo")
{
if (self.libmoo === null)
{
self.postMessage ("not ready");
}
else if (self.moo === null)
{
var tmp, msg = "";
self.moo = self.libmoo.open(0, null, null);
msg = msg.concat("open - " + moo);
tmp = self.libmoo.ignite(self.moo, 5000000);
msg = msg.concat(" ignite - " + tmp);
tmp = self.libmoo.initdbgi(self.moo, 102400);
msg = msg.concat(" initdgbi - " + tmp);
tmp = self.libmoo.compilefile(self.moo, "kernel/t.moo");
if (tmp == -1)
{
msg = msg.concat(" compilefile - " + self.libmoo.geterrmsg(self.moo));
}
else
{
msg = msg.concat(" compilefile - " + tmp);
}
self.postMessage (msg);
}
else
{
self.postMessage ("already open");
}
}
else if (cmd == "close-moo")
{
if (self.moo !== null)
{
self.libmoo.close (self.moo);
self.moo = null;
self.postMessage ("close ok");
}
else
{
self.postMessage ("already closed");
}
}
});