diff --git a/Android.bp b/Android.bp index bcf831d18..5faefe6e7 100644 --- a/Android.bp +++ b/Android.bp @@ -173,6 +173,7 @@ bootstrap_go_package { testSrcs: [ "cc/cc_test.go", "cc/gen_test.go", + "cc/genrule_test.go", "cc/library_test.go", "cc/test_data_test.go", "cc/util_test.go", diff --git a/cc/genrule_test.go b/cc/genrule_test.go new file mode 100644 index 000000000..92024ac14 --- /dev/null +++ b/cc/genrule_test.go @@ -0,0 +1,88 @@ +// 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 cc + +import ( + "reflect" + "testing" + + "android/soong/android" +) + +func testGenruleContext(config android.Config, bp string, + fs map[string][]byte) *android.TestContext { + + ctx := android.NewTestArchContext() + ctx.RegisterModuleType("cc_genrule", android.ModuleFactoryAdaptor(genRuleFactory)) + ctx.Register() + + mockFS := map[string][]byte{ + "Android.bp": []byte(bp), + "tool": nil, + "foo": nil, + "bar": nil, + } + + for k, v := range fs { + mockFS[k] = v + } + + ctx.MockFileSystem(mockFS) + + return ctx +} + +func TestArchGenruleCmd(t *testing.T) { + config := android.TestArchConfig(buildDir, nil) + bp := ` + cc_genrule { + name: "gen", + tool_files: ["tool"], + cmd: "$(location tool) $(in) $(out)", + arch: { + arm: { + srcs: ["foo"], + out: ["out_arm"], + }, + arm64: { + srcs: ["bar"], + out: ["out_arm64"], + }, + }, + } + ` + + ctx := testGenruleContext(config, bp, nil) + + _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) + if errs == nil { + _, errs = ctx.PrepareBuildActions(config) + } + if errs != nil { + t.Fatal(errs) + } + + gen := ctx.ModuleForTests("gen", "android_arm_armv7-a-neon").Output("out_arm") + expected := []string{"foo"} + if !reflect.DeepEqual(expected, gen.Inputs.Strings()) { + t.Errorf(`want arm inputs %v, got %v`, expected, gen.Inputs.Strings()) + } + + gen = ctx.ModuleForTests("gen", "android_arm64_armv8-a").Output("out_arm64") + expected = []string{"bar"} + if !reflect.DeepEqual(expected, gen.Inputs.Strings()) { + t.Errorf(`want arm64 inputs %v, got %v`, expected, gen.Inputs.Strings()) + } +} diff --git a/genrule/genrule.go b/genrule/genrule.go index 2824e4907..e6c6efd4c 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -87,7 +87,7 @@ type generatorProperties struct { Export_include_dirs []string // list of input files - Srcs []string + Srcs []string `android:"arch_variant"` } type Module struct { @@ -504,7 +504,7 @@ func GenRuleFactory() android.Module { type genRuleProperties struct { // names of the output files that will be generated - Out []string + Out []string `android:"arch_variant"` } var Bool = proptools.Bool diff --git a/genrule/genrule_test.go b/genrule/genrule_test.go index 7e16ce1f0..a99fa18cc 100644 --- a/genrule/genrule_test.go +++ b/genrule/genrule_test.go @@ -27,7 +27,7 @@ var buildDir string func setUp() { var err error - buildDir, err = ioutil.TempDir("", "soong_java_test") + buildDir, err = ioutil.TempDir("", "genrule_test") if err != nil { panic(err) }