From 1b1fa61507a809a66f053a8523f883b2b6a2f487 Mon Sep 17 00:00:00 2001 From: Sam Bingner Date: Fri, 31 May 2019 16:00:14 -1000 Subject: Update node to just use JIT --- data/nodejs/_metadata/version | 2 +- data/nodejs/install.diff | 26 ++++++ data/nodejs/install.diff.disabled | 26 ------ data/nodejs/jitless.diff | 165 -------------------------------------- data/nodejs/make.sh | 13 ++- data/nodejs/node.xml | 9 +++ 6 files changed, 41 insertions(+), 200 deletions(-) create mode 100644 data/nodejs/install.diff delete mode 100644 data/nodejs/install.diff.disabled delete mode 100644 data/nodejs/jitless.diff create mode 100644 data/nodejs/node.xml diff --git a/data/nodejs/_metadata/version b/data/nodejs/_metadata/version index 9c028e25d..18dca7ffd 100644 --- a/data/nodejs/_metadata/version +++ b/data/nodejs/_metadata/version @@ -1 +1 @@ -12.3.1 +12.3.1~a1 diff --git a/data/nodejs/install.diff b/data/nodejs/install.diff new file mode 100644 index 000000000..a8ffea948 --- /dev/null +++ b/data/nodejs/install.diff @@ -0,0 +1,26 @@ +diff -ur node-v12.3.1/tools/install.py node-v12.3.1+iPhone/tools/install.py +--- node-v12.3.1/tools/install.py 2019-05-22 12:21:55.000000000 +0000 ++++ node-v12.3.1+iPhone/tools/install.py 2019-05-28 00:22:25.356341629 +0000 +@@ -134,8 +134,8 @@ + output_file = 'lib' + output_file + '.' + variables.get('shlib_suffix') + # GYP will output to lib.target except on OS X, this is hardcoded + # in its source - see the _InstallableTargetInstallPath function. +- if sys.platform != 'darwin': +- output_prefix += 'lib.target/' ++# if sys.platform != 'darwin': ++ output_prefix += 'lib.target/' + + if 'false' == variables.get('node_shared'): + action([output_prefix + output_file], 'bin/' + output_file) +@@ -151,10 +151,7 @@ + action(['deps/v8/tools/gdbinit'], 'share/doc/node/') + action(['deps/v8/tools/lldb_commands.py'], 'share/doc/node/') + +- if 'freebsd' in sys.platform or 'openbsd' in sys.platform: +- action(['doc/node.1'], 'man/man1/') +- else: +- action(['doc/node.1'], 'share/man/man1/') ++ action(['doc/node.1'], 'share/man/man1/') + + if 'true' == variables.get('node_install_npm'): npm_files(action) + diff --git a/data/nodejs/install.diff.disabled b/data/nodejs/install.diff.disabled deleted file mode 100644 index be725d702..000000000 --- a/data/nodejs/install.diff.disabled +++ /dev/null @@ -1,26 +0,0 @@ -diff -ur node-v12.3.1/tools/install.py node-v12.3.1+iPhone/tools/install.py ---- node-v12.3.1/tools/install.py 2019-05-22 12:21:55.000000000 +0000 -+++ node-v12.3.1+iPhone/tools/install.py 2019-05-28 00:22:25.356341629 +0000 -@@ -134,8 +134,8 @@ - output_file = 'lib' + output_file + '.' + variables.get('shlib_suffix') - # GYP will output to lib.target except on OS X, this is hardcoded - # in its source - see the _InstallableTargetInstallPath function. -- if sys.platform != 'darwin': -- output_prefix += 'lib.target/' -+# if sys.platform != 'darwin': -+# output_prefix += 'lib.target/' - - if 'false' == variables.get('node_shared'): - action([output_prefix + output_file], 'bin/' + output_file) -@@ -151,10 +151,7 @@ - action(['deps/v8/tools/gdbinit'], 'share/doc/node/') - action(['deps/v8/tools/lldb_commands.py'], 'share/doc/node/') - -- if 'freebsd' in sys.platform or 'openbsd' in sys.platform: -- action(['doc/node.1'], 'man/man1/') -- else: -- action(['doc/node.1'], 'share/man/man1/') -+ action(['doc/node.1'], 'share/man/man1/') - - if 'true' == variables.get('node_install_npm'): npm_files(action) - diff --git a/data/nodejs/jitless.diff b/data/nodejs/jitless.diff deleted file mode 100644 index f5cb3f95b..000000000 --- a/data/nodejs/jitless.diff +++ /dev/null @@ -1,165 +0,0 @@ -diff -Naur node-v12.3.1/deps/uv/src/unix/process.c node-v12.3.1+iPhone/deps/uv/src/unix/process.c ---- node-v12.3.1/deps/uv/src/unix/process.c 2019-05-22 12:21:52.000000000 +0000 -+++ node-v12.3.1+iPhone/deps/uv/src/unix/process.c 2019-05-28 22:01:59.417155270 +0000 -@@ -267,7 +267,8 @@ - } - - --#if !(defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)) -+#if !(defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH || TARGET_OS_IPHONE)) -+// Disabled on iOS until MC fixes jitless, the syscall ruins spawning children. - /* execvp is marked __WATCHOS_PROHIBITED __TVOS_PROHIBITED, so must be - * avoided. Since this isn't called on those targets, the function - * doesn't even need to be defined for them. -@@ -411,7 +412,7 @@ - int uv_spawn(uv_loop_t* loop, - uv_process_t* process, - const uv_process_options_t* options) { --#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH) -+#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH || TARGET_OS_IPHONE) - /* fork is marked __WATCHOS_PROHIBITED __TVOS_PROHIBITED. */ - return UV_ENOSYS; - #else -diff -Naur node-v12.3.1/src/codesign.h node-v12.3.1+iPhone/src/codesign.h ---- node-v12.3.1/src/codesign.h 1970-01-01 00:00:00.000000000 +0000 -+++ node-v12.3.1+iPhone/src/codesign.h 2019-05-28 22:00:20.085095406 +0000 -@@ -0,0 +1,65 @@ -+/* -+ * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. -+ * -+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ -+ * -+ * This file contains Original Code and/or Modifications of Original Code -+ * as defined in and that are subject to the Apple Public Source License -+ * Version 2.0 (the 'License'). You may not use this file except in -+ * compliance with the License. The rights granted to you under the License -+ * may not be used to create, or enable the creation or redistribution of, -+ * unlawful or unlicensed copies of an Apple operating system, or to -+ * circumvent, violate, or enable the circumvention or violation of, any -+ * terms of an Apple operating system software license agreement. -+ * -+ * Please obtain a copy of the License at -+ * http://www.opensource.apple.com/apsl/ and read it before using this file. -+ * -+ * The Original Code and all software distributed under the License are -+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER -+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, -+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. -+ * Please see the License for the specific language governing rights and -+ * limitations under the License. -+ * -+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ -+ */ -+ -+#ifndef _SYS_CODESIGN_H_ -+#define _SYS_CODESIGN_H_ -+ -+#include -+ -+/* code signing attributes of a process */ -+#define CS_VALID 0x0001 /* dynamically valid */ -+#define CS_HARD 0x0100 /* don't load invalid pages */ -+#define CS_KILL 0x0200 /* kill process if it becomes invalid */ -+#define CS_EXEC_SET_HARD 0x1000 /* set CS_HARD on any exec'ed process */ -+#define CS_EXEC_SET_KILL 0x2000 /* set CS_KILL on any exec'ed process */ -+#define CS_KILLED 0x10000 /* was killed by kernel for invalidity */ -+#define CS_RESTRICT 0x20000 /* tell dyld to treat restricted */ -+ -+/* csops operations */ -+#define CS_OPS_STATUS 0 /* return status */ -+#define CS_OPS_MARKINVALID 1 /* invalidate process */ -+#define CS_OPS_MARKHARD 2 /* set HARD flag */ -+#define CS_OPS_MARKKILL 3 /* set KILL flag (sticky) */ -+#define CS_OPS_PIDPATH 4 /* get executable's pathname */ -+#define CS_OPS_CDHASH 5 /* get code directory hash */ -+#define CS_OPS_PIDOFFSET 6 /* get offset of active Mach-o slice */ -+#define CS_OPS_ENTITLEMENTS_BLOB 7 /* get entitlements blob */ -+#define CS_OPS_MARKRESTRICT 8 /* set RESTRICT flag (sticky) */ -+ -+#ifndef KERNEL -+ -+__BEGIN_DECLS -+ -+/* code sign operations */ -+int csops(pid_t pid, unsigned int ops, void * useraddr, size_t usersize); -+ -+__END_DECLS -+ -+#endif /* ! KERNEL */ -+ -+#endif /* _SYS_CODESIGN_H_ */ -diff -Naur node-v12.3.1/src/node.cc node-v12.3.1+iPhone/src/node.cc ---- node-v12.3.1/src/node.cc 2019-05-22 12:21:54.000000000 +0000 -+++ node-v12.3.1+iPhone/src/node.cc 2019-05-28 22:00:20.085095406 +0000 -@@ -94,6 +94,19 @@ - #include // STDIN_FILENO, STDERR_FILENO - #endif - -+#if TARGET_OS_IPHONE || V8_TARGET_OS_IPHONE -+#ifdef __cplusplus -+extern "C" { -+#endif -+ #include "codesign.h" -+ #include -+#ifdef __cplusplus -+} -+#endif -+ #define CS_OPS_STATUS 0 -+ #define CS_DEBUGGED 0x10000000 -+#endif -+ - // ========== global C++ headers ========== - - #include -@@ -625,13 +638,6 @@ - per_process::cli_options->cmdline = *argv; - #endif // NODE_REPORT - --#if defined(NODE_V8_OPTIONS) -- // Should come before the call to V8::SetFlagsFromCommandLine() -- // so the user can disable a flag --foo at run-time by passing -- // --no_foo from the command line. -- V8::SetFlagsFromString(NODE_V8_OPTIONS, sizeof(NODE_V8_OPTIONS) - 1); --#endif -- - std::shared_ptr default_env_options = - per_process::cli_options->per_isolate->per_env; - { -@@ -891,6 +897,22 @@ - params.snapshot_blob = blob; - } - -+#if defined(NODE_V8_OPTIONS) -+ V8::SetFlagsFromString(NODE_V8_OPTIONS, sizeof(NODE_V8_OPTIONS) - 1); -+ #if TARGET_OS_IPHONE || V8_TARGET_OS_IPHONE -+ /* -+ Even with '--jitless' it appears that node only works under a debugger. -+ https://github.com/hrydgard/ppsspp/commit/53e254d352986dc1093c620c58075189fd714a65 -+ https://github.com/hrydgard/ppsspp/issues/11905#issuecomment-476871010 -+ */ -+ uint32_t flags; -+ csops(getpid(), CS_OPS_STATUS, &flags, 0); -+ if (!(flags & CS_DEBUGGED)) { -+ syscall(SYS_ptrace, 0, 0, 0, 0); -+ } -+ #endif -+#endif -+ - NodeMainInstance main_instance(¶ms, - uv_default_loop(), - per_process::v8_platform.Platform(), -diff -Naur node-v12.3.1/src/node_options.cc node-v12.3.1+iPhone/src/node_options.cc ---- node-v12.3.1/src/node_options.cc 2019-05-22 12:21:54.000000000 +0000 -+++ node-v12.3.1+iPhone/src/node_options.cc 2019-05-28 22:00:20.085095406 +0000 -@@ -499,6 +499,10 @@ - kAllowedInEnvironment); - AddOption("--stack-trace-limit", "", V8Option{}, kAllowedInEnvironment); - -+#if TARGET_OS_IPHONE || V8_TARGET_OS_IPHONE -+ AddOption("--jitless", "", V8Option{}, kAllowedInEnvironment); -+#endif -+ - #ifdef NODE_REPORT - AddOption("--report-uncaught-exception", - "generate diagnostic report on uncaught exceptions", diff --git a/data/nodejs/make.sh b/data/nodejs/make.sh index d98e7ef95..a8b85aa45 100644 --- a/data/nodejs/make.sh +++ b/data/nodejs/make.sh @@ -23,16 +23,13 @@ export AR_target="${AR}" export LDFLAGS_target="${LDFLAGS}" GYP_CROSSCOMPILE=1 \ -GYP_DEFINES="v8_enable_inspector=1 target_arch=arm64 v8_target_arch=arm64 host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/') node_v8_options='--jitless'" \ +GYP_DEFINES="v8_enable_inspector=1 target_arch=arm64 v8_target_arch=arm64 host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')" \ PKG_CONFIG="$(realpath "${PKG_BASE}/util/pkg-config.sh")" \ ./configure --prefix="${PKG_TAPF}" --without-snapshot --cross-compiling --dest-os=ios --dest-cpu=arm64 --without-intl --shared-zlib --shared-cares --shared-openssl --shared-nghttp2 --shared # Don't use pkg:make, CC_host gets overwritten SDKROOT="" \ -make BUILDTYPE=Release DESTCPU=arm64 install DESTDIR="${PKG_DEST}" -j16 - -# TODO: Fix tool/install.py and the Makefile -if [[ ! -x "${PKG_TAPF}"/bin/node ]]; then - pkg: mkdir -p "${PKG_TAPF}"/bin - cp out/Release/node "${PKG_DEST}"/"${PKG_TAPF}"/bin -fi +make BUILDTYPE=Release DESTCPU=arm64 install DESTDIR="${PKG_DEST}" -j32 +pkg: mkdir -p /usr/bin +pkg: cp out/Release/node /usr/bin/ +ldid -S"${PKG_DATA}/node.xml" "${PKG_DEST}/usr/bin/node" diff --git a/data/nodejs/node.xml b/data/nodejs/node.xml new file mode 100644 index 000000000..00f59d885 --- /dev/null +++ b/data/nodejs/node.xml @@ -0,0 +1,9 @@ + + + + platform-application + + dynamic-codesigning + + + -- cgit v1.2.3