aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGurpreet Singh <gurpreetgs@google.com>2024-03-21 14:55:34 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-03-21 14:55:34 +0000
commitc6354c4494a398f70e3551a3da908688ae705300 (patch)
tree57f619b9fdb38b636f92ad56615830a2826f148c
parent5522e8297dc2ad20d4ba369bc275792e1b5d6512 (diff)
parent8f148dd61519a28b913d07b105bd8f263179b263 (diff)
downloadcommon-c6354c4494a398f70e3551a3da908688ae705300.tar.gz
Merge "Generate file for module to project mapping." into main
-rwxr-xr-xbuild/mainline_modules_sdks.py56
-rw-r--r--build/mainline_modules_sdks_test.py62
2 files changed, 111 insertions, 7 deletions
diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py
index de94e923..2ba4389e 100755
--- a/build/mainline_modules_sdks.py
+++ b/build/mainline_modules_sdks.py
@@ -27,6 +27,7 @@ import functools
import io
import json
import os
+from pathlib import Path
import re
import shutil
import subprocess
@@ -310,6 +311,39 @@ def set_default_timestamp(base_dir, paths):
os.utime(p, (timestamp, timestamp))
+# Find the git project path of the module_sdk for given module.
+def module_sdk_project_for_module(module, root_dir):
+ module = module.rsplit(".", 1)[1]
+ # git_master-art and aosp-master-art branches does not contain project for
+ # art, hence adding special case for art.
+ if module == "art":
+ return "prebuilts/module_sdk/art"
+ if module == "btservices":
+ return "prebuilts/module_sdk/Bluetooth"
+ if module == "media":
+ return "prebuilts/module_sdk/Media"
+ if module == "rkpd":
+ return "prebuilts/module_sdk/RemoteKeyProvisioning"
+ if module == "tethering":
+ return "prebuilts/module_sdk/Connectivity"
+
+ target_dir = ""
+ for dir in os.listdir(os.path.join(root_dir, "prebuilts/module_sdk/")):
+ if module.lower() in dir.lower():
+ if target_dir:
+ print(
+ 'Multiple target dirs matched "%s": %s'
+ % (module, (target_dir, dir))
+ )
+ sys.exit(1)
+ target_dir = dir
+ if not target_dir:
+ print("Could not find a target dir for %s" % module)
+ sys.exit(1)
+
+ return "prebuilts/module_sdk/%s" % target_dir
+
+
@dataclasses.dataclass()
class SnapshotBuilder:
"""Builds sdk snapshots"""
@@ -1438,6 +1472,25 @@ class SdkDistProducer:
if module in MAINLINE_MODULES:
file.write(aosp_to_google_name(module.apex) + "\n")
+ def generate_mainline_modules_info_file(self, modules, root_dir):
+ mainline_modules_info_file = os.path.join(
+ self.dist_dir, "mainline-modules-info.json"
+ )
+ os.makedirs(os.path.dirname(mainline_modules_info_file), exist_ok=True)
+ mainline_modules_info_dict = {}
+ for module in modules:
+ if module not in MAINLINE_MODULES:
+ continue
+
+ module = aosp_to_google_name(module.apex)
+ mainline_modules_info_dict[module] = dict()
+ mainline_modules_info_dict[module]["module_sdk_project"] = (
+ module_sdk_project_for_module(module, root_dir)
+ )
+
+ with open(mainline_modules_info_file, "w", encoding="utf8") as file:
+ json.dump(mainline_modules_info_dict, file, indent=4)
+
def populate_unbundled_dist(self, build_release, modules, snapshots_dir):
build_release_dist_dir = os.path.join(
self.mainline_sdks_dir, build_release.sub_dir
@@ -1727,6 +1780,9 @@ def main(args):
producer = create_producer(args.tool_path, args.skip_allowed_deps_check)
producer.dist_generate_sdk_supported_modules_file(modules)
+ producer.generate_mainline_modules_info_file(
+ modules, os.environ["ANDROID_BUILD_TOP"]
+ )
producer.produce_dist(modules, build_releases)
diff --git a/build/mainline_modules_sdks_test.py b/build/mainline_modules_sdks_test.py
index 82b329cc..d56576df 100644
--- a/build/mainline_modules_sdks_test.py
+++ b/build/mainline_modules_sdks_test.py
@@ -160,6 +160,14 @@ class TestProduceDist(unittest.TestCase):
os.mkdir(self.tmp_out_dir)
self.tmp_dist_dir = os.path.join(self.tmp_dir, "dist")
os.mkdir(self.tmp_dist_dir)
+ os.makedirs(
+ os.path.join(self.tmp_dir, "prebuilts/module_sdk/AdServices"),
+ exist_ok=True,
+ )
+ os.makedirs(
+ os.path.join(self.tmp_dir, "prebuilts/module_sdk/Connectivity"),
+ exist_ok=True,
+ )
def tearDown(self):
shutil.rmtree(self.tmp_dir, ignore_errors=True)
@@ -467,11 +475,6 @@ class TestProduceDist(unittest.TestCase):
snapshot_builder=snapshot_builder,
dist_dir=self.tmp_dist_dir,
)
- producer = mm.SdkDistProducer(
- subprocess_runner=subprocess_runner,
- snapshot_builder=snapshot_builder,
- dist_dir=self.tmp_dist_dir,
- )
# Contains only sdk modules.
modules = [
@@ -499,7 +502,7 @@ class TestProduceDist(unittest.TestCase):
first_release="",
),
mm.MainlineModule(
- apex="com.android.adbd",
+ apex="com.android.extservices",
sdks=[],
first_release="",
),
@@ -524,7 +527,7 @@ class TestProduceDist(unittest.TestCase):
first_release="",
),
mm.MainlineModule(
- apex="com.android.adbd",
+ apex="com.android.extservices",
sdks=[],
first_release="",
),
@@ -542,6 +545,51 @@ class TestProduceDist(unittest.TestCase):
self.assertFalse("com.google.android.adbd\n" in sdk_modules)
self.assertFalse("com.google.android.extservices\n" in sdk_modules)
+ def test_generate_mainline_modules_info_file(self):
+ subprocess_runner = mm.SubprocessRunner()
+ snapshot_builder = FakeSnapshotBuilder(
+ tool_path="path/to/mainline_modules_sdks.sh",
+ subprocess_runner=subprocess_runner,
+ out_dir=self.tmp_out_dir,
+ )
+ producer = mm.SdkDistProducer(
+ subprocess_runner=subprocess_runner,
+ snapshot_builder=snapshot_builder,
+ dist_dir=self.tmp_dist_dir,
+ )
+
+ modules = [
+ MAINLINE_MODULES_BY_APEX["com.android.adservices"],
+ MAINLINE_MODULES_BY_APEX["com.android.tethering"],
+ mm.MainlineModule(
+ apex="com.android.adbd",
+ sdks=[],
+ first_release="",
+ ),
+ ]
+
+ producer.generate_mainline_modules_info_file(modules, self.tmp_dir)
+ with open(
+ os.path.join(self.tmp_dist_dir, "mainline-modules-info.json"),
+ "r",
+ encoding="utf8",
+ ) as mainline_modules_info_file:
+ mainline_modules_info = json.load(mainline_modules_info_file)
+
+ self.assertEqual(
+ mainline_modules_info["com.google.android.adservices"][
+ "module_sdk_project"
+ ],
+ "prebuilts/module_sdk/AdServices",
+ )
+ self.assertEqual(
+ mainline_modules_info["com.google.android.tethering"][
+ "module_sdk_project"
+ ],
+ "prebuilts/module_sdk/Connectivity",
+ )
+ self.assertFalse("adbd" in mainline_modules_info)
+
def path_to_test_data(relative_path):
"""Construct a path to a test data file.