diff options
author | Anton Hansson <hansson@google.com> | 2020-03-27 19:39:48 +0000 |
---|---|---|
committer | Anton Hansson <hansson@google.com> | 2020-03-30 13:55:32 +0100 |
commit | 1e65f94a4b2cc7dea1896937c2068b87c899c465 (patch) | |
tree | c4d39708e5577501990b1a3c216994254370baf3 | |
parent | 0ed9a7d67462fc55dff3d22fc6939dd308ab82f7 (diff) | |
download | build_soong-1e65f94a4b2cc7dea1896937c2068b87c899c465.tar.gz build_soong-1e65f94a4b2cc7dea1896937c2068b87c899c465.tar.bz2 build_soong-1e65f94a4b2cc7dea1896937c2068b87c899c465.zip |
Add a Tag field to dist to dist a tagged output
Make java_library support this mode of output, to allow
callers to dist the classes.jar file rather than the dexed
jar file.
Bug: 152618077
Test: followup CL
Change-Id: I5ba6949833a0fbb95376142aec5096ff5f084c00
-rw-r--r-- | java/androidmk.go | 1 | ||||
-rw-r--r-- | java/androidmk_test.go | 36 | ||||
-rw-r--r-- | java/java.go | 23 |
3 files changed, 59 insertions, 1 deletions
diff --git a/java/androidmk.go b/java/androidmk.go index a220cce7..e18fbb42 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -72,6 +72,7 @@ func (library *Library) AndroidMkEntries() []android.AndroidMkEntries { if !hideFromMake { mainEntries = android.AndroidMkEntries{ Class: "JAVA_LIBRARIES", + DistFile: android.OptionalPathForPath(library.distFile), OutputFile: android.OptionalPathForPath(library.outputFile), Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk", ExtraEntries: []android.AndroidMkExtraEntriesFunc{ diff --git a/java/androidmk_test.go b/java/androidmk_test.go index acc6bf03..7daa6244 100644 --- a/java/androidmk_test.go +++ b/java/androidmk_test.go @@ -16,6 +16,7 @@ package java import ( "reflect" + "strings" "testing" "android/soong/android" @@ -133,3 +134,38 @@ func TestHostdexSpecificRequired(t *testing.T) { t.Errorf("Unexpected required modules - expected: %q, actual: %q", expected, actual) } } + +func TestDistWithTag(t *testing.T) { + ctx, config := testJava(t, ` + java_library { + name: "foo_without_tag", + srcs: ["a.java"], + compile_dex: true, + dist: { + targets: ["hi"], + }, + } + java_library { + name: "foo_with_tag", + srcs: ["a.java"], + compile_dex: true, + dist: { + targets: ["hi"], + tag: ".jar", + }, + } + `) + + without_tag_entries := android.AndroidMkEntriesForTest(t, config, "", ctx.ModuleForTests("foo_without_tag", "android_common").Module()) + with_tag_entries := android.AndroidMkEntriesForTest(t, config, "", ctx.ModuleForTests("foo_with_tag", "android_common").Module()) + + if len(without_tag_entries) != 2 || len(with_tag_entries) != 2 { + t.Errorf("two mk entries per module expected, got %d and %d", len(without_tag_entries), len(with_tag_entries)) + } + if !with_tag_entries[0].DistFile.Valid() || !strings.Contains(with_tag_entries[0].DistFile.String(), "/javac/foo_with_tag.jar") { + t.Errorf("expected classes.jar DistFile, got %v", with_tag_entries[0].DistFile) + } + if without_tag_entries[0].DistFile.Valid() { + t.Errorf("did not expect explicit DistFile, got %v", without_tag_entries[0].DistFile) + } +} diff --git a/java/java.go b/java/java.go index dc0b2724..edf83cfe 100644 --- a/java/java.go +++ b/java/java.go @@ -419,6 +419,8 @@ type Module struct { // list of the xref extraction files kytheFiles android.Paths + + distFile android.Path } func (j *Module) OutputFiles(tag string) (android.Paths, error) { @@ -1775,9 +1777,18 @@ func (j *Module) IsInstallable() bool { // Java libraries (.jar file) // +type LibraryProperties struct { + Dist struct { + // The tag of the output of this module that should be output. + Tag *string `android:"arch_variant"` + } `android:"arch_variant"` +} + type Library struct { Module + libraryProperties LibraryProperties + InstallMixin func(ctx android.ModuleContext, installPath android.Path) (extraInstallDeps android.Paths) } @@ -1821,6 +1832,15 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { j.installFile = ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".jar", j.outputFile, extraInstallDeps...) } + + // Verify Dist.Tag is set to a supported output + if j.libraryProperties.Dist.Tag != nil { + distFiles, err := j.OutputFiles(*j.libraryProperties.Dist.Tag) + if err != nil { + ctx.PropertyErrorf("dist.tag", "%s", err.Error()) + } + j.distFile = distFiles[0] + } } func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) { @@ -1945,7 +1965,8 @@ func LibraryFactory() android.Module { &module.Module.properties, &module.Module.deviceProperties, &module.Module.dexpreoptProperties, - &module.Module.protoProperties) + &module.Module.protoProperties, + &module.libraryProperties) android.InitApexModule(module) android.InitSdkAwareModule(module) |