Revert "Remove --noexperimental_platform_in_output_dir"
This reverts commit 24af24e0f2
.
Reason for revert: Breaks kernel build tools build https://ci.android.com/builds/branches/aosp_kernel-build-tools/grid?head=10282004&tail=10282004
Change-Id: I486d7f305d44cfecc51a0e039cc41c0afa6495f3
This commit is contained in:
parent
24af24e0f2
commit
08ccec7c11
3 changed files with 43 additions and 64 deletions
|
@ -665,20 +665,26 @@ func (r *builtinBazelRunner) issueBazelCommand(cmdRequest bazel.CmdRequest, path
|
||||||
|
|
||||||
func (context *mixedBuildBazelContext) createBazelCommand(config Config, runName bazel.RunName, command bazelCommand,
|
func (context *mixedBuildBazelContext) createBazelCommand(config Config, runName bazel.RunName, command bazelCommand,
|
||||||
extraFlags ...string) bazel.CmdRequest {
|
extraFlags ...string) bazel.CmdRequest {
|
||||||
if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
|
|
||||||
panic("Unknown GOOS: " + runtime.GOOS)
|
|
||||||
}
|
|
||||||
cmdFlags := []string{
|
cmdFlags := []string{
|
||||||
"--output_base=" + absolutePath(context.paths.outputBase),
|
"--output_base=" + absolutePath(context.paths.outputBase),
|
||||||
command.command,
|
command.command,
|
||||||
command.expression,
|
command.expression,
|
||||||
"--profile=" + shared.BazelMetricsFilename(context.paths, runName),
|
"--profile=" + shared.BazelMetricsFilename(context.paths, runName),
|
||||||
|
|
||||||
"--host_platform=@soong_injection//product_config_platforms:mixed_builds_product-" + context.targetBuildVariant + "_" + runtime.GOOS + "_x86_64",
|
// We don't need to set --host_platforms because it's set in bazelrc files
|
||||||
// This --platforms flag largely doesn't matter, because the config_nodes will
|
// that the bazel shell script wrapper passes
|
||||||
// transition into the right configuration. This is just to make sure we use the
|
|
||||||
// mixed_builds_product everywhere.
|
// Optimize Ninja rebuilds by ensuring Bazel write into product-agnostic
|
||||||
"--platforms=@soong_injection//product_config_platforms:mixed_builds_product-" + context.targetBuildVariant,
|
// output paths for the configured targets that shouldn't be affected by
|
||||||
|
// TARGET_PRODUCT. Otherwise product agnostic modules will be rebuilt by
|
||||||
|
// Ninja when the product changes, unconditionally.
|
||||||
|
//
|
||||||
|
// For example, Mainline APEXes should be identical regardless of the
|
||||||
|
// product (modulo arch/cpu).
|
||||||
|
//
|
||||||
|
// This flag forcibly disables the platform prefix in the intermediate
|
||||||
|
// outputs during a mixed build.
|
||||||
|
"--noexperimental_platform_in_output_dir",
|
||||||
|
|
||||||
// Suppress noise
|
// Suppress noise
|
||||||
"--ui_event_filters=-INFO",
|
"--ui_event_filters=-INFO",
|
||||||
|
@ -725,9 +731,9 @@ func (context *mixedBuildBazelContext) mainBzlFileContents() []byte {
|
||||||
#####################################################
|
#####################################################
|
||||||
def _config_node_transition_impl(settings, attr):
|
def _config_node_transition_impl(settings, attr):
|
||||||
if attr.os == "android" and attr.arch == "target":
|
if attr.os == "android" and attr.arch == "target":
|
||||||
target = "mixed_builds_product-{VARIANT}"
|
target = "current_product-{VARIANT}"
|
||||||
else:
|
else:
|
||||||
target = "mixed_builds_product-{VARIANT}_%s_%s" % (attr.os, attr.arch)
|
target = "current_product-{VARIANT}_%s_%s" % (attr.os, attr.arch)
|
||||||
apex_name = ""
|
apex_name = ""
|
||||||
if attr.within_apex:
|
if attr.within_apex:
|
||||||
# //build/bazel/rules/apex:apex_name has to be set to a non_empty value,
|
# //build/bazel/rules/apex:apex_name has to be set to a non_empty value,
|
||||||
|
@ -964,9 +970,9 @@ def get_arch(target):
|
||||||
platform_name = platforms[0].name
|
platform_name = platforms[0].name
|
||||||
if platform_name == "host":
|
if platform_name == "host":
|
||||||
return "HOST"
|
return "HOST"
|
||||||
if not platform_name.startswith("mixed_builds_product-{TARGET_BUILD_VARIANT}"):
|
if not platform_name.startswith("current_product-{TARGET_BUILD_VARIANT}"):
|
||||||
fail("expected platform name of the form 'mixed_builds_product-{TARGET_BUILD_VARIANT}_android_<arch>' or 'mixed_builds_product-{TARGET_BUILD_VARIANT}_linux_<arch>', but was " + str(platforms))
|
fail("expected platform name of the form 'current_product-{TARGET_BUILD_VARIANT}_android_<arch>' or 'current_product-{TARGET_BUILD_VARIANT}_linux_<arch>', but was " + str(platforms))
|
||||||
platform_name = platform_name.removeprefix("mixed_builds_product-{TARGET_BUILD_VARIANT}").removeprefix("_")
|
platform_name = platform_name.removeprefix("current_product-{TARGET_BUILD_VARIANT}").removeprefix("_")
|
||||||
config_key = ""
|
config_key = ""
|
||||||
if not platform_name:
|
if not platform_name:
|
||||||
config_key = "target|android"
|
config_key = "target|android"
|
||||||
|
@ -975,7 +981,7 @@ def get_arch(target):
|
||||||
elif platform_name.startswith("linux_"):
|
elif platform_name.startswith("linux_"):
|
||||||
config_key = platform_name.removeprefix("linux_") + "|linux"
|
config_key = platform_name.removeprefix("linux_") + "|linux"
|
||||||
else:
|
else:
|
||||||
fail("expected platform name of the form 'mixed_builds_product-{TARGET_BUILD_VARIANT}_android_<arch>' or 'mixed_builds_product-{TARGET_BUILD_VARIANT}_linux_<arch>', but was " + str(platforms))
|
fail("expected platform name of the form 'current_product-{TARGET_BUILD_VARIANT}_android_<arch>' or 'current_product-{TARGET_BUILD_VARIANT}_linux_<arch>', but was " + str(platforms))
|
||||||
|
|
||||||
within_apex = buildoptions.get("//build/bazel/rules/apex:within_apex")
|
within_apex = buildoptions.get("//build/bazel/rules/apex:within_apex")
|
||||||
apex_sdk_version = buildoptions.get("//build/bazel/rules/apex:min_sdk_version")
|
apex_sdk_version = buildoptions.get("//build/bazel/rules/apex:min_sdk_version")
|
||||||
|
|
|
@ -72,13 +72,8 @@ package(default_visibility = [
|
||||||
load("//{PRODUCT_FOLDER}:soong.variables.bzl", _soong_variables = "variables")
|
load("//{PRODUCT_FOLDER}:soong.variables.bzl", _soong_variables = "variables")
|
||||||
load("@//build/bazel/product_config:android_product.bzl", "android_product")
|
load("@//build/bazel/product_config:android_product.bzl", "android_product")
|
||||||
|
|
||||||
# Bazel will qualify its outputs by the platform name. When switching between products, this
|
|
||||||
# means that soong-built files that depend on bazel-built files will suddenly get different
|
|
||||||
# dependency files, because the path changes, and they will be rebuilt. In order to avoid this
|
|
||||||
# extra rebuilding, make mixed builds always use a single platform so that the bazel artifacts
|
|
||||||
# are always under the same path.
|
|
||||||
android_product(
|
android_product(
|
||||||
name = "mixed_builds_product-{VARIANT}",
|
name = "current_product-{VARIANT}",
|
||||||
soong_variables = _soong_variables,
|
soong_variables = _soong_variables,
|
||||||
)
|
)
|
||||||
`)),
|
`)),
|
||||||
|
@ -91,7 +86,7 @@ android_product(
|
||||||
# TODO: When we start generating the platforms for more than just the
|
# TODO: When we start generating the platforms for more than just the
|
||||||
# currently lunched product, they should all be listed here
|
# currently lunched product, they should all be listed here
|
||||||
product_labels = [
|
product_labels = [
|
||||||
"@soong_injection//product_config_platforms:mixed_builds_product-{VARIANT}",
|
"@soong_injection//product_config_platforms:current_product-{VARIANT}",
|
||||||
"@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}"
|
"@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}"
|
||||||
]
|
]
|
||||||
`)),
|
`)),
|
||||||
|
@ -99,25 +94,38 @@ product_labels = [
|
||||||
"product_config_platforms",
|
"product_config_platforms",
|
||||||
"common.bazelrc",
|
"common.bazelrc",
|
||||||
productReplacer.Replace(`
|
productReplacer.Replace(`
|
||||||
build --platforms @soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_x86_64
|
# current_product refers to the current TARGET_PRODUCT set, usually through
|
||||||
|
# 'lunch' or 'banchan'. Every build will have a primary TARGET_PRODUCT, but
|
||||||
|
# bazel supports using other products in tests or configuration transitions. The
|
||||||
|
# other products can be found in
|
||||||
|
# @soong_injection//product_config_platforms/products/...
|
||||||
|
build --platforms @soong_injection//product_config_platforms:current_product-{VARIANT}_linux_x86_64
|
||||||
|
|
||||||
build:android --platforms=@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}
|
build:android --platforms=@soong_injection//product_config_platforms:current_product-{VARIANT}
|
||||||
build:linux_x86_64 --platforms=@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_x86_64
|
build:linux_x86_64 --platforms=@soong_injection//product_config_platforms:current_product-{VARIANT}_linux_x86_64
|
||||||
build:linux_bionic_x86_64 --platforms=@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_bionic_x86_64
|
build:linux_bionic_x86_64 --platforms=@soong_injection//product_config_platforms:current_product-{VARIANT}_linux_bionic_x86_64
|
||||||
build:linux_musl_x86 --platforms=@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_musl_x86
|
build:linux_musl_x86 --platforms=@soong_injection//product_config_platforms:current_product-{VARIANT}_linux_musl_x86
|
||||||
build:linux_musl_x86_64 --platforms=@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_musl_x86_64
|
build:linux_musl_x86_64 --platforms=@soong_injection//product_config_platforms:current_product-{VARIANT}_linux_musl_x86_64
|
||||||
`)),
|
`)),
|
||||||
newFile(
|
newFile(
|
||||||
"product_config_platforms",
|
"product_config_platforms",
|
||||||
"linux.bazelrc",
|
"linux.bazelrc",
|
||||||
productReplacer.Replace(`
|
productReplacer.Replace(`
|
||||||
build --host_platform @soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_linux_x86_64
|
build --host_platform @soong_injection//product_config_platforms:current_product-{VARIANT}_linux_x86_64
|
||||||
`)),
|
`)),
|
||||||
newFile(
|
newFile(
|
||||||
"product_config_platforms",
|
"product_config_platforms",
|
||||||
"darwin.bazelrc",
|
"darwin.bazelrc",
|
||||||
productReplacer.Replace(`
|
productReplacer.Replace(`
|
||||||
build --host_platform @soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_darwin_x86_64
|
build --host_platform product_config_platforms:current_product-{VARIANT}_darwin_x86_64
|
||||||
|
`)),
|
||||||
|
newFile(
|
||||||
|
"product_config_platforms",
|
||||||
|
"platform_mappings",
|
||||||
|
productReplacer.Replace(`
|
||||||
|
flags:
|
||||||
|
--cpu=k8
|
||||||
|
@soong_injection//product_config_platforms:current_product-{VARIANT}
|
||||||
`)),
|
`)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -382,39 +382,4 @@ EOF
|
||||||
run_bazel build --config=android --config=api_bp2build //foo:libfoo.contribution
|
run_bazel build --config=android --config=api_bp2build //foo:libfoo.contribution
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_bazel_standalone_output_paths_contain_product_name {
|
|
||||||
setup
|
|
||||||
mkdir -p a
|
|
||||||
cat > a/Android.bp <<EOF
|
|
||||||
cc_object {
|
|
||||||
name: "qq",
|
|
||||||
srcs: ["qq.cc"],
|
|
||||||
bazel_module: {
|
|
||||||
bp2build_available: true,
|
|
||||||
},
|
|
||||||
stl: "none",
|
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > a/qq.cc <<EOF
|
|
||||||
#include "qq.h"
|
|
||||||
int qq() {
|
|
||||||
return QQ;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > a/qq.h <<EOF
|
|
||||||
#define QQ 1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
export TARGET_PRODUCT=aosp_arm; run_soong bp2build
|
|
||||||
local -r output=$(run_bazel cquery //a:qq --output=files --config=android --config=bp2build --config=ci)
|
|
||||||
if [[ ! $(echo ${output} | grep "bazel-out/aosp_arm") ]]; then
|
|
||||||
fail "Did not find the product name '${TARGET_PRODUCT}' in the output path. This can cause " \
|
|
||||||
"unnecessary rebuilds when toggling between products as bazel outputs for different products will " \
|
|
||||||
"clobber each other. Output paths are: \n${output}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
scan_and_run_tests
|
scan_and_run_tests
|
||||||
|
|
Loading…
Reference in a new issue