Loading sdk/sdk.go +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ import ( func init() { pctx.Import("android/soong/android") pctx.Import("android/soong/java/config") android.RegisterModuleType("sdk", ModuleFactory) android.RegisterModuleType("sdk_snapshot", SnapshotModuleFactory) android.PreDepsMutators(RegisterPreDepsMutators) Loading sdk/sdk_test.go +43 −31 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ import ( "android/soong/java" ) func testSdkContext(t *testing.T, bp string) (*android.TestContext, android.Config) { func testSdkContext(bp string) (*android.TestContext, android.Config) { config := android.TestArchConfig(buildDir, nil) ctx := android.NewTestArchContext() Loading Loading @@ -114,7 +114,7 @@ func testSdkContext(t *testing.T, bp string) (*android.TestContext, android.Conf } func testSdk(t *testing.T, bp string) (*android.TestContext, android.Config) { ctx, config := testSdkContext(t, bp) ctx, config := testSdkContext(bp) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) android.FailIfErrored(t, errs) _, errs = ctx.PrepareBuildActions(config) Loading @@ -124,7 +124,7 @@ func testSdk(t *testing.T, bp string) (*android.TestContext, android.Config) { func testSdkError(t *testing.T, pattern, bp string) { t.Helper() ctx, config := testSdkContext(t, bp) ctx, config := testSdkContext(bp) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) if len(errs) > 0 { android.FailIfNoMatchingErrors(t, pattern, errs) Loading @@ -147,7 +147,7 @@ func ensureListContains(t *testing.T, result []string, expected string) { } func pathsToStrings(paths android.Paths) []string { ret := []string{} var ret []string for _, p := range paths { ret = append(ret, p.String()) } Loading Loading @@ -554,14 +554,23 @@ sdk_snapshot { var copySrcs []string var copyDests []string buildParams := sdk.BuildParamsForTests() var zipBp android.BuildParams var mergeZipInputs []string var intermediateZip string var outputZip string for _, bp := range buildParams { ruleString := bp.Rule.String() if ruleString == "android/soong/android.Cp" { if ruleString == android.Cp.String() { copySrcs = append(copySrcs, bp.Input.String()) copyDests = append(copyDests, bp.Output.Rel()) // rooted at the snapshot root } else if ruleString == "<local rule>:m.mysdk_android_common.snapshot" { zipBp = bp } else if ruleString == zipFiles.String() { intermediateZip = bp.Output.String() } else if ruleString == mergeZips.String() { input := bp.Input.String() if intermediateZip != input { t.Errorf("Intermediate zip %s is not an input to merge_zips, %s is used instead", intermediateZip, input) } mergeZipInputs = bp.Inputs.Strings() outputZip = bp.Output.String() } } Loading @@ -582,17 +591,14 @@ sdk_snapshot { ensureListContains(t, copyDests, "java/myjavalib.jar") ensureListContains(t, copyDests, "arm64/lib/mynativelib.so") expectedOutputZip := filepath.Join(buildDir, ".intermediates/mysdk/android_common/mysdk-current.zip") expectedRepackagedZip := filepath.Join(buildDir, ".intermediates/mysdk/android_common/tmp/java/myjavaapistubs_stubs_sources.zip") // Ensure that the droidstubs .srcjar as repackaged into a temporary zip file // and then merged together with the intermediate snapshot zip. snapshotCreationInputs := zipBp.Implicits.Strings() ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/android_common/tmp/java/myjavaapistubs_stubs_sources.zip")) ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/android_common/mysdk-current.unmerged.zip")) actual := zipBp.Output.String() expected := filepath.Join(buildDir, ".intermediates/mysdk/android_common/mysdk-current.zip") if actual != expected { t.Errorf("Expected snapshot output to be %q but was %q", expected, actual) ensureListContains(t, mergeZipInputs, expectedRepackagedZip) if outputZip != expectedOutputZip { t.Errorf("Expected snapshot output to be %q but was %q", expectedOutputZip, outputZip) } } Loading Loading @@ -749,14 +755,23 @@ sdk_snapshot { var copySrcs []string var copyDests []string buildParams := sdk.BuildParamsForTests() var zipBp android.BuildParams var mergeZipInputs []string var intermediateZip string var outputZip string for _, bp := range buildParams { ruleString := bp.Rule.String() if ruleString == "android/soong/android.Cp" { if ruleString == android.Cp.String() { copySrcs = append(copySrcs, bp.Input.String()) copyDests = append(copyDests, bp.Output.Rel()) // rooted at the snapshot root } else if ruleString == "<local rule>:m.mysdk_linux_glibc_common.snapshot" { zipBp = bp } else if ruleString == zipFiles.String() { intermediateZip = bp.Output.String() } else if ruleString == mergeZips.String() { input := bp.Input.String() if intermediateZip != input { t.Errorf("Intermediate zip %s is not an input to merge_zips, %s is used instead", intermediateZip, input) } mergeZipInputs = bp.Inputs.Strings() outputZip = bp.Output.String() } } Loading @@ -777,17 +792,14 @@ sdk_snapshot { ensureListContains(t, copyDests, "java/myjavalib.jar") ensureListContains(t, copyDests, "x86_64/lib/mynativelib.so") expectedOutputZip := filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.zip") expectedRepackagedZip := filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip") // Ensure that the droidstubs .srcjar as repackaged into a temporary zip file // and then merged together with the intermediate snapshot zip. snapshotCreationInputs := zipBp.Implicits.Strings() ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip")) ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.unmerged.zip")) actual := zipBp.Output.String() expected := filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.zip") if actual != expected { t.Errorf("Expected snapshot output to be %q but was %q", expected, actual) ensureListContains(t, mergeZipInputs, expectedRepackagedZip) if outputZip != expectedOutputZip { t.Errorf("Expected snapshot output to be %q but was %q", expectedOutputZip, outputZip) } } Loading @@ -810,7 +822,7 @@ func setUp() { } func tearDown() { os.RemoveAll(buildDir) _ = os.RemoveAll(buildDir) } func TestMain(m *testing.M) { Loading sdk/update.go +57 −26 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import ( "reflect" "strings" "github.com/google/blueprint" "github.com/google/blueprint/proptools" "android/soong/android" Loading @@ -29,6 +30,36 @@ import ( var pctx = android.NewPackageContext("android/soong/sdk") var ( repackageZip = pctx.AndroidStaticRule("SnapshotRepackageZip", blueprint.RuleParams{ Command: `${config.Zip2ZipCmd} -i $in -o $out "**/*:$destdir"`, CommandDeps: []string{ "${config.Zip2ZipCmd}", }, }, "destdir") zipFiles = pctx.AndroidStaticRule("SnapshotZipFiles", blueprint.RuleParams{ Command: `${config.SoongZipCmd} -C $basedir -l $out.rsp -o $out`, CommandDeps: []string{ "${config.SoongZipCmd}", }, Rspfile: "$out.rsp", RspfileContent: "$in", }, "basedir") mergeZips = pctx.AndroidStaticRule("SnapshotMergeZips", blueprint.RuleParams{ Command: `${config.MergeZipsCmd} $out $in`, CommandDeps: []string{ "${config.MergeZipsCmd}", }, }) ) type generatedContents struct { content strings.Builder indentLevel int Loading Loading @@ -316,41 +347,39 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext) android.OutputPath { // zip them all outputZipFile := android.PathForModuleOut(ctx, ctx.ModuleName()+"-current.zip").OutputPath outputRuleName := "snapshot" outputDesc := "Building snapshot for " + ctx.ModuleName() // If there are no zips to merge then generate the output zip directly. // Otherwise, generate an intermediate zip file into which other zips can be // merged. var zipFile android.OutputPath var ruleName string var desc string if len(builder.zipsToMerge) == 0 { zipFile = outputZipFile ruleName = outputRuleName desc = outputDesc } else { zipFile = android.PathForModuleOut(ctx, ctx.ModuleName()+"-current.unmerged.zip").OutputPath ruleName = "intermediate snapshot" desc = "Building intermediate snapshot for " + ctx.ModuleName() } rb := android.NewRuleBuilder() rb.Command(). BuiltTool(ctx, "soong_zip"). FlagWithArg("-C ", builder.snapshotDir.String()). FlagWithRspFileInputList("-l ", filesToZip). FlagWithOutput("-o ", zipFile) rb.Build(pctx, ctx, ruleName, desc) ctx.Build(pctx, android.BuildParams{ Description: desc, Rule: zipFiles, Inputs: filesToZip, Output: zipFile, Args: map[string]string{ "basedir": builder.snapshotDir.String(), }, }) if len(builder.zipsToMerge) != 0 { rb := android.NewRuleBuilder() rb.Command(). BuiltTool(ctx, "merge_zips"). Output(outputZipFile). Input(zipFile). Inputs(builder.zipsToMerge) rb.Build(pctx, ctx, outputRuleName, outputDesc) ctx.Build(pctx, android.BuildParams{ Description: outputDesc, Rule: mergeZips, Input: zipFile, Inputs: builder.zipsToMerge, Output: outputZipFile, }) } return outputZipFile Loading Loading @@ -534,14 +563,16 @@ func (s *snapshotBuilder) UnzipToSnapshot(zipPath android.Path, destDir string) // Repackage the zip file so that the entries are in the destDir directory. // This will allow the zip file to be merged into the snapshot. tmpZipPath := android.PathForModuleOut(ctx, "tmp", destDir+".zip").OutputPath rb := android.NewRuleBuilder() rb.Command(). BuiltTool(ctx, "zip2zip"). FlagWithInput("-i ", zipPath). FlagWithOutput("-o ", tmpZipPath). Flag("**/*:" + destDir) rb.Build(pctx, ctx, "repackaging "+destDir, "Repackaging zip file "+destDir+" for snapshot "+ctx.ModuleName()) ctx.Build(pctx, android.BuildParams{ Description: "Repackaging zip file " + destDir + " for snapshot " + ctx.ModuleName(), Rule: repackageZip, Input: zipPath, Output: tmpZipPath, Args: map[string]string{ "destdir": destDir, }, }) // Add the repackaged zip file to the files to merge. s.zipsToMerge = append(s.zipsToMerge, tmpZipPath) Loading Loading
sdk/sdk.go +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ import ( func init() { pctx.Import("android/soong/android") pctx.Import("android/soong/java/config") android.RegisterModuleType("sdk", ModuleFactory) android.RegisterModuleType("sdk_snapshot", SnapshotModuleFactory) android.PreDepsMutators(RegisterPreDepsMutators) Loading
sdk/sdk_test.go +43 −31 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ import ( "android/soong/java" ) func testSdkContext(t *testing.T, bp string) (*android.TestContext, android.Config) { func testSdkContext(bp string) (*android.TestContext, android.Config) { config := android.TestArchConfig(buildDir, nil) ctx := android.NewTestArchContext() Loading Loading @@ -114,7 +114,7 @@ func testSdkContext(t *testing.T, bp string) (*android.TestContext, android.Conf } func testSdk(t *testing.T, bp string) (*android.TestContext, android.Config) { ctx, config := testSdkContext(t, bp) ctx, config := testSdkContext(bp) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) android.FailIfErrored(t, errs) _, errs = ctx.PrepareBuildActions(config) Loading @@ -124,7 +124,7 @@ func testSdk(t *testing.T, bp string) (*android.TestContext, android.Config) { func testSdkError(t *testing.T, pattern, bp string) { t.Helper() ctx, config := testSdkContext(t, bp) ctx, config := testSdkContext(bp) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) if len(errs) > 0 { android.FailIfNoMatchingErrors(t, pattern, errs) Loading @@ -147,7 +147,7 @@ func ensureListContains(t *testing.T, result []string, expected string) { } func pathsToStrings(paths android.Paths) []string { ret := []string{} var ret []string for _, p := range paths { ret = append(ret, p.String()) } Loading Loading @@ -554,14 +554,23 @@ sdk_snapshot { var copySrcs []string var copyDests []string buildParams := sdk.BuildParamsForTests() var zipBp android.BuildParams var mergeZipInputs []string var intermediateZip string var outputZip string for _, bp := range buildParams { ruleString := bp.Rule.String() if ruleString == "android/soong/android.Cp" { if ruleString == android.Cp.String() { copySrcs = append(copySrcs, bp.Input.String()) copyDests = append(copyDests, bp.Output.Rel()) // rooted at the snapshot root } else if ruleString == "<local rule>:m.mysdk_android_common.snapshot" { zipBp = bp } else if ruleString == zipFiles.String() { intermediateZip = bp.Output.String() } else if ruleString == mergeZips.String() { input := bp.Input.String() if intermediateZip != input { t.Errorf("Intermediate zip %s is not an input to merge_zips, %s is used instead", intermediateZip, input) } mergeZipInputs = bp.Inputs.Strings() outputZip = bp.Output.String() } } Loading @@ -582,17 +591,14 @@ sdk_snapshot { ensureListContains(t, copyDests, "java/myjavalib.jar") ensureListContains(t, copyDests, "arm64/lib/mynativelib.so") expectedOutputZip := filepath.Join(buildDir, ".intermediates/mysdk/android_common/mysdk-current.zip") expectedRepackagedZip := filepath.Join(buildDir, ".intermediates/mysdk/android_common/tmp/java/myjavaapistubs_stubs_sources.zip") // Ensure that the droidstubs .srcjar as repackaged into a temporary zip file // and then merged together with the intermediate snapshot zip. snapshotCreationInputs := zipBp.Implicits.Strings() ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/android_common/tmp/java/myjavaapistubs_stubs_sources.zip")) ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/android_common/mysdk-current.unmerged.zip")) actual := zipBp.Output.String() expected := filepath.Join(buildDir, ".intermediates/mysdk/android_common/mysdk-current.zip") if actual != expected { t.Errorf("Expected snapshot output to be %q but was %q", expected, actual) ensureListContains(t, mergeZipInputs, expectedRepackagedZip) if outputZip != expectedOutputZip { t.Errorf("Expected snapshot output to be %q but was %q", expectedOutputZip, outputZip) } } Loading Loading @@ -749,14 +755,23 @@ sdk_snapshot { var copySrcs []string var copyDests []string buildParams := sdk.BuildParamsForTests() var zipBp android.BuildParams var mergeZipInputs []string var intermediateZip string var outputZip string for _, bp := range buildParams { ruleString := bp.Rule.String() if ruleString == "android/soong/android.Cp" { if ruleString == android.Cp.String() { copySrcs = append(copySrcs, bp.Input.String()) copyDests = append(copyDests, bp.Output.Rel()) // rooted at the snapshot root } else if ruleString == "<local rule>:m.mysdk_linux_glibc_common.snapshot" { zipBp = bp } else if ruleString == zipFiles.String() { intermediateZip = bp.Output.String() } else if ruleString == mergeZips.String() { input := bp.Input.String() if intermediateZip != input { t.Errorf("Intermediate zip %s is not an input to merge_zips, %s is used instead", intermediateZip, input) } mergeZipInputs = bp.Inputs.Strings() outputZip = bp.Output.String() } } Loading @@ -777,17 +792,14 @@ sdk_snapshot { ensureListContains(t, copyDests, "java/myjavalib.jar") ensureListContains(t, copyDests, "x86_64/lib/mynativelib.so") expectedOutputZip := filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.zip") expectedRepackagedZip := filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip") // Ensure that the droidstubs .srcjar as repackaged into a temporary zip file // and then merged together with the intermediate snapshot zip. snapshotCreationInputs := zipBp.Implicits.Strings() ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip")) ensureListContains(t, snapshotCreationInputs, filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.unmerged.zip")) actual := zipBp.Output.String() expected := filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.zip") if actual != expected { t.Errorf("Expected snapshot output to be %q but was %q", expected, actual) ensureListContains(t, mergeZipInputs, expectedRepackagedZip) if outputZip != expectedOutputZip { t.Errorf("Expected snapshot output to be %q but was %q", expectedOutputZip, outputZip) } } Loading @@ -810,7 +822,7 @@ func setUp() { } func tearDown() { os.RemoveAll(buildDir) _ = os.RemoveAll(buildDir) } func TestMain(m *testing.M) { Loading
sdk/update.go +57 −26 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import ( "reflect" "strings" "github.com/google/blueprint" "github.com/google/blueprint/proptools" "android/soong/android" Loading @@ -29,6 +30,36 @@ import ( var pctx = android.NewPackageContext("android/soong/sdk") var ( repackageZip = pctx.AndroidStaticRule("SnapshotRepackageZip", blueprint.RuleParams{ Command: `${config.Zip2ZipCmd} -i $in -o $out "**/*:$destdir"`, CommandDeps: []string{ "${config.Zip2ZipCmd}", }, }, "destdir") zipFiles = pctx.AndroidStaticRule("SnapshotZipFiles", blueprint.RuleParams{ Command: `${config.SoongZipCmd} -C $basedir -l $out.rsp -o $out`, CommandDeps: []string{ "${config.SoongZipCmd}", }, Rspfile: "$out.rsp", RspfileContent: "$in", }, "basedir") mergeZips = pctx.AndroidStaticRule("SnapshotMergeZips", blueprint.RuleParams{ Command: `${config.MergeZipsCmd} $out $in`, CommandDeps: []string{ "${config.MergeZipsCmd}", }, }) ) type generatedContents struct { content strings.Builder indentLevel int Loading Loading @@ -316,41 +347,39 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext) android.OutputPath { // zip them all outputZipFile := android.PathForModuleOut(ctx, ctx.ModuleName()+"-current.zip").OutputPath outputRuleName := "snapshot" outputDesc := "Building snapshot for " + ctx.ModuleName() // If there are no zips to merge then generate the output zip directly. // Otherwise, generate an intermediate zip file into which other zips can be // merged. var zipFile android.OutputPath var ruleName string var desc string if len(builder.zipsToMerge) == 0 { zipFile = outputZipFile ruleName = outputRuleName desc = outputDesc } else { zipFile = android.PathForModuleOut(ctx, ctx.ModuleName()+"-current.unmerged.zip").OutputPath ruleName = "intermediate snapshot" desc = "Building intermediate snapshot for " + ctx.ModuleName() } rb := android.NewRuleBuilder() rb.Command(). BuiltTool(ctx, "soong_zip"). FlagWithArg("-C ", builder.snapshotDir.String()). FlagWithRspFileInputList("-l ", filesToZip). FlagWithOutput("-o ", zipFile) rb.Build(pctx, ctx, ruleName, desc) ctx.Build(pctx, android.BuildParams{ Description: desc, Rule: zipFiles, Inputs: filesToZip, Output: zipFile, Args: map[string]string{ "basedir": builder.snapshotDir.String(), }, }) if len(builder.zipsToMerge) != 0 { rb := android.NewRuleBuilder() rb.Command(). BuiltTool(ctx, "merge_zips"). Output(outputZipFile). Input(zipFile). Inputs(builder.zipsToMerge) rb.Build(pctx, ctx, outputRuleName, outputDesc) ctx.Build(pctx, android.BuildParams{ Description: outputDesc, Rule: mergeZips, Input: zipFile, Inputs: builder.zipsToMerge, Output: outputZipFile, }) } return outputZipFile Loading Loading @@ -534,14 +563,16 @@ func (s *snapshotBuilder) UnzipToSnapshot(zipPath android.Path, destDir string) // Repackage the zip file so that the entries are in the destDir directory. // This will allow the zip file to be merged into the snapshot. tmpZipPath := android.PathForModuleOut(ctx, "tmp", destDir+".zip").OutputPath rb := android.NewRuleBuilder() rb.Command(). BuiltTool(ctx, "zip2zip"). FlagWithInput("-i ", zipPath). FlagWithOutput("-o ", tmpZipPath). Flag("**/*:" + destDir) rb.Build(pctx, ctx, "repackaging "+destDir, "Repackaging zip file "+destDir+" for snapshot "+ctx.ModuleName()) ctx.Build(pctx, android.BuildParams{ Description: "Repackaging zip file " + destDir + " for snapshot " + ctx.ModuleName(), Rule: repackageZip, Input: zipPath, Output: tmpZipPath, Args: map[string]string{ "destdir": destDir, }, }) // Add the repackaged zip file to the files to merge. s.zipsToMerge = append(s.zipsToMerge, tmpZipPath) Loading