Generate soong_config_module_type inline in the snapshot
Previously, this imported the soong_config_module_type definitions from
a manually curated file. That had a couple of problems:
1. It required that the file be manually updated everytime that a new
module_type was added to an sdk snapshot controlled by a specific
config variable.
2. Adding a new config variable required creating another file to be
manually curated.
3. It made a snapshot that was generated for an earlier release
dependent on an additional file from that release which was in a
separate repository and would require a lot of extra work to update
if necessary.
This change generates the soong_config_module_type inline in the
snapshot Android.bp file and while it makes it slightly bigger and does
duplicate some of these definitions in snapshots that use the same
config variable it makes each snapshot much more self contained and
makes it easier to add module specific config variables.
The latter is the main driver for this change as follow up changes will
add module specific variables for the optional modules.
Bug: 233965247
Test: atest mainline_modules_sdks_test
packages/modules/common/build/mainline_modules_sdks.sh
# Compare before and after to make sure that they are
# consistent.
Change-Id: Ie6b6d99e1fcb17ebd8ed291a5bc7d4664fceea92
This commit is contained in:
@@ -85,10 +85,6 @@ class SoongConfigBoilerplateInserter(FileTransformation):
|
|||||||
# The configuration variable that will control the prefer setting.
|
# The configuration variable that will control the prefer setting.
|
||||||
configVar: ConfigVar
|
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.
|
# The prefix to use for the soong config module types.
|
||||||
configModuleTypePrefix: str
|
configModuleTypePrefix: str
|
||||||
|
|
||||||
@@ -162,12 +158,13 @@ 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
|
# Change the module type to the corresponding soong config
|
||||||
# module type by adding the prefix.
|
# module type by adding the prefix.
|
||||||
module_type = self.configModuleTypePrefix + module_type
|
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
|
# Generate the module, possibly with the new module type and
|
||||||
# containing the
|
# containing the
|
||||||
@@ -175,20 +172,23 @@ class SoongConfigBoilerplateInserter(FileTransformation):
|
|||||||
content_lines.extend(module_content)
|
content_lines.extend(module_content)
|
||||||
content_lines.append("}")
|
content_lines.append("}")
|
||||||
|
|
||||||
# Add the soong_config_module_type_import module definition that imports
|
# Add the soong_config_module_type module definitions to the header
|
||||||
# the soong config module types into this bp file to the header lines so
|
# lines so that they appear before any uses.
|
||||||
# that they appear before any uses.
|
header_lines.append("")
|
||||||
module_types = "\n".join(
|
for module_type in sorted(config_module_types):
|
||||||
[f' "{mt}",' for mt 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"""
|
header_lines.append(f"""
|
||||||
// Soong config variable stanza added by {producer.script}.
|
// Soong config variable module type added by {producer.script}.
|
||||||
soong_config_module_type_import {{
|
soong_config_module_type {{
|
||||||
from: "{self.configBpDefFile}",
|
name: "{config_module_type}",
|
||||||
module_types: [
|
module_type: "{module_type}",
|
||||||
{module_types}
|
config_namespace: "{self.configVar.namespace}",
|
||||||
],
|
bool_variables: ["{self.configVar.name}"],
|
||||||
|
properties: ["prefer"],
|
||||||
}}
|
}}
|
||||||
""")
|
""".lstrip())
|
||||||
|
|
||||||
# Overwrite the file with the updated contents.
|
# Overwrite the file with the updated contents.
|
||||||
file.seek(0)
|
file.seek(0)
|
||||||
@@ -624,10 +624,6 @@ class MainlineModule:
|
|||||||
name="module_build_from_source",
|
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.
|
# The prefix to use for the soong config module types.
|
||||||
configModuleTypePrefix: str = "module_"
|
configModuleTypePrefix: str = "module_"
|
||||||
|
|
||||||
@@ -644,8 +640,7 @@ class MainlineModule:
|
|||||||
inserter = SoongConfigBoilerplateInserter(
|
inserter = SoongConfigBoilerplateInserter(
|
||||||
"Android.bp",
|
"Android.bp",
|
||||||
configVar=self.configVar,
|
configVar=self.configVar,
|
||||||
configModuleTypePrefix=self.configModuleTypePrefix,
|
configModuleTypePrefix=self.configModuleTypePrefix)
|
||||||
configBpDefFile=self.configBpDefFile)
|
|
||||||
transformations.append(inserter)
|
transformations.append(inserter)
|
||||||
return transformations
|
return transformations
|
||||||
|
|
||||||
@@ -690,7 +685,6 @@ MAINLINE_MODULES = [
|
|||||||
namespace="art_module",
|
namespace="art_module",
|
||||||
name="source_build",
|
name="source_build",
|
||||||
),
|
),
|
||||||
configBpDefFile="prebuilts/module_sdk/art/SoongConfig.bp",
|
|
||||||
configModuleTypePrefix="art_prebuilt_",
|
configModuleTypePrefix="art_prebuilt_",
|
||||||
),
|
),
|
||||||
MainlineModule(
|
MainlineModule(
|
||||||
|
|||||||
@@ -399,8 +399,7 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase):
|
|||||||
"""Tests the transformations applied to a common mainline module.
|
"""Tests the transformations applied to a common mainline module.
|
||||||
|
|
||||||
This uses ipsec as an example of a common mainline module. This checks
|
This uses ipsec as an example of a common mainline module. This checks
|
||||||
that the correct Soong config module types and variables are used and
|
that the general Soong config module types and variables are used.
|
||||||
that it imports the definitions from the correct location.
|
|
||||||
"""
|
"""
|
||||||
src = read_test_data("ipsec_Android.bp.input")
|
src = read_test_data("ipsec_Android.bp.input")
|
||||||
|
|
||||||
@@ -416,7 +415,7 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase):
|
|||||||
|
|
||||||
The ART mainline module uses a different Soong config setup to the
|
The ART mainline module uses a different Soong config setup to the
|
||||||
common mainline modules. This checks that the ART specific Soong config
|
common mainline modules. This checks that the ART specific Soong config
|
||||||
module types, variable and imports are used.
|
module types, and variables are used.
|
||||||
"""
|
"""
|
||||||
src = read_test_data("art_Android.bp.input")
|
src = read_test_data("art_Android.bp.input")
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,30 @@
|
|||||||
// This is auto-generated. DO NOT EDIT.
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
// Soong config variable stanza added by test_art.
|
// Soong config variable module type added by test_art.
|
||||||
soong_config_module_type_import {
|
soong_config_module_type {
|
||||||
from: "prebuilts/module_sdk/art/SoongConfig.bp",
|
name: "art_prebuilt_java_import",
|
||||||
module_types: [
|
module_type: "java_import",
|
||||||
"art_prebuilt_java_import",
|
config_namespace: "art_module",
|
||||||
"art_prebuilt_prebuilt_bootclasspath_fragment",
|
bool_variables: ["source_build"],
|
||||||
"art_prebuilt_prebuilt_platform_compat_config",
|
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"],
|
||||||
}
|
}
|
||||||
|
|
||||||
package {
|
package {
|
||||||
|
|||||||
@@ -1,12 +1,21 @@
|
|||||||
// This is auto-generated. DO NOT EDIT.
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
// Soong config variable stanza added by test_common_mainline_module.
|
// Soong config variable module type added by test_common_mainline_module.
|
||||||
soong_config_module_type_import {
|
soong_config_module_type {
|
||||||
from: "packages/modules/common/Android.bp",
|
name: "module_java_sdk_library_import",
|
||||||
module_types: [
|
module_type: "java_sdk_library_import",
|
||||||
"module_java_sdk_library_import",
|
config_namespace: "ANDROID",
|
||||||
"module_prebuilt_bootclasspath_fragment",
|
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"],
|
||||||
}
|
}
|
||||||
|
|
||||||
package {
|
package {
|
||||||
|
|||||||
Reference in New Issue
Block a user