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
This commit is contained in:
@@ -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{
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
23
java/java.go
23
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)
|
||||
|
Reference in New Issue
Block a user