From 8caa3226f25510cdd1f93420c7ff6d5ac6ad0eb2 Mon Sep 17 00:00:00 2001 From: MCApollo <34170230+MCApollo@users.noreply.github.com> Date: Mon, 27 May 2019 21:58:11 +0000 Subject: Working --- data/node/init-options.diff | 143 ++++++++++++++++++++++++++++++++++++++++++++ data/node/make.sh | 16 ++--- 2 files changed, 151 insertions(+), 8 deletions(-) create mode 100644 data/node/init-options.diff diff --git a/data/node/init-options.diff b/data/node/init-options.diff new file mode 100644 index 000000000..a3faf707a --- /dev/null +++ b/data/node/init-options.diff @@ -0,0 +1,143 @@ +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-27 17:45:00.845971558 +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-27 20:45:57.228246250 +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-27 09:00:23.775576108 +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/node/make.sh b/data/node/make.sh index 91dc4fe9a..da11ae85a 100644 --- a/data/node/make.sh +++ b/data/node/make.sh @@ -4,10 +4,12 @@ export CC="${PKG_TARG}-gcc" export CXX="${PKG_TARG}-g++" export LD="${PKG_TARG}-ld" export AR="${PKG_TARG}-ar" +export RANLIB="${PKG_TARG}-ranlib" export AS="${PKG_TARG}-as" -export LINK="${CC}" +export LINK="${CXX}" export RANLIB="${PKG_TARG}-ranlib" export SDKROOT="${PKG_ROOT}" +export LDFLAGS="-undefined dynamic_lookup" # libnode needs this- the binary will have the rest of the symbols. export CC_host="${HOSTCC:-clang}" export CXX_host="${HOSTCXX:-clang++}" @@ -18,14 +20,12 @@ export CC_target="${CC}" export CXX_target="${CXX}" export LINK_target="${CXX}" # On purpose, see out/Makefile 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/')" \ -./configure --prefix="${PKG_TAPF}" --without-snapshot --cross-compiling --dest-os=ios --dest-cpu=arm64 --without-intl --without-npm --shared-zlib --shared-cares --shared-openssl --enable-static # --openssl-no-asm --shared +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'" \ +./configure --prefix="${PKG_TAPF}" --without-snapshot --cross-compiling --dest-os=ios --dest-cpu=arm64 --without-intl --without-npm --shared-zlib --shared-cares --shared-openssl --shared # TODO: Fix tool/install.py and the Makefile -make -j2 -make install DESTDIR="${PKG_DEST}" - -cp Release/node ${PKG_DEST}/usr/bin || : +make BUILDTYPE=Release -j2 # Don't use pkg:make, CC_host gets overwritten +make BUILDTYPE=Release install DESTDIR="${PKG_DEST}" -- cgit v1.2.3