From f3cf34e096e4263e6cd60a00b8096c4d0da6ff85 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Wed, 20 Sep 2023 17:02:40 -0700 Subject: [PATCH] Decouple the target build variant from the platform Bug: 301334589 Test: Presubmits Change-Id: Id8ac0874a2d132d9965e339fd8dc705a7434bffb --- android/bazel_handler.go | 23 ++++++--------- bp2build/bp2build_product_config.go | 44 ++++++++++++----------------- 2 files changed, 27 insertions(+), 40 deletions(-) diff --git a/android/bazel_handler.go b/android/bazel_handler.go index 4b9834564..56ec17d02 100644 --- a/android/bazel_handler.go +++ b/android/bazel_handler.go @@ -665,7 +665,8 @@ func (context *mixedBuildBazelContext) createBazelCommand(config Config, runName command.expression, "--profile=" + shared.BazelMetricsFilename(context.paths, runName), - "--host_platform=@soong_injection//product_config_platforms:mixed_builds_product-" + context.targetBuildVariant + "_" + runtime.GOOS + "_x86_64", + "--host_platform=@soong_injection//product_config_platforms:mixed_builds_product_" + runtime.GOOS + "_x86_64", + "--//build/bazel/product_config:target_build_variant=" + context.targetBuildVariant, // Don't specify --platforms, because on some products/branches (like kernel-build-tools) // the main platform for mixed_builds_product-variant doesn't exist because an arch isn't // specified in product config. The derivative platforms that config_node transitions into @@ -720,9 +721,9 @@ func (context *mixedBuildBazelContext) mainBzlFileContents() []byte { ##################################################### def _config_node_transition_impl(settings, attr): if attr.os == "android" and attr.arch == "target": - target = "mixed_builds_product-{VARIANT}" + target = "mixed_builds_product" else: - target = "mixed_builds_product-{VARIANT}_%s_%s" % (attr.os, attr.arch) + target = "mixed_builds_product_%s_%s" % (attr.os, attr.arch) apex_name = "" if attr.within_apex: # //build/bazel/rules/apex:apex_name has to be set to a non_empty value, @@ -794,11 +795,7 @@ phony_root = rule( ) ` - productReplacer := strings.NewReplacer( - "{PRODUCT}", context.targetProduct, - "{VARIANT}", context.targetBuildVariant) - - return []byte(productReplacer.Replace(contents)) + return []byte(contents) } func (context *mixedBuildBazelContext) mainBuildFileContents() []byte { @@ -972,9 +969,9 @@ def get_arch(target): platform_name = platforms[0].name if platform_name == "host": return "HOST" - if not platform_name.startswith("mixed_builds_product-{TARGET_BUILD_VARIANT}"): - fail("expected platform name of the form 'mixed_builds_product-{TARGET_BUILD_VARIANT}_android_' or 'mixed_builds_product-{TARGET_BUILD_VARIANT}_linux_', but was " + str(platforms)) - platform_name = platform_name.removeprefix("mixed_builds_product-{TARGET_BUILD_VARIANT}").removeprefix("_") + if not platform_name.startswith("mixed_builds_product"): + fail("expected platform name of the form 'mixed_builds_product_android_' or 'mixed_builds_product_linux_', but was " + str(platforms)) + platform_name = platform_name.removeprefix("mixed_builds_product").removeprefix("_") config_key = "" if not platform_name: config_key = "target|android" @@ -983,7 +980,7 @@ def get_arch(target): elif platform_name.startswith("linux_"): config_key = platform_name.removeprefix("linux_") + "|linux" else: - fail("expected platform name of the form 'mixed_builds_product-{TARGET_BUILD_VARIANT}_android_' or 'mixed_builds_product-{TARGET_BUILD_VARIANT}_linux_', but was " + str(platforms)) + fail("expected platform name of the form 'mixed_builds_product_android_' or 'mixed_builds_product_linux_', but was " + str(platforms)) within_apex = buildoptions.get("//build/bazel/rules/apex:within_apex") apex_sdk_version = buildoptions.get("//build/bazel/rules/apex:min_sdk_version") @@ -1012,8 +1009,6 @@ def format(target): return id_string + ">>NONE" ` replacer := strings.NewReplacer( - "{TARGET_PRODUCT}", context.targetProduct, - "{TARGET_BUILD_VARIANT}", context.targetBuildVariant, "{LABEL_REGISTRATION_MAP_SECTION}", labelRegistrationMapSection, "{FUNCTION_DEF_SECTION}", functionDefSection, "{MAIN_SWITCH_SECTION}", mainSwitchSection) diff --git a/bp2build/bp2build_product_config.go b/bp2build/bp2build_product_config.go index 3d9cae069..2bbb2d755 100644 --- a/bp2build/bp2build_product_config.go +++ b/bp2build/bp2build_product_config.go @@ -53,9 +53,9 @@ func createProductConfigFiles( return res, err } - currentProductFolder := fmt.Sprintf("build/bazel/products/%s-%s", targetProduct, targetBuildVariant) + currentProductFolder := fmt.Sprintf("build/bazel/products/%s", targetProduct) if len(productVariables.PartitionVars.ProductDirectory) > 0 { - currentProductFolder = fmt.Sprintf("%s%s-%s", productVariables.PartitionVars.ProductDirectory, targetProduct, targetBuildVariant) + currentProductFolder = fmt.Sprintf("%s%s", productVariables.PartitionVars.ProductDirectory, targetProduct) } productReplacer := strings.NewReplacer( @@ -73,7 +73,7 @@ func createProductConfigFiles( } productLabelsToVariables := make(map[string]*android.ProductVariables) - productLabelsToVariables[productReplacer.Replace("@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}")] = &productVariables + productLabelsToVariables[productReplacer.Replace("@//{PRODUCT_FOLDER}:{PRODUCT}")] = &productVariables for product, productVariablesStarlark := range productsForTestingMap { productVariables, err := starlarkMapToProductVariables(productVariablesStarlark) if err != nil { @@ -84,10 +84,10 @@ func createProductConfigFiles( res.bp2buildTargets = make(map[string]BazelTargets) res.bp2buildTargets[currentProductFolder] = append(res.bp2buildTargets[currentProductFolder], BazelTarget{ - name: productReplacer.Replace("{PRODUCT}-{VARIANT}"), + name: productReplacer.Replace("{PRODUCT}"), packageName: currentProductFolder, content: productReplacer.Replace(`android_product( - name = "{PRODUCT}-{VARIANT}", + name = "{PRODUCT}", soong_variables = _soong_variables, )`), ruleClass: "android_product", @@ -134,7 +134,7 @@ load("@//build/bazel/product_config:android_product.bzl", "android_product") # extra rebuilding, make mixed builds always use a single platform so that the bazel artifacts # are always under the same path. android_product( - name = "mixed_builds_product-{VARIANT}", + name = "mixed_builds_product", soong_variables = _soong_variables, extra_constraints = ["@//build/bazel/platforms:mixed_builds"], ) @@ -148,34 +148,35 @@ android_product( # TODO: When we start generating the platforms for more than just the # currently lunched product, they should all be listed here product_labels = [ - "@soong_injection//product_config_platforms:mixed_builds_product-{VARIANT}", - "@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}", + "@soong_injection//product_config_platforms:mixed_builds_product", + "@//{PRODUCT_FOLDER}:{PRODUCT}", `)+strings.Join(productsForTesting, "\n")+"\n]\n"), newFile( "product_config_platforms", "common.bazelrc", productReplacer.Replace(` build --platform_mappings=platform_mappings -build --platforms @//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_x86_64 +build --platforms @//{PRODUCT_FOLDER}:{PRODUCT}_linux_x86_64 +build --//build/bazel/product_config:target_build_variant={VARIANT} -build:android --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT} -build:linux_x86 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_x86 -build:linux_x86_64 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_x86_64 -build:linux_bionic_x86_64 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_bionic_x86_64 -build:linux_musl_x86 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_musl_x86 -build:linux_musl_x86_64 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_musl_x86_64 +build:android --platforms=@//{PRODUCT_FOLDER}:{PRODUCT} +build:linux_x86 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}_linux_x86 +build:linux_x86_64 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}_linux_x86_64 +build:linux_bionic_x86_64 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}_linux_bionic_x86_64 +build:linux_musl_x86 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}_linux_musl_x86 +build:linux_musl_x86_64 --platforms=@//{PRODUCT_FOLDER}:{PRODUCT}_linux_musl_x86_64 `)), newFile( "product_config_platforms", "linux.bazelrc", productReplacer.Replace(` -build --host_platform @//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_x86_64 +build --host_platform @//{PRODUCT_FOLDER}:{PRODUCT}_linux_x86_64 `)), newFile( "product_config_platforms", "darwin.bazelrc", productReplacer.Replace(` -build --host_platform @//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_darwin_x86_64 +build --host_platform @//{PRODUCT_FOLDER}:{PRODUCT}_darwin_x86_64 `)), } res.bp2buildFiles = []BazelFile{ @@ -237,12 +238,6 @@ func platformMappingSingleProduct( soongConfigDefinitions soongconfig.Bp2BuildSoongConfigDefinitions, convertedModulePathMap map[string]string, result *strings.Builder) { - targetBuildVariant := "user" - if proptools.Bool(productVariables.Eng) { - targetBuildVariant = "eng" - } else if proptools.Bool(productVariables.Debuggable) { - targetBuildVariant = "userdebug" - } platform_sdk_version := -1 if productVariables.Platform_sdk_version != nil { @@ -270,7 +265,6 @@ func platformMappingSingleProduct( result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:cfi_exclude_paths=%s\n", strings.Join(productVariables.CFIExcludePaths, ","))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:cfi_include_paths=%s\n", strings.Join(productVariables.CFIIncludePaths, ","))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:compressed_apex=%t\n", proptools.Bool(productVariables.CompressedApex))) - result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:debuggable=%t\n", proptools.Bool(productVariables.Debuggable))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:default_app_certificate=%s\n", proptools.String(productVariables.DefaultAppCertificate))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:default_app_certificate_filegroup=%s\n", defaultAppCertificateFilegroup)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:device_abi=%s\n", strings.Join(productVariables.DeviceAbi, ","))) @@ -281,7 +275,6 @@ func platformMappingSingleProduct( result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:device_platform=%s\n", label)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:enable_cfi=%t\n", proptools.BoolDefault(productVariables.EnableCFI, true))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:enforce_vintf_manifest=%t\n", proptools.Bool(productVariables.Enforce_vintf_manifest))) - result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:eng=%t\n", proptools.Bool(productVariables.Eng))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:malloc_not_svelte=%t\n", proptools.Bool(productVariables.Malloc_not_svelte))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:malloc_pattern_fill_contents=%t\n", proptools.Bool(productVariables.Malloc_pattern_fill_contents))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:malloc_zero_contents=%t\n", proptools.Bool(productVariables.Malloc_zero_contents))) @@ -301,7 +294,6 @@ func platformMappingSingleProduct( result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_version=%s\n", productVariables.ReleaseVersion)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:platform_sdk_version=%d\n", platform_sdk_version)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:safestack=%t\n", proptools.Bool(productVariables.Safestack))) - result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:target_build_variant=%s\n", targetBuildVariant)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:treble_linker_namespaces=%t\n", proptools.Bool(productVariables.Treble_linker_namespaces))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:tidy_checks=%s\n", proptools.String(productVariables.TidyChecks))) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:uml=%t\n", proptools.Bool(productVariables.Uml)))