diff options
| -rw-r--r-- | android/api_levels.go | 1 | ||||
| -rw-r--r-- | android/mutator.go | 49 | ||||
| -rw-r--r-- | cc/binary_sdk_member.go | 2 | ||||
| -rw-r--r-- | cc/cc.go | 46 | ||||
| -rw-r--r-- | cc/cc_test.go | 1 | ||||
| -rw-r--r-- | cc/config/clang.go | 14 | ||||
| -rw-r--r-- | cc/config/global.go | 10 | ||||
| -rw-r--r-- | cc/config/x86_windows_host.go | 3 | ||||
| -rw-r--r-- | cc/library.go | 82 | ||||
| -rw-r--r-- | cc/library_sdk_member.go | 2 | ||||
| -rw-r--r-- | cc/linkable.go | 4 | ||||
| -rw-r--r-- | cc/lto.go | 7 | ||||
| -rw-r--r-- | cc/pgo.go | 52 | ||||
| -rw-r--r-- | cmd/soong_ui/main.go | 1 | ||||
| -rw-r--r-- | java/dex.go | 1 | ||||
| -rw-r--r-- | rust/rust.go | 14 | ||||
| -rw-r--r-- | ui/build/config.go | 24 | ||||
| -rw-r--r-- | ui/build/rbe.go | 10 |
18 files changed, 212 insertions, 111 deletions
diff --git a/android/api_levels.go b/android/api_levels.go index e5405ca08..ddcdbb7e4 100644 --- a/android/api_levels.go +++ b/android/api_levels.go @@ -258,6 +258,7 @@ func getFinalCodenamesMap(config Config) map[string]int { "O-MR1": 27, "P": 28, "Q": 29, + "R": 30, } if Bool(config.productVariables.Platform_sdk_final) { diff --git a/android/mutator.go b/android/mutator.go index 738b2ba0a..5acd9926c 100644 --- a/android/mutator.go +++ b/android/mutator.go @@ -210,10 +210,14 @@ type BottomUpMutator func(BottomUpMutatorContext) type BottomUpMutatorContext interface { BaseMutatorContext - // AddDependency adds a dependency to the given module. - // Does not affect the ordering of the current mutator pass, but will be ordered - // correctly for all future mutator passes. - AddDependency(module blueprint.Module, tag blueprint.DependencyTag, name ...string) + // AddDependency adds a dependency to the given module. It returns a slice of modules for each + // dependency (some entries may be nil). + // + // If the mutator is parallel (see MutatorHandle.Parallel), this method will pause until the + // new dependencies have had the current mutator called on them. If the mutator is not + // parallel this method does not affect the ordering of the current mutator pass, but will + // be ordered correctly for all future mutator passes. + AddDependency(module blueprint.Module, tag blueprint.DependencyTag, name ...string) []blueprint.Module // AddReverseDependency adds a dependency from the destination to the given module. // Does not affect the ordering of the current mutator pass, but will be ordered @@ -253,19 +257,30 @@ type BottomUpMutatorContext interface { SetDefaultDependencyVariation(*string) // AddVariationDependencies adds deps as dependencies of the current module, but uses the variations - // argument to select which variant of the dependency to use. A variant of the dependency must - // exist that matches the all of the non-local variations of the current module, plus the variations - // argument. - AddVariationDependencies([]blueprint.Variation, blueprint.DependencyTag, ...string) + // argument to select which variant of the dependency to use. It returns a slice of modules for + // each dependency (some entries may be nil). A variant of the dependency must exist that matches + // the all of the non-local variations of the current module, plus the variations argument. + // + // If the mutator is parallel (see MutatorHandle.Parallel), this method will pause until the + // new dependencies have had the current mutator called on them. If the mutator is not + // parallel this method does not affect the ordering of the current mutator pass, but will + // be ordered correctly for all future mutator passes. + AddVariationDependencies([]blueprint.Variation, blueprint.DependencyTag, ...string) []blueprint.Module // AddFarVariationDependencies adds deps as dependencies of the current module, but uses the - // variations argument to select which variant of the dependency to use. A variant of the - // dependency must exist that matches the variations argument, but may also have other variations. + // variations argument to select which variant of the dependency to use. It returns a slice of + // modules for each dependency (some entries may be nil). A variant of the dependency must + // exist that matches the variations argument, but may also have other variations. // For any unspecified variation the first variant will be used. // // Unlike AddVariationDependencies, the variations of the current module are ignored - the // dependency only needs to match the supplied variations. - AddFarVariationDependencies([]blueprint.Variation, blueprint.DependencyTag, ...string) + // + // If the mutator is parallel (see MutatorHandle.Parallel), this method will pause until the + // new dependencies have had the current mutator called on them. If the mutator is not + // parallel this method does not affect the ordering of the current mutator pass, but will + // be ordered correctly for all future mutator passes. + AddFarVariationDependencies([]blueprint.Variation, blueprint.DependencyTag, ...string) []blueprint.Module // AddInterVariantDependency adds a dependency between two variants of the same module. Variants are always // ordered in the same orderas they were listed in CreateVariations, and AddInterVariantDependency does not change @@ -452,8 +467,8 @@ func (b *bottomUpMutatorContext) Rename(name string) { b.Module().base().commonProperties.DebugName = name } -func (b *bottomUpMutatorContext) AddDependency(module blueprint.Module, tag blueprint.DependencyTag, name ...string) { - b.bp.AddDependency(module, tag, name...) +func (b *bottomUpMutatorContext) AddDependency(module blueprint.Module, tag blueprint.DependencyTag, name ...string) []blueprint.Module { + return b.bp.AddDependency(module, tag, name...) } func (b *bottomUpMutatorContext) AddReverseDependency(module blueprint.Module, tag blueprint.DependencyTag, name string) { @@ -505,15 +520,15 @@ func (b *bottomUpMutatorContext) SetDefaultDependencyVariation(variation *string } func (b *bottomUpMutatorContext) AddVariationDependencies(variations []blueprint.Variation, tag blueprint.DependencyTag, - names ...string) { + names ...string) []blueprint.Module { - b.bp.AddVariationDependencies(variations, tag, names...) + return b.bp.AddVariationDependencies(variations, tag, names...) } func (b *bottomUpMutatorContext) AddFarVariationDependencies(variations []blueprint.Variation, - tag blueprint.DependencyTag, names ...string) { + tag blueprint.DependencyTag, names ...string) []blueprint.Module { - b.bp.AddFarVariationDependencies(variations, tag, names...) + return b.bp.AddFarVariationDependencies(variations, tag, names...) } func (b *bottomUpMutatorContext) AddInterVariantDependency(tag blueprint.DependencyTag, from, to blueprint.Module) { diff --git a/cc/binary_sdk_member.go b/cc/binary_sdk_member.go index a1abc728a..55e400e8e 100644 --- a/cc/binary_sdk_member.go +++ b/cc/binary_sdk_member.go @@ -44,7 +44,7 @@ func (mt *binarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorConte for _, target := range targets { name, version := StubsLibNameAndVersion(lib) if version == "" { - version = LatestStubsVersionFor(mctx.Config(), name) + version = "latest" } variations := target.Variations() if mctx.Device() { @@ -47,7 +47,8 @@ func RegisterCCBuildComponents(ctx android.RegistrationContext) { ctx.BottomUp("link", LinkageMutator).Parallel() ctx.BottomUp("ndk_api", NdkApiMutator).Parallel() ctx.BottomUp("test_per_src", TestPerSrcMutator).Parallel() - ctx.BottomUp("version", VersionMutator).Parallel() + ctx.BottomUp("version_selector", versionSelectorMutator).Parallel() + ctx.BottomUp("version", versionMutator).Parallel() ctx.BottomUp("begin", BeginMutator).Parallel() ctx.BottomUp("sysprop_cc", SyspropMutator).Parallel() ctx.BottomUp("vendor_snapshot", VendorSnapshotMutator).Parallel() @@ -784,7 +785,28 @@ func (c *Module) BuildStubs() bool { panic(fmt.Errorf("BuildStubs called on non-library module: %q", c.BaseModuleName())) } -func (c *Module) SetStubsVersions(version string) { +func (c *Module) SetAllStubsVersions(versions []string) { + if library, ok := c.linker.(*libraryDecorator); ok { + library.MutatedProperties.AllStubsVersions = versions + return + } + if llndk, ok := c.linker.(*llndkStubDecorator); ok { + llndk.libraryDecorator.MutatedProperties.AllStubsVersions = versions + return + } +} + +func (c *Module) AllStubsVersions() []string { + if library, ok := c.linker.(*libraryDecorator); ok { + return library.MutatedProperties.AllStubsVersions + } + if llndk, ok := c.linker.(*llndkStubDecorator); ok { + return llndk.libraryDecorator.MutatedProperties.AllStubsVersions + } + return nil +} + +func (c *Module) SetStubsVersion(version string) { if c.linker != nil { if library, ok := c.linker.(*libraryDecorator); ok { library.MutatedProperties.StubsVersion = version @@ -795,7 +817,7 @@ func (c *Module) SetStubsVersions(version string) { return } } - panic(fmt.Errorf("SetStubsVersions called on non-library module: %q", c.BaseModuleName())) + panic(fmt.Errorf("SetStubsVersion called on non-library module: %q", c.BaseModuleName())) } func (c *Module) StubsVersion() string { @@ -1996,18 +2018,20 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { variations = append(variations, blueprint.Variation{Mutator: "version", Variation: version}) depTag.explicitlyVersioned = true } - actx.AddVariationDependencies(variations, depTag, name) + deps := actx.AddVariationDependencies(variations, depTag, name) // If the version is not specified, add dependency to all stubs libraries. // The stubs library will be used when the depending module is built for APEX and // the dependent module is not in the same APEX. if version == "" && VersionVariantAvailable(c) { - for _, ver := range stubsVersionsFor(actx.Config())[name] { - // Note that depTag.ExplicitlyVersioned is false in this case. - actx.AddVariationDependencies([]blueprint.Variation{ - {Mutator: "link", Variation: "shared"}, - {Mutator: "version", Variation: ver}, - }, depTag, name) + if dep, ok := deps[0].(*Module); ok { + for _, ver := range dep.AllStubsVersions() { + // Note that depTag.ExplicitlyVersioned is false in this case. + ctx.AddVariationDependencies([]blueprint.Variation{ + {Mutator: "link", Variation: "shared"}, + {Mutator: "version", Variation: ver}, + }, depTag, name) + } } } } @@ -2459,7 +2483,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if m, ok := ccDep.(*Module); ok && m.IsStubs() { // LLNDK // by default, use current version of LLNDK versionToUse := "" - versions := stubsVersionsFor(ctx.Config())[depName] + versions := m.AllStubsVersions() if c.ApexVariationName() != "" && len(versions) > 0 { // if this is for use_vendor apex && dep has stubsVersions // apply the same rule of apex sdk enforcement to choose right version diff --git a/cc/cc_test.go b/cc/cc_test.go index a4c067772..132d09136 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -3025,6 +3025,7 @@ func TestStaticLibDepReorderingWithShared(t *testing.T) { } func checkEquals(t *testing.T, message string, expected, actual interface{}) { + t.Helper() if !reflect.DeepEqual(actual, expected) { t.Errorf(message+ "\nactual: %v"+ diff --git a/cc/config/clang.go b/cc/config/clang.go index 7db405c2e..441bff2a5 100644 --- a/cc/config/clang.go +++ b/cc/config/clang.go @@ -42,7 +42,6 @@ var ClangUnknownCflags = sorted([]string{ "-Wno-literal-suffix", "-Wno-maybe-uninitialized", "-Wno-old-style-declaration", - "-Wno-psabi", "-Wno-unused-but-set-parameter", "-Wno-unused-but-set-variable", "-Wno-unused-local-typedefs", @@ -93,7 +92,9 @@ var ClangLibToolingUnknownCflags = sorted([]string{}) // updated, some checks enabled by this module may be disabled if they have // become more strict, or if they are a new match for a wildcard group like // `modernize-*`. -var ClangTidyDisableChecks = []string{} +var ClangTidyDisableChecks = []string{ + "misc-no-recursion", +} func init() { pctx.StaticVariable("ClangExtraCflags", strings.Join([]string{ @@ -103,6 +104,10 @@ func init() { // not emit the table by default on Android since NDK still uses GNU binutils. "-faddrsig", + // Turn on -fcommon explicitly, since Clang now defaults to -fno-common. The cleanup bug + // tracking this is http://b/151457797. + "-fcommon", + // Help catch common 32/64-bit errors. "-Werror=int-conversion", @@ -183,6 +188,8 @@ func init() { "-Wno-enum-enum-conversion", // http://b/154138986 "-Wno-enum-float-conversion", // http://b/154255917 "-Wno-pessimizing-move", // http://b/154270751 + // New warnings to be fixed after clang-r399163 + "-Wno-non-c-typedef-for-linkage", // http://b/161304145 }, " ")) // Extra cflags for external third-party projects to disable warnings that @@ -205,6 +212,9 @@ func init() { "-Wno-xor-used-as-pow", // http://b/145211022 "-Wno-final-dtor-non-final-class", + + // http://b/165945989 + "-Wno-psabi", }, " ")) } diff --git a/cc/config/global.go b/cc/config/global.go index b9f033288..f9b3cc8dd 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -114,6 +114,12 @@ var ( noOverrideGlobalCflags = []string{ "-Werror=int-to-pointer-cast", "-Werror=pointer-to-int-cast", + // http://b/161386391 for -Wno-void-pointer-to-enum-cast + "-Wno-void-pointer-to-enum-cast", + // http://b/161386391 for -Wno-void-pointer-to-int-cast + "-Wno-void-pointer-to-int-cast", + // http://b/161386391 for -Wno-pointer-to-int-cast + "-Wno-pointer-to-int-cast", "-Werror=fortify-source", } @@ -128,8 +134,8 @@ var ( // prebuilts/clang default settings. ClangDefaultBase = "prebuilts/clang/host" - ClangDefaultVersion = "clang-r383902b" - ClangDefaultShortVersion = "11.0.2" + ClangDefaultVersion = "clang-r399163" + ClangDefaultShortVersion = "11.0.4" // Directories with warnings from Android.bp files. WarningAllowedProjects = []string{ diff --git a/cc/config/x86_windows_host.go b/cc/config/x86_windows_host.go index b5b555322..b77df7906 100644 --- a/cc/config/x86_windows_host.go +++ b/cc/config/x86_windows_host.go @@ -39,6 +39,9 @@ var ( // Get 64-bit off_t and related functions. "-D_FILE_OFFSET_BITS=64", + // Don't adjust the layout of bitfields like msvc does. + "-mno-ms-bitfields", + "--sysroot ${WindowsGccRoot}/${WindowsGccTriple}", } windowsClangCflags = append(ClangFilterUnknownCflags(windowsCflags), []string{}...) diff --git a/cc/library.go b/cc/library.go index 92853b5d3..7b09b1145 100644 --- a/cc/library.go +++ b/cc/library.go @@ -152,6 +152,8 @@ type LibraryMutatedProperties struct { BuildStubs bool `blueprint:"mutated"` // Version of the stubs lib StubsVersion string `blueprint:"mutated"` + // List of all stubs versions associated with an implementation lib + AllStubsVersions []string `blueprint:"mutated"` } type FlagExporterProperties struct { @@ -1517,26 +1519,6 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) { } } -var stubVersionsKey = android.NewOnceKey("stubVersions") - -// maps a module name to the list of stubs versions available for the module -func stubsVersionsFor(config android.Config) map[string][]string { - return config.Once(stubVersionsKey, func() interface{} { - return make(map[string][]string) - }).(map[string][]string) -} - -var stubsVersionsLock sync.Mutex - -func LatestStubsVersionFor(config android.Config, name string) string { - versions, ok := stubsVersionsFor(config)[name] - if ok && len(versions) > 0 { - // the versions are alreay sorted in ascending order - return versions[len(versions)-1] - } - return "" -} - func normalizeVersions(ctx android.BaseModuleContext, versions []string) { numVersions := make([]int, len(versions)) for i, v := range versions { @@ -1556,17 +1538,22 @@ func normalizeVersions(ctx android.BaseModuleContext, versions []string) { } func createVersionVariations(mctx android.BottomUpMutatorContext, versions []string) { - // "" is for the non-stubs variant - versions = append([]string{""}, versions...) + // "" is for the non-stubs (implementation) variant. + variants := append([]string{""}, versions...) - modules := mctx.CreateLocalVariations(versions...) + modules := mctx.CreateLocalVariations(variants...) for i, m := range modules { - if versions[i] != "" { + if variants[i] != "" { m.(LinkableInterface).SetBuildStubs() - m.(LinkableInterface).SetStubsVersions(versions[i]) + m.(LinkableInterface).SetStubsVersion(variants[i]) } } mctx.AliasVariation("") + latestVersion := "" + if len(versions) > 0 { + latestVersion = versions[len(versions)-1] + } + mctx.CreateAliasVariation("latest", latestVersion) } func VersionVariantAvailable(module interface { @@ -1577,44 +1564,41 @@ func VersionVariantAvailable(module interface { return !module.Host() && !module.InRamdisk() && !module.InRecovery() } -// VersionMutator splits a module into the mandatory non-stubs variant -// (which is unnamed) and zero or more stubs variants. -func VersionMutator(mctx android.BottomUpMutatorContext) { +// versionSelector normalizes the versions in the Stubs.Versions property into MutatedProperties.AllStubsVersions, +// and propagates the value from implementation libraries to llndk libraries with the same name. +func versionSelectorMutator(mctx android.BottomUpMutatorContext) { if library, ok := mctx.Module().(LinkableInterface); ok && VersionVariantAvailable(library) { if library.CcLibrary() && library.BuildSharedVariant() && len(library.StubsVersions()) > 0 && !library.IsSdkVariant() { + versions := library.StubsVersions() normalizeVersions(mctx, versions) if mctx.Failed() { return } - - stubsVersionsLock.Lock() - defer stubsVersionsLock.Unlock() - // save the list of versions for later use - stubsVersionsFor(mctx.Config())[mctx.ModuleName()] = versions - - createVersionVariations(mctx, versions) + // Set the versions on the pre-mutated module so they can be read by any llndk modules that + // depend on the implementation library and haven't been mutated yet. + library.SetAllStubsVersions(versions) return } if c, ok := library.(*Module); ok && c.IsStubs() { - stubsVersionsLock.Lock() - defer stubsVersionsLock.Unlock() - // For LLNDK llndk_library, we borrow stubs.versions from its implementation library. - // Since llndk_library has dependency to its implementation library, - // we can safely access stubsVersionsFor() with its baseModuleName. - versions := stubsVersionsFor(mctx.Config())[c.BaseModuleName()] - // save the list of versions for later use - stubsVersionsFor(mctx.Config())[mctx.ModuleName()] = versions - - createVersionVariations(mctx, versions) - return + // Get the versions from the implementation module. + impls := mctx.GetDirectDepsWithTag(llndkImplDep) + if len(impls) > 1 { + panic(fmt.Errorf("Expected single implmenetation library, got %d", len(impls))) + } else if len(impls) == 1 { + c.SetAllStubsVersions(impls[0].(*Module).AllStubsVersions()) + } } + } +} - mctx.CreateLocalVariations("") - mctx.AliasVariation("") - return +// versionMutator splits a module into the mandatory non-stubs variant +// (which is unnamed) and zero or more stubs variants. +func versionMutator(mctx android.BottomUpMutatorContext) { + if library, ok := mctx.Module().(LinkableInterface); ok && VersionVariantAvailable(library) { + createVersionVariations(mctx, library.AllStubsVersions()) } } diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go index ecfdc9977..2f1554427 100644 --- a/cc/library_sdk_member.go +++ b/cc/library_sdk_member.go @@ -80,7 +80,7 @@ func (mt *librarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorCont for _, target := range targets { name, version := StubsLibNameAndVersion(lib) if version == "" { - version = LatestStubsVersionFor(mctx.Config(), name) + version = "latest" } variations := target.Variations() if mctx.Device() { diff --git a/cc/linkable.go b/cc/linkable.go index 4c8416347..6d8a4b71e 100644 --- a/cc/linkable.go +++ b/cc/linkable.go @@ -26,8 +26,10 @@ type LinkableInterface interface { StubsVersions() []string BuildStubs() bool SetBuildStubs() - SetStubsVersions(string) + SetStubsVersion(string) StubsVersion() string + SetAllStubsVersions([]string) + AllStubsVersions() []string HasStubsVariants() bool SelectedStl() string ApiLevel() string @@ -117,12 +117,11 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags { flags.Local.LdFlags = append(flags.Local.LdFlags, cachePolicyFormat+policy) } - // If the module does not have a profile, be conservative and do not inline - // or unroll loops during LTO, in order to prevent significant size bloat. + // If the module does not have a profile, be conservative and limit cross TU inline + // limit to 5 LLVM IR instructions, to balance binary size increase and performance. if !ctx.isPgoCompile() { flags.Local.LdFlags = append(flags.Local.LdFlags, - "-Wl,-plugin-opt,-inline-threshold=0", - "-Wl,-plugin-opt,-unroll-threshold=0") + "-Wl,-plugin-opt,-import-instr-limit=5") } } return flags @@ -70,6 +70,7 @@ type PgoProperties struct { PgoPresent bool `blueprint:"mutated"` ShouldProfileModule bool `blueprint:"mutated"` PgoCompile bool `blueprint:"mutated"` + PgoInstrLink bool `blueprint:"mutated"` } type pgo struct { @@ -89,13 +90,12 @@ func (pgo *pgo) props() []interface{} { } func (props *PgoProperties) addInstrumentationProfileGatherFlags(ctx ModuleContext, flags Flags) Flags { - flags.Local.CFlags = append(flags.Local.CFlags, props.Pgo.Cflags...) - - flags.Local.CFlags = append(flags.Local.CFlags, profileInstrumentFlag) - // The profile runtime is added below in deps(). Add the below - // flag, which is the only other link-time action performed by - // the Clang driver during link. - flags.Local.LdFlags = append(flags.Local.LdFlags, "-u__llvm_profile_runtime") + // Add to C flags iff PGO is explicitly enabled for this module. + if props.ShouldProfileModule { + flags.Local.CFlags = append(flags.Local.CFlags, props.Pgo.Cflags...) + flags.Local.CFlags = append(flags.Local.CFlags, profileInstrumentFlag) + } + flags.Local.LdFlags = append(flags.Local.LdFlags, profileInstrumentFlag) return flags } func (props *PgoProperties) addSamplingProfileGatherFlags(ctx ModuleContext, flags Flags) Flags { @@ -250,10 +250,12 @@ func (pgo *pgo) begin(ctx BaseModuleContext) { if pgoBenchmarksMap["all"] == true || pgoBenchmarksMap["ALL"] == true { pgo.Properties.ShouldProfileModule = true + pgo.Properties.PgoInstrLink = pgo.Properties.isInstrumentation() } else { for _, b := range pgo.Properties.Pgo.Benchmarks { if pgoBenchmarksMap[b] == true { pgo.Properties.ShouldProfileModule = true + pgo.Properties.PgoInstrLink = pgo.Properties.isInstrumentation() break } } @@ -286,10 +288,42 @@ func (pgo *pgo) flags(ctx ModuleContext, flags Flags) Flags { return flags } - props := pgo.Properties + // Deduce PgoInstrLink property i.e. whether this module needs to be + // linked with profile-generation flags. Here, we're setting it if any + // dependency needs PGO instrumentation. It is initially set in + // begin() if PGO is directly enabled for this module. + if ctx.static() && !ctx.staticBinary() { + // For static libraries, check if any whole_static_libs are + // linked with profile generation + ctx.VisitDirectDeps(func(m android.Module) { + if depTag, ok := ctx.OtherModuleDependencyTag(m).(libraryDependencyTag); ok { + if depTag.static() && depTag.wholeStatic { + if cc, ok := m.(*Module); ok { + if cc.pgo.Properties.PgoInstrLink { + pgo.Properties.PgoInstrLink = true + } + } + } + } + }) + } else { + // For executables and shared libraries, check all static dependencies. + ctx.VisitDirectDeps(func(m android.Module) { + if depTag, ok := ctx.OtherModuleDependencyTag(m).(libraryDependencyTag); ok { + if depTag.static() { + if cc, ok := m.(*Module); ok { + if cc.pgo.Properties.PgoInstrLink { + pgo.Properties.PgoInstrLink = true + } + } + } + } + }) + } + props := pgo.Properties // Add flags to profile this module based on its profile_kind - if props.ShouldProfileModule && props.isInstrumentation() { + if (props.ShouldProfileModule && props.isInstrumentation()) || props.PgoInstrLink { // Instrumentation PGO use and gather flags cannot coexist. return props.addInstrumentationProfileGatherFlags(ctx, flags) } else if props.ShouldProfileModule && props.isSampling() { diff --git a/cmd/soong_ui/main.go b/cmd/soong_ui/main.go index 4aa62be3c..69e4f696c 100644 --- a/cmd/soong_ui/main.go +++ b/cmd/soong_ui/main.go @@ -173,7 +173,6 @@ func main() { rbeMetricsFile := filepath.Join(logsDir, c.logsPrefix+"rbe_metrics.pb") soongMetricsFile := filepath.Join(logsDir, c.logsPrefix+"soong_metrics") defer build.UploadMetrics(buildCtx, config, c.simpleOutput, buildStarted, buildErrorFile, rbeMetricsFile, soongMetricsFile) - defer build.PrintGomaDeprecation(buildCtx, config) os.MkdirAll(logsDir, 0777) log.SetOutput(filepath.Join(logsDir, c.logsPrefix+"soong.log")) diff --git a/java/dex.go b/java/dex.go index 21a59266e..055d47983 100644 --- a/java/dex.go +++ b/java/dex.go @@ -135,6 +135,7 @@ var r8, r8RE = remoteexec.MultiCommandStaticRules(pctx, "r8", "$r8Template": &remoteexec.REParams{ Labels: map[string]string{"type": "compile", "compiler": "r8"}, Inputs: []string{"$implicits", "${config.R8Jar}"}, + OutputFiles: []string{"${outUsage}"}, ExecStrategy: "${config.RER8ExecStrategy}", ToolchainInputs: []string{"${config.JavaCmd}"}, Platform: map[string]string{remoteexec.PoolKey: "${config.REJavaPool}"}, diff --git a/rust/rust.go b/rust/rust.go index e5614770b..d22acea4a 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -460,12 +460,20 @@ func (mod *Module) SetBuildStubs() { panic("SetBuildStubs not yet implemented for rust modules") } -func (mod *Module) SetStubsVersions(string) { - panic("SetStubsVersions not yet implemented for rust modules") +func (mod *Module) SetStubsVersion(string) { + panic("SetStubsVersion not yet implemented for rust modules") } func (mod *Module) StubsVersion() string { - panic("SetStubsVersions not yet implemented for rust modules") + panic("StubsVersion not yet implemented for rust modules") +} + +func (mod *Module) SetAllStubsVersions([]string) { + panic("SetAllStubsVersions not yet implemented for rust modules") +} + +func (mod *Module) AllStubsVersions() []string { + return nil } func (mod *Module) BuildStaticVariant() bool { diff --git a/ui/build/config.go b/ui/build/config.go index e9a8fc910..9bd087796 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -24,6 +24,7 @@ import ( "time" "android/soong/shared" + "github.com/golang/protobuf/proto" smpb "android/soong/ui/metrics/metrics_proto" @@ -183,6 +184,17 @@ func NewConfig(ctx Context, args ...string) Config { "EMPTY_NINJA_FILE", ) + if ret.UseGoma() { + ctx.Println("Goma for Android is being deprecated and replaced with RBE. See go/rbe_for_android for instructions on how to use RBE.") + ctx.Println() + ctx.Println("See go/goma_android_exceptions for exceptions.") + ctx.Fatalln("USE_GOMA flag is no longer supported.") + } + + if ret.ForceUseGoma() { + ret.environ.Set("USE_GOMA", "true") + } + // Tell python not to spam the source tree with .pyc files. ret.environ.Set("PYTHONDONTWRITEBYTECODE", "1") @@ -778,6 +790,18 @@ func (c *configImpl) TotalRAM() uint64 { return c.totalRAM } +// ForceUseGoma determines whether we should override Goma deprecation +// and use Goma for the current build or not. +func (c *configImpl) ForceUseGoma() bool { + if v, ok := c.environ.Get("FORCE_USE_GOMA"); ok { + v = strings.TrimSpace(v) + if v != "" && v != "false" { + return true + } + } + return false +} + func (c *configImpl) UseGoma() bool { if v, ok := c.environ.Get("USE_GOMA"); ok { v = strings.TrimSpace(v) diff --git a/ui/build/rbe.go b/ui/build/rbe.go index c4b829d2e..182c544d7 100644 --- a/ui/build/rbe.go +++ b/ui/build/rbe.go @@ -151,13 +151,3 @@ func DumpRBEMetrics(ctx Context, config Config, filename string) { ctx.Fatalf("failed to copy %q to %q: %v\n", metricsFile, filename, err) } } - -// PrintGomaDeprecation prints a PSA on the deprecation of Goma if it is set for the build. -func PrintGomaDeprecation(ctx Context, config Config) { - if config.UseGoma() { - fmt.Fprintln(ctx.Writer, "") - fmt.Fprintln(ctx.Writer, "Goma for Android is being deprecated and replaced with RBE.") - fmt.Fprintln(ctx.Writer, "See go/goma_android_deprecation for more details.") - fmt.Fprintln(ctx.Writer, "") - } -} |