gn2bp: get arch from toolchain

Default all non-android toolchains to the host toolchain. Some limited
host support may be required. Let's see.

Test: //components/cronet/android:cronet
Change-Id: I3bc7a0d5da0c9558bda83583a0a7f90b1a5a2597
This commit is contained in:
Patrick Rohr
2022-11-15 14:38:21 -08:00
parent 7f4631e236
commit 81a4ac30db
2 changed files with 330 additions and 9 deletions

View File

@@ -202,6 +202,21 @@ class GnParser(object):
# TODO: There are some other possible variations we might need to support.
return target.type == 'group' and re.match('.*_java$', target.name)
def _get_arch(self, toolchain):
if toolchain is None:
# TODO: throw an exception instead of defaulting to x86_64.
return 'x86_64'
elif toolchain == '//build/toolchain/android:android_clang_x86':
return 'x86'
elif toolchain == '//build/toolchain/android:android_clang_x64':
return 'x86_64'
elif toolchain == '//build/toolchain/android:android_clang_arm':
return 'arm'
elif toolchain == '//build/toolchain/android:android_clang_arm64':
return 'arm64'
else:
return 'host'
def get_target(self, gn_target_name):
"""Returns a Target object from the fully qualified GN target name.
@@ -220,8 +235,7 @@ class GnParser(object):
target_name = label_without_toolchain(gn_target_name)
target = self.all_targets.get(target_name)
desc = gn_desc[gn_target_name]
# TODO: get arch from toolchain
arch = 'x86_64'
arch = self._get_arch(desc.get('toolchain', None))
if target is None:
target = GnParser.Target(target_name, desc['type'])
self.all_targets[target_name] = target
@@ -232,6 +246,7 @@ class GnParser(object):
return target # Target already processed.
target.testonly = desc.get('testonly', False)
# TODO: remove toolchain from Target object
target.toolchain = desc.get('toolchain', None)
proto_target_type, proto_desc = self.get_proto_target_type(gn_desc, gn_target_name)