gn2bp: Convert `source_set` with rtti to static_libraries
* `source_set` were converted to cc_defaults and this would pose a huge problem if those cc_defaults had rtti on since it affected all of the dependencies of the source target.
* The solution here would be to compile the `source_set` independently as a static/shared library with rtti on then link it.
Test: m cronet_aml_components_cronet_android_cronet
Change-Id: I28bbe0947d0dc87c2d602514a2759a3171b68aa2
diff --git a/tools/gn2bp/gn_utils.py b/tools/gn2bp/gn_utils.py
index 2df1c6d..f02d33f 100644
--- a/tools/gn2bp/gn_utils.py
+++ b/tools/gn2bp/gn_utils.py
@@ -144,6 +144,7 @@
self.source_set_deps = set() # Transitive set of source_set deps.
self.proto_deps = set()
self.transitive_proto_deps = set()
+ self.rtti = False
# TODO: come up with a better way to only run this once.
# is_finalized tracks whether finalize() was called on this target.
@@ -346,7 +347,10 @@
target.ldflags.update(desc.get('ldflags', []))
target.arch[arch].defines.update(desc.get('defines', []))
target.arch[arch].include_dirs.update(desc.get('include_dirs', []))
-
+ if "-frtti" in target.arch[arch].cflags:
+ target.rtti = True
+ if target.type == "source_set":
+ target.type = "static_library"
# Recurse in dependencies.
for gn_dep_name in desc.get('deps', []):
dep = self.parse_gn_desc(gn_desc, gn_dep_name)
@@ -357,6 +361,9 @@
target.transitive_proto_deps.update(dep.transitive_proto_deps)
elif dep.type == 'source_set':
target.source_set_deps.add(dep.name)
+ if "-frtti" in target.arch[arch].cflags:
+ # This must not be propagated upward as it effects all of the dependencies
+ target.arch[arch].cflags -= {"-frtti"}
target.update(dep, arch) # Bubble up source set's cflags/ldflags etc.
elif dep.type == 'group':
target.update(dep, arch) # Bubble up groups's cflags/ldflags etc.