553def5ffa
Adds a v8-gn.h file containing defines that are used in the externally-visible headers files like v8.h. This must be included by include/v8config.h which includes it if the GN flag v8_generate_external_defines_header is on. (Currently off by default). To enable the v8config.h file to be included without the other v8 headers (as required by cppgc), this moves it into its own header set which sets up the include path correctly. Also updates some headers to ensure v8config.h is included before using externally-visible defines. Bug: v8:11292 Change-Id: I5be634f4adfbef144bf684071461d64f1cb30899 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2608212 Commit-Queue: Dan Elphick <delphick@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#72140}
81 lines
2.5 KiB
Python
Executable File
81 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# Copyright 2021 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import argparse
|
|
from io import BytesIO
|
|
import os
|
|
import sys
|
|
|
|
def parse_args():
|
|
global args
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-o', '--output', type=str, action='store',
|
|
help='Location of header file to generate')
|
|
parser.add_argument('-p', '--positive-define', type=str, action='append',
|
|
help='Externally visibile positive definition')
|
|
parser.add_argument('-n', '--negative-define', type=str, action='append',
|
|
help='Externally visibile negative definition')
|
|
args = parser.parse_args()
|
|
|
|
def generate_positive_definition(out, define):
|
|
out.write('''
|
|
#ifndef {define}
|
|
#define {define} 1
|
|
#else
|
|
#if {define} != 1
|
|
#error {define} defined but not set to 1
|
|
#endif
|
|
#endif // {define}
|
|
'''.format(define=define))
|
|
|
|
def generate_negative_definition(out, define):
|
|
out.write('''
|
|
#ifdef {define}
|
|
#error {define} is defined but is disabled by V8's GN build arguments
|
|
#endif // {define}
|
|
'''.format(define=define))
|
|
|
|
def generate_header(out):
|
|
out.write('''// AUTOMATICALLY GENERATED. DO NOT EDIT.\n
|
|
|
|
// The following definitions were used when V8 itself was built, but also appear
|
|
// in the externally-visible header files and so must be included by any
|
|
// embedder. This will be done automatically if V8_GN_HEADER is defined.
|
|
// Ready-compiled distributions of V8 will need to provide this generated header
|
|
// along with the other headers in include.
|
|
|
|
// This header must be stand-alone because it is used across targets without
|
|
// introducing dependencies. It should only be included via v8config.h.
|
|
''')
|
|
if args.positive_define:
|
|
for define in args.positive_define:
|
|
generate_positive_definition(out, define)
|
|
|
|
if args.negative_define:
|
|
for define in args.negative_define:
|
|
generate_negative_definition(out, define)
|
|
|
|
def main():
|
|
parse_args()
|
|
header_stream = BytesIO("")
|
|
generate_header(header_stream)
|
|
contents = header_stream.getvalue()
|
|
if args.output:
|
|
# Check if the contents has changed before writing so we don't cause build
|
|
# churn.
|
|
old_contents = None
|
|
if os.path.exists(args.output):
|
|
with open(args.output, 'r') as f:
|
|
old_contents = f.read()
|
|
if old_contents != contents:
|
|
with open(args.output, 'w') as f:
|
|
f.write(contents)
|
|
else:
|
|
print(contents)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|