summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMCApollo <34170230+MCApollo@users.noreply.github.com>2019-05-27 21:58:11 +0000
committerMCApollo <34170230+MCApollo@users.noreply.github.com>2019-05-27 21:58:11 +0000
commit8caa3226f25510cdd1f93420c7ff6d5ac6ad0eb2 (patch)
tree3b38154620bdec385e8fb82f049dcea7cfa47c2a
parente225d9a4ddc155b46e3859f41d53111f57db7091 (diff)
Working
-rw-r--r--data/node/init-options.diff143
-rw-r--r--data/node/make.sh16
2 files changed, 151 insertions, 8 deletions
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 <sys/types.h>
++
++/* 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 <unistd.h> // STDIN_FILENO, STDERR_FILENO
+ #endif
+
++#if TARGET_OS_IPHONE || V8_TARGET_OS_IPHONE
++#ifdef __cplusplus
++extern "C" {
++#endif
++ #include "codesign.h"
++ #include <sys/syscall.h>
++#ifdef __cplusplus
++}
++#endif
++ #define CS_OPS_STATUS 0
++ #define CS_DEBUGGED 0x10000000
++#endif
++
+ // ========== global C++ headers ==========
+
+ #include <cerrno>
+@@ -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<EnvironmentOptions> 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(&params,
+ 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}"