Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: generate valid config.gypi #31441

Merged
merged 1 commit into from Oct 18, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions BUILD.gn
Expand Up @@ -187,6 +187,12 @@ action("electron_js2c") {
rebase_path(sources, root_build_dir)
}

action("generate_config_gypi") {
outputs = [ "$root_gen_dir/config.gypi" ]
script = "script/generate-config-gypi.py"
args = rebase_path(outputs) + [ target_cpu ]
}

target_gen_default_app_js = "$target_gen_dir/js/default_app"

typescript_build("default_app_js") {
Expand Down
1 change: 0 additions & 1 deletion patches/node/.patches
Expand Up @@ -5,7 +5,6 @@ feat_initialize_asar_support.patch
expose_get_builtin_module_function.patch
build_add_gn_build_files.patch
fix_add_default_values_for_variables_in_common_gypi.patch
feat_add_new_built_with_electron_variable_to_config_gypi.patch
feat_add_flags_for_low-level_hooks_and_exceptions.patch
fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch
pass_all_globals_through_require.patch
Expand Down
37 changes: 6 additions & 31 deletions patches/node/build_add_gn_build_files.patch
Expand Up @@ -7,10 +7,10 @@ This adds GN build files for Node, so we don't have to build with GYP.

diff --git a/BUILD.gn b/BUILD.gn
new file mode 100644
index 0000000000000000000000000000000000000000..52fb22305bb67c75c9a1cf4bc39cd901420cf7a9
index 0000000000000000000000000000000000000000..d0641c5cbc3c527ce7a73d12118fb42db325be01
--- /dev/null
+++ b/BUILD.gn
@@ -0,0 +1,401 @@
@@ -0,0 +1,393 @@
+import("//electron/build/asar.gni")
+import("//v8/gni/v8.gni")
+
Expand Down Expand Up @@ -75,20 +75,12 @@ index 0000000000000000000000000000000000000000..52fb22305bb67c75c9a1cf4bc39cd901
+ ]
+}
+
+action("generate_config_gypi") {
+ outputs = [
+ "$target_gen_dir/config.gypi",
+ ]
+ script = "tools/generate_config_gypi.py"
+ args = rebase_path(outputs, root_build_dir)
+}
+
+chdir_action("node_js2c") {
+ deps = [
+ ":generate_config_gypi",
+ "//electron:generate_config_gypi",
+ ":node_js2c_inputs",
+ ]
+ config_gypi = [ "$target_gen_dir/config.gypi" ]
+ config_gypi = [ "$root_gen_dir/config.gypi" ]
+ inputs = library_files + config_gypi
+ outputs = [
+ "$target_gen_dir/node_javascript.cc",
Expand Down Expand Up @@ -360,10 +352,10 @@ index 0000000000000000000000000000000000000000..52fb22305bb67c75c9a1cf4bc39cd901
+
+copy("node_gypi_headers") {
+ deps = [
+ ":generate_config_gypi",
+ "//electron:generate_config_gypi",
+ ]
+ sources = [
+ "$target_gen_dir/config.gypi",
+ "$root_gen_dir/config.gypi",
+ "common.gypi",
+ ]
+ outputs = [
Expand Down Expand Up @@ -1795,23 +1787,6 @@ index 48b8d9f22fb98d0733630eaea3194d746fba8a2f..a7a12564e4dd9320959d07fb4ab1527f

// The NAPI_VERSION provided by this version of the runtime. This is the version
// which the Node binary being built supports.
diff --git a/tools/generate_config_gypi.py b/tools/generate_config_gypi.py
new file mode 100644
index 0000000000000000000000000000000000000000..01f62d4ae6e3b9d539444e3dff069f0011353caa
--- /dev/null
+++ b/tools/generate_config_gypi.py
@@ -0,0 +1,11 @@
+# TODO: assess which if any of the config variables are important to include in
+# the js2c'd config.gypi.
+import sys
+
+def main(args):
+ out = args[0]
+ with open(out, 'w') as f:
+ f.write("{'variables':{}}\n")
+
+if __name__ == '__main__':
+ main(sys.argv[1:])
diff --git a/tools/generate_gn_filenames_json.py b/tools/generate_gn_filenames_json.py
new file mode 100755
index 0000000000000000000000000000000000000000..8f884a41f57630ac432eb85ebfc9b8bc82cddaca
Expand Down

This file was deleted.

65 changes: 65 additions & 0 deletions script/generate-config-gypi.py
@@ -0,0 +1,65 @@
#!/usr/bin/env python

from __future__ import print_function
import ast
import os
import pprint
import re
import subprocess
import sys

ELECTRON_DIR = os.path.abspath(os.path.join(__file__, '..', '..'))
NODE_DIR = os.path.join(ELECTRON_DIR, '..', 'third_party', 'electron_node')

def run_node_configure(target_cpu):
configure = os.path.join(NODE_DIR, 'configure.py')
args = ['--dest-cpu', target_cpu]
# Enabled in Chromium's V8.
if target_cpu == 'arm64' or target_cpu == 'x64':
args += ['--experimental-enable-pointer-compression']
# Work around "No acceptable ASM compiler found" error on some Windows
# machines, it breaks nothing since Electron does not use OpenSSL.
if sys.platform == 'win32':
args += ['--openssl-no-asm']
subprocess.check_call([sys.executable, configure] + args)

def read_node_config_gypi():
config_gypi = os.path.join(NODE_DIR, 'config.gypi')
with open(config_gypi, 'r') as f:
content = f.read()
return ast.literal_eval(content)

def read_electron_args():
all_gn = os.path.join(ELECTRON_DIR, 'build', 'args', 'all.gn')
args = {}
with open(all_gn, 'r') as f:
for line in f:
if line.startswith('#'):
continue
m = re.match('([\w_]+) = (.+)', line)
if m == None:
continue
args[m.group(1)] = m.group(2)
return args

def main(target_file, target_cpu):
run_node_configure(target_cpu)
config = read_node_config_gypi()
args = read_electron_args()

# Remove the generated config.gypi to make the parallel/test-process-config
# test pass.
os.remove(os.path.join(NODE_DIR, 'config.gypi'))

v = config['variables']
# Electron specific variables:
v['built_with_electron'] = 1
v['node_module_version'] = int(args['node_module_version'])
# Used by certain versions of node-gyp.
v['build_v8_with_gn'] = 'false'

with open(target_file, 'w+') as f:
f.write(pprint.pformat(config, indent=2))

if __name__ == '__main__':
sys.exit(main(*sys.argv[1:]))