gn2bp: Extract aidl srcs and include dirs
* Aidl `local_include_dirs` was hardcoded. This change should handle extracting the srcs and local include dirs for any
aidl action.
Test: m
Change-Id: I7893dd3897f292f96c1934b192d20b97c26c54cb
diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp
index 93443f5..eb0f9dc 100644
--- a/tools/gn2bp/Android.bp.swp
+++ b/tools/gn2bp/Android.bp.swp
@@ -4632,9 +4632,6 @@
include_dirs: [
"frameworks/base/core/java/",
],
- local_include_dirs: [
- "base/android/java/src/",
- ],
},
plugins: [
"cronet_aml_java_jni_annotation_preprocessor",
diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index 592c070..8ef3647 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -1569,7 +1569,7 @@
"modules-utils-build_system",
}
module.aidl["include_dirs"] = {"frameworks/base/core/java/"}
- module.aidl["local_include_dirs"] = {"base/android/java/src/"}
+ module.aidl["local_include_dirs"] = gn.aidl_local_include_dirs
module.sdk_version = "module_current"
module.min_sdk_version = 30
module.apex_available.add(tethering_apex)
diff --git a/tools/gn2bp/gn_utils.py b/tools/gn2bp/gn_utils.py
index 6095455..e5e714e 100644
--- a/tools/gn2bp/gn_utils.py
+++ b/tools/gn2bp/gn_utils.py
@@ -46,6 +46,7 @@
}
ARCH_REGEX = r'(android_x86_64|android_x86|android_arm|android_arm64|host)'
RESPONSE_FILE = '{{response_file_name}}'
+AIDL_INCLUDE_DIRS_REGEX = r'--includes=\[(.*)\]'
def repo_root():
"""Returns an absolute path to the repository root."""
@@ -53,6 +54,18 @@
os.path.realpath(os.path.dirname(__file__)), os.path.pardir)
+def _clean_string(str):
+ return str.replace('\\', '').replace('../../', '').replace('"', '').strip()
+
+
+def _extract_includes_from_aidl_args(args):
+ for arg in args:
+ is_match = re.match(AIDL_INCLUDE_DIRS_REGEX, arg)
+ if is_match:
+ local_includes = is_match.group(1).split(",")
+ return [_clean_string(local_include) for local_include in local_includes]
+ return []
+
def label_to_path(label):
"""Turn a GN output label (e.g., //some_dir/file.cc) into a path."""
assert label.startswith('//')
@@ -263,6 +276,7 @@
self.actions = {}
self.proto_libs = {}
self.java_sources = collections.defaultdict(set)
+ self.aidl_local_include_dirs = set()
self.java_actions = collections.defaultdict(set)
def _get_response_file_contents(self, action_desc):
@@ -454,11 +468,12 @@
java_srcs = [src for src in dep.inputs if _is_java_source(src)]
self.java_sources[java_group_name].update(java_srcs)
if dep.type in ["action"] and target.type == "java_group":
- # //base:base_java_aidl generates srcjar from .aidl files. But java_library in soong can
- # directly have .aidl files in srcs. So adding .aidl files to the java_sources.
+ # GN uses an action to compile aidl files. However, this is not needed in soong
+ # as soong can directly have .aidl files in srcs. So adding .aidl files to the java_sources.
# TODO: Find a better way/place to do this.
- if dep.name == '//base:base_java_aidl':
+ if '_aidl' in dep.name:
self.java_sources[java_group_name].update(dep.arch[arch].sources)
+ self.aidl_local_include_dirs.update(_extract_includes_from_aidl_args(dep.arch[arch].args))
else:
self.java_actions[java_group_name].add(dep.name)
return target