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