Propagate defines to Android.pb
In particular this propagates -DGOOGLE_PROTOBUF_NO_[RTTI|STATIC_INITIALIZERS].
This saves another ~30K on ARM64.
Change-Id: Id4f7ac9d2013e7c3f3fa0fd9014f5a8e4617d43e
Bug: 71844955
diff --git a/Android.bp b/Android.bp
index e4aa102..5a9fd39 100644
--- a/Android.bp
+++ b/Android.bp
@@ -78,6 +78,10 @@
defaults: [
"perfetto_defaults",
],
+ cflags: [
+ "-DGOOGLE_PROTOBUF_NO_RTTI",
+ "-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER",
+ ],
}
// GN target: //:perfetto
@@ -143,6 +147,8 @@
"perfetto_defaults",
],
cflags: [
+ "-DGOOGLE_PROTOBUF_NO_RTTI",
+ "-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER",
"-DPERFETTO_BUILD_WITH_ANDROID",
],
}
@@ -511,6 +517,10 @@
defaults: [
"perfetto_defaults",
],
+ cflags: [
+ "-DGOOGLE_PROTOBUF_NO_RTTI",
+ "-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER",
+ ],
}
// GN target: //src/ipc:test_messages_gen
@@ -608,6 +618,10 @@
defaults: [
"perfetto_defaults",
],
+ cflags: [
+ "-DGOOGLE_PROTOBUF_NO_RTTI",
+ "-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER",
+ ],
}
// GN target: //src/protozero:testing_messages_lite_gen
@@ -774,6 +788,10 @@
defaults: [
"perfetto_defaults",
],
+ cflags: [
+ "-DGOOGLE_PROTOBUF_NO_RTTI",
+ "-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER",
+ ],
}
// GN target: //:perfetto_tests
@@ -890,6 +908,10 @@
defaults: [
"perfetto_defaults",
],
+ cflags: [
+ "-DGOOGLE_PROTOBUF_NO_RTTI",
+ "-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER",
+ ],
}
// GN target: //:traced
diff --git a/tools/gen_android_bp b/tools/gen_android_bp
index f9d080b..b2c4c0f 100755
--- a/tools/gen_android_bp
+++ b/tools/gen_android_bp
@@ -74,6 +74,9 @@
# Compiler flags which are passed through to the blueprint.
cflag_whitelist = r'^-DPERFETTO.*$'
+# Compiler defines which are passed through to the blueprint.
+define_whitelist = r'^GOOGLE_PROTO.*$'
+
def enable_gmock(module):
module.static_libs.append('libgmock')
@@ -153,7 +156,7 @@
self.generated_headers = []
self.export_generated_headers = []
self.defaults = []
- self.cflags = []
+ self.cflags = set()
self.local_include_dirs = []
def to_string(self, output):
@@ -181,6 +184,8 @@
value = getattr(self, name)
if not value:
return
+ if isinstance(value, set):
+ value = sorted(value)
if isinstance(value, list):
output.append(' %s: [' % name)
for item in sorted(value) if sort else value:
@@ -302,6 +307,7 @@
label_to_path(src) for src in target['sources']
if is_supported_source_file(src)
and not is_generated_by_action(desc, src))
+ module.cflags |= _get_cflags(target)
def make_genrules_for_action(blueprint, desc, target_name):
@@ -420,6 +426,14 @@
return source_module, header_module
+def _get_cflags(target):
+ cflags = set(flag for flag in target.get('cflags', [])
+ if re.match(cflag_whitelist, flag))
+ cflags |= set("-D%s" % define for define in target.get('defines', [])
+ if re.match(define_whitelist, define))
+ return cflags
+
+
def create_modules_from_target(blueprint, desc, target_name):
"""Generate module(s) for a given GN target.
@@ -461,9 +475,6 @@
# Don't try to inject library/source dependencies into genrules because
# they are not compiled in the traditional sense.
if module.type != 'genrule':
- for flag in target.get('cflags', []):
- if re.match(cflag_whitelist, flag):
- module.cflags.append(flag)
module.defaults = [defaults_module]
apply_module_dependency(blueprint, desc, module, target_name)
for dep in resolve_dependencies(desc, target_name):