diff options
Diffstat (limited to 'meta-openembedded/meta-oe/recipes-devtools/nodejs')
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch | 15 | ||||
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Remove-use-of-register-r7-because-llvm-now-issues-an.patch | 53 | ||||
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch | 93 | ||||
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch | 37 | ||||
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/libatomic.patch | 21 | ||||
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-less-memory.patch | 32 | ||||
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/v8-call-new-ListFormatter-createInstance.patch | 93 | ||||
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_14.16.1.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.21.0.bb) | 48 |
8 files changed, 253 insertions, 139 deletions
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch index 4dd121f48..d6e439ba2 100644 --- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch +++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch @@ -1,4 +1,4 @@ -From c2aff16cc196a61f4ab1cdae4a91c7926123c239 Mon Sep 17 00:00:00 2001 +From 7d94bfe53beeb2d25eb5f2ff6b1d509df7e6ab80 Mon Sep 17 00:00:00 2001 From: Zuzana Svetlikova <zsvetlik@redhat.com> Date: Thu, 27 Apr 2017 14:25:42 +0200 Subject: [PATCH] Disable running gyp on shared deps @@ -8,18 +8,15 @@ Subject: [PATCH] Disable running gyp on shared deps 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile -index 0947300f24..6c98691984 100644 +index 93d63110..79caaec2 100644 --- a/Makefile +++ b/Makefile -@@ -141,7 +141,7 @@ test-code-cache: with-code-cache - echo "'test-code-cache' target is a noop" +@@ -138,7 +138,7 @@ with-code-cache test-code-cache: + $(warning '$@' target is a noop) out/Makefile: config.gypi common.gypi node.gyp \ -- deps/uv/uv.gyp deps/http_parser/http_parser.gyp deps/zlib/zlib.gyp \ -+ deps/http_parser/http_parser.gyp \ +- deps/uv/uv.gyp deps/llhttp/llhttp.gyp deps/zlib/zlib.gyp \ ++ deps/llhttp/llhttp.gyp \ tools/v8_gypfiles/toolchain.gypi tools/v8_gypfiles/features.gypi \ tools/v8_gypfiles/inspector.gypi tools/v8_gypfiles/v8.gyp $(PYTHON) tools/gyp_node.py -f make --- -2.20.1 - diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Remove-use-of-register-r7-because-llvm-now-issues-an.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Remove-use-of-register-r7-because-llvm-now-issues-an.patch deleted file mode 100644 index a23f1c243..000000000 --- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Remove-use-of-register-r7-because-llvm-now-issues-an.patch +++ /dev/null @@ -1,53 +0,0 @@ -From be8d3cd6eab4b8f9849133060abb1aba4400276b Mon Sep 17 00:00:00 2001 -From: Amy Huang <akhuang@google.com> -Date: Thu, 23 Apr 2020 11:25:53 -0700 -Subject: [PATCH] Remove use of register r7 because llvm now issues an error - when "r7" is used (starting in commit d85b3877) - -Bug: chromium:1073270 -Change-Id: I7ec8112f170b98d2edaf92bc9341e738f8de07a3 -Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2163435 -Reviewed-by: Nico Weber <thakis@chromium.org> -Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> -Commit-Queue: Nico Weber <thakis@chromium.org> -Cr-Commit-Position: refs/heads/master@{#67371} -Signed-off-by: Khem Raj <raj.khem@gmail.com> ---- -Upstream-Status: Backport [https://chromium.googlesource.com/v8/v8/+/00604cd2806b5d26bef592dd19989a234bd07a4b%5E%21/] - deps/v8/src/codegen/arm/cpu-arm.cc | 13 ------------- - 1 file changed, 13 deletions(-) - -diff --git a/deps/v8/src/codegen/arm/cpu-arm.cc b/deps/v8/src/codegen/arm/cpu-arm.cc -index 868f360..654d68f 100644 ---- a/deps/v8/src/codegen/arm/cpu-arm.cc -+++ b/deps/v8/src/codegen/arm/cpu-arm.cc -@@ -30,18 +30,6 @@ V8_NOINLINE void CpuFeatures::FlushICache(void* start, size_t size) { - register uint32_t end asm("r1") = beg + size; - register uint32_t flg asm("r2") = 0; - --#ifdef __clang__ -- // This variant of the asm avoids a constant pool entry, which can be -- // problematic when LTO'ing. It is also slightly shorter. -- register uint32_t scno asm("r7") = __ARM_NR_cacheflush; -- -- asm volatile("svc 0\n" -- : -- : "r"(beg), "r"(end), "r"(flg), "r"(scno) -- : "memory"); --#else -- // Use a different variant of the asm with GCC because some versions doesn't -- // support r7 as an asm input. - asm volatile( - // This assembly works for both ARM and Thumb targets. - -@@ -59,7 +47,6 @@ V8_NOINLINE void CpuFeatures::FlushICache(void* start, size_t size) { - : "r"(beg), "r"(end), "r"(flg), [scno] "i"(__ARM_NR_cacheflush) - : "memory"); - #endif --#endif - #endif // !USE_SIMULATOR - } - --- -2.29.2 - diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch index b5142dc9c..c6fc2dcd7 100644 --- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch +++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch @@ -8,64 +8,55 @@ Subject: [PATCH] Using native binaries tools/v8_gypfiles/v8.gyp | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) -diff --git a/node.gyp b/node.gyp -index 8f4dc518..d9389190 100644 --- a/node.gyp +++ b/node.gyp -@@ -446,7 +446,7 @@ - '<(SHARED_INTERMEDIATE_DIR)/node_code_cache.cc', +@@ -487,6 +487,7 @@ + 'action_name': 'run_mkcodecache', + 'process_outputs_as_sources': 1, + 'inputs': [ ++ '<(PRODUCT_DIR)/v8-qemu-wrapper.sh', + '<(mkcodecache_exec)', ], - 'action': [ -- '<@(_inputs)', -+ 'mkcodecache', - '<@(_outputs)', + 'outputs': [ +@@ -512,6 +513,7 @@ + 'action_name': 'node_mksnapshot', + 'process_outputs_as_sources': 1, + 'inputs': [ ++ '<(PRODUCT_DIR)/v8-qemu-wrapper.sh', + '<(node_mksnapshot_exec)', ], - }, -@@ -471,7 +471,7 @@ - '<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc', - ], - 'action': [ -- '<@(_inputs)', -+ 'node_mksnapshot', - '<@(_outputs)', - ], - }, -diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp -index a506a67d..c91f7dde 100644 + 'outputs': [ --- a/tools/v8_gypfiles/v8.gyp +++ b/tools/v8_gypfiles/v8.gyp -@@ -140,7 +140,8 @@ - '<@(torque_outputs)', - ], - 'action': [ -- '<@(_inputs)', -+ 'torque', -+ '<@(torque_files)', - '-o', '<(torque_output_root)/torque-generated', - '-v8-root', '<(V8_ROOT)' +@@ -220,6 +220,7 @@ + { + 'action_name': 'run_torque_action', + 'inputs': [ # Order matters. ++ '<(PRODUCT_DIR)/v8-qemu-wrapper.sh', + '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)', + '<@(torque_files)', ], -@@ -247,9 +248,7 @@ - '<(generate_bytecode_builtins_list_output)', +@@ -351,6 +352,7 @@ + { + 'action_name': 'generate_bytecode_builtins_list_action', + 'inputs': [ ++ '<(PRODUCT_DIR)/v8-qemu-wrapper.sh', + '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)bytecode_builtins_list_generator<(EXECUTABLE_SUFFIX)', ], - 'action': [ -- 'python', -- '<(V8_ROOT)/tools/run.py', -- '<@(_inputs)', -+ 'bytecode_builtins_list_generator', - '<@(_outputs)', + 'outputs': [ +@@ -533,6 +535,7 @@ + ], + }, + 'inputs': [ ++ '<(PRODUCT_DIR)/v8-qemu-wrapper.sh', + '<(mksnapshot_exec)', ], - }, -@@ -1396,9 +1395,7 @@ - '<(SHARED_INTERMEDIATE_DIR)/src/regexp/special-case.cc', + 'outputs': [ +@@ -1448,6 +1451,7 @@ + { + 'action_name': 'run_gen-regexp-special-case_action', + 'inputs': [ ++ '<(PRODUCT_DIR)/v8-qemu-wrapper.sh', + '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)gen-regexp-special-case<(EXECUTABLE_SUFFIX)', ], - 'action': [ -- 'python', -- '<(V8_ROOT)/tools/run.py', -- '<@(_inputs)', -+ 'gen-regexp-special-case', - '<@(_outputs)', - ], - }, --- -2.20.1 - + 'outputs': [ diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch index 92386fa77..622392099 100644 --- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch +++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch @@ -1,28 +1,31 @@ -From 5bfeffdf4b5de1c60a2ff0d1ddf65db2bb9a1533 Mon Sep 17 00:00:00 2001 +From 5b22fac923d1ca3e9fefb97f5a171124a88f5e22 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade <quantum.analyst@gmail.com> Date: Tue, 19 Mar 2019 23:22:40 -0400 -Subject: [PATCH 3/3] Install both binaries and use libdir. +Subject: [PATCH] Install both binaries and use libdir. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit This allows us to build with a shared library for other users while still providing the normal executable. -Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com> - -Stolen from [1] - -[1] https://src.fedoraproject.org/rpms/nodejs/raw/master/f/0003-Install-both-binaries-and-use-libdir.patch +Taken from - https://src.fedoraproject.org/rpms/nodejs/raw/rawhide/f/0002-Install-both-binaries-and-use-libdir.patch Upstream-Status: Pending +Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com> Signed-off-by: Andreas Müller <schnitzeltony@gmail.com> +Signed-off-by: Khem Raj <raj.khem@gmail.com> --- configure.py | 7 +++++++ - tools/install.py | 31 ++++++++++++++----------------- - 2 files changed, 21 insertions(+), 17 deletions(-) + tools/install.py | 21 +++++++++------------ + 2 files changed, 16 insertions(+), 12 deletions(-) +diff --git a/configure.py b/configure.py +index e6f7e4db..6cf5c45d 100755 --- a/configure.py +++ b/configure.py -@@ -602,6 +602,12 @@ parser.add_option('--shared', +@@ -626,6 +626,12 @@ parser.add_option('--shared', help='compile shared library for embedding node in another project. ' + '(This mode is not officially supported for regular applications)') @@ -35,7 +38,7 @@ Signed-off-by: Andreas Müller <schnitzeltony@gmail.com> parser.add_option('--without-v8-platform', action='store_true', dest='without_v8_platform', -@@ -1168,6 +1174,7 @@ def configure_node(o): +@@ -1202,6 +1208,7 @@ def configure_node(o): o['variables']['node_no_browser_globals'] = b(options.no_browser_globals) o['variables']['node_shared'] = b(options.shared) @@ -43,9 +46,11 @@ Signed-off-by: Andreas Müller <schnitzeltony@gmail.com> node_module_version = getmoduleversion.get_version() if options.dest_os == 'android': +diff --git a/tools/install.py b/tools/install.py +index 729b416f..9bfc6234 100755 --- a/tools/install.py +++ b/tools/install.py -@@ -121,26 +121,23 @@ def subdir_files(path, dest, action): +@@ -121,22 +121,19 @@ def subdir_files(path, dest, action): def files(action): is_windows = sys.platform == 'win32' @@ -64,16 +69,8 @@ Signed-off-by: Andreas Müller <schnitzeltony@gmail.com> - output_file += '.dll' - else: - 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/' + output_bin = 'node' + output_lib = 'libnode.' + 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_libprefix += 'lib.target/' - if 'false' == variables.get('node_shared'): - action([output_prefix + output_file], 'bin/' + output_file) diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/libatomic.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/libatomic.patch new file mode 100644 index 000000000..cdf6bc8e2 --- /dev/null +++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/libatomic.patch @@ -0,0 +1,21 @@ +Link mksnapshot with libatomic on x86 + +Clang-12 on x86 emits atomic builtins + +Fixes +| module-compiler.cc:(.text._ZN2v88internal4wasm12_GLOBAL__N_123ExecuteCompilationUnitsERKSt10shared_ptrINS2_22BackgroundCompileTokenEEPNS0_8CountersEiNS2_19CompileBaselineOnlyE+0x558): un +defined reference to `__atomic_load' + +Upstream-Status: Pending +Signed-off-by: Khem Raj <raj.khem@gmail.com> + +--- a/tools/v8_gypfiles/v8.gyp ++++ b/tools/v8_gypfiles/v8.gyp +@@ -1336,6 +1336,7 @@ + { + 'target_name': 'mksnapshot', + 'type': 'executable', ++ 'libraries': [ '-latomic' ], + 'dependencies': [ + 'v8_base_without_compiler', + 'v8_compiler_for_mksnapshot', diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-less-memory.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-less-memory.patch new file mode 100644 index 000000000..56e93c50c --- /dev/null +++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-less-memory.patch @@ -0,0 +1,32 @@ +Description: mksnapshot uses too much memory on 32-bit mipsel +Author: Jérémy Lal <kapouer@melix.org> +Last-Update: 2020-06-03 +Forwarded: https://bugs.chromium.org/p/v8/issues/detail?id=10586 + +This ensures that we reserve 500M instead of 2G range for codegen +ensures that qemu-mips can allocate such large ranges + +Signed-off-by: Khem Raj <raj.khem@gmail.com> + +--- a/deps/v8/src/common/globals.h ++++ b/deps/v8/src/common/globals.h +@@ -224,7 +224,7 @@ constexpr size_t kMinimumCodeRangeSize = + constexpr size_t kMinExpectedOSPageSize = 64 * KB; // OS page on PPC Linux + #elif V8_TARGET_ARCH_MIPS + constexpr bool kPlatformRequiresCodeRange = false; +-constexpr size_t kMaximalCodeRangeSize = 2048LL * MB; ++constexpr size_t kMaximalCodeRangeSize = 512 * MB; + constexpr size_t kMinimumCodeRangeSize = 0 * MB; + constexpr size_t kMinExpectedOSPageSize = 4 * KB; // OS page. + #else +--- a/deps/v8/src/codegen/mips/constants-mips.h ++++ b/deps/v8/src/codegen/mips/constants-mips.h +@@ -140,7 +140,7 @@ const uint32_t kLeastSignificantByteInIn + namespace v8 { + namespace internal { + +-constexpr size_t kMaxPCRelativeCodeRangeInMB = 4096; ++constexpr size_t kMaxPCRelativeCodeRangeInMB = 1024; + + // ----------------------------------------------------------------------------- + // Registers and FPURegisters. diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/v8-call-new-ListFormatter-createInstance.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/v8-call-new-ListFormatter-createInstance.patch new file mode 100644 index 000000000..806360084 --- /dev/null +++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/v8-call-new-ListFormatter-createInstance.patch @@ -0,0 +1,93 @@ +From 035c305ce7761f51328b45f1bd83e26aef267c9d Mon Sep 17 00:00:00 2001 +From: Frank Tang <ftang@chromium.org> +Date: Thu, 15 Oct 2020 22:44:27 -0700 +Subject: [PATCH] [Intl] call new ListFormatter::createInstance + +The one we currently using is now marked as internal and to be removed +for 68. Migrating to the style which already avaiable in ICU 67-1. + +Upstream-Status: Backport +Bug: v8:11031 +Change-Id: I668382a2e1b8602ddca02bf231c5008a6c92bf2d +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2477751 +Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> +Commit-Queue: Frank Tang <ftang@chromium.org> +Cr-Commit-Position: refs/heads/master@{#70638} +--- + deps/v8/src/objects/js-list-format.cc | 55 ++++++++++++----------------------- + 1 file changed, 18 insertions(+), 37 deletions(-) + +--- a/deps/v8/src/objects/js-list-format.cc ++++ b/deps/v8/src/objects/js-list-format.cc +@@ -29,46 +29,27 @@ namespace v8 { + namespace internal { + + namespace { +-const char* kStandard = "standard"; +-const char* kOr = "or"; +-const char* kUnit = "unit"; +-const char* kStandardShort = "standard-short"; +-const char* kOrShort = "or-short"; +-const char* kUnitShort = "unit-short"; +-const char* kStandardNarrow = "standard-narrow"; +-const char* kOrNarrow = "or-narrow"; +-const char* kUnitNarrow = "unit-narrow"; + +-const char* GetIcuStyleString(JSListFormat::Style style, +- JSListFormat::Type type) { ++UListFormatterWidth GetIcuWidth(JSListFormat::Style style) { ++ switch (style) { ++ case JSListFormat::Style::LONG: ++ return ULISTFMT_WIDTH_WIDE; ++ case JSListFormat::Style::SHORT: ++ return ULISTFMT_WIDTH_SHORT; ++ case JSListFormat::Style::NARROW: ++ return ULISTFMT_WIDTH_NARROW; ++ } ++ UNREACHABLE(); ++} ++ ++UListFormatterType GetIcuType(JSListFormat::Type type) { + switch (type) { + case JSListFormat::Type::CONJUNCTION: +- switch (style) { +- case JSListFormat::Style::LONG: +- return kStandard; +- case JSListFormat::Style::SHORT: +- return kStandardShort; +- case JSListFormat::Style::NARROW: +- return kStandardNarrow; +- } ++ return ULISTFMT_TYPE_AND; + case JSListFormat::Type::DISJUNCTION: +- switch (style) { +- case JSListFormat::Style::LONG: +- return kOr; +- case JSListFormat::Style::SHORT: +- return kOrShort; +- case JSListFormat::Style::NARROW: +- return kOrNarrow; +- } ++ return ULISTFMT_TYPE_OR; + case JSListFormat::Type::UNIT: +- switch (style) { +- case JSListFormat::Style::LONG: +- return kUnit; +- case JSListFormat::Style::SHORT: +- return kUnitShort; +- case JSListFormat::Style::NARROW: +- return kUnitNarrow; +- } ++ return ULISTFMT_TYPE_UNITS; + } + UNREACHABLE(); + } +@@ -143,7 +124,7 @@ MaybeHandle<JSListFormat> JSListFormat:: + icu::Locale icu_locale = r.icu_locale; + UErrorCode status = U_ZERO_ERROR; + icu::ListFormatter* formatter = icu::ListFormatter::createInstance( +- icu_locale, GetIcuStyleString(style_enum, type_enum), status); ++ icu_locale, GetIcuType(type_enum), GetIcuWidth(style_enum), status); + if (U_FAILURE(status) || formatter == nullptr) { + delete formatter; + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.21.0.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_14.16.1.bb index 9b86bf337..48bf2f4a8 100644 --- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.21.0.bb +++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_14.16.1.bb @@ -1,12 +1,12 @@ DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript" HOMEPAGE = "http://nodejs.org" LICENSE = "MIT & BSD & Artistic-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=8c66ff8861d9f96076a7cb61e3d75f54" +LIC_FILES_CHKSUM = "file://LICENSE;md5=85bf260d8b6de1588f57abc5dc66587c" DEPENDS = "openssl" -DEPENDS_append_class-target = " nodejs-native" +DEPENDS_append_class-target = " qemu-native" -inherit pkgconfig python3native +inherit pkgconfig python3native qemu COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*" COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*" @@ -21,12 +21,16 @@ SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \ file://0004-v8-don-t-override-ARM-CFLAGS.patch \ file://big-endian.patch \ file://mips-warnings.patch \ - file://0001-Remove-use-of-register-r7-because-llvm-now-issues-an.patch \ + file://v8-call-new-ListFormatter-createInstance.patch \ + file://mips-less-memory.patch \ " SRC_URI_append_class-target = " \ file://0002-Using-native-binaries.patch \ " -SRC_URI[sha256sum] = "052f37ace6f569b513b5a1154b2a45d3c4d8b07d7d7c807b79f1566db61e979d" +SRC_URI_append_toolchain-clang_x86 = " \ + file://libatomic.patch \ + " +SRC_URI[sha256sum] = "e44adbbed6756c2c1a01258383e9f00df30c147b36e438f6369b5ef1069abac3" S = "${WORKDIR}/node-v${PV}" @@ -93,12 +97,43 @@ python do_unpack() { shutil.rmtree(d.getVar('S') + '/deps/zlib', True) } +# V8's JIT infrastructure requires binaries such as mksnapshot and +# mkpeephole to be run in the host during the build. However, these +# binaries must have the same bit-width as the target (e.g. a x86_64 +# host targeting ARMv6 needs to produce a 32-bit binary). Instead of +# depending on a third Yocto toolchain, we just build those binaries +# for the target and run them on the host with QEMU. +python do_create_v8_qemu_wrapper () { + """Creates a small wrapper that invokes QEMU to run some target V8 binaries + on the host.""" + qemu_libdirs = [d.expand('${STAGING_DIR_HOST}${libdir}'), + d.expand('${STAGING_DIR_HOST}${base_libdir}')] + qemu_cmd = qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST', True), + qemu_libdirs) + wrapper_path = d.expand('${B}/v8-qemu-wrapper.sh') + with open(wrapper_path, 'w') as wrapper_file: + wrapper_file.write("""#!/bin/sh + +# This file has been generated automatically. +# It invokes QEMU to run binaries built for the target in the host during the +# build process. + +%s "$@" +""" % qemu_cmd) + os.chmod(wrapper_path, 0o755) +} + +do_create_v8_qemu_wrapper[dirs] = "${B}" +addtask create_v8_qemu_wrapper after do_configure before do_compile + +LDFLAGS_append_x86 = " -latomic" + # Node is way too cool to use proper autotools, so we install two wrappers to forcefully inject proper arch cflags to workaround gypi do_configure () { export LD="${CXX}" GYP_DEFINES="${GYP_DEFINES}" export GYP_DEFINES # $TARGET_ARCH settings don't match --dest-cpu settings - python3 configure.py --prefix=${prefix} --cross-compiling --without-snapshot --shared-openssl \ + python3 configure.py --prefix=${prefix} --cross-compiling --shared-openssl \ --without-dtrace \ --without-etw \ --dest-cpu="${@map_nodejs_arch(d.getVar('TARGET_ARCH'), d)}" \ @@ -110,6 +145,7 @@ do_configure () { do_compile () { export LD="${CXX}" + install -Dm 0755 ${B}/v8-qemu-wrapper.sh ${B}/out/Release/v8-qemu-wrapper.sh oe_runmake BUILDTYPE=Release } |