2022-04-12 11:21:55 +00:00
|
|
|
#!/usr/bin/env python3
|
2021-10-14 14:07:36 +00:00
|
|
|
|
|
|
|
import ast
|
|
|
|
import os
|
|
|
|
import pprint
|
|
|
|
import re
|
|
|
|
import subprocess
|
|
|
|
import sys
|
2024-01-18 21:16:45 +00:00
|
|
|
from lib.config import get_target_arch
|
2021-10-14 14:07:36 +00:00
|
|
|
|
|
|
|
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]
|
2022-07-08 08:06:06 +00:00
|
|
|
# Enabled in Chromium's V8, will be disabled on 32bit via
|
|
|
|
# common.gypi rules
|
|
|
|
args += ['--experimental-enable-pointer-compression']
|
2021-11-22 00:37:13 +00:00
|
|
|
|
|
|
|
# Work around "No acceptable ASM compiler found" error on some System,
|
|
|
|
# it breaks nothing since Electron does not use OpenSSL.
|
|
|
|
args += ['--openssl-no-asm']
|
2023-01-25 21:06:05 +00:00
|
|
|
|
|
|
|
# Enable whole-program optimization for electron native modules.
|
|
|
|
if sys.platform == "win32":
|
|
|
|
args += ['--with-ltcg']
|
2021-10-14 14:07:36 +00:00
|
|
|
subprocess.check_call([sys.executable, configure] + args)
|
|
|
|
|
|
|
|
def read_node_config_gypi():
|
|
|
|
config_gypi = os.path.join(NODE_DIR, 'config.gypi')
|
2024-03-21 13:48:23 +00:00
|
|
|
with open(config_gypi, 'r', encoding='utf-8') as file_in:
|
|
|
|
content = file_in.read()
|
2021-10-14 14:07:36 +00:00
|
|
|
return ast.literal_eval(content)
|
|
|
|
|
|
|
|
def read_electron_args():
|
|
|
|
all_gn = os.path.join(ELECTRON_DIR, 'build', 'args', 'all.gn')
|
|
|
|
args = {}
|
2024-03-21 13:48:23 +00:00
|
|
|
with open(all_gn, 'r', encoding='utf-8') as file_in:
|
|
|
|
for line in file_in:
|
2021-10-14 14:07:36 +00:00
|
|
|
if line.startswith('#'):
|
|
|
|
continue
|
2024-04-15 15:33:55 +00:00
|
|
|
m = re.match('(\w+) = (.+)', line)
|
2021-10-14 14:07:36 +00:00
|
|
|
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'
|
|
|
|
|
2024-03-21 13:48:23 +00:00
|
|
|
with open(target_file, 'w+', encoding='utf-8') as file_out:
|
|
|
|
file_out.write(pprint.pformat(config, indent=2))
|
2021-10-14 14:07:36 +00:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2022-03-21 02:11:21 +00:00
|
|
|
sys.exit(main(sys.argv[1], sys.argv[2]))
|