blob: 6114a49333694941b6e7f1972846140a7a667059 [file] [log] [blame]
Cole Faust7071a052022-07-29 15:58:33 -07001// Copyright 2022 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.
14package bp2build
15
16import (
17 "testing"
18
19 "android/soong/android"
20 "android/soong/cc"
21)
22
23func runYasmTestCase(t *testing.T, tc bp2buildTestCase) {
24 t.Helper()
25 runBp2BuildTestCase(t, registerYasmModuleTypes, tc)
26}
27
28func registerYasmModuleTypes(ctx android.RegistrationContext) {
29 cc.RegisterCCBuildComponents(ctx)
30 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
31 ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
32 ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
33 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
34}
35
36func TestYasmSimple(t *testing.T) {
37 runYasmTestCase(t, bp2buildTestCase{
38 description: "Simple yasm test",
39 moduleTypeUnderTest: "cc_library",
40 moduleTypeUnderTestFactory: cc.LibraryFactory,
41 filesystem: map[string]string{
42 "main.cpp": "",
43 "myfile.asm": "",
44 },
45 blueprint: `
46cc_library {
47 name: "foo",
48 srcs: ["main.cpp", "myfile.asm"],
49}`,
50 expectedBazelTargets: append([]string{
51 makeBazelTarget("yasm", "foo_yasm", map[string]string{
52 "include_dirs": `["."]`,
53 "srcs": `["myfile.asm"]`,
54 }),
55 }, makeCcLibraryTargets("foo", map[string]string{
56 "local_includes": `["."]`,
57 "srcs": `[
58 "main.cpp",
59 ":foo_yasm",
60 ]`,
61 })...),
62 })
63}
64
65func TestYasmWithIncludeDirs(t *testing.T) {
66 runYasmTestCase(t, bp2buildTestCase{
67 description: "Simple yasm test",
68 moduleTypeUnderTest: "cc_library",
69 moduleTypeUnderTestFactory: cc.LibraryFactory,
70 filesystem: map[string]string{
71 "main.cpp": "",
72 "myfile.asm": "",
73 "include1/foo/myinclude.inc": "",
74 "include2/foo/myinclude2.inc": "",
75 },
76 blueprint: `
77cc_library {
78 name: "foo",
79 local_include_dirs: ["include1/foo"],
80 export_include_dirs: ["include2/foo"],
81 srcs: ["main.cpp", "myfile.asm"],
82}`,
83 expectedBazelTargets: append([]string{
84 makeBazelTarget("yasm", "foo_yasm", map[string]string{
85 "include_dirs": `[
86 "include1/foo",
87 ".",
88 "include2/foo",
89 ]`,
90 "srcs": `["myfile.asm"]`,
91 }),
92 }, makeCcLibraryTargets("foo", map[string]string{
93 "local_includes": `[
94 "include1/foo",
95 ".",
96 ]`,
97 "export_includes": `["include2/foo"]`,
98 "srcs": `[
99 "main.cpp",
100 ":foo_yasm",
101 ]`,
102 })...),
103 })
104}
105
106func TestYasmConditionalBasedOnArch(t *testing.T) {
107 runYasmTestCase(t, bp2buildTestCase{
108 description: "Simple yasm test",
109 moduleTypeUnderTest: "cc_library",
110 moduleTypeUnderTestFactory: cc.LibraryFactory,
111 filesystem: map[string]string{
112 "main.cpp": "",
113 "myfile.asm": "",
114 },
115 blueprint: `
116cc_library {
117 name: "foo",
118 srcs: ["main.cpp"],
119 arch: {
120 x86: {
121 srcs: ["myfile.asm"],
122 },
123 },
124}`,
125 expectedBazelTargets: append([]string{
126 makeBazelTarget("yasm", "foo_yasm", map[string]string{
127 "include_dirs": `["."]`,
128 "srcs": `select({
129 "//build/bazel/platforms/arch:x86": ["myfile.asm"],
130 "//conditions:default": [],
131 })`,
132 }),
133 }, makeCcLibraryTargets("foo", map[string]string{
134 "local_includes": `["."]`,
135 "srcs": `["main.cpp"] + select({
136 "//build/bazel/platforms/arch:x86": [":foo_yasm"],
137 "//conditions:default": [],
138 })`,
139 })...),
140 })
141}
142
143func TestYasmPartiallyConditional(t *testing.T) {
144 runYasmTestCase(t, bp2buildTestCase{
145 description: "Simple yasm test",
146 moduleTypeUnderTest: "cc_library",
147 moduleTypeUnderTestFactory: cc.LibraryFactory,
148 filesystem: map[string]string{
149 "main.cpp": "",
150 "myfile.asm": "",
151 "mysecondfile.asm": "",
152 },
153 blueprint: `
154cc_library {
155 name: "foo",
156 srcs: ["main.cpp", "myfile.asm"],
157 arch: {
158 x86: {
159 srcs: ["mysecondfile.asm"],
160 },
161 },
162}`,
163 expectedBazelTargets: append([]string{
164 makeBazelTarget("yasm", "foo_yasm", map[string]string{
165 "include_dirs": `["."]`,
166 "srcs": `["myfile.asm"] + select({
167 "//build/bazel/platforms/arch:x86": ["mysecondfile.asm"],
168 "//conditions:default": [],
169 })`,
170 }),
171 }, makeCcLibraryTargets("foo", map[string]string{
172 "local_includes": `["."]`,
173 "srcs": `[
174 "main.cpp",
175 ":foo_yasm",
176 ]`,
177 })...),
178 })
179}