blob: 1d53e4138bda6981dac7e81467bda65b74ec60e1 [file] [log] [blame]
Jaewoong Jung5f3fb4b2018-12-13 15:01:46 -08001// Copyright 2018 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package bpf
16
17import (
18 "io/ioutil"
19 "os"
20 "testing"
21
22 "android/soong/android"
23 cc2 "android/soong/cc"
24)
25
26var buildDir string
27
28func setUp() {
29 var err error
30 buildDir, err = ioutil.TempDir("", "genrule_test")
31 if err != nil {
32 panic(err)
33 }
34}
35
36func tearDown() {
37 os.RemoveAll(buildDir)
38}
39
40func TestMain(m *testing.M) {
41 run := func() int {
42 setUp()
43 defer tearDown()
44
45 return m.Run()
46 }
47
48 os.Exit(run())
49}
50
51func testContext(bp string) *android.TestContext {
52 ctx := android.NewTestArchContext()
53 ctx.RegisterModuleType("bpf", android.ModuleFactoryAdaptor(bpfFactory))
54 ctx.RegisterModuleType("cc_test", android.ModuleFactoryAdaptor(cc2.TestFactory))
55 ctx.RegisterModuleType("cc_library", android.ModuleFactoryAdaptor(cc2.LibraryFactory))
56 ctx.RegisterModuleType("cc_library_static", android.ModuleFactoryAdaptor(cc2.LibraryStaticFactory))
57 ctx.RegisterModuleType("cc_object", android.ModuleFactoryAdaptor(cc2.ObjectFactory))
58 ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(cc2.ToolchainLibraryFactory))
59 ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) {
60 ctx.BottomUp("link", cc2.LinkageMutator).Parallel()
61 })
62 ctx.Register()
63
64 // Add some modules that are required by the compiler and/or linker
65 bp = bp + `
66 toolchain_library {
67 name: "libatomic",
68 vendor_available: true,
69 recovery_available: true,
70 src: "",
71 }
72
73 toolchain_library {
74 name: "libclang_rt.builtins-arm-android",
75 vendor_available: true,
76 recovery_available: true,
77 src: "",
78 }
79
80 toolchain_library {
81 name: "libclang_rt.builtins-aarch64-android",
82 vendor_available: true,
83 recovery_available: true,
84 src: "",
85 }
86
87 toolchain_library {
88 name: "libgcc",
89 vendor_available: true,
90 recovery_available: true,
91 src: "",
92 }
93
94 cc_library {
95 name: "libc",
96 no_libgcc: true,
97 nocrt: true,
98 system_shared_libs: [],
99 recovery_available: true,
100 }
101
102 cc_library {
103 name: "libm",
104 no_libgcc: true,
105 nocrt: true,
106 system_shared_libs: [],
107 recovery_available: true,
108 }
109
110 cc_library {
111 name: "libdl",
112 no_libgcc: true,
113 nocrt: true,
114 system_shared_libs: [],
115 recovery_available: true,
116 }
117
118 cc_library {
119 name: "libgtest",
120 host_supported: true,
121 vendor_available: true,
122 }
123
124 cc_library {
125 name: "libgtest_main",
126 host_supported: true,
127 vendor_available: true,
128 }
129
130 cc_object {
131 name: "crtbegin_dynamic",
132 recovery_available: true,
133 vendor_available: true,
134 }
135
136 cc_object {
137 name: "crtend_android",
138 recovery_available: true,
139 vendor_available: true,
140 }
141
142 cc_object {
143 name: "crtbegin_so",
144 recovery_available: true,
145 vendor_available: true,
146 }
147
148 cc_object {
149 name: "crtend_so",
150 recovery_available: true,
151 vendor_available: true,
152 }
153 `
154 mockFS := map[string][]byte{
155 "Android.bp": []byte(bp),
156 "bpf.c": nil,
157 "BpfTest.cpp": nil,
158 }
159
160 ctx.MockFileSystem(mockFS)
161
162 return ctx
163}
164
165func TestBpfDataDependency(t *testing.T) {
166 config := android.TestArchConfig(buildDir, nil)
167 bp := `
168 bpf {
169 name: "bpf.o",
170 srcs: ["bpf.c"],
171 }
172
173 cc_test {
174 name: "vts_test_binary_bpf_module",
175 srcs: ["BpfTest.cpp"],
176 data: [":bpf.o"],
177 }
178 `
179
180 ctx := testContext(bp)
181 _, errs := ctx.ParseFileList(".", []string{"Android.bp"})
182 if errs == nil {
183 _, errs = ctx.PrepareBuildActions(config)
184 }
185 if errs != nil {
186 t.Fatal(errs)
187 }
188
189 // We only verify the above BP configuration is processed successfully since the data property
190 // value is not available for testing from this package.
191 // TODO(jungjw): Add a check for data or move this test to the cc package.
192}