1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env python3
- 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, will be disabled on 32bit via
- # common.gypi rules
- args += ['--experimental-enable-pointer-compression']
- # Work around "No acceptable ASM compiler found" error on some System,
- # it breaks nothing since Electron does not use OpenSSL.
- args += ['--openssl-no-asm']
- # Enable whole-program optimization for electron native modules.
- if sys.platform == "win32":
- args += ['--with-ltcg']
- 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], sys.argv[2]))
|