blob: 5ab9129e766f64041063adc6530b1ddb8e431874 [file] [log] [blame]
Jingwen Chen8c1b97e2021-02-18 03:21:34 -05001// Copyright 2021 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 bp2build
16
17import (
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020018 "testing"
19
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050020 "android/soong/android"
21 "android/soong/cc"
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050022)
23
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020024func registerCcObjectModuleTypes(ctx android.RegistrationContext) {
25 // Always register cc_defaults module factory
26 ctx.RegisterModuleType("cc_defaults", func() android.Module { return cc.DefaultsFactory() })
27}
28
29func runCcObjectTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040030 t.Helper()
Liz Kammer78cfdaa2021-11-08 12:56:31 -050031 (&tc).moduleTypeUnderTest = "cc_object"
32 (&tc).moduleTypeUnderTestFactory = cc.ObjectFactory
33 (&tc).moduleTypeUnderTestBp2BuildMutator = cc.ObjectBp2Build
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020034 runBp2BuildTestCase(t, registerCcObjectModuleTypes, tc)
35}
36
37func TestCcObjectSimple(t *testing.T) {
38 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050039 description: "simple cc_object generates cc_object with include header dep",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020040 filesystem: map[string]string{
41 "a/b/foo.h": "",
42 "a/b/bar.h": "",
43 "a/b/exclude.c": "",
44 "a/b/c.c": "",
45 },
46 blueprint: `cc_object {
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050047 name: "foo",
48 local_include_dirs: ["include"],
Colin Cross6b8f4252021-07-22 11:39:44 -070049 system_shared_libs: [],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050050 cflags: [
51 "-Wno-gcc-compat",
52 "-Wall",
53 "-Werror",
54 ],
55 srcs: [
Jingwen Chendb120242021-02-23 00:46:47 -050056 "a/b/*.c"
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050057 ],
Jingwen Chendb120242021-02-23 00:46:47 -050058 exclude_srcs: ["a/b/exclude.c"],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050059}
60`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -050061 expectedBazelTargets: []string{
62 makeBazelTarget("cc_object", "foo", attrNameToString{
63 "copts": `[
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050064 "-fno-addrsig",
65 "-Wno-gcc-compat",
66 "-Wall",
67 "-Werror",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050068 ]`,
69 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -040070 "include",
71 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050072 ]`,
73 "srcs": `["a/b/c.c"]`,
74 "system_dynamic_deps": `[]`,
75 }),
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050076 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020077 })
78}
79
80func TestCcObjectDefaults(t *testing.T) {
81 runCcObjectTestCase(t, bp2buildTestCase{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020082 blueprint: `cc_object {
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050083 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -070084 system_shared_libs: [],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050085 srcs: [
86 "a/b/*.h",
87 "a/b/c.c"
88 ],
89
90 defaults: ["foo_defaults"],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050091}
92
93cc_defaults {
94 name: "foo_defaults",
95 defaults: ["foo_bar_defaults"],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050096}
97
98cc_defaults {
99 name: "foo_bar_defaults",
100 cflags: [
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500101 "-Werror",
102 ],
103}
104`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500105 expectedBazelTargets: []string{
106 makeBazelTarget("cc_object", "foo", attrNameToString{
107 "copts": `[
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500108 "-Werror",
109 "-fno-addrsig",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500110 ]`,
111 "local_includes": `["."]`,
112 "srcs": `["a/b/c.c"]`,
113 "system_dynamic_deps": `[]`,
114 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200115 }})
116}
117
118func TestCcObjectCcObjetDepsInObjs(t *testing.T) {
119 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500120 description: "cc_object with cc_object deps in objs props",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200121 filesystem: map[string]string{
122 "a/b/c.c": "",
123 "x/y/z.c": "",
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500124 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200125 blueprint: `cc_object {
Jingwen Chendb120242021-02-23 00:46:47 -0500126 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700127 system_shared_libs: [],
Jingwen Chendb120242021-02-23 00:46:47 -0500128 srcs: ["a/b/c.c"],
129 objs: ["bar"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400130 include_build_directory: false,
Jingwen Chendb120242021-02-23 00:46:47 -0500131}
132
133cc_object {
134 name: "bar",
Colin Cross6b8f4252021-07-22 11:39:44 -0700135 system_shared_libs: [],
Jingwen Chendb120242021-02-23 00:46:47 -0500136 srcs: ["x/y/z.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400137 include_build_directory: false,
Jingwen Chendb120242021-02-23 00:46:47 -0500138}
139`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500140 expectedBazelTargets: []string{
141 makeBazelTarget("cc_object", "bar", attrNameToString{
142 "copts": `["-fno-addrsig"]`,
143 "srcs": `["x/y/z.c"]`,
144 "system_dynamic_deps": `[]`,
145 }), makeBazelTarget("cc_object", "foo", attrNameToString{
146 "copts": `["-fno-addrsig"]`,
147 "deps": `[":bar"]`,
148 "srcs": `["a/b/c.c"]`,
149 "system_dynamic_deps": `[]`,
150 }),
Liz Kammera4aa4302021-03-18 16:56:36 -0400151 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200152 })
153}
154
155func TestCcObjectIncludeBuildDirFalse(t *testing.T) {
156 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500157 description: "cc_object with include_build_dir: false",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200158 filesystem: map[string]string{
159 "a/b/c.c": "",
160 "x/y/z.c": "",
161 },
162 blueprint: `cc_object {
Liz Kammera4aa4302021-03-18 16:56:36 -0400163 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700164 system_shared_libs: [],
Liz Kammera4aa4302021-03-18 16:56:36 -0400165 srcs: ["a/b/c.c"],
166 include_build_directory: false,
Liz Kammera4aa4302021-03-18 16:56:36 -0400167}
168`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500169 expectedBazelTargets: []string{
170 makeBazelTarget("cc_object", "foo", attrNameToString{
171 "copts": `["-fno-addrsig"]`,
172 "srcs": `["a/b/c.c"]`,
173 "system_dynamic_deps": `[]`,
174 }),
Jingwen Chendb120242021-02-23 00:46:47 -0500175 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200176 })
177}
178
179func TestCcObjectProductVariable(t *testing.T) {
180 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500181 description: "cc_object with product variable",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200182 blueprint: `cc_object {
Liz Kammera060c452021-03-24 10:14:47 -0400183 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700184 system_shared_libs: [],
Liz Kammera060c452021-03-24 10:14:47 -0400185 include_build_directory: false,
186 product_variables: {
187 platform_sdk_version: {
188 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
189 },
190 },
Chris Parsons69fa9f92021-07-13 11:47:44 -0400191 srcs: ["src.S"],
Liz Kammera060c452021-03-24 10:14:47 -0400192}
193`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500194 expectedBazelTargets: []string{
195 makeBazelTarget("cc_object", "foo", attrNameToString{
196 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -0400197 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -0400198 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500199 })`,
200 "copts": `["-fno-addrsig"]`,
201 "srcs_as": `["src.S"]`,
202 "system_dynamic_deps": `[]`,
203 }),
Liz Kammera060c452021-03-24 10:14:47 -0400204 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200205 })
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500206}
Jingwen Chen5d864492021-02-24 07:20:12 -0500207
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200208func TestCcObjectCflagsOneArch(t *testing.T) {
209 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500210 description: "cc_object setting cflags for one arch",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200211 blueprint: `cc_object {
Jingwen Chen5d864492021-02-24 07:20:12 -0500212 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700213 system_shared_libs: [],
Jingwen Chen07027912021-03-15 06:02:43 -0400214 srcs: ["a.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500215 arch: {
216 x86: {
Jingwen Chen07027912021-03-15 06:02:43 -0400217 cflags: ["-fPIC"], // string list
218 },
219 arm: {
Chris Parsons69fa9f92021-07-13 11:47:44 -0400220 srcs: ["arch/arm/file.cpp"], // label list
Jingwen Chen5d864492021-02-24 07:20:12 -0500221 },
222 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400223 include_build_directory: false,
Jingwen Chen5d864492021-02-24 07:20:12 -0500224}
225`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200226 expectedBazelTargets: []string{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500227 makeBazelTarget("cc_object", "foo", attrNameToString{
228 "copts": `["-fno-addrsig"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000229 "//build/bazel/platforms/arch:x86": ["-fPIC"],
Jingwen Chen07027912021-03-15 06:02:43 -0400230 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500231 })`,
232 "srcs": `["a.cpp"] + select({
Chris Parsons69fa9f92021-07-13 11:47:44 -0400233 "//build/bazel/platforms/arch:arm": ["arch/arm/file.cpp"],
Jingwen Chen07027912021-03-15 06:02:43 -0400234 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500235 })`,
236 "system_dynamic_deps": `[]`,
237 }),
Jingwen Chen5d864492021-02-24 07:20:12 -0500238 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200239 })
240}
241
242func TestCcObjectCflagsFourArch(t *testing.T) {
243 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500244 description: "cc_object setting cflags for 4 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200245 blueprint: `cc_object {
Jingwen Chen5d864492021-02-24 07:20:12 -0500246 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700247 system_shared_libs: [],
Jingwen Chen07027912021-03-15 06:02:43 -0400248 srcs: ["base.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500249 arch: {
250 x86: {
Jingwen Chen07027912021-03-15 06:02:43 -0400251 srcs: ["x86.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500252 cflags: ["-fPIC"],
253 },
254 x86_64: {
Jingwen Chen07027912021-03-15 06:02:43 -0400255 srcs: ["x86_64.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500256 cflags: ["-fPIC"],
257 },
258 arm: {
Jingwen Chen07027912021-03-15 06:02:43 -0400259 srcs: ["arm.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500260 cflags: ["-Wall"],
261 },
262 arm64: {
Jingwen Chen07027912021-03-15 06:02:43 -0400263 srcs: ["arm64.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500264 cflags: ["-Wall"],
265 },
266 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400267 include_build_directory: false,
Jingwen Chen5d864492021-02-24 07:20:12 -0500268}
269`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200270 expectedBazelTargets: []string{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500271 makeBazelTarget("cc_object", "foo", attrNameToString{
272 "copts": `["-fno-addrsig"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000273 "//build/bazel/platforms/arch:arm": ["-Wall"],
274 "//build/bazel/platforms/arch:arm64": ["-Wall"],
275 "//build/bazel/platforms/arch:x86": ["-fPIC"],
276 "//build/bazel/platforms/arch:x86_64": ["-fPIC"],
Jingwen Chen07027912021-03-15 06:02:43 -0400277 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500278 })`,
279 "srcs": `["base.cpp"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000280 "//build/bazel/platforms/arch:arm": ["arm.cpp"],
281 "//build/bazel/platforms/arch:arm64": ["arm64.cpp"],
282 "//build/bazel/platforms/arch:x86": ["x86.cpp"],
283 "//build/bazel/platforms/arch:x86_64": ["x86_64.cpp"],
Jingwen Chen07027912021-03-15 06:02:43 -0400284 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500285 })`,
286 "system_dynamic_deps": `[]`,
287 }),
Jingwen Chen5d864492021-02-24 07:20:12 -0500288 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200289 })
290}
291
Chris Parsonsa37e1952021-09-28 16:47:36 -0400292func TestCcObjectLinkerScript(t *testing.T) {
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200293 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500294 description: "cc_object setting linker_script",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200295 blueprint: `cc_object {
Jingwen Chenc1c26502021-04-05 10:35:13 +0000296 name: "foo",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400297 srcs: ["base.cpp"],
298 linker_script: "bunny.lds",
299 include_build_directory: false,
300}
301`,
302 expectedBazelTargets: []string{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500303 makeBazelTarget("cc_object", "foo", attrNameToString{
304 "copts": `["-fno-addrsig"]`,
305 "linker_script": `"bunny.lds"`,
306 "srcs": `["base.cpp"]`,
307 }),
Chris Parsonsa37e1952021-09-28 16:47:36 -0400308 },
309 })
310}
311
312func TestCcObjectDepsAndLinkerScriptSelects(t *testing.T) {
313 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500314 description: "cc_object setting deps and linker_script across archs",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400315 blueprint: `cc_object {
316 name: "foo",
317 srcs: ["base.cpp"],
318 arch: {
319 x86: {
320 objs: ["x86_obj"],
321 linker_script: "x86.lds",
322 },
323 x86_64: {
324 objs: ["x86_64_obj"],
325 linker_script: "x86_64.lds",
326 },
327 arm: {
328 objs: ["arm_obj"],
329 linker_script: "arm.lds",
330 },
331 },
332 include_build_directory: false,
333}
334
335cc_object {
336 name: "x86_obj",
Colin Cross6b8f4252021-07-22 11:39:44 -0700337 system_shared_libs: [],
Chris Parsonsa37e1952021-09-28 16:47:36 -0400338 srcs: ["x86.cpp"],
339 include_build_directory: false,
340 bazel_module: { bp2build_available: false },
341}
342
343cc_object {
344 name: "x86_64_obj",
345 system_shared_libs: [],
346 srcs: ["x86_64.cpp"],
347 include_build_directory: false,
348 bazel_module: { bp2build_available: false },
349}
350
351cc_object {
352 name: "arm_obj",
353 system_shared_libs: [],
354 srcs: ["arm.cpp"],
355 include_build_directory: false,
356 bazel_module: { bp2build_available: false },
357}
358`,
359 expectedBazelTargets: []string{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500360 makeBazelTarget("cc_object", "foo", attrNameToString{
361 "copts": `["-fno-addrsig"]`,
362 "deps": `select({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400363 "//build/bazel/platforms/arch:arm": [":arm_obj"],
364 "//build/bazel/platforms/arch:x86": [":x86_obj"],
365 "//build/bazel/platforms/arch:x86_64": [":x86_64_obj"],
366 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500367 })`,
368 "linker_script": `select({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400369 "//build/bazel/platforms/arch:arm": "arm.lds",
370 "//build/bazel/platforms/arch:x86": "x86.lds",
371 "//build/bazel/platforms/arch:x86_64": "x86_64.lds",
372 "//conditions:default": None,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500373 })`,
374 "srcs": `["base.cpp"]`,
375 }),
Chris Parsonsa37e1952021-09-28 16:47:36 -0400376 },
377 })
378}
379
380func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) {
381 runCcObjectTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500382 description: "cc_object setting srcs based on linux and bionic archs",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400383 blueprint: `cc_object {
384 name: "foo",
Jingwen Chenc1c26502021-04-05 10:35:13 +0000385 srcs: ["base.cpp"],
386 target: {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400387 linux_arm64: {
388 srcs: ["linux_arm64.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000389 },
Chris Parsonsa37e1952021-09-28 16:47:36 -0400390 linux_x86: {
391 srcs: ["linux_x86.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000392 },
Chris Parsonsa37e1952021-09-28 16:47:36 -0400393 bionic_arm64: {
394 srcs: ["bionic_arm64.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000395 },
396 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400397 include_build_directory: false,
Jingwen Chenc1c26502021-04-05 10:35:13 +0000398}
399`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200400 expectedBazelTargets: []string{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500401 makeBazelTarget("cc_object", "foo", attrNameToString{
402 "copts": `["-fno-addrsig"]`,
403 "srcs": `["base.cpp"] + select({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400404 "//build/bazel/platforms/os_arch:android_arm64": [
Chris Parsonsa37e1952021-09-28 16:47:36 -0400405 "linux_arm64.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400406 "bionic_arm64.cpp",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400407 ],
408 "//build/bazel/platforms/os_arch:android_x86": ["linux_x86.cpp"],
409 "//build/bazel/platforms/os_arch:linux_bionic_arm64": [
Chris Parsonsa37e1952021-09-28 16:47:36 -0400410 "linux_arm64.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400411 "bionic_arm64.cpp",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400412 ],
413 "//build/bazel/platforms/os_arch:linux_glibc_x86": ["linux_x86.cpp"],
414 "//build/bazel/platforms/os_arch:linux_musl_x86": ["linux_x86.cpp"],
Jingwen Chenc1c26502021-04-05 10:35:13 +0000415 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500416 })`,
417 }),
Jingwen Chenc1c26502021-04-05 10:35:13 +0000418 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200419 })
Jingwen Chen5d864492021-02-24 07:20:12 -0500420}