This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
commit 19b49ba045a9dad3a9eb3c3d64f3c07c35f30ed7 Author: Huang Qi <huang...@xiaomi.com> AuthorDate: Fri Mar 12 17:10:54 2021 +0800 interpreters/quickjs: Bump to latest release Signed-off-by: Huang Qi <huang...@xiaomi.com> Change-Id: I1cd96c4333442f8c3a3c58c3f8ae5bfac1734f5c --- interpreters/quickjs/.gitignore | 1 - ...001-Disabled-unsupported-feature-on-NuttX.patch | 71 +++++ interpreters/quickjs/Kconfig | 5 +- interpreters/quickjs/Makefile | 39 ++- interpreters/quickjs/quickjs.patch | 302 --------------------- 5 files changed, 102 insertions(+), 316 deletions(-) diff --git a/interpreters/quickjs/.gitignore b/interpreters/quickjs/.gitignore index 30534d8..b43e455 100644 --- a/interpreters/quickjs/.gitignore +++ b/interpreters/quickjs/.gitignore @@ -1,2 +1 @@ quickjs* -*.tar.gz diff --git a/interpreters/quickjs/0001-Disabled-unsupported-feature-on-NuttX.patch b/interpreters/quickjs/0001-Disabled-unsupported-feature-on-NuttX.patch new file mode 100644 index 0000000..c89c62f --- /dev/null +++ b/interpreters/quickjs/0001-Disabled-unsupported-feature-on-NuttX.patch @@ -0,0 +1,71 @@ +From a3374db7eca1141ec8a3909ff001f52f3e79d905 Mon Sep 17 00:00:00 2001 +From: Huang Qi <huang...@xiaomi.com> +Date: Wed, 10 Mar 2021 16:30:13 +0800 +Subject: [PATCH] Disabled unsupported feature on NuttX. + +N/A + +Signed-off-by: Huang Qi <huang...@xiaomi.com> +Change-Id: I4ff1793609b752320d64406deec3c0ed9b4da965 +--- + qjs.c | 2 ++ + quickjs-libc.c | 14 +++++++------- + 2 files changed, 9 insertions(+), 7 deletions(-) + +diff --git a/qjs.c b/qjs.c +index 4dd11f8..a35a500 100644 +--- a/qjs.c ++++ b/qjs.c +@@ -448,8 +448,10 @@ int main(int argc, char **argv) + } + } + ++#ifdef CONFIG_BIGNUM + if (load_jscalc) + bignum_ext = 1; ++#endif + + if (trace_memory) { + js_trace_malloc_init(&trace_data); +diff --git a/quickjs-libc.c b/quickjs-libc.c +index e8b81e9..858703c 100644 +--- a/quickjs-libc.c ++++ b/quickjs-libc.c +@@ -3558,10 +3558,10 @@ static const JSCFunctionListEntry js_os_funcs[] = { + JS_CFUNC_MAGIC_DEF("setWriteHandler", 2, js_os_setReadHandler, 1 ), + JS_CFUNC_DEF("signal", 2, js_os_signal ), + OS_FLAG(SIGINT), +- OS_FLAG(SIGABRT), +- OS_FLAG(SIGFPE), +- OS_FLAG(SIGILL), +- OS_FLAG(SIGSEGV), ++ // OS_FLAG(SIGABRT), ++ // OS_FLAG(SIGFPE), ++ // OS_FLAG(SIGILL), ++ // OS_FLAG(SIGSEGV), + OS_FLAG(SIGTERM), + #if !defined(_WIN32) + OS_FLAG(SIGQUIT), +@@ -3573,8 +3573,8 @@ static const JSCFunctionListEntry js_os_funcs[] = { + OS_FLAG(SIGCONT), + OS_FLAG(SIGSTOP), + OS_FLAG(SIGTSTP), +- OS_FLAG(SIGTTIN), +- OS_FLAG(SIGTTOU), ++ // OS_FLAG(SIGTTIN), ++ // OS_FLAG(SIGTTOU), + #endif + JS_CFUNC_DEF("setTimeout", 2, js_os_setTimeout ), + JS_CFUNC_DEF("clearTimeout", 1, js_os_clearTimeout ), +@@ -3603,7 +3603,7 @@ static const JSCFunctionListEntry js_os_funcs[] = { + JS_CFUNC_DEF("realpath", 1, js_os_realpath ), + JS_CFUNC_DEF("symlink", 2, js_os_symlink ), + JS_CFUNC_DEF("readlink", 1, js_os_readlink ), +- JS_CFUNC_DEF("exec", 1, js_os_exec ), ++ // JS_CFUNC_DEF("exec", 1, js_os_exec ), + JS_CFUNC_DEF("waitpid", 2, js_os_waitpid ), + OS_FLAG(WNOHANG), + JS_CFUNC_DEF("pipe", 0, js_os_pipe ), +-- +2.25.1 + diff --git a/interpreters/quickjs/Kconfig b/interpreters/quickjs/Kconfig index 7e29d66..6db7026 100644 --- a/interpreters/quickjs/Kconfig +++ b/interpreters/quickjs/Kconfig @@ -11,7 +11,10 @@ if INTERPRETERS_QUICKJS config INTERPRETERS_QUICKJS_BIGNUM bool "Bignum support" - default false + default n + ---help--- + It's depend on libatomic, + Not all platform support it. config INTERPRETERS_QUICKJS_PRIORITY int "QuickJS interpreter priority" diff --git a/interpreters/quickjs/Makefile b/interpreters/quickjs/Makefile index 08de147..1a1f2ef 100644 --- a/interpreters/quickjs/Makefile +++ b/interpreters/quickjs/Makefile @@ -20,22 +20,35 @@ include $(APPDIR)/Make.defs -QUICKJS_VERSION = 20200705 +QUICKJS_VERSION = 2020-11-08 QUICKJS_UNPACK = quickjs -QUICKJS_TARBALL = $(QUICKJS_VERSION).tar.gz -QUICKJS_URL_BASE = https://github.com/horhof/quickjs/archive +QUICKJS_TARBALL = quickjs-$(QUICKJS_VERSION).tar.xz +QUICKJS_URL_BASE = https://bellard.org/quickjs/ QUICKJS_URL = $(QUICKJS_URL_BASE)/$(QUICKJS_TARBALL) -CSRCS = quickjs.c libregexp.c jscompress.c libbf.c libunicode.c -CSRCS += cutils.c quickjs-libc.c repl.c +CSRCS = quickjs.c libregexp.c libbf.c libunicode.c cutils.c +CSRCS += quickjs-libc.c repl.c MAINSRC = qjs.c -VERSION=\"$(shell cat $(QUICKJS_UNPACK)/VERSION)\" +VERSION=\"$(QUICKJS_VERSION)\" CFLAGS += -DCONFIG_VERSION=$(VERSION) -Wno-shadow CFLAGS += -Wno-array-bounds -I$(QUICKJS_UNPACK) -ifneq ($(CONFIG_INTERPRETERS_QUICKJS_BIGNUM),) +CFLAGS += -D__linux__ -include alloca.h +CFLAGS += -Wno-incompatible-pointer-types +CFLAGS += -Wno-implicit-function-declaration +CFLAGS += -Wno-unused-function +CFLAGS += -Wno-format + +ifeq ($(CONFIG_ARCH_ARM),y) +CFLAGS += -DFE_TONEAREST=0x00000000 +CFLAGS += -DFE_UPWARD=0x00400000 +CFLAGS += -DFE_DOWNWARD=0x00800000 +CFLAGS += -DFE_TOWARDZERO=0x00c00000 +endif + +ifeq ($(CONFIG_INTERPRETERS_QUICKJS_BIGNUM),y) CFLAGS += -DCONFIG_BIGNUM CSRCS += qjscalc.c endif @@ -53,16 +66,18 @@ $(QUICKJS_TARBALL): $(QUICKJS_UNPACK): $(QUICKJS_TARBALL) $(Q) echo "Unpacking $(QUICKJS_TARBALL) to $(QUICKJS_UNPACK)" - $(Q) tar xzvf $(QUICKJS_TARBALL) + $(Q) tar -Jxf $(QUICKJS_TARBALL) $(Q) mv quickjs-$(QUICKJS_VERSION) $(QUICKJS_UNPACK) - $(Q) patch -p0 < quickjs.patch + $(Q) patch -d $(QUICKJS_UNPACK) -p1 < 0001-Disabled-unsupported-feature-on-NuttX.patch $(QUICKJS_UNPACK)/.patch: $(QUICKJS_UNPACK) - $(Q) make -C $(QUICKJS_UNPACK) \ - CONFIG_BIGNUM=$(CONFIG_INTERPRETERS_QUICKJS_BIGNUM) $(Q) touch $(QUICKJS_UNPACK)/.patch -context:: $(QUICKJS_UNPACK)/.patch +build_host: $(QUICKJS_UNPACK)/.patch + make -C $(QUICKJS_UNPACK) \ + CONFIG_BIGNUM=$(CONFIG_INTERPRETERS_QUICKJS_BIGNUM) + +context:: build_host clean:: $(Q) test ! -d $(QUICKJS_UNPACK) || make -C $(QUICKJS_UNPACK) clean diff --git a/interpreters/quickjs/quickjs.patch b/interpreters/quickjs/quickjs.patch deleted file mode 100644 index d3242b4..0000000 --- a/interpreters/quickjs/quickjs.patch +++ /dev/null @@ -1,302 +0,0 @@ -diff --color -upr quickjs/libregexp.c quickjs-20200705-modified/libregexp.c ---- quickjs/libregexp.c 2020-07-25 05:25:41.000000000 +0800 -+++ quickjs-20200705-modified/libregexp.c 2020-08-27 16:04:41.440000000 +0800 -@@ -21,6 +21,7 @@ - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -+#include <alloca.h> - #include <stdlib.h> - #include <stdio.h> - #include <stdarg.h> -diff --color -upr quickjs/qjs.c quickjs-20200705-modified/qjs.c ---- quickjs/qjs.c 2020-07-25 05:25:41.000000000 +0800 -+++ quickjs-20200705-modified/qjs.c 2020-08-27 16:23:55.750000000 +0800 -@@ -34,7 +34,7 @@ - #include <time.h> - #if defined(__APPLE__) - #include <malloc/malloc.h> --#elif defined(__linux__) -+#elif defined(__linux__) || defined(__NuttX__) - #include <malloc.h> - #endif - -@@ -242,7 +242,7 @@ static const JSMallocFunctions trace_mf - (size_t (*)(const void *))_msize, - #elif defined(EMSCRIPTEN) - NULL, --#elif defined(__linux__) -+#elif defined(__linux__) || defined(__NuttX__) - (size_t (*)(const void *))malloc_usable_size, - #else - /* change this to `NULL,` if compilation fails */ -diff --color -upr quickjs/quickjs-libc.c quickjs-20200705-modified/quickjs-libc.c ---- quickjs/quickjs-libc.c 2020-07-25 05:25:41.000000000 +0800 -+++ quickjs-20200705-modified/quickjs-libc.c 2020-08-27 17:10:06.890000000 +0800 -@@ -46,6 +46,7 @@ - #include <termios.h> - #include <sys/ioctl.h> - #include <sys/wait.h> -+#include <spawn.h> - - #if defined(__APPLE__) - typedef sig_t sighandler_t; -@@ -71,6 +72,42 @@ typedef sig_t sighandler_t; - #include "list.h" - #include "quickjs-libc.h" - -+#ifndef SIGQUIT -+# define SIGQUIT 3 -+#endif -+ -+#ifndef SIGILL -+# define SIGILL 4 -+#endif -+ -+#ifndef SIGABRT -+# define SIGABRT 6 -+#endif -+ -+#ifndef SIGFPE -+# define SIGFPE 8 -+#endif -+ -+#ifndef SIGSEGV -+# define SIGSEGV 13 -+#endif -+ -+#ifndef SIGTERM -+# define SIGTERM 15 -+#endif -+ -+#ifndef SIGTSTP -+# define SIGTSTP 18 -+#endif -+ -+#ifndef SIGTTIN -+# define SIGTTIN 21 -+#endif -+ -+#ifndef SIGTTOU -+# define SIGTTOU 22 -+#endif -+ - /* TODO: - - add socket calls - */ -@@ -2622,62 +2651,6 @@ static char **build_envp(JSContext *ctx, - goto done; - } - --/* execvpe is not available on non GNU systems */ --static int my_execvpe(const char *filename, char **argv, char **envp) --{ -- char *path, *p, *p_next, *p1; -- char buf[PATH_MAX]; -- size_t filename_len, path_len; -- BOOL eacces_error; -- -- filename_len = strlen(filename); -- if (filename_len == 0) { -- errno = ENOENT; -- return -1; -- } -- if (strchr(filename, '/')) -- return execve(filename, argv, envp); -- -- path = getenv("PATH"); -- if (!path) -- path = (char *)"/bin:/usr/bin"; -- eacces_error = FALSE; -- p = path; -- for(p = path; p != NULL; p = p_next) { -- p1 = strchr(p, ':'); -- if (!p1) { -- p_next = NULL; -- path_len = strlen(p); -- } else { -- p_next = p1 + 1; -- path_len = p1 - p; -- } -- /* path too long */ -- if ((path_len + 1 + filename_len + 1) > PATH_MAX) -- continue; -- memcpy(buf, p, path_len); -- buf[path_len] = '/'; -- memcpy(buf + path_len + 1, filename, filename_len); -- buf[path_len + 1 + filename_len] = '\0'; -- -- execve(buf, argv, envp); -- -- switch(errno) { -- case EACCES: -- eacces_error = TRUE; -- break; -- case ENOENT: -- case ENOTDIR: -- break; -- default: -- return -1; -- } -- } -- if (eacces_error) -- errno = EACCES; -- return -1; --} -- - /* exec(args[, options]) -> exitcode */ - static JSValue js_os_exec(JSContext *ctx, JSValueConst this_val, - int argc, JSValueConst *argv) -@@ -2687,12 +2660,13 @@ static JSValue js_os_exec(JSContext *ctx - const char **exec_argv, *file = NULL, *str, *cwd = NULL; - char **envp = environ; - uint32_t exec_argc, i; -- int ret, pid, status; -+ int ret, status; -+ pid_t pid; - BOOL block_flag = TRUE, use_path = TRUE; - static const char *std_name[3] = { "stdin", "stdout", "stderr" }; -- int std_fds[3]; - uint32_t uid = -1, gid = -1; -- -+ posix_spawn_file_actions_t action; -+ - val = JS_GetPropertyStr(ctx, args, "length"); - if (JS_IsException(val)) - return JS_EXCEPTION; -@@ -2718,10 +2692,8 @@ static JSValue js_os_exec(JSContext *ctx - exec_argv[i] = str; - } - exec_argv[exec_argc] = NULL; -+ posix_spawn_file_actions_init(&action); - -- for(i = 0; i < 3; i++) -- std_fds[i] = i; -- - /* get the options, if any */ - if (argc >= 2) { - options = argv[1]; -@@ -2762,7 +2734,9 @@ static JSValue js_os_exec(JSContext *ctx - JS_FreeValue(ctx, val); - if (ret) - goto exception; -- std_fds[i] = fd; -+ if (fd != i) { -+ posix_spawn_file_actions_adddup2(&action, fd, i); -+ } - } - } - -@@ -2797,46 +2771,17 @@ static JSValue js_os_exec(JSContext *ctx - } - } - -- pid = fork(); -- if (pid < 0) { -- JS_ThrowTypeError(ctx, "fork error"); -+ if (!file) -+ file = exec_argv[0]; -+ if (use_path) -+ ret = posix_spawnp(&pid, file, &action, NULL, (char **)exec_argv, envp); -+ else -+ ret = posix_spawn(&pid, file, &action, NULL, (char **)exec_argv, envp); -+ -+ if (ret < 0) { - goto exception; - } -- if (pid == 0) { -- /* child */ -- int fd_max = sysconf(_SC_OPEN_MAX); - -- /* remap the stdin/stdout/stderr handles if necessary */ -- for(i = 0; i < 3; i++) { -- if (std_fds[i] != i) { -- if (dup2(std_fds[i], i) < 0) -- _exit(127); -- } -- } -- -- for(i = 3; i < fd_max; i++) -- close(i); -- if (cwd) { -- if (chdir(cwd) < 0) -- _exit(127); -- } -- if (uid != -1) { -- if (setuid(uid) < 0) -- _exit(127); -- } -- if (gid != -1) { -- if (setgid(gid) < 0) -- _exit(127); -- } -- -- if (!file) -- file = exec_argv[0]; -- if (use_path) -- ret = my_execvpe(file, (char **)exec_argv, envp); -- else -- ret = execve(file, (char **)exec_argv, envp); -- _exit(127); -- } - /* parent */ - if (block_flag) { - for(;;) { -@@ -2856,6 +2801,7 @@ static JSValue js_os_exec(JSContext *ctx - } - ret_val = JS_NewInt32(ctx, ret); - done: -+ posix_spawn_file_actions_destroy(&action); - JS_FreeCString(ctx, file); - JS_FreeCString(ctx, cwd); - for(i = 0; i < exec_argc; i++) -diff --color -upr quickjs/quickjs.c quickjs-20200705-modified/quickjs.c ---- quickjs/quickjs.c 2020-07-25 05:25:41.000000000 +0800 -+++ quickjs-20200705-modified/quickjs.c 2020-08-27 17:10:33.520000000 +0800 -@@ -22,6 +22,7 @@ - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -+#include <alloca.h> - #include <stdlib.h> - #include <stdio.h> - #include <stdarg.h> -@@ -34,7 +35,7 @@ - #include <math.h> - #if defined(__APPLE__) - #include <malloc/malloc.h> --#elif defined(__linux__) -+#elif defined(__linux__) || defined(__NuttX__) - #include <malloc.h> - #endif - -@@ -104,6 +105,20 @@ - //#define DUMP_PROMISE - //#define DUMP_READ_OBJECT - -+#ifndef FE_TONEAREST -+# define FE_TONEAREST 0x00000000 -+#endif -+#ifndef FE_UPWARD -+# define FE_UPWARD 0x00400000 -+#endif -+#ifndef FE_DOWNWARD -+# define FE_DOWNWARD 0x00800000 -+#endif -+#ifndef FE_TOWARDZERO -+# define FE_TOWARDZERO 0x00c00000 -+#endif -+ -+ - /* test the GC by forcing it before each object allocation */ - //#define FORCE_GC_AT_MALLOC - -@@ -1736,7 +1751,7 @@ static const JSMallocFunctions def_mallo - (size_t (*)(const void *))_msize, - #elif defined(EMSCRIPTEN) - NULL, --#elif defined(__linux__) -+#elif defined(__linux__) || defined(__NuttX__) - (size_t (*)(const void *))malloc_usable_size, - #else - /* change this to `NULL,` if compilation fails */