diff options
31 files changed, 686 insertions, 410 deletions
diff --git a/android/arch.go b/android/arch.go index 54242e56d..5e3e9204a 100644 --- a/android/arch.go +++ b/android/arch.go @@ -1587,10 +1587,12 @@ func hasArmAbi(arch Arch) bool { return PrefixInList(arch.Abi, "arm") } -// hasArmArch returns true if targets has at least non-native_bridge arm Android arch +// hasArmAndroidArch returns true if targets has at least +// one arm Android arch (possibly native bridged) func hasArmAndroidArch(targets []Target) bool { for _, target := range targets { - if target.Os == Android && target.Arch.ArchType == Arm { + if target.Os == Android && + (target.Arch.ArchType == Arm || target.Arch.ArchType == Arm64) { return true } } @@ -2006,17 +2008,10 @@ func (m *ModuleBase) GetArchVariantProperties(ctx ArchVariantContext, propertySe osToProp := ArchVariantProperties{} archOsToProp := ArchVariantProperties{} - var linuxStructs, bionicStructs []reflect.Value - var ok bool - - linuxStructs, ok = getTargetStructs(ctx, archProperties, "Linux") - if !ok { - linuxStructs = make([]reflect.Value, 0) - } - bionicStructs, ok = getTargetStructs(ctx, archProperties, "Bionic") - if !ok { - bionicStructs = make([]reflect.Value, 0) - } + linuxStructs := getTargetStructs(ctx, archProperties, "Linux") + bionicStructs := getTargetStructs(ctx, archProperties, "Bionic") + hostStructs := getTargetStructs(ctx, archProperties, "Host") + hostNotWindowsStructs := getTargetStructs(ctx, archProperties, "Not_windows") // For android, linux, ... for _, os := range osTypeList { @@ -2025,9 +2020,10 @@ func (m *ModuleBase) GetArchVariantProperties(ctx ArchVariantContext, propertySe continue } osStructs := make([]reflect.Value, 0) - osSpecificStructs, ok := getTargetStructs(ctx, archProperties, os.Field) - if ok { - osStructs = append(osStructs, osSpecificStructs...) + + osSpecificStructs := getTargetStructs(ctx, archProperties, os.Field) + if os.Class == Host { + osStructs = append(osStructs, hostStructs...) } if os.Linux() { osStructs = append(osStructs, linuxStructs...) @@ -2035,37 +2031,44 @@ func (m *ModuleBase) GetArchVariantProperties(ctx ArchVariantContext, propertySe if os.Bionic() { osStructs = append(osStructs, bionicStructs...) } + + if os == LinuxMusl { + osStructs = append(osStructs, getTargetStructs(ctx, archProperties, "Musl")...) + } + if os == Linux { + osStructs = append(osStructs, getTargetStructs(ctx, archProperties, "Glibc")...) + } + + osStructs = append(osStructs, osSpecificStructs...) + + if os.Class == Host && os != Windows { + osStructs = append(osStructs, hostNotWindowsStructs...) + } osToProp[os.Name] = mergeStructs(ctx, osStructs, propertySet) // For arm, x86, ... for _, arch := range osArchTypeMap[os] { osArchStructs := make([]reflect.Value, 0) - targetField := GetCompoundTargetField(os, arch) - targetName := fmt.Sprintf("%s_%s", os.Name, arch.Name) - targetStructs, ok := getTargetStructs(ctx, archProperties, targetField) - if ok { - osArchStructs = append(osArchStructs, targetStructs...) - } - // Auto-combine with Linux_ and Bionic_ targets. This potentially results in // repetition and select() bloat, but use of Linux_* and Bionic_* targets is rare. // TODO(b/201423152): Look into cleanup. if os.Linux() { targetField := "Linux_" + arch.Name - targetStructs, ok := getTargetStructs(ctx, archProperties, targetField) - if ok { - osArchStructs = append(osArchStructs, targetStructs...) - } + targetStructs := getTargetStructs(ctx, archProperties, targetField) + osArchStructs = append(osArchStructs, targetStructs...) } if os.Bionic() { targetField := "Bionic_" + arch.Name - targetStructs, ok := getTargetStructs(ctx, archProperties, targetField) - if ok { - osArchStructs = append(osArchStructs, targetStructs...) - } + targetStructs := getTargetStructs(ctx, archProperties, targetField) + osArchStructs = append(osArchStructs, targetStructs...) } + targetField := GetCompoundTargetField(os, arch) + targetName := fmt.Sprintf("%s_%s", os.Name, arch.Name) + targetStructs := getTargetStructs(ctx, archProperties, targetField) + osArchStructs = append(osArchStructs, targetStructs...) + archOsToProp[targetName] = mergeStructs(ctx, osArchStructs, propertySet) } } @@ -2089,8 +2092,8 @@ func (m *ModuleBase) GetArchVariantProperties(ctx ArchVariantContext, propertySe // } // } // This would return a BaseCompilerProperties with BaseCompilerProperties.Srcs = ["foo.c"] -func getTargetStructs(ctx ArchVariantContext, archProperties []interface{}, targetName string) ([]reflect.Value, bool) { - propertyStructs := make([]reflect.Value, 0) +func getTargetStructs(ctx ArchVariantContext, archProperties []interface{}, targetName string) []reflect.Value { + var propertyStructs []reflect.Value for _, archProperty := range archProperties { archPropValues := reflect.ValueOf(archProperty).Elem() targetProp := archPropValues.FieldByName("Target").Elem() @@ -2098,11 +2101,11 @@ func getTargetStructs(ctx ArchVariantContext, archProperties []interface{}, targ if ok { propertyStructs = append(propertyStructs, targetStruct) } else { - return propertyStructs, false + return []reflect.Value{} } } - return propertyStructs, true + return propertyStructs } func mergeStructs(ctx ArchVariantContext, propertyStructs []reflect.Value, propertySet interface{}) interface{} { diff --git a/android/bazel.go b/android/bazel.go index 6aba75984..e4eaa37e3 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -182,8 +182,8 @@ var ( "external/boringssl": Bp2BuildDefaultTrueRecursively, "external/brotli": Bp2BuildDefaultTrue, "external/fmtlib": Bp2BuildDefaultTrueRecursively, - "external/googletest/googletest": Bp2BuildDefaultTrueRecursively, "external/google-benchmark": Bp2BuildDefaultTrueRecursively, + "external/googletest/googletest": Bp2BuildDefaultTrueRecursively, "external/gwp_asan": Bp2BuildDefaultTrueRecursively, "external/jemalloc_new": Bp2BuildDefaultTrueRecursively, "external/jsoncpp": Bp2BuildDefaultTrueRecursively, @@ -191,10 +191,15 @@ var ( "external/libcxx": Bp2BuildDefaultTrueRecursively, "external/libcxxabi": Bp2BuildDefaultTrueRecursively, "external/lz4/lib": Bp2BuildDefaultTrue, + "external/mdnsresponder": Bp2BuildDefaultTrueRecursively, + "external/minijail": Bp2BuildDefaultTrueRecursively, + "external/pcre": Bp2BuildDefaultTrueRecursively, "external/protobuf": Bp2BuildDefaultTrueRecursively, "external/python/six": Bp2BuildDefaultTrueRecursively, "external/scudo": Bp2BuildDefaultTrueRecursively, + "external/selinux/libselinux": Bp2BuildDefaultTrueRecursively, "external/zlib": Bp2BuildDefaultTrueRecursively, + "external/zstd": Bp2BuildDefaultTrueRecursively, "frameworks/native/libs/adbd_auth": Bp2BuildDefaultTrueRecursively, "packages/modules/adb": Bp2BuildDefaultTrue, "packages/modules/adb/crypto": Bp2BuildDefaultTrueRecursively, @@ -208,6 +213,7 @@ var ( "system/core/libasyncio": Bp2BuildDefaultTrue, "system/core/libcrypto_utils": Bp2BuildDefaultTrueRecursively, "system/core/libcutils": Bp2BuildDefaultTrueRecursively, + "system/core/libpackagelistparser": Bp2BuildDefaultTrueRecursively, "system/core/libprocessgroup": Bp2BuildDefaultTrue, "system/core/libprocessgroup/cgrouprc": Bp2BuildDefaultTrue, "system/core/libprocessgroup/cgrouprc_format": Bp2BuildDefaultTrue, @@ -241,6 +247,8 @@ var ( "libcap", // http://b/198595332, depends on _makenames, a cc_binary "cap_names.h", // http://b/198596102, depends on _makenames, a cc_binary + "libminijail", // depends on unconverted modules: libcap + // Tests. Handle later. "libbionic_tests_headers_posix", // http://b/186024507, cc_library_static, sched.h, time.h not found "libjemalloc5_integrationtest", @@ -282,7 +290,7 @@ var ( "libseccomp_policy_app_zygote_sources", // http://b/200899432, bazel-built cc_genrule does not work in mixed build when it is a dependency of another soong module. "libseccomp_policy_app_sources", // http://b/200899432, bazel-built cc_genrule does not work in mixed build when it is a dependency of another soong module. "libseccomp_policy_system_sources", // http://b/200899432, bazel-built cc_genrule does not work in mixed build when it is a dependency of another soong module. - + "minijail_constants_json", // http://b/200899432, bazel-built cc_genrule does not work in mixed build when it is a dependency of another soong module. } // Used for quicker lookups diff --git a/androidmk/androidmk/android.go b/androidmk/androidmk/android.go index 963e905cb..f3ad1523b 100644 --- a/androidmk/androidmk/android.go +++ b/androidmk/androidmk/android.go @@ -639,6 +639,12 @@ func prebuiltModulePath(ctx variableAssignmentContext) error { if len(val.Variables) == 1 && varLiteralName(val.Variables[0]) != "" && len(val.Strings) == 2 && val.Strings[0] == "" { fixed = val.Strings[1] varname = val.Variables[0].Name.Strings[0] + // TARGET_OUT_OPTIONAL_EXECUTABLES puts the artifact in xbin, which is + // deprecated. TARGET_OUT_DATA_APPS install location will be handled + // automatically by Soong + if varname == "TARGET_OUT_OPTIONAL_EXECUTABLES" || varname == "TARGET_OUT_DATA_APPS" { + return nil + } } else if len(val.Variables) == 2 && varLiteralName(val.Variables[0]) == "PRODUCT_OUT" && varLiteralName(val.Variables[1]) == "TARGET_COPY_OUT_VENDOR" && len(val.Strings) == 3 && val.Strings[0] == "" && val.Strings[1] == "/" { fixed = val.Strings[2] diff --git a/androidmk/androidmk/androidmk_test.go b/androidmk/androidmk/androidmk_test.go index 9fd4ff943..775a9a88e 100644 --- a/androidmk/androidmk/androidmk_test.go +++ b/androidmk/androidmk/androidmk_test.go @@ -1516,7 +1516,23 @@ android_app { ], } `, - }, + }, { + desc: "Obsolete LOCAL_MODULE_PATH", + in: ` +include $(CLEAR_VARS) +LOCAL_MODULE := foo +LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) +LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) +LOCAL_CTS_TEST_PACKAGE := bar +LOCAL_USE_AAPT2 := blah +include $(BUILD_PACKAGE) +`, + expected: ` +android_app { + name: "foo", + +} +`}, } func TestEndToEnd(t *testing.T) { diff --git a/apex/apex_test.go b/apex/apex_test.go index 5d7a1be19..78a6bb8f4 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -3183,7 +3183,6 @@ func TestMacro(t *testing.T) { "myapex", "otherapex", ], - use_apex_name_macro: true, recovery_available: true, min_sdk_version: "29", } @@ -3198,13 +3197,11 @@ func TestMacro(t *testing.T) { mylibCFlags = ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_apex10000").Rule("cc").Args["cFlags"] ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_MIN_SDK_VERSION__=10000") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") // APEX variant has __ANDROID_APEX__ and __ANDROID_APEX_SDK__ defined mylibCFlags = ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_apex29").Rule("cc").Args["cFlags"] ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_MIN_SDK_VERSION__=29") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") // When a cc_library sets use_apex_name_macro: true each apex gets a unique variant and // each variant defines additional macros to distinguish which apex variant it is built for @@ -3213,42 +3210,15 @@ func TestMacro(t *testing.T) { mylibCFlags = ctx.ModuleForTests("mylib3", "android_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib3", "android_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib3", "android_arm64_armv8-a_static_otherapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - // recovery variant does not set __ANDROID_APEX_MIN_SDK_VERSION__ mylibCFlags = ctx.ModuleForTests("mylib3", "android_recovery_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MIN_SDK_VERSION__") - // When a dependency of a cc_library sets use_apex_name_macro: true each apex gets a unique - // variant. - // non-APEX variant does not have __ANDROID_APEX__ defined mylibCFlags = ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_otherapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - // recovery variant does not set __ANDROID_APEX_MIN_SDK_VERSION__ mylibCFlags = ctx.ModuleForTests("mylib2", "android_recovery_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") @@ -8289,6 +8259,75 @@ func TestProhibitStaticExecutable(t *testing.T) { `) } +func TestAndroidMk_DexpreoptBuiltInstalledForApex(t *testing.T) { + ctx := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + updatable: false, + java_libs: ["foo"], + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + java_library { + name: "foo", + srcs: ["foo.java"], + apex_available: ["myapex"], + installable: true, + } + `, + dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), + ) + + apexBundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) + data := android.AndroidMkDataForTest(t, ctx, apexBundle) + var builder strings.Builder + data.Custom(&builder, apexBundle.BaseModuleName(), "TARGET_", "", data) + androidMk := builder.String() + ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.odex foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.vdex") +} + +func TestAndroidMk_DexpreoptBuiltInstalledForApex_Prebuilt(t *testing.T) { + ctx := testApex(t, ` + prebuilt_apex { + name: "myapex", + arch: { + arm64: { + src: "myapex-arm64.apex", + }, + arm: { + src: "myapex-arm.apex", + }, + }, + exported_java_libs: ["foo"], + } + + java_import { + name: "foo", + jars: ["foo.jar"], + installable: true, + } + `, + dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), + ) + + prebuilt := ctx.ModuleForTests("myapex", "android_common_myapex").Module().(*Prebuilt) + entriesList := android.AndroidMkEntriesForTest(t, ctx, prebuilt) + mainModuleEntries := entriesList[0] + android.AssertArrayString(t, + "LOCAL_REQUIRED_MODULES", + mainModuleEntries.EntryMap["LOCAL_REQUIRED_MODULES"], + []string{ + "foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.odex", + "foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.vdex", + }) +} + func TestMain(m *testing.M) { os.Exit(m.Run()) } diff --git a/apex/prebuilt.go b/apex/prebuilt.go index 53ef4d787..61e7a0be3 100644 --- a/apex/prebuilt.go +++ b/apex/prebuilt.go @@ -264,17 +264,6 @@ func (p *prebuiltCommon) createEntriesForApexFile(fi apexFile, apexName string) // we need to remove the suffix from LOCAL_MODULE_STEM, otherwise // we will have foo.jar.jar entries.SetString("LOCAL_MODULE_STEM", strings.TrimSuffix(fi.stem(), ".jar")) - var classesJar android.Path - var headerJar android.Path - if javaModule, ok := fi.module.(java.ApexDependency); ok { - classesJar = javaModule.ImplementationAndResourcesJars()[0] - headerJar = javaModule.HeaderJars()[0] - } else { - classesJar = fi.builtFile - headerJar = fi.builtFile - } - entries.SetString("LOCAL_SOONG_CLASSES_JAR", classesJar.String()) - entries.SetString("LOCAL_SOONG_HEADER_JAR", headerJar.String()) entries.SetString("LOCAL_SOONG_DEX_JAR", fi.builtFile.String()) entries.SetString("LOCAL_DEX_PREOPT", "false") }, diff --git a/bazel/properties.go b/bazel/properties.go index ee32e73ac..6a06c1bab 100644 --- a/bazel/properties.go +++ b/bazel/properties.go @@ -164,48 +164,36 @@ func UniqueSortedBazelLabelList(originalLabelList LabelList) LabelList { // Subtract needle from haystack func SubtractStrings(haystack []string, needle []string) []string { // This is really a set - remainder := make(map[string]bool) - - for _, s := range haystack { - remainder[s] = true - } + needleMap := make(map[string]bool) for _, s := range needle { - delete(remainder, s) + needleMap[s] = true } var strings []string - for s, _ := range remainder { - strings = append(strings, s) + for _, s := range haystack { + if exclude := needleMap[s]; !exclude { + strings = append(strings, s) + } } - sort.SliceStable(strings, func(i, j int) bool { - return strings[i] < strings[j] - }) - return strings } // Subtract needle from haystack func SubtractBazelLabels(haystack []Label, needle []Label) []Label { // This is really a set - remainder := make(map[Label]bool) - - for _, label := range haystack { - remainder[label] = true - } - for _, label := range needle { - delete(remainder, label) + needleMap := make(map[Label]bool) + for _, s := range needle { + needleMap[s] = true } var labels []Label - for label, _ := range remainder { - labels = append(labels, label) + for _, label := range haystack { + if exclude := needleMap[label]; !exclude { + labels = append(labels, label) + } } - sort.SliceStable(labels, func(i, j int) bool { - return labels[i].Label < labels[j].Label - }) - return labels } diff --git a/bp2build/build_conversion_test.go b/bp2build/build_conversion_test.go index f14574c06..ee1d862cd 100644 --- a/bp2build/build_conversion_test.go +++ b/bp2build/build_conversion_test.go @@ -223,6 +223,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) { func TestGenerateBazelTargetModules(t *testing.T) { testCases := []bp2buildTestCase{ { + description: "string props", blueprint: `custom { name: "foo", string_list_prop: ["a", "b"], @@ -240,6 +241,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { }, }, { + description: "control characters", blueprint: `custom { name: "control_characters", string_list_prop: ["\t", "\n"], @@ -257,6 +259,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { }, }, { + description: "handles dep", blueprint: `custom { name: "has_dep", arch_paths: [":dep"], @@ -279,25 +282,98 @@ custom { }, }, { + description: "arch-variant srcs", blueprint: `custom { name: "arch_paths", arch: { - x86: { - arch_paths: ["abc"], - }, + x86: { arch_paths: ["x86.txt"] }, + x86_64: { arch_paths: ["x86_64.txt"] }, + arm: { arch_paths: ["arm.txt"] }, + arm64: { arch_paths: ["arm64.txt"] }, + }, + target: { + linux: { arch_paths: ["linux.txt"] }, + bionic: { arch_paths: ["bionic.txt"] }, + host: { arch_paths: ["host.txt"] }, + not_windows: { arch_paths: ["not_windows.txt"] }, + android: { arch_paths: ["android.txt"] }, + linux_musl: { arch_paths: ["linux_musl.txt"] }, + musl: { arch_paths: ["musl.txt"] }, + linux_glibc: { arch_paths: ["linux_glibc.txt"] }, + glibc: { arch_paths: ["glibc.txt"] }, + linux_bionic: { arch_paths: ["linux_bionic.txt"] }, + darwin: { arch_paths: ["darwin.txt"] }, + windows: { arch_paths: ["windows.txt"] }, + }, + multilib: { + lib32: { arch_paths: ["lib32.txt"] }, + lib64: { arch_paths: ["lib64.txt"] }, }, bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`custom( name = "arch_paths", arch_paths = select({ - "//build/bazel/platforms/arch:x86": ["abc"], + "//build/bazel/platforms/arch:arm": [ + "arm.txt", + "lib32.txt", + ], + "//build/bazel/platforms/arch:arm64": [ + "arm64.txt", + "lib64.txt", + ], + "//build/bazel/platforms/arch:x86": [ + "x86.txt", + "lib32.txt", + ], + "//build/bazel/platforms/arch:x86_64": [ + "x86_64.txt", + "lib64.txt", + ], + "//conditions:default": [], + }) + select({ + "//build/bazel/platforms/os:android": [ + "linux.txt", + "bionic.txt", + "android.txt", + ], + "//build/bazel/platforms/os:darwin": [ + "host.txt", + "darwin.txt", + "not_windows.txt", + ], + "//build/bazel/platforms/os:linux": [ + "host.txt", + "linux.txt", + "glibc.txt", + "linux_glibc.txt", + "not_windows.txt", + ], + "//build/bazel/platforms/os:linux_bionic": [ + "host.txt", + "linux.txt", + "bionic.txt", + "linux_bionic.txt", + "not_windows.txt", + ], + "//build/bazel/platforms/os:linux_musl": [ + "host.txt", + "linux.txt", + "musl.txt", + "linux_musl.txt", + "not_windows.txt", + ], + "//build/bazel/platforms/os:windows": [ + "host.txt", + "windows.txt", + ], "//conditions:default": [], }), )`, }, }, { + description: "arch-variant deps", blueprint: `custom { name: "has_dep", arch: { @@ -327,6 +403,7 @@ custom { }, }, { + description: "embedded props", blueprint: `custom { name: "embedded_props", embedded_prop: "abc", @@ -339,6 +416,7 @@ custom { }, }, { + description: "ptr to embedded props", blueprint: `custom { name: "ptr_to_embedded_props", other_embedded_prop: "abc", @@ -354,38 +432,40 @@ custom { dir := "." for _, testCase := range testCases { - config := android.TestConfig(buildDir, nil, testCase.blueprint, nil) - ctx := android.NewTestContext(config) + t.Run(testCase.description, func(t *testing.T) { + config := android.TestConfig(buildDir, nil, testCase.blueprint, nil) + ctx := android.NewTestContext(config) - registerCustomModuleForBp2buildConversion(ctx) + registerCustomModuleForBp2buildConversion(ctx) - _, errs := ctx.ParseFileList(dir, []string{"Android.bp"}) - if errored(t, testCase, errs) { - continue - } - _, errs = ctx.ResolveDependencies(config) - if errored(t, testCase, errs) { - continue - } + _, errs := ctx.ParseFileList(dir, []string{"Android.bp"}) + if errored(t, testCase, errs) { + return + } + _, errs = ctx.ResolveDependencies(config) + if errored(t, testCase, errs) { + return + } - codegenCtx := NewCodegenContext(config, *ctx.Context, Bp2Build) - bazelTargets, err := generateBazelTargetsForDir(codegenCtx, dir) - android.FailIfErrored(t, err) + codegenCtx := NewCodegenContext(config, *ctx.Context, Bp2Build) + bazelTargets, err := generateBazelTargetsForDir(codegenCtx, dir) + android.FailIfErrored(t, err) - if actualCount, expectedCount := len(bazelTargets), len(testCase.expectedBazelTargets); actualCount != expectedCount { - t.Errorf("Expected %d bazel target, got %d", expectedCount, actualCount) - } else { - for i, expectedBazelTarget := range testCase.expectedBazelTargets { - actualBazelTarget := bazelTargets[i] - if actualBazelTarget.content != expectedBazelTarget { - t.Errorf( - "Expected generated Bazel target to be '%s', got '%s'", - expectedBazelTarget, - actualBazelTarget.content, - ) + if actualCount, expectedCount := len(bazelTargets), len(testCase.expectedBazelTargets); actualCount != expectedCount { + t.Errorf("Expected %d bazel target, got %d", expectedCount, actualCount) + } else { + for i, expectedBazelTarget := range testCase.expectedBazelTargets { + actualBazelTarget := bazelTargets[i] + if actualBazelTarget.content != expectedBazelTarget { + t.Errorf( + "Expected generated Bazel target to be '%s', got '%s'", + expectedBazelTarget, + actualBazelTarget.content, + ) + } } } - } + }) } } diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index 76f83e706..653e8c77b 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -133,8 +133,8 @@ cc_library { "//conditions:default": [], }) + select({ "//build/bazel/platforms/os:android": [ - "android.cpp", "bionic.cpp", + "android.cpp", ], "//build/bazel/platforms/os:darwin": ["darwin.cpp"], "//build/bazel/platforms/os:linux": ["linux.cpp"], @@ -1668,9 +1668,9 @@ cc_library { name = "foo-lib", srcs = ["base.cpp"] + select({ "//build/bazel/platforms/os:android": [ - "android.cpp", - "bionic.cpp", "linux.cpp", + "bionic.cpp", + "android.cpp", ], "//build/bazel/platforms/os:darwin": ["darwin.cpp"], "//build/bazel/platforms/os:linux": [ @@ -1678,8 +1678,8 @@ cc_library { "linux_glibc.cpp", ], "//build/bazel/platforms/os:linux_bionic": [ - "bionic.cpp", "linux.cpp", + "bionic.cpp", ], "//build/bazel/platforms/os:linux_musl": [ "linux.cpp", @@ -1692,7 +1692,7 @@ cc_library { } -func TestCcLibraryCppStdWithGnuExtensions_ConvertstoCopt(t *testing.T) { +func TestCcLibraryCppStdWithGnuExtensions_ConvertsToFeatureAttr(t *testing.T) { type testCase struct { cpp_std string gnu_extensions string @@ -1751,7 +1751,7 @@ func TestCcLibraryCppStdWithGnuExtensions_ConvertstoCopt(t *testing.T) { } bazelCppStdAttr := "" if tc.bazel_cpp_std != "" { - bazelCppStdAttr = fmt.Sprintf("\n copts = [\"-std=%s\"],", tc.bazel_cpp_std) + bazelCppStdAttr = fmt.Sprintf("\n cpp_std = \"%s\",", tc.bazel_cpp_std) } runCcLibraryTestCase(t, bp2buildTestCase{ @@ -1772,5 +1772,43 @@ cc_library { name = "a",%s )`, bazelCppStdAttr)}, }) + + runCcLibraryStaticTestCase(t, bp2buildTestCase{ + description: fmt.Sprintf( + "cc_library_static with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions), + moduleTypeUnderTest: "cc_library_static", + moduleTypeUnderTestFactory: cc.LibraryStaticFactory, + moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build, + blueprint: soongCcLibraryPreamble + fmt.Sprintf(` +cc_library_static { + name: "a", +%s // cpp_std: *string +%s // gnu_extensions: *bool + include_build_directory: false, +} +`, cppStdAttr, gnuExtensionsAttr), + expectedBazelTargets: []string{fmt.Sprintf(`cc_library_static( + name = "a",%s +)`, bazelCppStdAttr)}, + }) + + runCcLibrarySharedTestCase(t, bp2buildTestCase{ + description: fmt.Sprintf( + "cc_library_shared with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions), + moduleTypeUnderTest: "cc_library_shared", + moduleTypeUnderTestFactory: cc.LibrarySharedFactory, + moduleTypeUnderTestBp2BuildMutator: cc.CcLibrarySharedBp2Build, + blueprint: soongCcLibraryPreamble + fmt.Sprintf(` +cc_library_shared { + name: "a", +%s // cpp_std: *string +%s // gnu_extensions: *bool + include_build_directory: false, +} +`, cppStdAttr, gnuExtensionsAttr), + expectedBazelTargets: []string{fmt.Sprintf(`cc_library_shared( + name = "a",%s +)`, bazelCppStdAttr)}, + }) } } diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go index f02ce4d3f..9f6f45047 100644 --- a/bp2build/cc_library_static_conversion_test.go +++ b/bp2build/cc_library_static_conversion_test.go @@ -641,12 +641,12 @@ cc_library_static { name = "foo_static", srcs_c = ["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ - "for-arm.c", "not-for-x86.c", + "for-arm.c", ], "//build/bazel/platforms/arch:x86": [ - "for-x86.c", "not-for-arm.c", + "for-x86.c", ], "//conditions:default": [ "not-for-arm.c", @@ -691,28 +691,28 @@ cc_library_static { name = "foo_static", srcs_c = ["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ - "for-arm.c", "not-for-arm64.c", "not-for-x86.c", "not-for-x86_64.c", + "for-arm.c", ], "//build/bazel/platforms/arch:arm64": [ - "for-arm64.c", "not-for-arm.c", "not-for-x86.c", "not-for-x86_64.c", + "for-arm64.c", ], "//build/bazel/platforms/arch:x86": [ - "for-x86.c", "not-for-arm.c", "not-for-arm64.c", "not-for-x86_64.c", + "for-x86.c", ], "//build/bazel/platforms/arch:x86_64": [ - "for-x86_64.c", "not-for-arm.c", "not-for-arm64.c", "not-for-x86.c", + "for-x86_64.c", ], "//conditions:default": [ "not-for-arm.c", @@ -875,20 +875,20 @@ cc_library_static { name = "foo_static2", srcs_c = ["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ - "for-lib32.c", "not-for-lib64.c", + "for-lib32.c", ], "//build/bazel/platforms/arch:arm64": [ - "for-lib64.c", "not-for-lib32.c", + "for-lib64.c", ], "//build/bazel/platforms/arch:x86": [ - "for-lib32.c", "not-for-lib64.c", + "for-lib32.c", ], "//build/bazel/platforms/arch:x86_64": [ - "for-lib64.c", "not-for-lib32.c", + "for-lib64.c", ], "//conditions:default": [ "not-for-lib32.c", @@ -942,36 +942,36 @@ cc_library_static { name = "foo_static3", srcs_c = ["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ - "for-arm.c", - "for-lib32.c", "not-for-arm64.c", "not-for-lib64.c", "not-for-x86.c", "not-for-x86_64.c", + "for-arm.c", + "for-lib32.c", ], "//build/bazel/platforms/arch:arm64": [ - "for-arm64.c", - "for-lib64.c", "not-for-arm.c", "not-for-lib32.c", "not-for-x86.c", "not-for-x86_64.c", + "for-arm64.c", + "for-lib64.c", ], "//build/bazel/platforms/arch:x86": [ - "for-lib32.c", - "for-x86.c", "not-for-arm.c", "not-for-arm64.c", "not-for-lib64.c", "not-for-x86_64.c", + "for-x86.c", + "for-lib32.c", ], "//build/bazel/platforms/arch:x86_64": [ - "for-lib64.c", - "for-x86_64.c", "not-for-arm.c", "not-for-arm64.c", "not-for-lib32.c", "not-for-x86.c", + "for-x86_64.c", + "for-lib64.c", ], "//conditions:default": [ "not-for-arm.c", @@ -1000,73 +1000,92 @@ func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) { "dep/Android.bp": ` genrule { name: "generated_src_other_pkg", - out: ["generated_src_other_pkg.cpp"], cmd: "nothing to see here", } genrule { name: "generated_hdr_other_pkg", - out: ["generated_hdr_other_pkg.cpp"], cmd: "nothing to see here", } genrule { name: "generated_hdr_other_pkg_x86", - out: ["generated_hdr_other_pkg_x86.cpp"], + cmd: "nothing to see here", +} + +genrule { + name: "generated_hdr_other_pkg_android", cmd: "nothing to see here", }`, }, blueprint: soongCcLibraryStaticPreamble + ` genrule { name: "generated_src", - out: ["generated_src.cpp"], cmd: "nothing to see here", } genrule { - name: "generated_src_x86", - out: ["generated_src_x86.cpp"], + name: "generated_src_not_x86", + cmd: "nothing to see here", +} + +genrule { + name: "generated_src_android", cmd: "nothing to see here", } genrule { name: "generated_hdr", - out: ["generated_hdr.h"], cmd: "nothing to see here", } cc_library_static { - name: "foo_static3", - srcs: ["common.cpp", "not-for-*.cpp"], - exclude_srcs: ["not-for-everything.cpp"], - generated_sources: ["generated_src", "generated_src_other_pkg"], - generated_headers: ["generated_hdr", "generated_hdr_other_pkg"], - arch: { - x86: { - srcs: ["for-x86.cpp"], - exclude_srcs: ["not-for-x86.cpp"], - generated_sources: ["generated_src_x86"], - generated_headers: ["generated_hdr_other_pkg_x86"], - }, - }, + name: "foo_static3", + srcs: ["common.cpp", "not-for-*.cpp"], + exclude_srcs: ["not-for-everything.cpp"], + generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"], + generated_headers: ["generated_hdr", "generated_hdr_other_pkg"], + arch: { + x86: { + srcs: ["for-x86.cpp"], + exclude_srcs: ["not-for-x86.cpp"], + generated_headers: ["generated_hdr_other_pkg_x86"], + exclude_generated_sources: ["generated_src_not_x86"], + }, + }, + target: { + android: { + generated_sources: ["generated_src_android"], + generated_headers: ["generated_hdr_other_pkg_android"], + }, + }, + include_build_directory: false, } `, expectedBazelTargets: []string{`cc_library_static( name = "foo_static3", srcs = [ - "//dep:generated_hdr_other_pkg", - "//dep:generated_src_other_pkg", + "common.cpp", ":generated_hdr", + "//dep:generated_hdr_other_pkg", ":generated_src", - "common.cpp", + "//dep:generated_src_other_pkg", ] + select({ "//build/bazel/platforms/arch:x86": [ - "//dep:generated_hdr_other_pkg_x86", - ":generated_src_x86", "for-x86.cpp", + "//dep:generated_hdr_other_pkg_x86", + ], + "//conditions:default": [ + "not-for-x86.cpp", + ":generated_src_not_x86", + ], + }) + select({ + "//build/bazel/platforms/os:android": [ + "//dep:generated_hdr_other_pkg_android", + ":generated_src_android", ], - "//conditions:default": ["not-for-x86.cpp"], + "//conditions:default": [], }), )`}, }) diff --git a/bp2build/cc_object_conversion_test.go b/bp2build/cc_object_conversion_test.go index 63a0b8a21..c4b276a64 100644 --- a/bp2build/cc_object_conversion_test.go +++ b/bp2build/cc_object_conversion_test.go @@ -439,13 +439,13 @@ func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) { copts = ["-fno-addrsig"], srcs = ["base.cpp"] + select({ "//build/bazel/platforms/os_arch:android_arm64": [ - "bionic_arm64.cpp", "linux_arm64.cpp", + "bionic_arm64.cpp", ], "//build/bazel/platforms/os_arch:android_x86": ["linux_x86.cpp"], "//build/bazel/platforms/os_arch:linux_bionic_arm64": [ - "bionic_arm64.cpp", "linux_arm64.cpp", + "bionic_arm64.cpp", ], "//build/bazel/platforms/os_arch:linux_glibc_x86": ["linux_x86.cpp"], "//build/bazel/platforms/os_arch:linux_musl_x86": ["linux_x86.cpp"], diff --git a/bp2build/testing.go b/bp2build/testing.go index 6c322eefe..7c2f43a06 100644 --- a/bp2build/testing.go +++ b/bp2build/testing.go @@ -283,7 +283,7 @@ func customBp2BuildMutator(ctx android.TopDownMutatorContext) { return } - paths := bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrcExcludes(ctx, m.props.Arch_paths, m.props.Arch_paths_exclude)) + paths := bazel.LabelListAttribute{} for axis, configToProps := range m.GetArchVariantProperties(ctx, &customProps{}) { for config, props := range configToProps { diff --git a/cc/bp2build.go b/cc/bp2build.go index 0b2c133b9..543394d78 100644 --- a/cc/bp2build.go +++ b/cc/bp2build.go @@ -226,7 +226,10 @@ type compilerAttributes struct { srcs bazel.LabelListAttribute rtti bazel.BoolAttribute - stl *string + + // Not affected by arch variants + stl *string + cppStd *string localIncludes bazel.StringListAttribute absoluteIncludes bazel.StringListAttribute @@ -242,6 +245,8 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul var rtti bazel.BoolAttribute var localIncludes bazel.StringListAttribute var absoluteIncludes bazel.StringListAttribute + var stl *string = nil + var cppStd *string = nil parseCommandLineFlags := func(soongFlags []string) []string { var result []string @@ -255,15 +260,22 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul } // Parse srcs from an arch or OS's props value. - parseSrcs := func(baseCompilerProps *BaseCompilerProperties) bazel.LabelList { + parseSrcs := func(props *BaseCompilerProperties) (bazel.LabelList, bool) { + anySrcs := false // Add srcs-like dependencies such as generated files. // First create a LabelList containing these dependencies, then merge the values with srcs. - generatedHdrsAndSrcs := baseCompilerProps.Generated_headers - generatedHdrsAndSrcs = append(generatedHdrsAndSrcs, baseCompilerProps.Generated_sources...) - generatedHdrsAndSrcsLabelList := android.BazelLabelForModuleDeps(ctx, generatedHdrsAndSrcs) + generatedHdrsAndSrcs := props.Generated_headers + generatedHdrsAndSrcs = append(generatedHdrsAndSrcs, props.Generated_sources...) + generatedHdrsAndSrcsLabelList := android.BazelLabelForModuleDepsExcludes(ctx, generatedHdrsAndSrcs, props.Exclude_generated_sources) + if len(generatedHdrsAndSrcs) > 0 || len(props.Exclude_generated_sources) > 0 { + anySrcs = true + } - allSrcsLabelList := android.BazelLabelForModuleSrcExcludes(ctx, baseCompilerProps.Srcs, baseCompilerProps.Exclude_srcs) - return bazel.AppendBazelLabelLists(allSrcsLabelList, generatedHdrsAndSrcsLabelList) + allSrcsLabelList := android.BazelLabelForModuleSrcExcludes(ctx, props.Srcs, props.Exclude_srcs) + if len(props.Srcs) > 0 || len(props.Exclude_srcs) > 0 { + anySrcs = true + } + return bazel.AppendBazelLabelLists(allSrcsLabelList, generatedHdrsAndSrcsLabelList), anySrcs } archVariantCompilerProps := module.GetArchVariantProperties(ctx, &BaseCompilerProperties{}) @@ -272,12 +284,10 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul if baseCompilerProps, ok := props.(*BaseCompilerProperties); ok { // If there's arch specific srcs or exclude_srcs, generate a select entry for it. // TODO(b/186153868): do this for OS specific srcs and exclude_srcs too. - if len(baseCompilerProps.Srcs) > 0 || len(baseCompilerProps.Exclude_srcs) > 0 { - srcsList := parseSrcs(baseCompilerProps) + if srcsList, ok := parseSrcs(baseCompilerProps); ok { srcs.SetSelectValue(axis, config, srcsList) } - var archVariantCopts []string if axis == bazel.NoConfigAxis { // If cpp_std is not specified, don't generate it in the // BUILD file. For readability purposes, cpp_std and gnu_extensions are @@ -289,11 +299,14 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul // These transformations are shared with compiler.go. cppStdVal := parseCppStd(baseCompilerProps.Cpp_std) _, cppStdVal = maybeReplaceGnuToC(baseCompilerProps.Gnu_extensions, "", cppStdVal) - archVariantCopts = append(archVariantCopts, "-std="+cppStdVal) + cppStd = &cppStdVal } else if baseCompilerProps.Gnu_extensions != nil && !*baseCompilerProps.Gnu_extensions { - archVariantCopts = append(archVariantCopts, "-std=c++17") + cppStdVal := "c++17" + cppStd = &cppStdVal } } + + var archVariantCopts []string archVariantCopts = append(archVariantCopts, parseCommandLineFlags(baseCompilerProps.Cflags)...) archVariantAsflags := parseCommandLineFlags(baseCompilerProps.Asflags) @@ -339,7 +352,6 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul srcs, cSrcs, asSrcs := groupSrcsByExtension(ctx, srcs) - var stl *string = nil stlPropsByArch := module.GetArchVariantProperties(ctx, &StlProperties{}) for _, configToProps := range stlPropsByArch { for _, props := range configToProps { @@ -367,6 +379,7 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul cppFlags: cppFlags, rtti: rtti, stl: stl, + cppStd: cppStd, localIncludes: localIncludes, absoluteIncludes: absoluteIncludes, } @@ -3249,16 +3249,6 @@ func (c *Module) TestFor() []string { return c.Properties.Test_for } -func (c *Module) UniqueApexVariations() bool { - if u, ok := c.compiler.(interface { - uniqueApexVariations() bool - }); ok { - return u.uniqueApexVariations() - } else { - return false - } -} - func (c *Module) EverInstallable() bool { return c.installer != nil && // Check to see whether the module is actually ever installable. diff --git a/cc/compiler.go b/cc/compiler.go index 4f96712e6..2ac7bf332 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -209,15 +209,6 @@ type BaseCompilerProperties struct { // Build and link with OpenMP Openmp *bool `android:"arch_variant"` - - // Deprecated. - // Adds __ANDROID_APEX_<APEX_MODULE_NAME>__ macro defined for apex variants in addition to __ANDROID_APEX__ - Use_apex_name_macro *bool - - // Adds two macros for apex variants in addition to __ANDROID_APEX__ - // * __ANDROID_APEX_COM_ANDROID_FOO__ - // * __ANDROID_APEX_NAME__="com.android.foo" - UseApexNameMacro bool `blueprint:"mutated"` } func NewBaseCompiler() *baseCompiler { @@ -291,10 +282,6 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps { return deps } -func (compiler *baseCompiler) useApexNameMacro() bool { - return Bool(compiler.Properties.Use_apex_name_macro) || compiler.Properties.UseApexNameMacro -} - // Return true if the module is in the WarningAllowedProjects. func warningsAreAllowed(subdir string) bool { subdir += "/" @@ -405,10 +392,6 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps if ctx.apexVariationName() != "" { flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_APEX__") - if compiler.useApexNameMacro() { - flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_APEX_"+makeDefineString(ctx.apexVariationName())+"__") - flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_APEX_NAME__='\""+ctx.apexVariationName()+"\"'") - } if ctx.Device() { flags.Global.CommonFlags = append(flags.Global.CommonFlags, fmt.Sprintf("-D__ANDROID_APEX_MIN_SDK_VERSION__=%d", @@ -634,10 +617,6 @@ func (compiler *baseCompiler) hasSrcExt(ext string) bool { return false } -func (compiler *baseCompiler) uniqueApexVariations() bool { - return compiler.useApexNameMacro() -} - var invalidDefineCharRegex = regexp.MustCompile("[^a-zA-Z0-9_]") // makeDefineString transforms a name of an APEX module into a value to be used as value for C define diff --git a/cc/config/global.go b/cc/config/global.go index 5f41f9e06..ba104916b 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -77,10 +77,6 @@ var ( // TODO: can we remove this now? "-Wno-reserved-id-macro", - // Workaround for ccache with clang. - // See http://petereisentraut.blogspot.com/2011/05/ccache-and-clang.html. - "-Wno-unused-command-line-argument", - // Force clang to always output color diagnostics. Ninja will strip the ANSI // color codes if it is not running in a terminal. "-fcolor-diagnostics", @@ -329,6 +325,12 @@ func init() { // Default to zero initialization. flags = append(flags, "-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang") } + + // Workaround for ccache with clang. + // See http://petereisentraut.blogspot.com/2011/05/ccache-and-clang.html. + if ctx.Config().IsEnvTrue("USE_CCACHE") { + flags = append(flags, "-Wno-unused-command-line-argument") + } return strings.Join(flags, " ") }) diff --git a/cc/library.go b/cc/library.go index 0cffd5667..00e215b5f 100644 --- a/cc/library.go +++ b/cc/library.go @@ -248,7 +248,9 @@ type bazelCcLibraryAttributes struct { Linkopts bazel.StringListAttribute Use_libcrt bazel.BoolAttribute Rtti bazel.BoolAttribute - Stl *string + + Stl *string + Cpp_std *string // This is shared only. Version_script bazel.LabelAttribute @@ -328,6 +330,7 @@ func CcLibraryBp2Build(ctx android.TopDownMutatorContext) { Use_libcrt: linkerAttrs.useLibcrt, Rtti: compilerAttrs.rtti, Stl: compilerAttrs.stl, + Cpp_std: compilerAttrs.cppStd, Version_script: linkerAttrs.versionScript, @@ -2403,6 +2406,7 @@ func ccSharedOrStaticBp2BuildMutatorInternal(ctx android.TopDownMutatorContext, Use_libcrt: linkerAttrs.useLibcrt, Rtti: compilerAttrs.rtti, Stl: compilerAttrs.stl, + Cpp_std: compilerAttrs.cppStd, Export_includes: exportedIncludes.Includes, Export_system_includes: exportedIncludes.SystemIncludes, Local_includes: compilerAttrs.localIncludes, @@ -2427,6 +2431,7 @@ func ccSharedOrStaticBp2BuildMutatorInternal(ctx android.TopDownMutatorContext, Use_libcrt: linkerAttrs.useLibcrt, Rtti: compilerAttrs.rtti, Stl: compilerAttrs.stl, + Cpp_std: compilerAttrs.cppStd, Export_includes: exportedIncludes.Includes, Export_system_includes: exportedIncludes.SystemIncludes, @@ -2462,6 +2467,7 @@ type bazelCcLibraryStaticAttributes struct { Use_libcrt bazel.BoolAttribute Rtti bazel.BoolAttribute Stl *string + Cpp_std *string Export_includes bazel.StringListAttribute Export_system_includes bazel.StringListAttribute @@ -2489,6 +2495,7 @@ type bazelCcLibrarySharedAttributes struct { Use_libcrt bazel.BoolAttribute Rtti bazel.BoolAttribute Stl *string + Cpp_std *string Export_includes bazel.StringListAttribute Export_system_includes bazel.StringListAttribute @@ -49,8 +49,9 @@ type LTOProperties struct { // Dep properties indicate that this module needs to be built with LTO // since it is an object dependency of an LTO module. - FullDep bool `blueprint:"mutated"` - ThinDep bool `blueprint:"mutated"` + FullDep bool `blueprint:"mutated"` + ThinDep bool `blueprint:"mutated"` + NoLtoDep bool `blueprint:"mutated"` // Use clang lld instead of gnu ld. Use_clang_lld *bool @@ -70,15 +71,6 @@ func (lto *lto) props() []interface{} { func (lto *lto) begin(ctx BaseModuleContext) { if ctx.Config().IsEnvTrue("DISABLE_LTO") { lto.Properties.Lto.Never = proptools.BoolPtr(true) - } else if ctx.Config().IsEnvTrue("GLOBAL_THINLTO") { - staticLib := ctx.static() && !ctx.staticBinary() - hostBin := ctx.Host() - vndk := ctx.isVndk() // b/169217596 - if !staticLib && !hostBin && !vndk { - if !lto.Never() && !lto.FullLTO() { - lto.Properties.Lto.Thin = proptools.BoolPtr(true) - } - } } } @@ -96,22 +88,27 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags { return flags } - if lto.LTO() { - var ltoFlag string + if lto.LTO(ctx) { + var ltoCFlag string + var ltoLdFlag string if lto.ThinLTO() { - ltoFlag = "-flto=thin -fsplit-lto-unit" + ltoCFlag = "-flto=thin -fsplit-lto-unit" + } else if lto.FullLTO() { + ltoCFlag = "-flto" } else { - ltoFlag = "-flto" + ltoCFlag = "-flto=thin -fsplit-lto-unit" + ltoLdFlag = "-Wl,--lto-O0" } - flags.Local.CFlags = append(flags.Local.CFlags, ltoFlag) - flags.Local.LdFlags = append(flags.Local.LdFlags, ltoFlag) + flags.Local.CFlags = append(flags.Local.CFlags, ltoCFlag) + flags.Local.LdFlags = append(flags.Local.LdFlags, ltoCFlag) + flags.Local.LdFlags = append(flags.Local.LdFlags, ltoLdFlag) if Bool(lto.Properties.Whole_program_vtables) { flags.Local.CFlags = append(flags.Local.CFlags, "-fwhole-program-vtables") } - if lto.ThinLTO() && ctx.Config().IsEnvTrue("USE_THINLTO_CACHE") && lto.useClangLld(ctx) { + if (lto.DefaultThinLTO(ctx) || lto.ThinLTO()) && ctx.Config().IsEnvTrue("USE_THINLTO_CACHE") && lto.useClangLld(ctx) { // Set appropriate ThinLTO cache policy cacheDirFormat := "-Wl,--thinlto-cache-dir=" cacheDir := android.PathForOutput(ctx, "thinlto-cache").String() @@ -134,33 +131,40 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags { return flags } -// Can be called with a null receiver -func (lto *lto) LTO() bool { - if lto == nil || lto.Never() { - return false - } +func (lto *lto) LTO(ctx BaseModuleContext) bool { + return lto.ThinLTO() || lto.FullLTO() || lto.DefaultThinLTO(ctx) +} - return lto.FullLTO() || lto.ThinLTO() +func (lto *lto) DefaultThinLTO(ctx BaseModuleContext) bool { + host := ctx.Host() + vndk := ctx.isVndk() // b/169217596 + return GlobalThinLTO(ctx) && !lto.Never() && !host && !vndk } func (lto *lto) FullLTO() bool { - return Bool(lto.Properties.Lto.Full) + return lto != nil && Bool(lto.Properties.Lto.Full) } func (lto *lto) ThinLTO() bool { - return Bool(lto.Properties.Lto.Thin) + return lto != nil && Bool(lto.Properties.Lto.Thin) } -// Is lto.never explicitly set to true? func (lto *lto) Never() bool { - return Bool(lto.Properties.Lto.Never) + return lto != nil && Bool(lto.Properties.Lto.Never) +} + +func GlobalThinLTO(ctx android.BaseModuleContext) bool { + return ctx.Config().IsEnvTrue("GLOBAL_THINLTO") } // Propagate lto requirements down from binaries func ltoDepsMutator(mctx android.TopDownMutatorContext) { - if m, ok := mctx.Module().(*Module); ok && m.lto.LTO() { + globalThinLTO := GlobalThinLTO(mctx) + + if m, ok := mctx.Module().(*Module); ok { full := m.lto.FullLTO() thin := m.lto.ThinLTO() + never := m.lto.Never() if full && thin { mctx.PropertyErrorf("LTO", "FullLTO and ThinLTO are mutually exclusive") } @@ -180,14 +184,16 @@ func ltoDepsMutator(mctx android.TopDownMutatorContext) { } } - if dep, ok := dep.(*Module); ok && dep.lto != nil && - !dep.lto.Never() { + if dep, ok := dep.(*Module); ok { if full && !dep.lto.FullLTO() { dep.lto.Properties.FullDep = true } - if thin && !dep.lto.ThinLTO() { + if !globalThinLTO && thin && !dep.lto.ThinLTO() { dep.lto.Properties.ThinDep = true } + if globalThinLTO && never && !dep.lto.Never() { + dep.lto.Properties.NoLtoDep = true + } } // Recursively walk static dependencies @@ -198,6 +204,8 @@ func ltoDepsMutator(mctx android.TopDownMutatorContext) { // Create lto variants for modules that need them func ltoMutator(mctx android.BottomUpMutatorContext) { + globalThinLTO := GlobalThinLTO(mctx) + if m, ok := mctx.Module().(*Module); ok && m.lto != nil { // Create variations for LTO types required as static // dependencies @@ -205,18 +213,25 @@ func ltoMutator(mctx android.BottomUpMutatorContext) { if m.lto.Properties.FullDep && !m.lto.FullLTO() { variationNames = append(variationNames, "lto-full") } - if m.lto.Properties.ThinDep && !m.lto.ThinLTO() { + if !globalThinLTO && m.lto.Properties.ThinDep && !m.lto.ThinLTO() { variationNames = append(variationNames, "lto-thin") } + if globalThinLTO && m.lto.Properties.NoLtoDep && !m.lto.Never() { + variationNames = append(variationNames, "lto-none") + } // Use correct dependencies if LTO property is explicitly set // (mutually exclusive) if m.lto.FullLTO() { mctx.SetDependencyVariation("lto-full") } - if m.lto.ThinLTO() { + if !globalThinLTO && m.lto.ThinLTO() { mctx.SetDependencyVariation("lto-thin") } + // Never must be the last, it overrides Thin or Full. + if globalThinLTO && m.lto.Never() { + mctx.SetDependencyVariation("lto-none") + } if len(variationNames) > 1 { modules := mctx.CreateVariations(variationNames...) @@ -232,16 +247,18 @@ func ltoMutator(mctx android.BottomUpMutatorContext) { // LTO properties for dependencies if name == "lto-full" { variation.lto.Properties.Lto.Full = proptools.BoolPtr(true) - variation.lto.Properties.Lto.Thin = proptools.BoolPtr(false) } if name == "lto-thin" { - variation.lto.Properties.Lto.Full = proptools.BoolPtr(false) variation.lto.Properties.Lto.Thin = proptools.BoolPtr(true) } + if name == "lto-none" { + variation.lto.Properties.Lto.Never = proptools.BoolPtr(true) + } variation.Properties.PreventInstall = true variation.Properties.HideFromMake = true variation.lto.Properties.FullDep = false variation.lto.Properties.ThinDep = false + variation.lto.Properties.NoLtoDep = false } } } diff --git a/java/genrule.go b/java/genrule.go index e0a9c8faf..16743b357 100644 --- a/java/genrule.go +++ b/java/genrule.go @@ -64,6 +64,7 @@ func genRuleFactory() android.Module { module := genrule.NewGenRule() android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) + android.InitDefaultableModule(module) return module } @@ -76,6 +77,7 @@ func genRuleFactoryHost() android.Module { module := genrule.NewGenRule() android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon) + android.InitDefaultableModule(module) return module } diff --git a/java/sdk.go b/java/sdk.go index d1b899e48..80f2d6a69 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -370,7 +370,7 @@ func createAPIFingerprint(ctx android.SingletonContext) { "frameworks-base-api-current.txt", "frameworks-base-api-system-current.txt", "frameworks-base-api-module-lib-current.txt", - "services-system-server-current.txt", + "frameworks-base-api-system-server-current.txt", } count := 0 ctx.VisitAllModules(func(module android.Module) { diff --git a/rust/rust.go b/rust/rust.go index b9afc7f82..93dbd0010 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -130,9 +130,10 @@ type BaseProperties struct { // Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX). Min_sdk_version *string - PreventInstall bool - HideFromMake bool - Installable *bool + HideFromMake bool `blueprint:"mutated"` + PreventInstall bool `blueprint:"mutated"` + + Installable *bool } type Module struct { @@ -177,8 +178,8 @@ func (mod *Module) SetHideFromMake() { mod.Properties.HideFromMake = true } -func (c *Module) HiddenFromMake() bool { - return c.Properties.HideFromMake +func (mod *Module) HiddenFromMake() bool { + return mod.Properties.HideFromMake } func (mod *Module) SanitizePropDefined() bool { @@ -526,10 +527,6 @@ func (mod *Module) PreventInstall() bool { return mod.Properties.PreventInstall } -func (mod *Module) HideFromMake() { - mod.Properties.HideFromMake = true -} - func (mod *Module) MarkAsCoverageVariant(coverage bool) { mod.coverage.Properties.IsCoverageVariant = coverage } @@ -898,8 +895,24 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { } apexInfo := actx.Provider(android.ApexInfoProvider).(android.ApexInfo) - if mod.installable(apexInfo) { + if !proptools.BoolDefault(mod.Installable(), mod.EverInstallable()) { + // If the module has been specifically configure to not be installed then + // hide from make as otherwise it will break when running inside make as the + // output path to install will not be specified. Not all uninstallable + // modules can be hidden from make as some are needed for resolving make + // side dependencies. + mod.HideFromMake() + } else if !mod.installable(apexInfo) { + mod.SkipInstall() + } + + // Still call install though, the installs will be stored as PackageSpecs to allow + // using the outputs in a genrule. + if mod.OutputFile().Valid() { mod.compiler.install(ctx) + if ctx.Failed() { + return + } } ctx.Phony("rust", ctx.RustModule().OutputFile().Path()) diff --git a/scripts/get_clang_version.py b/scripts/get_clang_version.py index 64d922a20..691c45dd3 100755 --- a/scripts/get_clang_version.py +++ b/scripts/get_clang_version.py @@ -34,7 +34,7 @@ def get_clang_prebuilts_version(global_go): with open(global_go) as infile: contents = infile.read() - regex_rev = r'\tClangDefaultVersion\s+= "(?P<rev>clang-r\d+[a-z]?\d?)"' + regex_rev = r'\tClangDefaultVersion\s+= "(?P<rev>clang-.*)"' match_rev = re.search(regex_rev, contents) if match_rev is None: raise RuntimeError('Parsing clang info failed') diff --git a/ui/build/config.go b/ui/build/config.go index 5cd5c658d..7837cc4e0 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -83,6 +83,8 @@ type configImpl struct { // Set by multiproduct_kati emptyNinjaFile bool + + metricsUploader string } const srcDirFileCheck = "build/soong/root.bp" @@ -237,7 +239,8 @@ func NewConfig(ctx Context, args ...string) Config { // Precondition: the current directory is the top of the source tree checkTopDir(ctx) - if srcDir := absPath(ctx, "."); strings.ContainsRune(srcDir, ' ') { + srcDir := absPath(ctx, ".") + if strings.ContainsRune(srcDir, ' ') { ctx.Println("You are building in a directory whose absolute path contains a space character:") ctx.Println() ctx.Printf("%q\n", srcDir) @@ -245,6 +248,8 @@ func NewConfig(ctx Context, args ...string) Config { ctx.Fatalln("Directory names containing spaces are not supported") } + ret.metricsUploader = GetMetricsUploader(srcDir, ret.environ) + if outDir := ret.OutDir(); strings.ContainsRune(outDir, ' ') { ctx.Println("The absolute path of your output directory ($OUT_DIR) contains a space character:") ctx.Println() @@ -1246,10 +1251,7 @@ func (c *configImpl) BuildDateTime() string { } func (c *configImpl) MetricsUploaderApp() string { - if p, ok := c.environ.Get("ANDROID_ENABLE_METRICS_UPLOAD"); ok { - return p - } - return "" + return c.metricsUploader } // LogsDir returns the logs directory where build log and metrics @@ -1277,3 +1279,14 @@ func (c *configImpl) SetEmptyNinjaFile(v bool) { func (c *configImpl) EmptyNinjaFile() bool { return c.emptyNinjaFile } + +func GetMetricsUploader(topDir string, env *Environment) string { + if p, ok := env.Get("METRICS_UPLOADER"); ok { + metricsUploader := filepath.Join(topDir, p) + if _, err := os.Stat(metricsUploader); err == nil { + return metricsUploader + } + } + + return "" +} diff --git a/ui/build/config_test.go b/ui/build/config_test.go index 03d304e43..e29327572 100644 --- a/ui/build/config_test.go +++ b/ui/build/config_test.go @@ -1122,3 +1122,65 @@ func TestBuildConfig(t *testing.T) { }) } } + +func TestGetMetricsUploaderApp(t *testing.T) { + + metricsUploaderDir := "metrics_uploader_dir" + metricsUploaderBinary := "metrics_uploader_binary" + metricsUploaderPath := filepath.Join(metricsUploaderDir, metricsUploaderBinary) + tests := []struct { + description string + environ Environment + createFiles bool + expected string + }{{ + description: "Uploader binary exist", + environ: Environment{"METRICS_UPLOADER=" + metricsUploaderPath}, + createFiles: true, + expected: metricsUploaderPath, + }, { + description: "Uploader binary not exist", + environ: Environment{"METRICS_UPLOADER=" + metricsUploaderPath}, + createFiles: false, + expected: "", + }, { + description: "Uploader binary variable not set", + createFiles: true, + expected: "", + }} + + for _, tt := range tests { + t.Run(tt.description, func(t *testing.T) { + defer logger.Recover(func(err error) { + t.Fatalf("got unexpected error: %v", err) + }) + + // Create the root source tree. + topDir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("failed to create temp dir: %v", err) + } + defer os.RemoveAll(topDir) + + expected := tt.expected + if len(expected) > 0 { + expected = filepath.Join(topDir, expected) + } + + if tt.createFiles { + if err := os.MkdirAll(filepath.Join(topDir, metricsUploaderDir), 0755); err != nil { + t.Errorf("failed to create %s directory: %v", metricsUploaderDir, err) + } + if err := ioutil.WriteFile(filepath.Join(topDir, metricsUploaderPath), []byte{}, 0644); err != nil { + t.Errorf("failed to create file %s: %v", expected, err) + } + } + + actual := GetMetricsUploader(topDir, &tt.environ) + + if actual != expected { + t.Errorf("expecting: %s, actual: %s", expected, actual) + } + }) + } +} diff --git a/ui/build/context.go b/ui/build/context.go index f5e987e9d..4a4352cbb 100644 --- a/ui/build/context.go +++ b/ui/build/context.go @@ -71,9 +71,9 @@ func (c ContextImpl) CompleteTrace(name, desc string, begin, end uint64) { realTime := end - begin c.Metrics.SetTimeMetrics( soong_metrics_proto.PerfInfo{ - Desc: &desc, - Name: &name, - StartTime: &begin, - RealTime: &realTime}) + Description: &desc, + Name: &name, + StartTime: &begin, + RealTime: &realTime}) } } diff --git a/ui/build/upload.go b/ui/build/upload.go index 55ada335b..687f51977 100644 --- a/ui/build/upload.go +++ b/ui/build/upload.go @@ -70,12 +70,11 @@ func pruneMetricsFiles(paths []string) []string { return metricsFiles } -// UploadMetrics uploads a set of metrics files to a server for analysis. An -// uploader full path is specified in ANDROID_ENABLE_METRICS_UPLOAD environment -// variable in order to upload the set of metrics files. The metrics files are -// first copied to a temporary directory and the uploader is then executed in -// the background to allow the user/system to continue working. Soong communicates -// to the uploader through the upload_proto raw protobuf file. +// UploadMetrics uploads a set of metrics files to a server for analysis. +// The metrics files are first copied to a temporary directory +// and the uploader is then executed in the background to allow the user/system +// to continue working. Soong communicates to the uploader through the +// upload_proto raw protobuf file. func UploadMetrics(ctx Context, config Config, simpleOutput bool, buildStarted time.Time, paths ...string) { ctx.BeginTrace(metrics.RunSetupTool, "upload_metrics") defer ctx.EndTrace() diff --git a/ui/build/upload_test.go b/ui/build/upload_test.go index b740c1120..764a1e127 100644 --- a/ui/build/upload_test.go +++ b/ui/build/upload_test.go @@ -80,13 +80,10 @@ func TestUploadMetrics(t *testing.T) { createFiles bool files []string }{{ - description: "ANDROID_ENABLE_METRICS_UPLOAD not set", - }, { - description: "no metrics files to upload", - uploader: "fake", + description: "no metrics uploader", }, { description: "non-existent metrics files no upload", - uploader: "fake", + uploader: "echo", files: []string{"metrics_file_1", "metrics_file_2", "metrics_file_3"}, }, { description: "trigger upload", @@ -137,9 +134,9 @@ func TestUploadMetrics(t *testing.T) { config := Config{&configImpl{ environ: &Environment{ "OUT_DIR=" + outDir, - "ANDROID_ENABLE_METRICS_UPLOAD=" + tt.uploader, }, - buildDateTime: strconv.FormatInt(time.Now().UnixNano()/int64(time.Millisecond), 10), + buildDateTime: strconv.FormatInt(time.Now().UnixNano()/int64(time.Millisecond), 10), + metricsUploader: tt.uploader, }} UploadMetrics(ctx, config, false, time.Now(), metricsFiles...) @@ -192,9 +189,10 @@ func TestUploadMetricsErrors(t *testing.T) { config := Config{&configImpl{ environ: &Environment{ - "ANDROID_ENABLE_METRICS_UPLOAD=fake", "OUT_DIR=/bad", - }}} + }, + metricsUploader: "echo", + }} UploadMetrics(ctx, config, true, time.Now(), metricsFile) t.Errorf("got nil, expecting %q as a failure", tt.expectedErr) diff --git a/ui/metrics/event.go b/ui/metrics/event.go index c3367e3ac..ebe664fc6 100644 --- a/ui/metrics/event.go +++ b/ui/metrics/event.go @@ -69,7 +69,7 @@ func newEvent(name, desc string) *event { func (e event) perfInfo() soong_metrics_proto.PerfInfo { realTime := uint64(_now().Sub(e.start).Nanoseconds()) return soong_metrics_proto.PerfInfo{ - Desc: proto.String(e.desc), + Description: proto.String(e.desc), Name: proto.String(e.name), StartTime: proto.Uint64(uint64(e.start.UnixNano())), RealTime: proto.Uint64(realTime), diff --git a/ui/metrics/metrics.go b/ui/metrics/metrics.go index ccf9bd8c4..f1bb862bd 100644 --- a/ui/metrics/metrics.go +++ b/ui/metrics/metrics.go @@ -25,16 +25,11 @@ package metrics // that captures the metrics and is them added as a perfInfo into the set // of the collected metrics. Finally, when soong_ui has finished the build, // the defer Dump function is invoked to store the collected metrics to the -// raw protobuf file in the $OUT directory. -// -// There is one additional step that occurs after the raw protobuf file is written. -// If the configuration environment variable ANDROID_ENABLE_METRICS_UPLOAD is -// set with the path, the raw protobuf file is uploaded to the destination. See -// ui/build/upload.go for more details. The filename of the raw protobuf file -// and the list of files to be uploaded is defined in cmd/soong_ui/main.go. -// -// See ui/metrics/event.go for the explanation of what an event is and how -// the metrics system is a stack based system. +// raw protobuf file in the $OUT directory and this raw protobuf file will be +// uploaded to the destination. See ui/build/upload.go for more details. The +// filename of the raw protobuf file and the list of files to be uploaded is +// defined in cmd/soong_ui/main.go. See ui/metrics/event.go for the explanation +// of what an event is and how the metrics system is a stack based system. import ( "io/ioutil" diff --git a/ui/metrics/metrics_proto/metrics.pb.go b/ui/metrics/metrics_proto/metrics.pb.go index 80f80bc9e..2e530b0f4 100644 --- a/ui/metrics/metrics_proto/metrics.pb.go +++ b/ui/metrics/metrics_proto/metrics.pb.go @@ -660,7 +660,7 @@ type PerfInfo struct { unknownFields protoimpl.UnknownFields // The description for the phase/action/part while the tool running. - Desc *string `protobuf:"bytes,1,opt,name=desc" json:"desc,omitempty"` + Description *string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` // The name for the running phase/action/part. Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` // The absolute start time. @@ -709,9 +709,9 @@ func (*PerfInfo) Descriptor() ([]byte, []int) { return file_metrics_proto_rawDescGZIP(), []int{3} } -func (x *PerfInfo) GetDesc() string { - if x != nil && x.Desc != nil { - return *x.Desc +func (x *PerfInfo) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description } return "" } @@ -1268,93 +1268,93 @@ var file_metrics_proto_rawDesc = []byte{ 0x6c, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x70, 0x75, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x08, 0x50, 0x65, 0x72, 0x66, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x17, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x6f, - 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xb9, 0x03, 0x0a, - 0x13, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x63, 0x72, - 0x6f, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, - 0x12, 0x1c, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x73, 0x73, 0x5f, 0x6b, 0x62, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x52, 0x73, 0x73, 0x4b, 0x62, 0x12, 0x2a, - 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, - 0x50, 0x61, 0x67, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x61, - 0x6a, 0x6f, 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, - 0x46, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x5f, 0x6b, 0x62, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x69, 0x6f, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x4b, 0x62, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x6f, 0x5f, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x6b, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x6f, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4b, 0x62, 0x12, 0x3c, 0x0a, 0x1a, 0x76, 0x6f, 0x6c, 0x75, - 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x76, 0x6f, + 0x6c, 0x65, 0x43, 0x70, 0x75, 0x73, 0x22, 0x81, 0x02, 0x0a, 0x08, 0x50, 0x65, 0x72, 0x66, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x6c, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, + 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, + 0x75, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, + 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xb9, 0x03, 0x0a, 0x13, 0x50, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, + 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x1c, + 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x73, 0x73, 0x5f, 0x6b, 0x62, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x52, 0x73, 0x73, 0x4b, 0x62, 0x12, 0x2a, 0x0a, 0x11, + 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x50, 0x61, + 0x67, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x61, 0x6a, 0x6f, + 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x46, 0x61, + 0x75, 0x6c, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x5f, 0x6b, 0x62, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x69, 0x6f, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x4b, 0x62, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x5f, 0x6b, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x4b, 0x62, 0x12, 0x3c, 0x0a, 0x1a, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, + 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x76, 0x6f, 0x6c, 0x75, + 0x6e, 0x74, 0x61, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x1c, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, + 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x53, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x1c, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x75, - 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x0e, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5b, 0x0a, 0x0c, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2f, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x3a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x0b, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, - 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, - 0x2f, 0x0a, 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, - 0x4f, 0x4f, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x4b, 0x45, 0x10, 0x02, - 0x22, 0x6c, 0x0a, 0x1a, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, - 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x42, 0x61, 0x73, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x62, - 0x0a, 0x1b, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x6f, - 0x75, 0x72, 0x6e, 0x65, 0x79, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x43, 0x0a, - 0x04, 0x63, 0x75, 0x6a, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x6f, - 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x2e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x6f, - 0x75, 0x72, 0x6e, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x04, 0x63, 0x75, - 0x6a, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x11, 0x53, 0x6f, 0x6f, 0x6e, 0x67, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2a, - 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x68, 0x65, 0x61, 0x70, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, - 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x28, 0x5a, 0x26, 0x61, 0x6e, 0x64, 0x72, - 0x6f, 0x69, 0x64, 0x2f, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x2f, 0x75, 0x69, 0x2f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, + 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x0e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5b, 0x0a, 0x0c, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2f, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x3a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x6f, + 0x66, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0c, 0x6e, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x2f, 0x0a, + 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x0b, 0x0a, 0x07, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x4f, 0x4f, + 0x4e, 0x47, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x4b, 0x45, 0x10, 0x02, 0x22, 0x6c, + 0x0a, 0x1a, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x6f, + 0x75, 0x72, 0x6e, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, + 0x61, 0x73, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x62, 0x0a, 0x1b, + 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x75, 0x72, + 0x6e, 0x65, 0x79, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x43, 0x0a, 0x04, 0x63, + 0x75, 0x6a, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, + 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x75, 0x72, + 0x6e, 0x65, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x04, 0x63, 0x75, 0x6a, 0x73, + 0x22, 0xc3, 0x01, 0x0a, 0x11, 0x53, 0x6f, 0x6f, 0x6e, 0x67, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, + 0x6c, 0x6f, 0x63, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x48, 0x65, + 0x61, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x28, 0x5a, 0x26, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, + 0x64, 0x2f, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x2f, 0x75, 0x69, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, } var ( diff --git a/ui/metrics/metrics_proto/metrics.proto b/ui/metrics/metrics_proto/metrics.proto index ec8f36bec..db0a14ae1 100644 --- a/ui/metrics/metrics_proto/metrics.proto +++ b/ui/metrics/metrics_proto/metrics.proto @@ -139,7 +139,7 @@ message SystemResourceInfo { message PerfInfo { // The description for the phase/action/part while the tool running. - optional string desc = 1; + optional string description = 1; // The name for the running phase/action/part. optional string name = 2; |