From 60942b3419df97a96202717575a9225921006edf Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Tue, 12 Jul 2022 18:45:59 +0200 Subject: [PATCH] [docker] Try to also build js version for DOS --- docker/djgpp/Dockerfile | 20 +- docker/djgpp/mes_djgpp_js.sh | 58 +++ docker/djgpp/quickjs-dos.diff | 746 ++++++++++++++++++++++++++++++++++ 3 files changed, 823 insertions(+), 1 deletion(-) create mode 100755 docker/djgpp/mes_djgpp_js.sh create mode 100644 docker/djgpp/quickjs-dos.diff diff --git a/docker/djgpp/Dockerfile b/docker/djgpp/Dockerfile index 0c18442c..01e24eef 100644 --- a/docker/djgpp/Dockerfile +++ b/docker/djgpp/Dockerfile @@ -43,7 +43,8 @@ cp -a tmp/tmp2/sqlite3.pc /usr/local/lib/pkgconfig/; rm -rf tmp; \ mkdir tmp; unzip licv116b.zip -d tmp; cp -a tmp/include /usr/local/; cp -a tmp/lib /usr/local/; rm -rf tmp; \ mkdir tmp; unzip lidn138b.zip -d tmp; cp -a tmp/include /usr/local/; cp -a tmp/lib /usr/local/; rm -rf tmp; \ sed -i -e 's|/dev/env/DJDIR|/usr/local|g' /usr/local/lib/pkgconfig/*.pc; \ -sed -i -e 's|/dev/env/DJDIR|/usr/local|g' /usr/local/lib/*.la +sed -i -e 's|/dev/env/DJDIR|/usr/local|g' /usr/local/lib/*.la; \ +sed -i -e 's/Libs\.private/#Libs.private/' /usr/local/lib/pkgconfig/sqlite3.pc # openssl RUN dnf -y install perl-FindBin; mkdir /root/tmp; cd /root/tmp; \ @@ -93,6 +94,18 @@ ADD build_xmlplusplus.sh /root/tmp/libxmlplusplus/build_xmlplusplus.sh RUN cd /root/tmp/libxmlplusplus; \ ./build_xmlplusplus.sh +# quickjs +RUN dnf -y install xz; rm -rf /root/tmp; mkdir /root/tmp; cd /root/tmp; \ +wget https://bellard.org/quickjs/quickjs-2021-03-27.tar.xz; \ +tar xf quickjs-2021-03-27.tar.xz +ADD quickjs-dos.diff /root/tmp/quickjs-dos.diff +RUN cd /root/tmp/quickjs-2021-03-27; \ +patch -p1 < ../quickjs-dos.diff; \ +make -f Makefile.dos; \ +mv -f /usr/local /usr/local2; \ +make -f Makefile.dos; \ +mv -f /usr/local2 /usr/local; \ +make -f Makefile.dos install # [*] elinks sources @@ -102,3 +115,8 @@ RUN cd /root; git clone https://github.com/rkd77/elinks ADD mes_djgpp.sh /root/elinks/mes_djgpp.sh RUN cd /root/elinks; \ ./mes_djgpp.sh; + +ADD mes_djgpp_js.sh /root/elinks/mes_djgpp_js.sh +RUN cd /root/elinks; \ +./mes_djgpp_js.sh; + diff --git a/docker/djgpp/mes_djgpp_js.sh b/docker/djgpp/mes_djgpp_js.sh new file mode 100755 index 00000000..ea1a014c --- /dev/null +++ b/docker/djgpp/mes_djgpp_js.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +rm -rf /tmp/builddir2 +#meson /tmp/builddir . + +LIBRARY_PATH="/usr/local/lib" \ +PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" \ +C_INCLUDE_PATH="/usr/local/include" \ +CFLAGS="-I/usr/local/include -DWATT32_NO_NAMESPACE" \ +LDFLAGS="-L/usr/local/lib" \ +meson /tmp/builddir2 --cross-file cross/linux-djgpp.txt \ +-D88-colors=false \ +-D256-colors=false \ +-Dbacktrace=false \ +-Dbittorrent=false \ +-Dbrotli=true \ +-Dbzlib=false \ +-Dcgi=false \ +-Dcss=false \ +-Dcombining=false \ +-Ddgi=true \ +-Dfastmem=true \ +-Dfsp=false \ +-Dgemini=true \ +-Dgettext=false \ +-Dgnutls=false \ +-Dgopher=true \ +-Dgpm=false \ +-Dguile=false \ +-Didn=true \ +-Dipv6=true \ +-Dlibev=false \ +-Dlibevent=false \ +-Dlzma=true \ +-Dmailcap=false \ +-Dmouse=true \ +-Dnls=true \ +-Dnntp=true \ +-Dopenssl=true \ +-Dperl=false \ +-Dprefix=$HOME \ +-Dpython=false \ +-Dquickjs=true \ +-Druby=false \ +-Dsm-scripting=false \ +-Dspidermonkey=false \ +-Dstatic=true \ +-Dterminfo=false \ +-Dtre=false \ +-Dtrue-color=false \ +-Dutf-8=false \ +-Dwithdebug=false \ +-Dx=false \ +-Dxbel=false \ +-Dzlib=true \ +-Dzstd=false \ + +meson compile -C /tmp/builddir2 diff --git a/docker/djgpp/quickjs-dos.diff b/docker/djgpp/quickjs-dos.diff new file mode 100644 index 00000000..89433433 --- /dev/null +++ b/docker/djgpp/quickjs-dos.diff @@ -0,0 +1,746 @@ +diff -Nru quickjs-2021-03-27/Makefile.dos quickjs-2021-03-27.new/Makefile.dos +--- quickjs-2021-03-27/Makefile.dos 1970-01-01 00:00:00.000000000 +0000 ++++ quickjs-2021-03-27.new/Makefile.dos 2022-06-08 21:28:12.212649535 +0000 +@@ -0,0 +1,473 @@ ++# ++# QuickJS Javascript Engine ++# ++# Copyright (c) 2017-2021 Fabrice Bellard ++# Copyright (c) 2017-2021 Charlie Gordon ++# ++# Permission is hereby granted, free of charge, to any person obtaining a copy ++# of this software and associated documentation files (the "Software"), to deal ++# in the Software without restriction, including without limitation the rights ++# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++# copies of the Software, and to permit persons to whom the Software is ++# furnished to do so, subject to the following conditions: ++# ++# The above copyright notice and this permission notice shall be included in ++# all copies or substantial portions of the Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++# THE SOFTWARE. ++ ++ifeq ($(shell uname -s),Darwin) ++CONFIG_DARWIN=y ++endif ++# Windows cross compilation from Linux ++#CONFIG_WIN32=y ++# use link time optimization (smaller and faster executables but slower build) ++#CONFIG_LTO= ++# consider warnings as errors (for development) ++#CONFIG_WERROR=y ++# force 32 bit build for some utilities ++#CONFIG_M32=y ++ ++ifdef CONFIG_DARWIN ++# use clang instead of gcc ++CONFIG_CLANG=y ++CONFIG_DEFAULT_AR=y ++endif ++ ++# installation directory ++prefix=/usr/local ++ ++# use the gprof profiler ++#CONFIG_PROFILE=y ++# use address sanitizer ++#CONFIG_ASAN=y ++# include the code for BigInt/BigFloat/BigDecimal and math mode ++CONFIG_BIGNUM=y ++ ++OBJDIR=.o ++ ++ifdef CONFIG_WIN32 ++ ifdef CONFIG_M32 ++ CROSS_PREFIX=i686-w64-mingw32- ++ else ++ CROSS_PREFIX=x86_64-w64-mingw32- ++ endif ++ EXE=.exe ++else ++ CROSS_PREFIX=i586-pc-msdosdjgpp- ++ EXE=.exe ++endif ++ifdef CONFIG_CLANG ++ HOST_CC=clang ++ CC=$(CROSS_PREFIX)clang ++ CFLAGS=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d ++ CFLAGS += -Wextra ++ CFLAGS += -Wno-sign-compare ++ CFLAGS += -Wno-missing-field-initializers ++ CFLAGS += -Wundef -Wuninitialized ++ CFLAGS += -Wunused -Wno-unused-parameter ++ CFLAGS += -Wwrite-strings ++ CFLAGS += -Wchar-subscripts -funsigned-char ++ CFLAGS += -MMD -MF $(OBJDIR)/$(@F).d ++ ifdef CONFIG_DEFAULT_AR ++ AR=$(CROSS_PREFIX)ar ++ else ++ ifdef CONFIG_LTO ++ AR=$(CROSS_PREFIX)llvm-ar ++ else ++ AR=$(CROSS_PREFIX)ar ++ endif ++ endif ++else ++ HOST_CC=gcc ++ CC=$(CROSS_PREFIX)gcc ++ CFLAGS=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d ++ CFLAGS += -Wno-array-bounds -Wno-format-truncation ++ ifdef CONFIG_LTO ++ AR=$(CROSS_PREFIX)gcc-ar ++ else ++ AR=$(CROSS_PREFIX)ar ++ endif ++endif ++STRIP=$(CROSS_PREFIX)strip ++ifdef CONFIG_WERROR ++CFLAGS+=-Werror ++endif ++DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(shell cat VERSION)\" ++ifdef CONFIG_BIGNUM ++DEFINES+=-DCONFIG_BIGNUM ++endif ++ifdef CONFIG_WIN32 ++DEFINES+=-D__USE_MINGW_ANSI_STDIO # for standard snprintf behavior ++endif ++ ++CFLAGS+=$(DEFINES) ++CFLAGS_DEBUG=$(CFLAGS) -O0 ++CFLAGS_SMALL=$(CFLAGS) -Os ++CFLAGS_OPT=$(CFLAGS) -O2 ++CFLAGS_NOLTO:=$(CFLAGS_OPT) ++LDFLAGS=-g ++ifdef CONFIG_LTO ++CFLAGS_SMALL+=-flto ++CFLAGS_OPT+=-flto ++LDFLAGS+=-flto ++endif ++ifdef CONFIG_PROFILE ++CFLAGS+=-p ++LDFLAGS+=-p ++endif ++ifdef CONFIG_ASAN ++CFLAGS+=-fsanitize=address -fno-omit-frame-pointer ++LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer ++endif ++ifdef CONFIG_WIN32 ++LDEXPORT= ++else ++#LDEXPORT=-rdynamic ++endif ++ ++PROGS=qjs$(EXE) qjsc$(EXE) ++#run-test262 ++ifneq ($(CROSS_PREFIX),) ++QJSC_CC=gcc ++QJSC=./host-qjsc ++PROGS+=$(QJSC) ++else ++QJSC_CC=$(CC) ++QJSC=./qjsc$(EXE) ++endif ++ifndef CONFIG_WIN32 ++#PROGS+=qjscalc ++endif ++ifdef CONFIG_M32 ++PROGS+=qjs32 qjs32_s ++endif ++PROGS+=libquickjs.a ++ifdef CONFIG_LTO ++PROGS+=libquickjs.lto.a ++endif ++ ++# examples ++ifeq ($(CROSS_PREFIX),) ++ifdef CONFIG_ASAN ++PROGS+= ++else ++PROGS+=examples/hello examples/hello_module examples/test_fib ++ifndef CONFIG_DARWIN ++PROGS+=examples/fib.so examples/point.so ++endif ++endif ++endif ++ ++all: $(OBJDIR) $(OBJDIR)/quickjs.check.o $(OBJDIR)/qjs.check.o $(PROGS) ++ ++QJS_LIB_OBJS=$(OBJDIR)/quickjs.o $(OBJDIR)/libregexp.o $(OBJDIR)/libunicode.o $(OBJDIR)/cutils.o $(OBJDIR)/quickjs-libc.o ++ ++QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(QJS_LIB_OBJS) ++ifdef CONFIG_BIGNUM ++QJS_LIB_OBJS+=$(OBJDIR)/libbf.o ++QJS_OBJS+=$(OBJDIR)/qjscalc.o ++endif ++ ++HOST_LIBS=-lm ++#-ldl ++# -lpthread ++LIBS=-lm ++ifndef CONFIG_WIN32 ++#LIBS+=-ldl -lpthread ++endif ++LIBS+=$(EXTRA_LIBS) ++ ++$(OBJDIR): ++ mkdir -p $(OBJDIR) $(OBJDIR)/examples $(OBJDIR)/tests ++ ++qjs$(EXE): $(QJS_OBJS) ++ $(CC) $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS) ++ ++qjs-debug$(EXE): $(patsubst %.o, %.debug.o, $(QJS_OBJS)) ++ $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) ++ ++qjsc$(EXE): $(OBJDIR)/qjsc.o $(QJS_LIB_OBJS) ++ $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) ++ ++ifneq ($(CROSS_PREFIX),) ++ ++$(QJSC): $(OBJDIR)/qjsc.host.o \ ++ $(patsubst %.o, %.host.o, $(QJS_LIB_OBJS)) ++ $(HOST_CC) $(LDFLAGS) -o $@ $^ $(HOST_LIBS) ++ ++endif #CROSS_PREFIX ++ ++QJSC_DEFINES:=-DCONFIG_CC=\"$(QJSC_CC)\" -DCONFIG_PREFIX=\"$(prefix)\" ++ifdef CONFIG_LTO ++QJSC_DEFINES+=-DCONFIG_LTO ++endif ++QJSC_HOST_DEFINES:=-DCONFIG_CC=\"$(HOST_CC)\" -DCONFIG_PREFIX=\"$(prefix)\" ++ ++$(OBJDIR)/qjsc.o: CFLAGS+=$(QJSC_DEFINES) ++$(OBJDIR)/qjsc.host.o: CFLAGS+=$(QJSC_HOST_DEFINES) ++ ++qjs32: $(patsubst %.o, %.m32.o, $(QJS_OBJS)) ++ $(CC) -m32 $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS) ++ ++qjs32_s: $(patsubst %.o, %.m32s.o, $(QJS_OBJS)) ++ $(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS) ++ @size $@ ++ ++qjscalc: qjs ++ ln -sf $< $@ ++ ++ifdef CONFIG_LTO ++LTOEXT=.lto ++else ++LTOEXT= ++endif ++ ++libquickjs$(LTOEXT).a: $(QJS_LIB_OBJS) ++ $(AR) rcs $@ $^ ++ ++ifdef CONFIG_LTO ++libquickjs.a: $(patsubst %.o, %.nolto.o, $(QJS_LIB_OBJS)) ++ $(AR) rcs $@ $^ ++endif # CONFIG_LTO ++ ++repl.c: $(QJSC) repl.js ++ $(QJSC) -c -o $@ -m repl.js ++ ++qjscalc.c: $(QJSC) qjscalc.js ++ $(QJSC) -fbignum -c -o $@ qjscalc.js ++ ++ifneq ($(wildcard unicode/UnicodeData.txt),) ++$(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.m32.o $(OBJDIR)/libunicode.m32s.o \ ++ $(OBJDIR)/libunicode.nolto.o: libunicode-table.h ++ ++libunicode-table.h: unicode_gen ++ ./unicode_gen unicode $@ ++endif ++ ++#run-test262: $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS) ++# $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) ++ ++#run-test262-debug: $(patsubst %.o, %.debug.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS)) ++# $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) ++ ++#run-test262-32: $(patsubst %.o, %.m32.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS)) ++# $(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS) ++ ++# object suffix order: nolto, [m32|m32s] ++ ++$(OBJDIR)/%.o: %.c | $(OBJDIR) ++ $(CC) $(CFLAGS_OPT) -c -o $@ $< ++ ++$(OBJDIR)/%.host.o: %.c | $(OBJDIR) ++ $(HOST_CC) $(CFLAGS_OPT) -c -o $@ $< ++ ++$(OBJDIR)/%.pic.o: %.c | $(OBJDIR) ++ $(CC) $(CFLAGS_OPT) -fPIC -DJS_SHARED_LIBRARY -c -o $@ $< ++ ++$(OBJDIR)/%.nolto.o: %.c | $(OBJDIR) ++ $(CC) $(CFLAGS_NOLTO) -c -o $@ $< ++ ++$(OBJDIR)/%.m32.o: %.c | $(OBJDIR) ++ $(CC) -m32 $(CFLAGS_OPT) -c -o $@ $< ++ ++$(OBJDIR)/%.m32s.o: %.c | $(OBJDIR) ++ $(CC) -m32 $(CFLAGS_SMALL) -c -o $@ $< ++ ++$(OBJDIR)/%.debug.o: %.c | $(OBJDIR) ++ $(CC) $(CFLAGS_DEBUG) -c -o $@ $< ++ ++$(OBJDIR)/%.check.o: %.c | $(OBJDIR) ++ $(CC) $(CFLAGS) -DCONFIG_CHECK_JSVALUE -c -o $@ $< ++ ++regexp_test: libregexp.c libunicode.c cutils.c ++ $(CC) $(LDFLAGS) $(CFLAGS) -DTEST -o $@ libregexp.c libunicode.c cutils.c $(LIBS) ++ ++unicode_gen: $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o libunicode.c unicode_gen_def.h ++ $(HOST_CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o ++ ++clean: ++ rm -f repl.c qjscalc.c out.c ++ rm -f *.a *.o *.d *~ unicode_gen regexp_test $(PROGS) ++ rm -f hello.c test_fib.c ++ rm -f examples/*.so tests/*.so ++ rm -rf $(OBJDIR)/ *.dSYM/ qjs-debug ++ rm -rf run-test262-debug run-test262-32 ++ ++install: all ++ mkdir -p "$(DESTDIR)$(prefix)/bin" ++ $(STRIP) qjs$(EXE) qjsc$(EXE) ++ install -m755 qjs$(EXE) qjsc$(EXE) "$(DESTDIR)$(prefix)/bin" ++# ln -sf qjs "$(DESTDIR)$(prefix)/bin/qjscalc" ++ mkdir -p "$(DESTDIR)$(prefix)/lib/quickjs" ++ install -m644 libquickjs.a "$(DESTDIR)$(prefix)/lib/quickjs" ++ifdef CONFIG_LTO ++ install -m644 libquickjs.lto.a "$(DESTDIR)$(prefix)/lib/quickjs" ++endif ++ mkdir -p "$(DESTDIR)$(prefix)/include/quickjs" ++ install -m644 quickjs.h quickjs-libc.h "$(DESTDIR)$(prefix)/include/quickjs" ++ ++############################################################################### ++# examples ++ ++# example of static JS compilation ++HELLO_SRCS=examples/hello.js ++HELLO_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \ ++ -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \ ++ -fno-date -fno-module-loader ++ifdef CONFIG_BIGNUM ++HELLO_OPTS+=-fno-bigint ++endif ++ ++hello.c: $(QJSC) $(HELLO_SRCS) ++ $(QJSC) -e $(HELLO_OPTS) -o $@ $(HELLO_SRCS) ++ ++ifdef CONFIG_M32 ++examples/hello: $(OBJDIR)/hello.m32s.o $(patsubst %.o, %.m32s.o, $(QJS_LIB_OBJS)) ++ $(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS) ++else ++examples/hello: $(OBJDIR)/hello.o $(QJS_LIB_OBJS) ++ $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) ++endif ++ ++# example of static JS compilation with modules ++HELLO_MODULE_SRCS=examples/hello_module.js ++HELLO_MODULE_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \ ++ -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \ ++ -fno-date -m ++examples/hello_module: $(QJSC) libquickjs$(LTOEXT).a $(HELLO_MODULE_SRCS) ++ $(QJSC) $(HELLO_MODULE_OPTS) -o $@ $(HELLO_MODULE_SRCS) ++ ++# use of an external C module (static compilation) ++ ++test_fib.c: $(QJSC) examples/test_fib.js ++ $(QJSC) -e -M examples/fib.so,fib -m -o $@ examples/test_fib.js ++ ++examples/test_fib: $(OBJDIR)/test_fib.o $(OBJDIR)/examples/fib.o libquickjs$(LTOEXT).a ++ $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) ++ ++examples/fib.so: $(OBJDIR)/examples/fib.pic.o ++ $(CC) $(LDFLAGS) -shared -o $@ $^ ++ ++examples/point.so: $(OBJDIR)/examples/point.pic.o ++ $(CC) $(LDFLAGS) -shared -o $@ $^ ++ ++############################################################################### ++# documentation ++ ++DOCS=doc/quickjs.pdf doc/quickjs.html doc/jsbignum.pdf doc/jsbignum.html ++ ++build_doc: $(DOCS) ++ ++clean_doc: ++ rm -f $(DOCS) ++ ++doc/%.pdf: doc/%.texi ++ texi2pdf --clean -o $@ -q $< ++ ++doc/%.html.pre: doc/%.texi ++ makeinfo --html --no-headers --no-split --number-sections -o $@ $< ++ ++doc/%.html: doc/%.html.pre ++ sed -e 's||\n|' < $< > $@ ++ ++############################################################################### ++# tests ++ ++ifndef CONFIG_DARWIN ++test: tests/bjson.so examples/point.so ++endif ++ifdef CONFIG_M32 ++test: qjs32 ++endif ++ ++test: qjs ++ ./qjs tests/test_closure.js ++ ./qjs tests/test_language.js ++ ./qjs tests/test_builtin.js ++ ./qjs tests/test_loop.js ++ ./qjs tests/test_std.js ++ ./qjs tests/test_worker.js ++ifndef CONFIG_DARWIN ++ifdef CONFIG_BIGNUM ++ ./qjs --bignum tests/test_bjson.js ++else ++ ./qjs tests/test_bjson.js ++endif ++ ./qjs examples/test_point.js ++endif ++ifdef CONFIG_BIGNUM ++ ./qjs --bignum tests/test_op_overloading.js ++ ./qjs --bignum tests/test_bignum.js ++ ./qjs --qjscalc tests/test_qjscalc.js ++endif ++ifdef CONFIG_M32 ++ ./qjs32 tests/test_closure.js ++ ./qjs32 tests/test_language.js ++ ./qjs32 tests/test_builtin.js ++ ./qjs32 tests/test_loop.js ++ ./qjs32 tests/test_std.js ++ ./qjs32 tests/test_worker.js ++ifdef CONFIG_BIGNUM ++ ./qjs32 --bignum tests/test_op_overloading.js ++ ./qjs32 --bignum tests/test_bignum.js ++ ./qjs32 --qjscalc tests/test_qjscalc.js ++endif ++endif ++ ++stats: qjs qjs32 ++ ./qjs -qd ++ ./qjs32 -qd ++ ++microbench: qjs ++ ./qjs tests/microbench.js ++ ++microbench-32: qjs32 ++ ./qjs32 tests/microbench.js ++ ++# ES5 tests (obsolete) ++#test2o: run-test262 ++# time ./run-test262 -m -c test262o.conf ++ ++#test2o-32: run-test262-32 ++# time ./run-test262-32 -m -c test262o.conf ++ ++#test2o-update: run-test262 ++# ./run-test262 -u -c test262o.conf ++ ++# Test262 tests ++#test2-default: run-test262 ++# time ./run-test262 -m -c test262.conf ++ ++#test2: run-test262 ++# time ./run-test262 -m -c test262.conf -a ++ ++#test2-32: run-test262-32 ++# time ./run-test262-32 -m -c test262.conf -a ++ ++#test2-update: run-test262 ++# ./run-test262 -u -c test262.conf -a ++ ++#test2-check: run-test262 ++# time ./run-test262 -m -c test262.conf -E -a ++ ++#testall: all test microbench test2o test2 ++ ++#testall-32: all test-32 microbench-32 test2o-32 test2-32 ++ ++#testall-complete: testall testall-32 ++ ++#bench-v8: qjs ++# make -C tests/bench-v8 ++# ./qjs -d tests/bench-v8/combined.js ++ ++#tests/bjson.so: $(OBJDIR)/tests/bjson.pic.o ++# $(CC) $(LDFLAGS) -shared -o $@ $^ $(LIBS) ++ ++-include $(wildcard $(OBJDIR)/*.d) +diff -Nru quickjs-2021-03-27/qjs.c quickjs-2021-03-27.new/qjs.c +--- quickjs-2021-03-27/qjs.c 2021-03-27 10:00:32.000000000 +0000 ++++ quickjs-2021-03-27.new/qjs.c 2022-06-08 20:45:35.293672769 +0000 +@@ -146,7 +146,7 @@ + return malloc_size(ptr); + #elif defined(_WIN32) + return _msize(ptr); +-#elif defined(EMSCRIPTEN) ++#elif defined(EMSCRIPTEN) || defined(__DJGPP) + return 0; + #elif defined(__linux__) + return malloc_usable_size(ptr); +@@ -268,7 +268,7 @@ + malloc_size, + #elif defined(_WIN32) + (size_t (*)(const void *))_msize, +-#elif defined(EMSCRIPTEN) ++#elif defined(EMSCRIPTEN) || defined(__DJGPP) + NULL, + #elif defined(__linux__) + (size_t (*)(const void *))malloc_usable_size, +diff -Nru quickjs-2021-03-27/quickjs-libc.c quickjs-2021-03-27.new/quickjs-libc.c +--- quickjs-2021-03-27/quickjs-libc.c 2021-03-27 10:00:32.000000000 +0000 ++++ quickjs-2021-03-27.new/quickjs-libc.c 2022-06-08 21:11:56.383291877 +0000 +@@ -59,7 +59,7 @@ + + #if !defined(_WIN32) + /* enable the os.Worker API. IT relies on POSIX threads */ +-#define USE_WORKER ++//#define USE_WORKER + #endif + + #ifdef USE_WORKER +@@ -691,6 +691,7 @@ + obj = JS_NewObject(ctx); + if (JS_IsException(obj)) + return JS_EXCEPTION; ++#if 0 + envp = environ; + for(idx = 0; envp[idx] != NULL; idx++) { + name = envp[idx]; +@@ -708,6 +709,7 @@ + if (ret < 0) + goto fail; + } ++#endif + return obj; + fail: + JS_FreeValue(ctx, obj); +@@ -1912,7 +1914,7 @@ + os_pending_signals |= ((uint64_t)1 << sig_num); + } + +-#if defined(_WIN32) ++#if defined(_WIN32) || defined(__DJGPP) + typedef void (*sighandler_t)(int sig_num); + #endif + +@@ -2467,7 +2469,7 @@ + return make_obj_error(ctx, obj, err); + } + +-#if !defined(_WIN32) ++#if !defined(_WIN32) && !defined(__DJGPP) + static int64_t timespec_to_ms(const struct timespec *tv) + { + return (int64_t)tv->tv_sec * 1000 + (tv->tv_nsec / 1000000); +@@ -2527,12 +2529,12 @@ + JS_DefinePropertyValueStr(ctx, obj, "size", + JS_NewInt64(ctx, st.st_size), + JS_PROP_C_W_E); +-#if !defined(_WIN32) ++#if !defined(_WIN32) && !defined(__DJGPP) + JS_DefinePropertyValueStr(ctx, obj, "blocks", + JS_NewInt64(ctx, st.st_blocks), + JS_PROP_C_W_E); + #endif +-#if defined(_WIN32) ++#if defined(_WIN32) || defined(__DJGPP) + JS_DefinePropertyValueStr(ctx, obj, "atime", + JS_NewInt64(ctx, (int64_t)st.st_atime * 1000), + JS_PROP_C_W_E); +@@ -2619,11 +2621,11 @@ + return JS_EXCEPTION; + if (delay < 0) + delay = 0; +-#if defined(_WIN32) ++#if defined(_WIN32) || defined(__DJGPP) + { + if (delay > INT32_MAX) + delay = INT32_MAX; +- Sleep(delay); ++ usleep(delay); + ret = 0; + } + #else +@@ -2839,7 +2841,7 @@ + JSValueConst options, args = argv[0]; + JSValue val, ret_val; + const char **exec_argv, *file = NULL, *str, *cwd = NULL; +- char **envp = environ; ++ char **envp = NULL;//environ; + uint32_t exec_argc, i; + int ret, pid, status; + BOOL block_flag = TRUE, use_path = TRUE; +@@ -3015,6 +3017,7 @@ + for(i = 0; i < exec_argc; i++) + JS_FreeCString(ctx, exec_argv[i]); + js_free(ctx, exec_argv); ++#if 0 + if (envp != environ) { + char **p; + p = envp; +@@ -3024,6 +3027,7 @@ + } + js_free(ctx, envp); + } ++#endif + return ret_val; + exception: + ret_val = JS_EXCEPTION; +@@ -3608,7 +3612,7 @@ + OS_FLAG(SIGILL), + OS_FLAG(SIGSEGV), + OS_FLAG(SIGTERM), +-#if !defined(_WIN32) ++#if !defined(_WIN32) && !defined(__DJGPP) + OS_FLAG(SIGQUIT), + OS_FLAG(SIGPIPE), + OS_FLAG(SIGALRM), +@@ -3635,7 +3639,7 @@ + OS_FLAG(S_IFDIR), + OS_FLAG(S_IFBLK), + OS_FLAG(S_IFREG), +-#if !defined(_WIN32) ++#if !defined(_WIN32) && !defined(__DJGPP) + OS_FLAG(S_IFSOCK), + OS_FLAG(S_IFLNK), + OS_FLAG(S_ISGID), +@@ -3645,7 +3649,7 @@ + JS_CFUNC_DEF("utimes", 3, js_os_utimes ), + JS_CFUNC_DEF("sleep", 1, js_os_sleep ), + JS_CFUNC_DEF("realpath", 1, js_os_realpath ), +-#if !defined(_WIN32) ++#if !defined(_WIN32) && !defined(__DJGPP) + JS_CFUNC_MAGIC_DEF("lstat", 1, js_os_stat, 1 ), + JS_CFUNC_DEF("symlink", 2, js_os_symlink ), + JS_CFUNC_DEF("readlink", 1, js_os_readlink ), +diff -Nru quickjs-2021-03-27/quickjs.c quickjs-2021-03-27.new/quickjs.c +--- quickjs-2021-03-27/quickjs.c 2021-03-27 10:00:32.000000000 +0000 ++++ quickjs-2021-03-27.new/quickjs.c 2022-06-08 21:18:48.730614538 +0000 +@@ -30,7 +30,7 @@ + #include + #include + #include +-#include ++//#include + #include + #if defined(__APPLE__) + #include +@@ -70,7 +70,7 @@ + /* define to include Atomics.* operations which depend on the OS + threads */ + #if !defined(EMSCRIPTEN) +-#define CONFIG_ATOMICS ++//#define CONFIG_ATOMICS + #endif + + #if !defined(EMSCRIPTEN) +@@ -1680,7 +1680,7 @@ + return malloc_size(ptr); + #elif defined(_WIN32) + return _msize(ptr); +-#elif defined(EMSCRIPTEN) ++#elif defined(EMSCRIPTEN) || defined(__DJGPP) + return 0; + #elif defined(__linux__) + return malloc_usable_size(ptr); +@@ -1754,7 +1754,7 @@ + malloc_size, + #elif defined(_WIN32) + (size_t (*)(const void *))_msize, +-#elif defined(EMSCRIPTEN) ++#elif defined(EMSCRIPTEN) || defined(__DJGPP__) + NULL, + #elif defined(__linux__) + (size_t (*)(const void *))malloc_usable_size, +@@ -11299,12 +11299,19 @@ + return q; + } + ++#ifndef FE_TONEAREST ++#define FE_TONEAREST 0 ++#define FE_DOWNWARD 0 ++#define FE_UPWARD 0 ++#endif ++ ++ + /* buf1 contains the printf result */ + static void js_ecvt1(double d, int n_digits, int *decpt, int *sign, char *buf, + int rounding_mode, char *buf1, int buf1_size) + { +- if (rounding_mode != FE_TONEAREST) +- fesetround(rounding_mode); ++// if (rounding_mode != FE_TONEAREST) ++// fesetround(rounding_mode); + snprintf(buf1, buf1_size, "%+.*e", n_digits - 1, d); + if (rounding_mode != FE_TONEAREST) + fesetround(FE_TONEAREST); +@@ -39795,6 +39802,10 @@ + return JS_NewBool(ctx, is_safe_integer(d)); + } + ++static const double DJ_INFINITY = 1e10000f; ++#undef NAN ++#define NAN (0.0f / 0.0f) ++ + static const JSCFunctionListEntry js_number_funcs[] = { + /* global ParseInt and parseFloat should be defined already or delayed */ + JS_ALIAS_BASE_DEF("parseInt", "parseInt", 0 ), +@@ -39806,8 +39817,8 @@ + JS_PROP_DOUBLE_DEF("MAX_VALUE", 1.7976931348623157e+308, 0 ), + JS_PROP_DOUBLE_DEF("MIN_VALUE", 5e-324, 0 ), + JS_PROP_DOUBLE_DEF("NaN", NAN, 0 ), +- JS_PROP_DOUBLE_DEF("NEGATIVE_INFINITY", -INFINITY, 0 ), +- JS_PROP_DOUBLE_DEF("POSITIVE_INFINITY", INFINITY, 0 ), ++ JS_PROP_DOUBLE_DEF("NEGATIVE_INFINITY", -DJ_INFINITY, 0 ), ++ JS_PROP_DOUBLE_DEF("POSITIVE_INFINITY", DJ_INFINITY, 0 ), + JS_PROP_DOUBLE_DEF("EPSILON", 2.220446049250313e-16, 0 ), /* ES6 */ + JS_PROP_DOUBLE_DEF("MAX_SAFE_INTEGER", 9007199254740991.0, 0 ), /* ES6 */ + JS_PROP_DOUBLE_DEF("MIN_SAFE_INTEGER", -9007199254740991.0, 0 ), /* ES6 */ +@@ -41697,6 +41708,19 @@ + + /* Math */ + ++static double ++fmin2(double a, double b) ++{ ++ return a < b ? a : b; ++} ++ ++static double ++fmax2(double a, double b) ++{ ++ return a > b ? a : b; ++} ++ ++ + /* precondition: a and b are not NaN */ + static double js_fmin(double a, double b) + { +@@ -41707,7 +41731,7 @@ + a1.u64 |= b1.u64; + return a1.d; + } else { +- return fmin(a, b); ++ return fmin2(a, b); + } + } + +@@ -41721,7 +41745,7 @@ + a1.u64 &= b1.u64; + return a1.d; + } else { +- return fmax(a, b); ++ return fmax2(a, b); + } + } +