gn2bp: pass gn_desc to parse_gn_desc
Eventually, this will lead to support for passing in different gn desc
files.
Test: //components/cronet/android:cronet
Change-Id: I6e1f7ee51f9819969b0bef8da7a1a21abbccabc8
diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index ea7dbcd..eb44f72 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -1317,7 +1317,7 @@
# So it's required to specify explicitly.
boringssl_gn_target_name = ('//third_party/boringssl:boringssl_asm' +
'(//build/toolchain/android:android_clang_x86)')
- gn.parse_gn_desc(boringssl_gn_target_name)
+ gn.parse_gn_desc(desc, boringssl_gn_target_name)
create_modules_from_target(blueprint, gn, boringssl_gn_target_name)
create_java_module(blueprint, gn)
@@ -1381,12 +1381,12 @@
with open(args.desc) as f:
desc = json.load(f)
- gn = gn_utils.GnParser(desc)
+ gn = gn_utils.GnParser()
targets = args.targets or default_targets
for target in targets:
# TODO: pass desc to parse_gn_desc() to support parsing multiple desc files
# for different target architectures.
- gn.parse_gn_desc(target)
+ gn.parse_gn_desc(desc, target)
blueprint = create_blueprint_for_targets(gn, desc, targets)
project_root = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
tool_name = os.path.relpath(os.path.abspath(__file__), project_root)
diff --git a/tools/gn2bp/gn_utils.py b/tools/gn2bp/gn_utils.py
index 23ac2c8..f8dd921 100644
--- a/tools/gn2bp/gn_utils.py
+++ b/tools/gn2bp/gn_utils.py
@@ -165,8 +165,7 @@
'libs', 'proto_paths'):
self.__dict__[key].update(other.__dict__.get(key, []))
- def __init__(self, gn_desc):
- self.gn_desc_ = gn_desc
+ def __init__(self):
self.all_targets = {}
self.linker_units = {} # Executables, shared or static libraries.
self.source_sets = {}
@@ -202,7 +201,7 @@
"""
return self.all_targets[gn_target_name]
- def parse_gn_desc(self, gn_target_name):
+ def parse_gn_desc(self, gn_desc, gn_target_name):
"""Parses a gn desc tree and resolves all target dependencies.
It bubbles up variables from source_set dependencies as described in the
@@ -212,7 +211,7 @@
if target is not None:
return target # Target already processed.
- desc = self.gn_desc_[gn_target_name]
+ desc = gn_desc[gn_target_name]
target = GnParser.Target(gn_target_name, desc['type'])
target.testonly = desc.get('testonly', False)
target.toolchain = desc.get('toolchain', None)
@@ -233,7 +232,7 @@
target.is_third_party_dep_ = True
return target
- proto_target_type, proto_desc = self.get_proto_target_type(target)
+ proto_target_type, proto_desc = self.get_proto_target_type(gn_desc, target)
if proto_target_type is not None:
self.proto_libs[target.name] = target
target.type = 'proto_library'
@@ -283,7 +282,7 @@
# Recurse in dependencies.
for dep_name in desc.get('deps', []):
- dep = self.parse_gn_desc(dep_name)
+ dep = self.parse_gn_desc(gn_desc, dep_name)
if dep.is_third_party_dep_:
target.deps.add(dep_name)
elif dep.type == 'proto_library':
@@ -346,7 +345,7 @@
args = proto_desc.get('args')
return re.sub('^\.\./\.\./', '', args[args.index('--proto-in-dir') + 1])
- def get_proto_target_type(self, target):
+ def get_proto_target_type(self, gn_desc, target):
""" Checks if the target is a proto library and return the plugin.
Returns:
@@ -362,7 +361,7 @@
# Descriptor targets don't have a _gen target; instead we look for the
# characteristic flag in the args of the target itself.
- desc = self.gn_desc_.get(target.name)
+ desc = gn_desc.get(target.name)
if '--descriptor_set_out' in desc.get('args', []):
return 'descriptor', desc
@@ -374,7 +373,7 @@
# In all other cases, we want to look at the _gen target as that has the
# important information.
- gen_desc = self.gn_desc_.get('%s_gen%s' % (name, toolchain))
+ gen_desc = gn_desc.get('%s_gen%s' % (name, toolchain))
if gen_desc is None or gen_desc['type'] != 'action':
return None, None
if gen_desc['script'] != '//tools/protoc_wrapper/protoc_wrapper.py':