aboutsummaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2022-06-09 14:58:54 +0000
committerPaul Duffin <paulduffin@google.com>2022-06-09 14:58:54 +0000
commite363782a5c2c00de7dbedd4c0a2f42d214e322e7 (patch)
tree2a604053db7676e4bf62f7ef75509f8cb6291e26 /build
parentd29f8e059712d28346eb2b92ef7b5780695ed3ad (diff)
downloadcommon-e363782a5c2c00de7dbedd4c0a2f42d214e322e7.tar.gz
Revert "Generate soong_config_module_type inline in the snapshot"
This reverts commit d29f8e059712d28346eb2b92ef7b5780695ed3ad. Although I tested this well using unit tests they don't test everything and although I tested the unpacking of some snapshots I did not test what happens when all the ART sdk/module_exports snapshots are unpacked. I just did and the build broke. The build broke because while the soong_config_module_type modules are marked as being Nameless (and so according to the documentation do not have to have unique names) it turns out that is not true. There is at least one place in the build where the names of Nameless modules are checked and as a result this breaks. I could fix the build breakage reasonably easily but the problem is that I would have to apply that fix on all partners otherwise they wouldn't be able to receive the next set of snapshots which is too high a cost. So, I am reverting this and will limit the use of inline soong_config_module_type modules to optional modules. Reason for revert: Breaks the build when snapshots are unpacked. Bug: 233965247 Change-Id: I1faae863c48f1fbfd49d2545f242401bdd4f8f8a
Diffstat (limited to 'build')
-rwxr-xr-xbuild/mainline_modules_sdks.py48
-rw-r--r--build/mainline_modules_sdks_test.py5
-rw-r--r--build/mainline_modules_sdks_test_data/art_Android.bp.expected33
-rw-r--r--build/mainline_modules_sdks_test_data/ipsec_Android.bp.expected23
4 files changed, 45 insertions, 64 deletions
diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py
index 809540e2..25d67cee 100755
--- a/build/mainline_modules_sdks.py
+++ b/build/mainline_modules_sdks.py
@@ -85,6 +85,10 @@ class SoongConfigBoilerplateInserter(FileTransformation):
# The configuration variable that will control the prefer setting.
configVar: ConfigVar
+ # The bp file containing the definitions of the configuration module types
+ # to use in the sdk.
+ configBpDefFile: str
+
# The prefix to use for the soong config module types.
configModuleTypePrefix: str
@@ -158,13 +162,12 @@ class SoongConfigBoilerplateInserter(FileTransformation):
}},
}},""")
- # Add the module type to the list of module types that need to
- # have corresponding config module types.
- config_module_types.add(module_type)
-
# Change the module type to the corresponding soong config
# module type by adding the prefix.
module_type = self.configModuleTypePrefix + module_type
+ # Add the module type to the list of module types that need to
+ # be imported into the bp file.
+ config_module_types.add(module_type)
# Generate the module, possibly with the new module type and
# containing the
@@ -172,23 +175,20 @@ class SoongConfigBoilerplateInserter(FileTransformation):
content_lines.extend(module_content)
content_lines.append("}")
- # Add the soong_config_module_type module definitions to the header
- # lines so that they appear before any uses.
- header_lines.append("")
- for module_type in sorted(config_module_types):
- # Create the corresponding soong config module type name by adding
- # the prefix.
- config_module_type = self.configModuleTypePrefix + module_type
- header_lines.append(f"""
-// Soong config variable module type added by {producer.script}.
-soong_config_module_type {{
- name: "{config_module_type}",
- module_type: "{module_type}",
- config_namespace: "{self.configVar.namespace}",
- bool_variables: ["{self.configVar.name}"],
- properties: ["prefer"],
+ # Add the soong_config_module_type_import module definition that imports
+ # the soong config module types into this bp file to the header lines so
+ # that they appear before any uses.
+ module_types = "\n".join(
+ [f' "{mt}",' for mt in sorted(config_module_types)])
+ header_lines.append(f"""
+// Soong config variable stanza added by {producer.script}.
+soong_config_module_type_import {{
+ from: "{self.configBpDefFile}",
+ module_types: [
+{module_types}
+ ],
}}
-""".lstrip())
+""")
# Overwrite the file with the updated contents.
file.seek(0)
@@ -624,6 +624,10 @@ class MainlineModule:
name="module_build_from_source",
)
+ # The bp file containing the definitions of the configuration module types
+ # to use in the sdk.
+ configBpDefFile: str = "packages/modules/common/Android.bp"
+
# The prefix to use for the soong config module types.
configModuleTypePrefix: str = "module_"
@@ -640,7 +644,8 @@ class MainlineModule:
inserter = SoongConfigBoilerplateInserter(
"Android.bp",
configVar=self.configVar,
- configModuleTypePrefix=self.configModuleTypePrefix)
+ configModuleTypePrefix=self.configModuleTypePrefix,
+ configBpDefFile=self.configBpDefFile)
transformations.append(inserter)
return transformations
@@ -685,6 +690,7 @@ MAINLINE_MODULES = [
namespace="art_module",
name="source_build",
),
+ configBpDefFile="prebuilts/module_sdk/art/SoongConfig.bp",
configModuleTypePrefix="art_prebuilt_",
),
MainlineModule(
diff --git a/build/mainline_modules_sdks_test.py b/build/mainline_modules_sdks_test.py
index 11a5d673..72858e09 100644
--- a/build/mainline_modules_sdks_test.py
+++ b/build/mainline_modules_sdks_test.py
@@ -399,7 +399,8 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase):
"""Tests the transformations applied to a common mainline module.
This uses ipsec as an example of a common mainline module. This checks
- that the general Soong config module types and variables are used.
+ that the correct Soong config module types and variables are used and
+ that it imports the definitions from the correct location.
"""
src = read_test_data("ipsec_Android.bp.input")
@@ -415,7 +416,7 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase):
The ART mainline module uses a different Soong config setup to the
common mainline modules. This checks that the ART specific Soong config
- module types, and variables are used.
+ module types, variable and imports are used.
"""
src = read_test_data("art_Android.bp.input")
diff --git a/build/mainline_modules_sdks_test_data/art_Android.bp.expected b/build/mainline_modules_sdks_test_data/art_Android.bp.expected
index 8fc0455e..135e4e6c 100644
--- a/build/mainline_modules_sdks_test_data/art_Android.bp.expected
+++ b/build/mainline_modules_sdks_test_data/art_Android.bp.expected
@@ -1,30 +1,13 @@
// This is auto-generated. DO NOT EDIT.
-// Soong config variable module type added by test_art.
-soong_config_module_type {
- name: "art_prebuilt_java_import",
- module_type: "java_import",
- config_namespace: "art_module",
- bool_variables: ["source_build"],
- properties: ["prefer"],
-}
-
-// Soong config variable module type added by test_art.
-soong_config_module_type {
- name: "art_prebuilt_prebuilt_bootclasspath_fragment",
- module_type: "prebuilt_bootclasspath_fragment",
- config_namespace: "art_module",
- bool_variables: ["source_build"],
- properties: ["prefer"],
-}
-
-// Soong config variable module type added by test_art.
-soong_config_module_type {
- name: "art_prebuilt_prebuilt_platform_compat_config",
- module_type: "prebuilt_platform_compat_config",
- config_namespace: "art_module",
- bool_variables: ["source_build"],
- properties: ["prefer"],
+// Soong config variable stanza added by test_art.
+soong_config_module_type_import {
+ from: "prebuilts/module_sdk/art/SoongConfig.bp",
+ module_types: [
+ "art_prebuilt_java_import",
+ "art_prebuilt_prebuilt_bootclasspath_fragment",
+ "art_prebuilt_prebuilt_platform_compat_config",
+ ],
}
package {
diff --git a/build/mainline_modules_sdks_test_data/ipsec_Android.bp.expected b/build/mainline_modules_sdks_test_data/ipsec_Android.bp.expected
index 1a3d3432..99640c05 100644
--- a/build/mainline_modules_sdks_test_data/ipsec_Android.bp.expected
+++ b/build/mainline_modules_sdks_test_data/ipsec_Android.bp.expected
@@ -1,21 +1,12 @@
// This is auto-generated. DO NOT EDIT.
-// Soong config variable module type added by test_common_mainline_module.
-soong_config_module_type {
- name: "module_java_sdk_library_import",
- module_type: "java_sdk_library_import",
- config_namespace: "ANDROID",
- bool_variables: ["module_build_from_source"],
- properties: ["prefer"],
-}
-
-// Soong config variable module type added by test_common_mainline_module.
-soong_config_module_type {
- name: "module_prebuilt_bootclasspath_fragment",
- module_type: "prebuilt_bootclasspath_fragment",
- config_namespace: "ANDROID",
- bool_variables: ["module_build_from_source"],
- properties: ["prefer"],
+// Soong config variable stanza added by test_common_mainline_module.
+soong_config_module_type_import {
+ from: "packages/modules/common/Android.bp",
+ module_types: [
+ "module_java_sdk_library_import",
+ "module_prebuilt_bootclasspath_fragment",
+ ],
}
package {