Merge "bp2build converts java_genrule and java_genrule_host" am: 925a30496a
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1946827 Change-Id: Ibf448c851647a8e4228f42d1b5d9fae14db53951
This commit is contained in:
commit
61294da112
8 changed files with 476 additions and 405 deletions
|
@ -468,9 +468,13 @@ var (
|
||||||
"libdexfiled", // depends on unconverted modules: dexfile_operator_srcs, libartbased, libartpalette
|
"libdexfiled", // depends on unconverted modules: dexfile_operator_srcs, libartbased, libartpalette
|
||||||
|
|
||||||
// go deps:
|
// go deps:
|
||||||
"apex-protos", // depends on unconverted modules: soong_zip
|
"apex-protos", // depends on soong_zip, a go binary
|
||||||
|
"robolectric_tzdata", // depends on soong_zip, a go binary
|
||||||
"host_bionic_linker_asm", // depends on extract_linker, a go binary.
|
"host_bionic_linker_asm", // depends on extract_linker, a go binary.
|
||||||
"host_bionic_linker_script", // depends on extract_linker, a go binary.
|
"host_bionic_linker_script", // depends on extract_linker, a go binary.
|
||||||
|
|
||||||
|
// java deps
|
||||||
|
"bin2c_fastdeployagent", // depends on deployagent, a java binary
|
||||||
}
|
}
|
||||||
|
|
||||||
// Per-module denylist of cc_library modules to only generate the static
|
// Per-module denylist of cc_library modules to only generate the static
|
||||||
|
|
|
@ -38,7 +38,6 @@ bootstrap_go_package {
|
||||||
"build_conversion_test.go",
|
"build_conversion_test.go",
|
||||||
"bzl_conversion_test.go",
|
"bzl_conversion_test.go",
|
||||||
"cc_binary_conversion_test.go",
|
"cc_binary_conversion_test.go",
|
||||||
"cc_genrule_conversion_test.go",
|
|
||||||
"cc_library_conversion_test.go",
|
"cc_library_conversion_test.go",
|
||||||
"cc_library_headers_conversion_test.go",
|
"cc_library_headers_conversion_test.go",
|
||||||
"cc_library_shared_conversion_test.go",
|
"cc_library_shared_conversion_test.go",
|
||||||
|
|
|
@ -1,235 +0,0 @@
|
||||||
// Copyright 2021 Google Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package bp2build
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"android/soong/android"
|
|
||||||
"android/soong/cc"
|
|
||||||
)
|
|
||||||
|
|
||||||
var otherCcGenruleBp = map[string]string{
|
|
||||||
"other/Android.bp": `cc_genrule {
|
|
||||||
name: "foo.tool",
|
|
||||||
out: ["foo_tool.out"],
|
|
||||||
srcs: ["foo_tool.in"],
|
|
||||||
cmd: "cp $(in) $(out)",
|
|
||||||
}
|
|
||||||
cc_genrule {
|
|
||||||
name: "other.tool",
|
|
||||||
out: ["other_tool.out"],
|
|
||||||
srcs: ["other_tool.in"],
|
|
||||||
cmd: "cp $(in) $(out)",
|
|
||||||
}`,
|
|
||||||
}
|
|
||||||
|
|
||||||
func runCcGenruleTestCase(t *testing.T, tc bp2buildTestCase) {
|
|
||||||
t.Helper()
|
|
||||||
(&tc).moduleTypeUnderTest = "cc_genrule"
|
|
||||||
(&tc).moduleTypeUnderTestFactory = cc.GenRuleFactory
|
|
||||||
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCliVariableReplacement(t *testing.T) {
|
|
||||||
runCcGenruleTestCase(t, bp2buildTestCase{
|
|
||||||
description: "cc_genrule with command line variable replacements",
|
|
||||||
blueprint: `cc_genrule {
|
|
||||||
name: "foo.tool",
|
|
||||||
out: ["foo_tool.out"],
|
|
||||||
srcs: ["foo_tool.in"],
|
|
||||||
cmd: "cp $(in) $(out)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}
|
|
||||||
|
|
||||||
cc_genrule {
|
|
||||||
name: "foo",
|
|
||||||
out: ["foo.out"],
|
|
||||||
srcs: ["foo.in"],
|
|
||||||
tools: [":foo.tool"],
|
|
||||||
cmd: "$(location :foo.tool) --genDir=$(genDir) arg $(in) $(out)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}`,
|
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"$(location :foo.tool) --genDir=$(RULEDIR) arg $(SRCS) $(OUTS)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["foo.in"]`,
|
|
||||||
"tools": `[":foo.tool"]`,
|
|
||||||
}),
|
|
||||||
makeBazelTarget("genrule", "foo.tool", attrNameToString{
|
|
||||||
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
|
||||||
"outs": `["foo_tool.out"]`,
|
|
||||||
"srcs": `["foo_tool.in"]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUsingLocationsLabel(t *testing.T) {
|
|
||||||
runCcGenruleTestCase(t, bp2buildTestCase{
|
|
||||||
description: "cc_genrule using $(locations :label)",
|
|
||||||
blueprint: `cc_genrule {
|
|
||||||
name: "foo.tools",
|
|
||||||
out: ["foo_tool.out", "foo_tool2.out"],
|
|
||||||
srcs: ["foo_tool.in"],
|
|
||||||
cmd: "cp $(in) $(out)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}
|
|
||||||
|
|
||||||
cc_genrule {
|
|
||||||
name: "foo",
|
|
||||||
out: ["foo.out"],
|
|
||||||
srcs: ["foo.in"],
|
|
||||||
tools: [":foo.tools"],
|
|
||||||
cmd: "$(locations :foo.tools) -s $(out) $(in)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}`,
|
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"$(locations :foo.tools) -s $(OUTS) $(SRCS)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["foo.in"]`,
|
|
||||||
"tools": `[":foo.tools"]`,
|
|
||||||
}),
|
|
||||||
makeBazelTarget("genrule", "foo.tools", attrNameToString{
|
|
||||||
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
|
||||||
"outs": `[
|
|
||||||
"foo_tool.out",
|
|
||||||
"foo_tool2.out",
|
|
||||||
]`,
|
|
||||||
"srcs": `["foo_tool.in"]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUsingLocationsAbsoluteLabel(t *testing.T) {
|
|
||||||
runCcGenruleTestCase(t, bp2buildTestCase{
|
|
||||||
description: "cc_genrule using $(locations //absolute:label)",
|
|
||||||
blueprint: `cc_genrule {
|
|
||||||
name: "foo",
|
|
||||||
out: ["foo.out"],
|
|
||||||
srcs: ["foo.in"],
|
|
||||||
tool_files: [":foo.tool"],
|
|
||||||
cmd: "$(locations :foo.tool) -s $(out) $(in)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}`,
|
|
||||||
filesystem: otherCcGenruleBp,
|
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["foo.in"]`,
|
|
||||||
"tools": `["//other:foo.tool"]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSrcsUsingAbsoluteLabel(t *testing.T) {
|
|
||||||
runCcGenruleTestCase(t, bp2buildTestCase{
|
|
||||||
description: "cc_genrule srcs using $(locations //absolute:label)",
|
|
||||||
blueprint: `cc_genrule {
|
|
||||||
name: "foo",
|
|
||||||
out: ["foo.out"],
|
|
||||||
srcs: [":other.tool"],
|
|
||||||
tool_files: [":foo.tool"],
|
|
||||||
cmd: "$(locations :foo.tool) -s $(out) $(location :other.tool)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}`,
|
|
||||||
filesystem: otherCcGenruleBp,
|
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(location //other:other.tool)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["//other:other.tool"]`,
|
|
||||||
"tools": `["//other:foo.tool"]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLocationsLabelUsesFirstToolFile(t *testing.T) {
|
|
||||||
runCcGenruleTestCase(t, bp2buildTestCase{
|
|
||||||
description: "cc_genrule using $(location) label should substitute first tool label automatically",
|
|
||||||
blueprint: `cc_genrule {
|
|
||||||
name: "foo",
|
|
||||||
out: ["foo.out"],
|
|
||||||
srcs: ["foo.in"],
|
|
||||||
tool_files: [":foo.tool", ":other.tool"],
|
|
||||||
cmd: "$(location) -s $(out) $(in)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}`,
|
|
||||||
filesystem: otherCcGenruleBp,
|
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"$(location //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["foo.in"]`,
|
|
||||||
"tools": `[
|
|
||||||
"//other:foo.tool",
|
|
||||||
"//other:other.tool",
|
|
||||||
]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLocationsLabelUsesFirstTool(t *testing.T) {
|
|
||||||
runCcGenruleTestCase(t, bp2buildTestCase{
|
|
||||||
description: "cc_genrule using $(locations) label should substitute first tool label automatically",
|
|
||||||
blueprint: `cc_genrule {
|
|
||||||
name: "foo",
|
|
||||||
out: ["foo.out"],
|
|
||||||
srcs: ["foo.in"],
|
|
||||||
tools: [":foo.tool", ":other.tool"],
|
|
||||||
cmd: "$(locations) -s $(out) $(in)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}`,
|
|
||||||
filesystem: otherCcGenruleBp,
|
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["foo.in"]`,
|
|
||||||
"tools": `[
|
|
||||||
"//other:foo.tool",
|
|
||||||
"//other:other.tool",
|
|
||||||
]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestWithoutToolsOrToolFiles(t *testing.T) {
|
|
||||||
runCcGenruleTestCase(t, bp2buildTestCase{
|
|
||||||
description: "cc_genrule without tools or tool_files can convert successfully",
|
|
||||||
blueprint: `cc_genrule {
|
|
||||||
name: "foo",
|
|
||||||
out: ["foo.out"],
|
|
||||||
srcs: ["foo.in"],
|
|
||||||
cmd: "cp $(in) $(out)",
|
|
||||||
bazel_module: { bp2build_available: true },
|
|
||||||
}`,
|
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["foo.in"]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -16,7 +16,10 @@ package bp2build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
|
"android/soong/cc"
|
||||||
"android/soong/genrule"
|
"android/soong/genrule"
|
||||||
|
"android/soong/java"
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -31,58 +34,114 @@ func runGenruleTestCase(t *testing.T, tc bp2buildTestCase) {
|
||||||
runBp2BuildTestCase(t, registerGenruleModuleTypes, tc)
|
runBp2BuildTestCase(t, registerGenruleModuleTypes, tc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGenruleBp2Build(t *testing.T) {
|
func otherGenruleBp(genruleTarget string) map[string]string {
|
||||||
otherGenruleBp := map[string]string{
|
return map[string]string{
|
||||||
"other/Android.bp": `genrule {
|
"other/Android.bp": fmt.Sprintf(`%s {
|
||||||
name: "foo.tool",
|
name: "foo.tool",
|
||||||
out: ["foo_tool.out"],
|
out: ["foo_tool.out"],
|
||||||
srcs: ["foo_tool.in"],
|
srcs: ["foo_tool.in"],
|
||||||
cmd: "cp $(in) $(out)",
|
cmd: "cp $(in) $(out)",
|
||||||
}
|
}
|
||||||
genrule {
|
%s {
|
||||||
name: "other.tool",
|
name: "other.tool",
|
||||||
out: ["other_tool.out"],
|
out: ["other_tool.out"],
|
||||||
srcs: ["other_tool.in"],
|
srcs: ["other_tool.in"],
|
||||||
cmd: "cp $(in) $(out)",
|
cmd: "cp $(in) $(out)",
|
||||||
}`,
|
}`, genruleTarget, genruleTarget),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleCliVariableReplacement(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
moduleType string
|
||||||
|
factory android.ModuleFactory
|
||||||
|
genDir string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
moduleType: "genrule",
|
||||||
|
factory: genrule.GenRuleFactory,
|
||||||
|
genDir: "$(GENDIR)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "cc_genrule",
|
||||||
|
factory: cc.GenRuleFactory,
|
||||||
|
genDir: "$(RULEDIR)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule",
|
||||||
|
factory: java.GenRuleFactory,
|
||||||
|
genDir: "$(RULEDIR)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule_host",
|
||||||
|
factory: java.GenRuleFactoryHost,
|
||||||
|
genDir: "$(RULEDIR)",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
testCases := []bp2buildTestCase{
|
bp := `%s {
|
||||||
{
|
|
||||||
description: "genrule with command line variable replacements",
|
|
||||||
blueprint: `genrule {
|
|
||||||
name: "foo.tool",
|
name: "foo.tool",
|
||||||
out: ["foo_tool.out"],
|
out: ["foo_tool.out"],
|
||||||
srcs: ["foo_tool.in"],
|
srcs: ["foo_tool.in"],
|
||||||
cmd: "cp $(in) $(out)",
|
cmd: "cp $(in) $(out)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: false },
|
||||||
}
|
}
|
||||||
|
|
||||||
genrule {
|
%s {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
out: ["foo.out"],
|
out: ["foo.out"],
|
||||||
srcs: ["foo.in"],
|
srcs: ["foo.in"],
|
||||||
tools: [":foo.tool"],
|
tools: [":foo.tool"],
|
||||||
cmd: "$(location :foo.tool) --genDir=$(genDir) arg $(in) $(out)",
|
cmd: "$(location :foo.tool) --genDir=$(genDir) arg $(in) $(out)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}`,
|
}`
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
for _, tc := range testCases {
|
||||||
"cmd": `"$(location :foo.tool) --genDir=$(GENDIR) arg $(SRCS) $(OUTS)"`,
|
expectedBazelTargets := []string{
|
||||||
"outs": `["foo.out"]`,
|
makeBazelTarget("genrule", "foo", attrNameToString{
|
||||||
"srcs": `["foo.in"]`,
|
"cmd": fmt.Sprintf(`"$(location :foo.tool) --genDir=%s arg $(SRCS) $(OUTS)"`, tc.genDir),
|
||||||
"tools": `[":foo.tool"]`,
|
"outs": `["foo.out"]`,
|
||||||
}),
|
"srcs": `["foo.in"]`,
|
||||||
makeBazelTarget("genrule", "foo.tool", attrNameToString{
|
"tools": `[":foo.tool"]`,
|
||||||
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
}),
|
||||||
"outs": `["foo_tool.out"]`,
|
}
|
||||||
"srcs": `["foo_tool.in"]`,
|
|
||||||
}),
|
t.Run(tc.moduleType, func(t *testing.T) {
|
||||||
},
|
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
|
||||||
|
bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: tc.moduleType,
|
||||||
|
moduleTypeUnderTestFactory: tc.factory,
|
||||||
|
blueprint: fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
|
||||||
|
expectedBazelTargets: expectedBazelTargets,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleLocationsLabel(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
moduleType string
|
||||||
|
factory android.ModuleFactory
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
moduleType: "genrule",
|
||||||
|
factory: genrule.GenRuleFactory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "genrule using $(locations :label)",
|
moduleType: "cc_genrule",
|
||||||
blueprint: `genrule {
|
factory: cc.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule",
|
||||||
|
factory: java.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule_host",
|
||||||
|
factory: java.GenRuleFactoryHost,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
bp := `%s {
|
||||||
name: "foo.tools",
|
name: "foo.tools",
|
||||||
out: ["foo_tool.out", "foo_tool2.out"],
|
out: ["foo_tool.out", "foo_tool2.out"],
|
||||||
srcs: ["foo_tool.in"],
|
srcs: ["foo_tool.in"],
|
||||||
|
@ -90,144 +149,322 @@ genrule {
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}
|
}
|
||||||
|
|
||||||
genrule {
|
%s {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
out: ["foo.out"],
|
out: ["foo.out"],
|
||||||
srcs: ["foo.in"],
|
srcs: ["foo.in"],
|
||||||
tools: [":foo.tools"],
|
tools: [":foo.tools"],
|
||||||
cmd: "$(locations :foo.tools) -s $(out) $(in)",
|
cmd: "$(locations :foo.tools) -s $(out) $(in)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}`,
|
}`
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
expectedBazelTargets :=
|
||||||
"cmd": `"$(locations :foo.tools) -s $(OUTS) $(SRCS)"`,
|
[]string{
|
||||||
"outs": `["foo.out"]`,
|
makeBazelTarget("genrule", "foo", attrNameToString{
|
||||||
"srcs": `["foo.in"]`,
|
"cmd": `"$(locations :foo.tools) -s $(OUTS) $(SRCS)"`,
|
||||||
"tools": `[":foo.tools"]`,
|
"outs": `["foo.out"]`,
|
||||||
}),
|
"srcs": `["foo.in"]`,
|
||||||
makeBazelTarget("genrule", "foo.tools", attrNameToString{
|
"tools": `[":foo.tools"]`,
|
||||||
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
}),
|
||||||
"outs": `[
|
makeBazelTarget("genrule", "foo.tools", attrNameToString{
|
||||||
|
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
||||||
|
"outs": `[
|
||||||
"foo_tool.out",
|
"foo_tool.out",
|
||||||
"foo_tool2.out",
|
"foo_tool2.out",
|
||||||
]`,
|
]`,
|
||||||
"srcs": `["foo_tool.in"]`,
|
"srcs": `["foo_tool.in"]`,
|
||||||
}),
|
}),
|
||||||
},
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.moduleType, func(t *testing.T) {
|
||||||
|
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
|
||||||
|
bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: tc.moduleType,
|
||||||
|
moduleTypeUnderTestFactory: tc.factory,
|
||||||
|
blueprint: fmt.Sprintf(bp, tc.moduleType, tc.moduleType),
|
||||||
|
expectedBazelTargets: expectedBazelTargets,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleLocationsAbsoluteLabel(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
moduleType string
|
||||||
|
factory android.ModuleFactory
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
moduleType: "genrule",
|
||||||
|
factory: genrule.GenRuleFactory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "genrule using $(locations //absolute:label)",
|
moduleType: "cc_genrule",
|
||||||
blueprint: `genrule {
|
factory: cc.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule",
|
||||||
|
factory: java.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule_host",
|
||||||
|
factory: java.GenRuleFactoryHost,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
bp := `%s {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
out: ["foo.out"],
|
out: ["foo.out"],
|
||||||
srcs: ["foo.in"],
|
srcs: ["foo.in"],
|
||||||
tool_files: [":foo.tool"],
|
tool_files: [":foo.tool"],
|
||||||
cmd: "$(locations :foo.tool) -s $(out) $(in)",
|
cmd: "$(locations :foo.tool) -s $(out) $(in)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}`,
|
}`
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
expectedBazelTargets := []string{
|
||||||
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
makeBazelTarget("genrule", "foo", attrNameToString{
|
||||||
"outs": `["foo.out"]`,
|
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
||||||
"srcs": `["foo.in"]`,
|
"outs": `["foo.out"]`,
|
||||||
"tools": `["//other:foo.tool"]`,
|
"srcs": `["foo.in"]`,
|
||||||
}),
|
"tools": `["//other:foo.tool"]`,
|
||||||
},
|
}),
|
||||||
filesystem: otherGenruleBp,
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.moduleType, func(t *testing.T) {
|
||||||
|
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
|
||||||
|
bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: tc.moduleType,
|
||||||
|
moduleTypeUnderTestFactory: tc.factory,
|
||||||
|
blueprint: fmt.Sprintf(bp, tc.moduleType),
|
||||||
|
expectedBazelTargets: expectedBazelTargets,
|
||||||
|
filesystem: otherGenruleBp(tc.moduleType),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleSrcsLocationsAbsoluteLabel(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
moduleType string
|
||||||
|
factory android.ModuleFactory
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
moduleType: "genrule",
|
||||||
|
factory: genrule.GenRuleFactory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "genrule srcs using $(locations //absolute:label)",
|
moduleType: "cc_genrule",
|
||||||
blueprint: `genrule {
|
factory: cc.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule",
|
||||||
|
factory: java.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule_host",
|
||||||
|
factory: java.GenRuleFactoryHost,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
bp := `%s {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
out: ["foo.out"],
|
out: ["foo.out"],
|
||||||
srcs: [":other.tool"],
|
srcs: [":other.tool"],
|
||||||
tool_files: [":foo.tool"],
|
tool_files: [":foo.tool"],
|
||||||
cmd: "$(locations :foo.tool) -s $(out) $(location :other.tool)",
|
cmd: "$(locations :foo.tool) -s $(out) $(location :other.tool)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}`,
|
}`
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
expectedBazelTargets := []string{
|
||||||
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(location //other:other.tool)"`,
|
makeBazelTarget("genrule", "foo", attrNameToString{
|
||||||
"outs": `["foo.out"]`,
|
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(location //other:other.tool)"`,
|
||||||
"srcs": `["//other:other.tool"]`,
|
"outs": `["foo.out"]`,
|
||||||
"tools": `["//other:foo.tool"]`,
|
"srcs": `["//other:other.tool"]`,
|
||||||
}),
|
"tools": `["//other:foo.tool"]`,
|
||||||
},
|
}),
|
||||||
filesystem: otherGenruleBp,
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.moduleType, func(t *testing.T) {
|
||||||
|
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
|
||||||
|
bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: tc.moduleType,
|
||||||
|
moduleTypeUnderTestFactory: tc.factory,
|
||||||
|
blueprint: fmt.Sprintf(bp, tc.moduleType),
|
||||||
|
expectedBazelTargets: expectedBazelTargets,
|
||||||
|
filesystem: otherGenruleBp(tc.moduleType),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleLocationLabelShouldSubstituteFirstToolLabel(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
moduleType string
|
||||||
|
factory android.ModuleFactory
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
moduleType: "genrule",
|
||||||
|
factory: genrule.GenRuleFactory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "genrule using $(location) label should substitute first tool label automatically",
|
moduleType: "cc_genrule",
|
||||||
blueprint: `genrule {
|
factory: cc.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule",
|
||||||
|
factory: java.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule_host",
|
||||||
|
factory: java.GenRuleFactoryHost,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
bp := `%s {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
out: ["foo.out"],
|
out: ["foo.out"],
|
||||||
srcs: ["foo.in"],
|
srcs: ["foo.in"],
|
||||||
tool_files: [":foo.tool", ":other.tool"],
|
tool_files: [":foo.tool", ":other.tool"],
|
||||||
cmd: "$(location) -s $(out) $(in)",
|
cmd: "$(location) -s $(out) $(in)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}`,
|
}`
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
expectedBazelTargets := []string{
|
||||||
"cmd": `"$(location //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
makeBazelTarget("genrule", "foo", attrNameToString{
|
||||||
"outs": `["foo.out"]`,
|
"cmd": `"$(location //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
||||||
"srcs": `["foo.in"]`,
|
"outs": `["foo.out"]`,
|
||||||
"tools": `[
|
"srcs": `["foo.in"]`,
|
||||||
|
"tools": `[
|
||||||
"//other:foo.tool",
|
"//other:foo.tool",
|
||||||
"//other:other.tool",
|
"//other:other.tool",
|
||||||
]`,
|
]`,
|
||||||
}),
|
})}
|
||||||
},
|
|
||||||
filesystem: otherGenruleBp,
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.moduleType, func(t *testing.T) {
|
||||||
|
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
|
||||||
|
bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: tc.moduleType,
|
||||||
|
moduleTypeUnderTestFactory: tc.factory,
|
||||||
|
blueprint: fmt.Sprintf(bp, tc.moduleType),
|
||||||
|
expectedBazelTargets: expectedBazelTargets,
|
||||||
|
filesystem: otherGenruleBp(tc.moduleType),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleLocationsLabelShouldSubstituteFirstToolLabel(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
moduleType string
|
||||||
|
factory android.ModuleFactory
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
moduleType: "genrule",
|
||||||
|
factory: genrule.GenRuleFactory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "genrule using $(locations) label should substitute first tool label automatically",
|
moduleType: "cc_genrule",
|
||||||
blueprint: `genrule {
|
factory: cc.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule",
|
||||||
|
factory: java.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule_host",
|
||||||
|
factory: java.GenRuleFactoryHost,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
bp := `%s {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
out: ["foo.out"],
|
out: ["foo.out"],
|
||||||
srcs: ["foo.in"],
|
srcs: ["foo.in"],
|
||||||
tools: [":foo.tool", ":other.tool"],
|
tool_files: [":foo.tool", ":other.tool"],
|
||||||
cmd: "$(locations) -s $(out) $(in)",
|
cmd: "$(locations) -s $(out) $(in)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}`,
|
}`
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
expectedBazelTargets := []string{
|
||||||
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
makeBazelTarget("genrule", "foo", attrNameToString{
|
||||||
"outs": `["foo.out"]`,
|
"cmd": `"$(locations //other:foo.tool) -s $(OUTS) $(SRCS)"`,
|
||||||
"srcs": `["foo.in"]`,
|
"outs": `["foo.out"]`,
|
||||||
"tools": `[
|
"srcs": `["foo.in"]`,
|
||||||
|
"tools": `[
|
||||||
"//other:foo.tool",
|
"//other:foo.tool",
|
||||||
"//other:other.tool",
|
"//other:other.tool",
|
||||||
]`,
|
]`,
|
||||||
}),
|
})}
|
||||||
},
|
|
||||||
filesystem: otherGenruleBp,
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.moduleType, func(t *testing.T) {
|
||||||
|
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
|
||||||
|
bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: tc.moduleType,
|
||||||
|
moduleTypeUnderTestFactory: tc.factory,
|
||||||
|
blueprint: fmt.Sprintf(bp, tc.moduleType),
|
||||||
|
expectedBazelTargets: expectedBazelTargets,
|
||||||
|
filesystem: otherGenruleBp(tc.moduleType),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleWithoutToolsOrToolFiles(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
moduleType string
|
||||||
|
factory android.ModuleFactory
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
moduleType: "genrule",
|
||||||
|
factory: genrule.GenRuleFactory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "genrule without tools or tool_files can convert successfully",
|
moduleType: "cc_genrule",
|
||||||
blueprint: `genrule {
|
factory: cc.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule",
|
||||||
|
factory: java.GenRuleFactory,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleType: "java_genrule_host",
|
||||||
|
factory: java.GenRuleFactoryHost,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
bp := `%s {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
out: ["foo.out"],
|
out: ["foo.out"],
|
||||||
srcs: ["foo.in"],
|
srcs: ["foo.in"],
|
||||||
cmd: "cp $(in) $(out)",
|
cmd: "cp $(in) $(out)",
|
||||||
bazel_module: { bp2build_available: true },
|
bazel_module: { bp2build_available: true },
|
||||||
}`,
|
}`
|
||||||
expectedBazelTargets: []string{
|
|
||||||
makeBazelTarget("genrule", "foo", attrNameToString{
|
|
||||||
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
|
||||||
"outs": `["foo.out"]`,
|
|
||||||
"srcs": `["foo.in"]`,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, testCase := range testCases {
|
expectedBazelTargets := []string{
|
||||||
t.Run(testCase.description, func(t *testing.T) {
|
makeBazelTarget("genrule", "foo", attrNameToString{
|
||||||
runGenruleTestCase(t, testCase)
|
"cmd": `"cp $(SRCS) $(OUTS)"`,
|
||||||
|
"outs": `["foo.out"]`,
|
||||||
|
"srcs": `["foo.in"]`,
|
||||||
|
})}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.moduleType, func(t *testing.T) {
|
||||||
|
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {},
|
||||||
|
bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: tc.moduleType,
|
||||||
|
moduleTypeUnderTestFactory: tc.factory,
|
||||||
|
blueprint: fmt.Sprintf(bp, tc.moduleType),
|
||||||
|
expectedBazelTargets: expectedBazelTargets,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBp2BuildInlinesDefaults(t *testing.T) {
|
func TestGenruleBp2BuildInlinesDefaults(t *testing.T) {
|
||||||
testCases := []bp2buildTestCase{
|
testCases := []bp2buildTestCase{
|
||||||
{
|
{
|
||||||
description: "genrule applies properties from a genrule_defaults dependency if not specified",
|
description: "genrule applies properties from a genrule_defaults dependency if not specified",
|
||||||
|
|
|
@ -862,7 +862,7 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
|
||||||
cmd = strings.Replace(*m.properties.Cmd, "$(in)", "$(SRCS)", -1)
|
cmd = strings.Replace(*m.properties.Cmd, "$(in)", "$(SRCS)", -1)
|
||||||
cmd = strings.Replace(cmd, "$(out)", "$(OUTS)", -1)
|
cmd = strings.Replace(cmd, "$(out)", "$(OUTS)", -1)
|
||||||
genDir := "$(GENDIR)"
|
genDir := "$(GENDIR)"
|
||||||
if ctx.ModuleType() == "cc_genrule" {
|
if t := ctx.ModuleType(); t == "cc_genrule" || t == "java_genrule" || t == "java_genrule_host" {
|
||||||
genDir = "$(RULEDIR)"
|
genDir = "$(RULEDIR)"
|
||||||
}
|
}
|
||||||
cmd = strings.Replace(cmd, "$(genDir)", genDir, -1)
|
cmd = strings.Replace(cmd, "$(genDir)", genDir, -1)
|
||||||
|
|
|
@ -24,8 +24,8 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func RegisterGenRuleBuildComponents(ctx android.RegistrationContext) {
|
func RegisterGenRuleBuildComponents(ctx android.RegistrationContext) {
|
||||||
ctx.RegisterModuleType("java_genrule", genRuleFactory)
|
ctx.RegisterModuleType("java_genrule", GenRuleFactory)
|
||||||
ctx.RegisterModuleType("java_genrule_host", genRuleFactoryHost)
|
ctx.RegisterModuleType("java_genrule_host", GenRuleFactoryHost)
|
||||||
}
|
}
|
||||||
|
|
||||||
// java_genrule is a genrule that can depend on other java_* objects.
|
// java_genrule is a genrule that can depend on other java_* objects.
|
||||||
|
@ -33,7 +33,7 @@ func RegisterGenRuleBuildComponents(ctx android.RegistrationContext) {
|
||||||
// By default a java_genrule has a single variant that will run against the device variant of its dependencies and
|
// By default a java_genrule has a single variant that will run against the device variant of its dependencies and
|
||||||
// produce an output that can be used as an input to a device java rule.
|
// produce an output that can be used as an input to a device java rule.
|
||||||
//
|
//
|
||||||
// Specifying `host_supported: true` will produce two variants, one that uses device dependencie sand one that uses
|
// Specifying `host_supported: true` will produce two variants, one that uses device dependencies and one that uses
|
||||||
// host dependencies. Each variant will run the command.
|
// host dependencies. Each variant will run the command.
|
||||||
//
|
//
|
||||||
// Use a java_genrule instead of a genrule when it needs to depend on or be depended on by other java modules, unless
|
// Use a java_genrule instead of a genrule when it needs to depend on or be depended on by other java modules, unless
|
||||||
|
@ -44,7 +44,7 @@ func RegisterGenRuleBuildComponents(ctx android.RegistrationContext) {
|
||||||
// Use a java_genrule to package generated java resources:
|
// Use a java_genrule to package generated java resources:
|
||||||
//
|
//
|
||||||
// java_genrule {
|
// java_genrule {
|
||||||
// name: "generated_resources",
|
// name: "generated_resources",
|
||||||
// tools: [
|
// tools: [
|
||||||
// "generator",
|
// "generator",
|
||||||
// "soong_zip",
|
// "soong_zip",
|
||||||
|
@ -60,11 +60,12 @@ func RegisterGenRuleBuildComponents(ctx android.RegistrationContext) {
|
||||||
// srcs: ["src/**/*.java"],
|
// srcs: ["src/**/*.java"],
|
||||||
// static_libs: ["generated_resources"],
|
// static_libs: ["generated_resources"],
|
||||||
// }
|
// }
|
||||||
func genRuleFactory() android.Module {
|
func GenRuleFactory() android.Module {
|
||||||
module := genrule.NewGenRule()
|
module := genrule.NewGenRule()
|
||||||
|
|
||||||
android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
|
android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
|
||||||
android.InitDefaultableModule(module)
|
android.InitDefaultableModule(module)
|
||||||
|
android.InitBazelModule(module)
|
||||||
|
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
@ -73,11 +74,12 @@ func genRuleFactory() android.Module {
|
||||||
//
|
//
|
||||||
// A java_genrule_host has a single variant that will run against the host variant of its dependencies and
|
// A java_genrule_host has a single variant that will run against the host variant of its dependencies and
|
||||||
// produce an output that can be used as an input to a host java rule.
|
// produce an output that can be used as an input to a host java rule.
|
||||||
func genRuleFactoryHost() android.Module {
|
func GenRuleFactoryHost() android.Module {
|
||||||
module := genrule.NewGenRule()
|
module := genrule.NewGenRule()
|
||||||
|
|
||||||
android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon)
|
android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon)
|
||||||
android.InitDefaultableModule(module)
|
android.InitDefaultableModule(module)
|
||||||
|
android.InitBazelModule(module)
|
||||||
|
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
118
java/genrule_test.go
Normal file
118
java/genrule_test.go
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
// Copyright 2018 Google Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package java
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"android/soong/android"
|
||||||
|
)
|
||||||
|
|
||||||
|
func testGenruleContext(config android.Config) *android.TestContext {
|
||||||
|
ctx := android.NewTestArchContext(config)
|
||||||
|
ctx.RegisterModuleType("java_genrule", GenRuleFactory)
|
||||||
|
ctx.Register()
|
||||||
|
|
||||||
|
return ctx
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenruleCmd(t *testing.T) {
|
||||||
|
fs := map[string][]byte{
|
||||||
|
"tool": nil,
|
||||||
|
"foo": nil,
|
||||||
|
}
|
||||||
|
bp := `
|
||||||
|
java_genrule {
|
||||||
|
name: "gen",
|
||||||
|
tool_files: ["tool"],
|
||||||
|
cmd: "$(location tool) $(in) $(out)",
|
||||||
|
srcs: ["foo"],
|
||||||
|
out: ["out"],
|
||||||
|
}
|
||||||
|
`
|
||||||
|
config := android.TestArchConfig(t.TempDir(), nil, bp, fs)
|
||||||
|
|
||||||
|
ctx := testGenruleContext(config)
|
||||||
|
|
||||||
|
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||||
|
if errs == nil {
|
||||||
|
_, errs = ctx.PrepareBuildActions(config)
|
||||||
|
}
|
||||||
|
if errs != nil {
|
||||||
|
t.Fatal(errs)
|
||||||
|
}
|
||||||
|
|
||||||
|
gen := ctx.ModuleForTests("gen", "android_common").Output("out")
|
||||||
|
expected := []string{"foo"}
|
||||||
|
if !reflect.DeepEqual(expected, gen.Implicits.Strings()[:len(expected)]) {
|
||||||
|
t.Errorf(`want arm inputs %v, got %v`, expected, gen.Implicits.Strings())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestJarGenrules(t *testing.T) {
|
||||||
|
ctx, _ := testJava(t, `
|
||||||
|
java_library {
|
||||||
|
name: "foo",
|
||||||
|
srcs: ["a.java"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_genrule {
|
||||||
|
name: "jargen",
|
||||||
|
tool_files: ["b.java"],
|
||||||
|
cmd: "$(location b.java) $(in) $(out)",
|
||||||
|
out: ["jargen.jar"],
|
||||||
|
srcs: [":foo"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "bar",
|
||||||
|
static_libs: ["jargen"],
|
||||||
|
srcs: ["c.java"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "baz",
|
||||||
|
libs: ["jargen"],
|
||||||
|
srcs: ["c.java"],
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
foo := ctx.ModuleForTests("foo", "android_common").Output("javac/foo.jar")
|
||||||
|
jargen := ctx.ModuleForTests("jargen", "android_common").Output("jargen.jar")
|
||||||
|
bar := ctx.ModuleForTests("bar", "android_common").Output("javac/bar.jar")
|
||||||
|
baz := ctx.ModuleForTests("baz", "android_common").Output("javac/baz.jar")
|
||||||
|
barCombined := ctx.ModuleForTests("bar", "android_common").Output("combined/bar.jar")
|
||||||
|
|
||||||
|
if g, w := jargen.Implicits.Strings(), foo.Output.String(); !android.InList(w, g) {
|
||||||
|
t.Errorf("expected jargen inputs [%q], got %q", w, g)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !strings.Contains(bar.Args["classpath"], jargen.Output.String()) {
|
||||||
|
t.Errorf("bar classpath %v does not contain %q", bar.Args["classpath"], jargen.Output.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !strings.Contains(baz.Args["classpath"], jargen.Output.String()) {
|
||||||
|
t.Errorf("baz classpath %v does not contain %q", baz.Args["classpath"], jargen.Output.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(barCombined.Inputs) != 2 ||
|
||||||
|
barCombined.Inputs[0].String() != bar.Output.String() ||
|
||||||
|
barCombined.Inputs[1].String() != jargen.Output.String() {
|
||||||
|
t.Errorf("bar combined jar inputs %v is not [%q, %q]",
|
||||||
|
barCombined.Inputs.Strings(), bar.Output.String(), jargen.Output.String())
|
||||||
|
}
|
||||||
|
}
|
|
@ -997,60 +997,6 @@ func TestSharding(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestJarGenrules(t *testing.T) {
|
|
||||||
ctx, _ := testJava(t, `
|
|
||||||
java_library {
|
|
||||||
name: "foo",
|
|
||||||
srcs: ["a.java"],
|
|
||||||
}
|
|
||||||
|
|
||||||
java_genrule {
|
|
||||||
name: "jargen",
|
|
||||||
tool_files: ["b.java"],
|
|
||||||
cmd: "$(location b.java) $(in) $(out)",
|
|
||||||
out: ["jargen.jar"],
|
|
||||||
srcs: [":foo"],
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "bar",
|
|
||||||
static_libs: ["jargen"],
|
|
||||||
srcs: ["c.java"],
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "baz",
|
|
||||||
libs: ["jargen"],
|
|
||||||
srcs: ["c.java"],
|
|
||||||
}
|
|
||||||
`)
|
|
||||||
|
|
||||||
foo := ctx.ModuleForTests("foo", "android_common").Output("javac/foo.jar")
|
|
||||||
jargen := ctx.ModuleForTests("jargen", "android_common").Output("jargen.jar")
|
|
||||||
bar := ctx.ModuleForTests("bar", "android_common").Output("javac/bar.jar")
|
|
||||||
baz := ctx.ModuleForTests("baz", "android_common").Output("javac/baz.jar")
|
|
||||||
barCombined := ctx.ModuleForTests("bar", "android_common").Output("combined/bar.jar")
|
|
||||||
|
|
||||||
if g, w := jargen.Implicits.Strings(), foo.Output.String(); !android.InList(w, g) {
|
|
||||||
t.Errorf("expected jargen inputs [%q], got %q", w, g)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.Contains(bar.Args["classpath"], jargen.Output.String()) {
|
|
||||||
t.Errorf("bar classpath %v does not contain %q", bar.Args["classpath"], jargen.Output.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.Contains(baz.Args["classpath"], jargen.Output.String()) {
|
|
||||||
t.Errorf("baz classpath %v does not contain %q", baz.Args["classpath"], jargen.Output.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(barCombined.Inputs) != 2 ||
|
|
||||||
barCombined.Inputs[0].String() != bar.Output.String() ||
|
|
||||||
barCombined.Inputs[1].String() != jargen.Output.String() {
|
|
||||||
t.Errorf("bar combined jar inputs %v is not [%q, %q]",
|
|
||||||
barCombined.Inputs.Strings(), bar.Output.String(), jargen.Output.String())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestExcludeFileGroupInSrcs(t *testing.T) {
|
func TestExcludeFileGroupInSrcs(t *testing.T) {
|
||||||
ctx, _ := testJava(t, `
|
ctx, _ := testJava(t, `
|
||||||
java_library {
|
java_library {
|
||||||
|
|
Loading…
Reference in a new issue