The following modifications have been made by Synopse to the original source code:
- started not from original Bellard's repository, but https://github.com/c-smile/quickjspp fork;
- merged back the official https://github.com/bellard/quickjs updates, even when the
c-smilefork is outdated; - enabled
BIGNUM,JSXand debugger extensions by default; - forced
JS_STRICT_NAN_BOXINGon all targets, for a single 64-bit containedJSValuedefinition; quickjs-libcis not linked to enhance cross-compilation and to be reimplemented in native pascal instead of native c -js_module_set_import_meta/js_std_eval_binarywere moved to the mainquickjs.cfile;- regrouped all source code into a single
quickjs2.camalgamation source file (to fix cyclic static definitions) and facilitate Delphi static linking; assert()andabort()redirect to less painful pascalExceptions (how want aSIG_ABRTto kill your service?);pas_malloc/freeredirection to the pascal MM for best performance and less memory fragmentation;- simple per-target compilation scripts (no complex make files) dedicated to FPC and Delphi static linking using the FpcUpDeluxe cross-compilers.
With some proper tricks, we were able to compile QuickJS using mingw/gcc for FPC (the easy part), and also for Delphi Win32/Win64 - even if they don't support their format. \o/
This source code is included as reference. Please don't try to compile the static files by yourself, but download them from the latest https://github.com/synopse/mORMot2/releases or https://synopse.info/files/mormot2static.7z
Authors: Fabrice Bellard and Charlie Gordon
Ported from https://bellard.org/quickjs/ and its official GitHub mirror https://github.com/bellard/quickjs
By Andrew Fedoniouk (a.k.a. c-smile)
This version is
- Microsoft Visual C++ compatible/compileable
- Is used in Sciter.JS
- It contains extras:
- JSX - built-in facebook::JSX support with Sciter specific extras.
- Built-in Persistence - you can think of it as local MongoDB (NoSQL) DB embedded into the language. Pretty small, adds just 70kb into binary.
The main documentation is in doc/quickjs.pdf or doc/quickjs.html.
Prerequisite: premake5 - download and install it.
Then go to /win folder and run premake-vs2017.bat or premake-vs2019.bat .
It will generate .build/vs2017/quickjs-msvc.sln and open it in Microsoft Visual Studio.
Press F5 to compile it and run qjs - interactive JS command line application.
Supported premake options:
--jsx- include JSX support;--storage- include Persistent Storage support;
Supported targets (these are built into Premake itself):
- vs2017 - MS Visual Studio 2017
- vs2019 - MS Visual Studio 2019
- gmake2 - gmake files
- etc...
Few examples of other possible configurations:
premake5 vs2019 --jsx --storage
premake5 codeblocks --cc=gcc --jsx --storage
premake5 gmake2 --cc=gcc --jsx --storage
premake5 gmake2 --cc=clang --jsx --storage
premake5 gmake2 --cc=clang --jsx --storage
premake5 xcode4 --jsx --storage