mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-24 13:53:24 +00:00
e5906ddfd4
The v8 library supports only limited number of build platforms based on the host architecture. The rule there is the bitness (the mixing of 32bit and 64bit architectures seems to be in most cases disallowed). Thus this adds usage of the emulator of the host platform and builds tools for that. Co-authored-by: Ivan Trubach <mr.trubach@icloud.com>
139 lines
4.6 KiB
Diff
139 lines
4.6 KiB
Diff
From 4b83f714c821d6d4d2306673ee3a87907cfec80e Mon Sep 17 00:00:00 2001
|
||
From: Ivan Trubach <mr.trubach@icloud.com>
|
||
Date: Fri, 19 Jul 2024 10:45:13 +0300
|
||
Subject: [PATCH] build: support setting an emulator from configure script
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
V8’s JIT infrastructure requires binaries such as mksnapshot to be run
|
||
during the build. However, these binaries must have the same bit-width
|
||
as the host platform (e.g. a x86_64 build platform targeting ARMv6 needs
|
||
to produce a 32-bit binary).
|
||
|
||
To work around this issue, allow building the binaries for the host
|
||
platform and running them on the build platform with an emulator.
|
||
|
||
Based on Buildroot’s nodejs-src 0001-add-qemu-wrapper-support.patch.
|
||
https://gitlab.com/buildroot.org/buildroot/-/blob/c1d5eada4d4db9eeaa1c44dd1dea95a67c8a70ca/package/nodejs/nodejs-src/0001-add-qemu-wrapper-support.patch
|
||
|
||
Upstream: https://github.com/nodejs/node/pull/53899
|
||
---
|
||
common.gypi | 1 +
|
||
configure.py | 14 ++++++++++++++
|
||
node.gyp | 3 +++
|
||
tools/v8_gypfiles/v8.gyp | 4 ++++
|
||
4 files changed, 22 insertions(+)
|
||
|
||
diff --git a/common.gypi b/common.gypi
|
||
index ec92c9df4c..6474495ab6 100644
|
||
--- a/common.gypi
|
||
+++ b/common.gypi
|
||
@@ -13,6 +13,7 @@
|
||
'enable_pgo_generate%': '0',
|
||
'enable_pgo_use%': '0',
|
||
'python%': 'python',
|
||
+ 'emulator%': [],
|
||
|
||
'node_shared%': 'false',
|
||
'force_dynamic_crt%': 0,
|
||
diff --git a/configure.py b/configure.py
|
||
index 82916748fd..10dc0becbb 100755
|
||
--- a/configure.py
|
||
+++ b/configure.py
|
||
@@ -112,6 +112,12 @@ parser.add_argument('--dest-cpu',
|
||
choices=valid_arch,
|
||
help=f"CPU architecture to build for ({', '.join(valid_arch)})")
|
||
|
||
+parser.add_argument('--emulator',
|
||
+ action='store',
|
||
+ dest='emulator',
|
||
+ default=None,
|
||
+ help='emulator command that can run executables built for the target system')
|
||
+
|
||
parser.add_argument('--cross-compiling',
|
||
action='store_true',
|
||
dest='cross_compiling',
|
||
@@ -2160,6 +2166,14 @@ write('config.mk', do_not_edit + config_str)
|
||
gyp_args = ['--no-parallel', '-Dconfiguring_node=1']
|
||
gyp_args += ['-Dbuild_type=' + config['BUILDTYPE']]
|
||
|
||
+if options.emulator is not None:
|
||
+ if not options.cross_compiling:
|
||
+ # Note that emulator is a list so we have to quote the variable.
|
||
+ gyp_args += ['-Demulator=' + shlex.quote(options.emulator)]
|
||
+ else:
|
||
+ # TODO: perhaps use emulator for tests?
|
||
+ warn('The `--emulator` option has no effect when cross-compiling.')
|
||
+
|
||
if options.use_ninja:
|
||
gyp_args += ['-f', 'ninja-' + flavor]
|
||
elif flavor == 'win' and sys.platform != 'msys':
|
||
diff --git a/node.gyp b/node.gyp
|
||
index 08cb3f38e8..515b305933 100644
|
||
--- a/node.gyp
|
||
+++ b/node.gyp
|
||
@@ -332,6 +332,7 @@
|
||
'<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc',
|
||
],
|
||
'action': [
|
||
+ '<@(emulator)',
|
||
'<(node_mksnapshot_exec)',
|
||
'--build-snapshot',
|
||
'<(node_snapshot_main)',
|
||
@@ -351,6 +352,7 @@
|
||
'<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc',
|
||
],
|
||
'action': [
|
||
+ '<@(emulator)',
|
||
'<@(_inputs)',
|
||
'<@(_outputs)',
|
||
],
|
||
@@ -1520,6 +1522,7 @@
|
||
'<(PRODUCT_DIR)/<(node_core_target_name).def',
|
||
],
|
||
'action': [
|
||
+ '<@(emulator)',
|
||
'<(PRODUCT_DIR)/gen_node_def.exe',
|
||
'<@(_inputs)',
|
||
'<@(_outputs)',
|
||
diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp
|
||
index ba8b161f0f..d5c90dad50 100644
|
||
--- a/tools/v8_gypfiles/v8.gyp
|
||
+++ b/tools/v8_gypfiles/v8.gyp
|
||
@@ -99,6 +99,7 @@
|
||
'<@(torque_outputs_inc)',
|
||
],
|
||
'action': [
|
||
+ '<@(emulator)',
|
||
'<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)',
|
||
'-o', '<(SHARED_INTERMEDIATE_DIR)/torque-generated',
|
||
'-v8-root', '<(V8_ROOT)',
|
||
@@ -219,6 +220,7 @@
|
||
'action': [
|
||
'<(python)',
|
||
'<(V8_ROOT)/tools/run.py',
|
||
+ '<@(emulator)',
|
||
'<@(_inputs)',
|
||
'<@(_outputs)',
|
||
],
|
||
@@ -442,6 +444,7 @@
|
||
}],
|
||
],
|
||
'action': [
|
||
+ '<@(emulator)',
|
||
'>@(_inputs)',
|
||
'>@(mksnapshot_flags)',
|
||
],
|
||
@@ -1577,6 +1580,7 @@
|
||
'action': [
|
||
'<(python)',
|
||
'<(V8_ROOT)/tools/run.py',
|
||
+ '<@(emulator)',
|
||
'<@(_inputs)',
|
||
'<@(_outputs)',
|
||
],
|
||
--
|
||
2.44.1
|
||
|