Skip to content

Commit

Permalink
Snap for 11510485 from c4538a0 to 24Q2-release
Browse files Browse the repository at this point in the history
Change-Id: I4edc66a670cebfee7468d30a500d24dc5fea2605
  • Loading branch information
Android Build Coastguard Worker committed Feb 29, 2024
2 parents ce530f7 + c4538a0 commit a0897e8
Show file tree
Hide file tree
Showing 8 changed files with 151 additions and 65 deletions.
10 changes: 6 additions & 4 deletions apex/apex.go
Original file line number Diff line number Diff line change
Expand Up @@ -841,10 +841,12 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) {
}

addDependenciesForNativeModules(ctx, deps, target, imageVariation)
ctx.AddFarVariationDependencies([]blueprint.Variation{
{Mutator: "os", Variation: target.OsVariation()},
{Mutator: "arch", Variation: target.ArchVariation()},
}, shBinaryTag, a.properties.Sh_binaries...)
if isPrimaryAbi {
ctx.AddFarVariationDependencies([]blueprint.Variation{
{Mutator: "os", Variation: target.OsVariation()},
{Mutator: "arch", Variation: target.ArchVariation()},
}, shBinaryTag, a.properties.Sh_binaries...)
}
}

// Common-arch dependencies come next
Expand Down
1 change: 1 addition & 0 deletions apex/apex_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5046,6 +5046,7 @@ func TestApexWithShBinary(t *testing.T) {
key: "myapex.key",
sh_binaries: ["myscript"],
updatable: false,
compile_multilib: "both",
}
apex_key {
Expand Down
4 changes: 2 additions & 2 deletions cc/cc.go
Original file line number Diff line number Diff line change
Expand Up @@ -3361,7 +3361,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
c.sabi.Properties.ReexportedIncludes, depExporterInfo.IncludeDirs.Strings()...)
}

makeLibName := MakeLibName(ctx, c, ccDep, depName) + libDepTag.makeSuffix
makeLibName := MakeLibName(ctx, c, ccDep, ccDep.BaseModuleName()) + libDepTag.makeSuffix
switch {
case libDepTag.header():
c.Properties.AndroidMkHeaderLibs = append(
Expand Down Expand Up @@ -3402,7 +3402,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
switch depTag {
case runtimeDepTag:
c.Properties.AndroidMkRuntimeLibs = append(
c.Properties.AndroidMkRuntimeLibs, MakeLibName(ctx, c, ccDep, depName)+libDepTag.makeSuffix)
c.Properties.AndroidMkRuntimeLibs, MakeLibName(ctx, c, ccDep, ccDep.BaseModuleName())+libDepTag.makeSuffix)
// Record BaseLibName for snapshots.
c.Properties.SnapshotRuntimeLibs = append(c.Properties.SnapshotRuntimeLibs, BaseLibName(depName))
case objDepTag:
Expand Down
8 changes: 2 additions & 6 deletions cc/config/riscv64_device.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ var (
// Help catch common 32/64-bit errors.
"-Werror=implicit-function-declaration",
"-march=rv64gcv_zba_zbb_zbs",
// Equivalent to "-munaligned-access", but our clang doesn't have that yet.
"-Xclang -target-feature -Xclang +unaligned-scalar-mem",
"-Xclang -target-feature -Xclang +unaligned-vector-mem",
"-munaligned-access",
// Until https://gitlab.com/qemu-project/qemu/-/issues/1976 is fixed...
"-mno-implicit-float",
// (https://github.com/google/android-riscv64/issues/124)
Expand All @@ -40,9 +38,7 @@ var (
riscv64Ldflags = []string{
"-Wl,--hash-style=gnu",
"-march=rv64gcv_zba_zbb_zbs",
// Equivalent to "-munaligned-access", but our clang doesn't have that yet.
"-Xclang -target-feature -Xclang +unaligned-scalar-mem",
"-Xclang -target-feature -Xclang +unaligned-vector-mem",
"-munaligned-access",
// We should change the default for this in clang, but for now...
// (https://github.com/google/android-riscv64/issues/124)
"-Wl,-mllvm -Wl,-jump-is-expensive=false",
Expand Down
5 changes: 4 additions & 1 deletion cc/prebuilt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,9 @@ func TestMultiplePrebuilts(t *testing.T) {
libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Module()
expectedDependency := ctx.ModuleForTests(tc.expectedDependencyName, "android_arm64_armv8-a_shared").Module()
android.AssertBoolEquals(t, fmt.Sprintf("expected dependency from %s to %s\n", libfoo.Name(), tc.expectedDependencyName), true, hasDep(ctx, libfoo, expectedDependency))
// check that LOCAL_SHARED_LIBRARIES contains libbar and not libbar.v<N>
entries := android.AndroidMkEntriesForTest(t, ctx, libfoo)[0]
android.AssertStringListContains(t, "Version should not be present in LOCAL_SHARED_LIBRARIES", entries.EntryMap["LOCAL_SHARED_LIBRARIES"], "libbar")

// check installation rules
// the selected soong module should be exported to make
Expand All @@ -603,7 +606,7 @@ func TestMultiplePrebuilts(t *testing.T) {

// check LOCAL_MODULE of the selected module name
// the prebuilt should have the same LOCAL_MODULE when exported to make
entries := android.AndroidMkEntriesForTest(t, ctx, libbar)[0]
entries = android.AndroidMkEntriesForTest(t, ctx, libbar)[0]
android.AssertStringEquals(t, "unexpected LOCAL_MODULE", "libbar", entries.EntryMap["LOCAL_MODULE"][0])
}
}
2 changes: 2 additions & 0 deletions java/droiddoc.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,8 @@ type Javadoc struct {
stubsSrcJar android.WritablePath

exportableStubsSrcJar android.WritablePath

runtimeStubsSrcJar android.WritablePath
}

func (j *Javadoc) OutputFiles(tag string) (android.Paths, error) {
Expand Down
150 changes: 104 additions & 46 deletions java/droidstubs.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ type currentApiTimestampProvider interface {
type annotationFlagsParams struct {
migratingNullability bool
validatingNullability bool
extractAnnotations bool
nullabilityWarningsFile android.WritablePath
annotationsZip android.WritablePath
}
Expand All @@ -229,16 +230,19 @@ type stubsCommandParams struct {
stubConfig stubsCommandConfigParams
}
type stubsCommandConfigParams struct {
stubsType StubsType
javaVersion javaVersion
deps deps
checkApi bool
generateStubs bool
doApiLint bool
doCheckReleased bool
writeSdkValues bool
migratingNullability bool
validatingNullability bool
stubsType StubsType
javaVersion javaVersion
deps deps
checkApi bool
generateStubs bool
doApiLint bool
doCheckReleased bool
writeSdkValues bool
migratingNullability bool
validatingNullability bool
annotationsEnabled bool
apiLevelsAnnotationsEnabled bool
extractAnnotations bool
}

// droidstubs passes sources files through Metalava to generate stub .java files that only contain the API to be
Expand Down Expand Up @@ -508,30 +512,30 @@ func (d *Droidstubs) stubsFlags(ctx android.ModuleContext, cmd *android.RuleBuil
}

func (d *Droidstubs) annotationsFlags(ctx android.ModuleContext, cmd *android.RuleBuilderCommand, params annotationFlagsParams) {
if Bool(d.properties.Annotations_enabled) {
cmd.Flag(config.MetalavaAnnotationsFlags)
cmd.Flag(config.MetalavaAnnotationsFlags)

if params.migratingNullability {
previousApi := android.PathForModuleSrc(ctx, String(d.properties.Previous_api))
cmd.FlagWithInput("--migrate-nullness ", previousApi)
}
if params.migratingNullability {
previousApi := android.PathForModuleSrc(ctx, String(d.properties.Previous_api))
cmd.FlagWithInput("--migrate-nullness ", previousApi)
}

if s := String(d.properties.Validate_nullability_from_list); s != "" {
cmd.FlagWithInput("--validate-nullability-from-list ", android.PathForModuleSrc(ctx, s))
}
if s := String(d.properties.Validate_nullability_from_list); s != "" {
cmd.FlagWithInput("--validate-nullability-from-list ", android.PathForModuleSrc(ctx, s))
}

if params.validatingNullability {
cmd.FlagWithOutput("--nullability-warnings-txt ", params.nullabilityWarningsFile)
}
if params.validatingNullability {
cmd.FlagWithOutput("--nullability-warnings-txt ", params.nullabilityWarningsFile)
}

if params.extractAnnotations {
cmd.FlagWithOutput("--extract-annotations ", params.annotationsZip)
}

if len(d.properties.Merge_annotations_dirs) != 0 {
d.mergeAnnoDirFlags(ctx, cmd)
}

cmd.Flag(config.MetalavaAnnotationsWarningsFlags)
if len(d.properties.Merge_annotations_dirs) != 0 {
d.mergeAnnoDirFlags(ctx, cmd)
}

cmd.Flag(config.MetalavaAnnotationsWarningsFlags)
}

func (d *Droidstubs) mergeAnnoDirFlags(ctx android.ModuleContext, cmd *android.RuleBuilderCommand) {
Expand All @@ -556,9 +560,11 @@ func (d *Droidstubs) inclusionAnnotationsFlags(ctx android.ModuleContext, cmd *a
})
}

func (d *Droidstubs) apiLevelsAnnotationsFlags(ctx android.ModuleContext, cmd *android.RuleBuilderCommand, stubsType StubsType, apiVersionsXml android.WritablePath) {
func (d *Droidstubs) apiLevelsAnnotationsFlags(ctx android.ModuleContext, cmd *android.RuleBuilderCommand, params stubsCommandParams) {
var apiVersions android.Path
if proptools.Bool(d.properties.Api_levels_annotations_enabled) {
stubsType := params.stubConfig.stubsType
apiVersionsXml := params.apiVersionsXml
if params.stubConfig.apiLevelsAnnotationsEnabled {
d.apiLevelsGenerationFlags(ctx, cmd, stubsType, apiVersionsXml)
apiVersions = apiVersionsXml
} else {
Expand All @@ -569,7 +575,9 @@ func (d *Droidstubs) apiLevelsAnnotationsFlags(ctx android.ModuleContext, cmd *a
} else if stubsType == Exportable {
apiVersions = s.exportableArtifacts.apiVersionsXml
} else {
ctx.ModuleErrorf("%s stubs type does not generate api-versions.xml file", stubsType.String())
// if the stubs type does not generate api-versions.xml file, default to using the
// everything artifacts
apiVersions = s.everythingArtifacts.apiVersionsXml
}
} else {
ctx.PropertyErrorf("api_levels_module",
Expand Down Expand Up @@ -803,13 +811,16 @@ func (d *Droidstubs) commonMetalavaStubCmd(ctx android.ModuleContext, rule *andr
annotationParams := annotationFlagsParams{
migratingNullability: params.stubConfig.migratingNullability,
validatingNullability: params.stubConfig.validatingNullability,
extractAnnotations: params.stubConfig.extractAnnotations,
nullabilityWarningsFile: params.nullabilityWarningsFile,
annotationsZip: params.annotationsZip,
}

d.annotationsFlags(ctx, cmd, annotationParams)
if params.stubConfig.annotationsEnabled {
d.annotationsFlags(ctx, cmd, annotationParams)
}
d.inclusionAnnotationsFlags(ctx, cmd)
d.apiLevelsAnnotationsFlags(ctx, cmd, params.stubConfig.stubsType, params.apiVersionsXml)
d.apiLevelsAnnotationsFlags(ctx, cmd, params)

d.expandArgs(ctx, cmd)

Expand Down Expand Up @@ -839,13 +850,13 @@ func (d *Droidstubs) everythingStubCmd(ctx android.ModuleContext, params stubsCo
d.everythingArtifacts.metadataZip = android.PathForModuleOut(ctx, Everything.String(), ctx.ModuleName()+"-metadata.zip")
}

if Bool(d.properties.Annotations_enabled) {
if params.annotationsEnabled {
if params.validatingNullability {
d.everythingArtifacts.nullabilityWarningsFile = android.PathForModuleOut(ctx, Everything.String(), ctx.ModuleName()+"_nullability_warnings.txt")
}
d.everythingArtifacts.annotationsZip = android.PathForModuleOut(ctx, Everything.String(), ctx.ModuleName()+"_annotations.zip")
}
if Bool(d.properties.Api_levels_annotations_enabled) {
if params.apiLevelsAnnotationsEnabled {
d.everythingArtifacts.apiVersionsXml = android.PathForModuleOut(ctx, Everything.String(), "api-versions.xml")
}

Expand Down Expand Up @@ -1023,15 +1034,15 @@ func (d *Droidstubs) exportableStubCmd(ctx android.ModuleContext, params stubsCo
optionalCmdParams.metadataDir = d.exportableArtifacts.metadataDir
}

if Bool(d.properties.Annotations_enabled) {
if params.annotationsEnabled {
if params.validatingNullability {
d.exportableArtifacts.nullabilityWarningsFile = android.PathForModuleOut(ctx, params.stubsType.String(), ctx.ModuleName()+"_nullability_warnings.txt")
optionalCmdParams.nullabilityWarningsFile = d.exportableArtifacts.nullabilityWarningsFile
}
d.exportableArtifacts.annotationsZip = android.PathForModuleOut(ctx, params.stubsType.String(), ctx.ModuleName()+"_annotations.zip")
optionalCmdParams.annotationsZip = d.exportableArtifacts.annotationsZip
}
if Bool(d.properties.Api_levels_annotations_enabled) {
if params.apiLevelsAnnotationsEnabled {
d.exportableArtifacts.apiVersionsXml = android.PathForModuleOut(ctx, params.stubsType.String(), "api-versions.xml")
optionalCmdParams.apiVersionsXml = d.exportableArtifacts.apiVersionsXml
}
Expand All @@ -1049,6 +1060,38 @@ func (d *Droidstubs) exportableStubCmd(ctx android.ModuleContext, params stubsCo
d.optionalStubCmd(ctx, optionalCmdParams)
}

// Sandbox rule for generating runtime stubs
func (d *Droidstubs) runtimeStubCmd(ctx android.ModuleContext, params stubsCommandConfigParams) {

// We are only interested in generating the stubs srcjar,
// not other artifacts for the runtime stubs
params.checkApi = false
params.writeSdkValues = false
params.validatingNullability = false
params.extractAnnotations = false
params.apiLevelsAnnotationsEnabled = false

optionalCmdParams := stubsCommandParams{
stubConfig: params,
}

d.Javadoc.runtimeStubsSrcJar = android.PathForModuleOut(ctx, params.stubsType.String(), ctx.ModuleName()+"-"+"stubs.srcjar")
optionalCmdParams.stubsSrcJar = d.Javadoc.runtimeStubsSrcJar

// If aconfig_declarations property is not defined, all flagged apis symbols are stripped
// as no aconfig flags are enabled. In such case, the runtime stubs are identical to the
// exportable stubs, thus no additional metalava invocation is needed.
if len(d.properties.Aconfig_declarations) == 0 {
rule := android.NewRuleBuilder(pctx, ctx)
rule.Command().
Text("cp").Flag("-f").
Input(d.exportableStubsSrcJar).Output(d.runtimeStubsSrcJar)
rule.Build(fmt.Sprintf("metalava_%s", params.stubsType.String()), "metalava merged")
} else {
d.optionalStubCmd(ctx, optionalCmdParams)
}
}

func (d *Droidstubs) optionalStubCmd(ctx android.ModuleContext, params stubsCommandParams) {

params.srcJarDir = android.PathForModuleOut(ctx, params.stubConfig.stubsType.String(), "srcjars")
Expand Down Expand Up @@ -1120,34 +1163,49 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {

annotationsEnabled := Bool(d.properties.Annotations_enabled)

extractAnnotations := annotationsEnabled

migratingNullability := annotationsEnabled && String(d.properties.Previous_api) != ""
validatingNullability := annotationsEnabled && (strings.Contains(String(d.Javadoc.properties.Args), "--validate-nullability-from-merged-stubs") ||
String(d.properties.Validate_nullability_from_list) != "")

checkApi := apiCheckEnabled(ctx, d.properties.Check_api.Current, "current") ||
apiCheckEnabled(ctx, d.properties.Check_api.Last_released, "last_released")

apiLevelsAnnotationsEnabled := proptools.Bool(d.properties.Api_levels_annotations_enabled)

stubCmdParams := stubsCommandConfigParams{
javaVersion: javaVersion,
deps: deps,
checkApi: checkApi,
generateStubs: generateStubs,
doApiLint: doApiLint,
doCheckReleased: doCheckReleased,
writeSdkValues: writeSdkValues,
migratingNullability: migratingNullability,
validatingNullability: validatingNullability,
javaVersion: javaVersion,
deps: deps,
checkApi: checkApi,
generateStubs: generateStubs,
doApiLint: doApiLint,
doCheckReleased: doCheckReleased,
writeSdkValues: writeSdkValues,
migratingNullability: migratingNullability,
validatingNullability: validatingNullability,
annotationsEnabled: annotationsEnabled,
apiLevelsAnnotationsEnabled: apiLevelsAnnotationsEnabled,
extractAnnotations: extractAnnotations,
}
stubCmdParams.stubsType = Everything
// Create default (i.e. "everything" stubs) rule for metalava
d.everythingStubCmd(ctx, stubCmdParams)

// The module generates "exportable" (and "runtime" eventually) stubs regardless of whether
// The module generates "exportable" stubs regardless of whether
// aconfig_declarations property is defined or not. If the property is not defined, the module simply
// strips all flagged apis to generate the "exportable" stubs
stubCmdParams.stubsType = Exportable
d.exportableStubCmd(ctx, stubCmdParams)

// "runtime" stubs do not generate any other artifacts than the stubs.
// Therefore, metalava does not have to run for "runtime" configuration
// when the module does not generate stubs.
if stubCmdParams.generateStubs {
stubCmdParams.stubsType = Runtime
d.runtimeStubCmd(ctx, stubCmdParams)
}

if apiCheckEnabled(ctx, d.properties.Check_api.Current, "current") {

if len(d.Javadoc.properties.Out) > 0 {
Expand Down
Loading

0 comments on commit a0897e8

Please sign in to comment.