xref: /aosp_15_r20/build/bazel/rules/cc/yasm_test.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker"""Copyright (C) 2022 The Android Open Source Project
2*7594170eSAndroid Build Coastguard Worker
3*7594170eSAndroid Build Coastguard WorkerLicensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Workeryou may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard WorkerYou may obtain a copy of the License at
6*7594170eSAndroid Build Coastguard Worker
7*7594170eSAndroid Build Coastguard Worker     http://www.apache.org/licenses/LICENSE-2.0
8*7594170eSAndroid Build Coastguard Worker
9*7594170eSAndroid Build Coastguard WorkerUnless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Workerlimitations under the License.
14*7594170eSAndroid Build Coastguard Worker"""
15*7594170eSAndroid Build Coastguard Worker
16*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:paths.bzl", "paths")
17*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
18*7594170eSAndroid Build Coastguard Workerload(":yasm.bzl", "yasm")
19*7594170eSAndroid Build Coastguard Worker
20*7594170eSAndroid Build Coastguard Workerdef _basic_yasm_test_impl(ctx):
21*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
22*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
23*7594170eSAndroid Build Coastguard Worker
24*7594170eSAndroid Build Coastguard Worker    for action in actions:
25*7594170eSAndroid Build Coastguard Worker        asserts.equals(
26*7594170eSAndroid Build Coastguard Worker            env,
27*7594170eSAndroid Build Coastguard Worker            action.mnemonic,
28*7594170eSAndroid Build Coastguard Worker            "yasm",
29*7594170eSAndroid Build Coastguard Worker        )
30*7594170eSAndroid Build Coastguard Worker        src = action.argv[-1]
31*7594170eSAndroid Build Coastguard Worker        asserts.equals(
32*7594170eSAndroid Build Coastguard Worker            env,
33*7594170eSAndroid Build Coastguard Worker            action.argv[-3],
34*7594170eSAndroid Build Coastguard Worker            "-o",
35*7594170eSAndroid Build Coastguard Worker        )
36*7594170eSAndroid Build Coastguard Worker        asserts.true(
37*7594170eSAndroid Build Coastguard Worker            env,
38*7594170eSAndroid Build Coastguard Worker            action.argv[-2].endswith(paths.replace_extension(src, ".o")),
39*7594170eSAndroid Build Coastguard Worker            "-o argument is expected to end with the src file as a .o",
40*7594170eSAndroid Build Coastguard Worker        )
41*7594170eSAndroid Build Coastguard Worker        asserts.true(
42*7594170eSAndroid Build Coastguard Worker            env,
43*7594170eSAndroid Build Coastguard Worker            " ".join(ctx.attr.expected_flags) in " ".join(action.argv),
44*7594170eSAndroid Build Coastguard Worker            "Expected flags (%s) were not in actual flags (%s)" % (ctx.attr.expected_flags, action.argv),
45*7594170eSAndroid Build Coastguard Worker        )
46*7594170eSAndroid Build Coastguard Worker
47*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
48*7594170eSAndroid Build Coastguard Worker
49*7594170eSAndroid Build Coastguard Workerbasic_yasm_test = analysistest.make(
50*7594170eSAndroid Build Coastguard Worker    _basic_yasm_test_impl,
51*7594170eSAndroid Build Coastguard Worker    attrs = {
52*7594170eSAndroid Build Coastguard Worker        "expected_flags": attr.string_list(
53*7594170eSAndroid Build Coastguard Worker            doc = "Flags expected to be on the command line.",
54*7594170eSAndroid Build Coastguard Worker        ),
55*7594170eSAndroid Build Coastguard Worker    },
56*7594170eSAndroid Build Coastguard Worker)
57*7594170eSAndroid Build Coastguard Worker
58*7594170eSAndroid Build Coastguard Workerdef test_single_file():
59*7594170eSAndroid Build Coastguard Worker    name = "test_single_file"
60*7594170eSAndroid Build Coastguard Worker    yasm(
61*7594170eSAndroid Build Coastguard Worker        name = name + "_target",
62*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_file.asm"],
63*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
64*7594170eSAndroid Build Coastguard Worker    )
65*7594170eSAndroid Build Coastguard Worker    basic_yasm_test(
66*7594170eSAndroid Build Coastguard Worker        name = name,
67*7594170eSAndroid Build Coastguard Worker        target_under_test = name + "_target",
68*7594170eSAndroid Build Coastguard Worker    )
69*7594170eSAndroid Build Coastguard Worker    return name
70*7594170eSAndroid Build Coastguard Worker
71*7594170eSAndroid Build Coastguard Workerdef test_multiple_files():
72*7594170eSAndroid Build Coastguard Worker    name = "test_multiple_files"
73*7594170eSAndroid Build Coastguard Worker    yasm(
74*7594170eSAndroid Build Coastguard Worker        name = name + "_target",
75*7594170eSAndroid Build Coastguard Worker        srcs = [
76*7594170eSAndroid Build Coastguard Worker            name + "_file1.asm",
77*7594170eSAndroid Build Coastguard Worker            name + "_file2.asm",
78*7594170eSAndroid Build Coastguard Worker        ],
79*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
80*7594170eSAndroid Build Coastguard Worker    )
81*7594170eSAndroid Build Coastguard Worker    basic_yasm_test(
82*7594170eSAndroid Build Coastguard Worker        name = name,
83*7594170eSAndroid Build Coastguard Worker        target_under_test = name + "_target",
84*7594170eSAndroid Build Coastguard Worker    )
85*7594170eSAndroid Build Coastguard Worker    return name
86*7594170eSAndroid Build Coastguard Worker
87*7594170eSAndroid Build Coastguard Workerdef test_custom_flags():
88*7594170eSAndroid Build Coastguard Worker    name = "test_custom_flags"
89*7594170eSAndroid Build Coastguard Worker    yasm(
90*7594170eSAndroid Build Coastguard Worker        name = name + "_target",
91*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_file.asm"],
92*7594170eSAndroid Build Coastguard Worker        flags = ["-DNEON_INTRINSICS", "-mfpu=neon"],
93*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
94*7594170eSAndroid Build Coastguard Worker    )
95*7594170eSAndroid Build Coastguard Worker    basic_yasm_test(
96*7594170eSAndroid Build Coastguard Worker        name = name,
97*7594170eSAndroid Build Coastguard Worker        target_under_test = name + "_target",
98*7594170eSAndroid Build Coastguard Worker        expected_flags = ["-DNEON_INTRINSICS", "-mfpu=neon"],
99*7594170eSAndroid Build Coastguard Worker    )
100*7594170eSAndroid Build Coastguard Worker    return name
101*7594170eSAndroid Build Coastguard Worker
102*7594170eSAndroid Build Coastguard Workerdef test_include_dirs():
103*7594170eSAndroid Build Coastguard Worker    name = "test_include_dirs"
104*7594170eSAndroid Build Coastguard Worker    yasm(
105*7594170eSAndroid Build Coastguard Worker        name = name + "_target",
106*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_file.asm"],
107*7594170eSAndroid Build Coastguard Worker        include_dirs = ["foo/bar"],
108*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
109*7594170eSAndroid Build Coastguard Worker    )
110*7594170eSAndroid Build Coastguard Worker    basic_yasm_test(
111*7594170eSAndroid Build Coastguard Worker        name = name,
112*7594170eSAndroid Build Coastguard Worker        target_under_test = name + "_target",
113*7594170eSAndroid Build Coastguard Worker        expected_flags = ["-Ibuild/bazel/rules/cc/foo/bar"],
114*7594170eSAndroid Build Coastguard Worker    )
115*7594170eSAndroid Build Coastguard Worker    return name
116*7594170eSAndroid Build Coastguard Worker
117*7594170eSAndroid Build Coastguard Workerdef yasm_test_suite(name):
118*7594170eSAndroid Build Coastguard Worker    native.test_suite(
119*7594170eSAndroid Build Coastguard Worker        name = name,
120*7594170eSAndroid Build Coastguard Worker        tests = [
121*7594170eSAndroid Build Coastguard Worker            test_single_file(),
122*7594170eSAndroid Build Coastguard Worker            test_multiple_files(),
123*7594170eSAndroid Build Coastguard Worker            test_custom_flags(),
124*7594170eSAndroid Build Coastguard Worker            test_include_dirs(),
125*7594170eSAndroid Build Coastguard Worker        ],
126*7594170eSAndroid Build Coastguard Worker    )
127