| # Copyright 2023 Google LLC |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # vec_cc_generated_test() |
| # |
| # CMake function to generate vector test from a given template. |
| # |
| # Parameters: |
| # NAME: Name of the op_code the test will verify |
| # TEMPLATE: mako template to use in generating the CPP file |
| # PREFIX: prefix to add to the target |
| # LINKOPTS: additional link options |
| # TIMEOUT: test specific timeout |
| # |
| # Note: |
| # This will generate an elf file that can be executed on target |
| # It also adds a test that can be run via CTest |
| |
| function(vec_cc_generated_test) |
| cmake_parse_arguments( |
| _RULE |
| "" |
| "NAME" |
| "TEMPLATE;PREFIX;LINKOPTS;TIMEOUT" |
| ${ARGN} |
| ) |
| |
| set(_TEST_NAME "${_RULE_PREFIX}${_RULE_NAME}_test") |
| set(_OP_CODE ${_RULE_NAME}) |
| string(REPLACE ".tpl" "" _TEST_SRC_FILENAME ${_RULE_TEMPLATE}) |
| |
| set(_TEST_SRC ${CMAKE_CURRENT_BINARY_DIR}/generated/${_OP_CODE}/${_TEST_SRC_FILENAME}) |
| find_file(_GEN_VEC_SCRIPT generate_vector_tests.py ${CMAKE_SOURCE_DIR}/scripts) |
| file(GLOB_RECURSE TEMPLATES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.tpl") |
| add_custom_command( |
| OUTPUT |
| ${_TEST_SRC} |
| DEPENDS |
| ${CMAKE_CURRENT_SOURCE_DIR}/templates/${_RULE_TEMPLATE} |
| ${TEMPLATES} |
| COMMAND python3 ${_GEN_VEC_SCRIPT} |
| --template-path=${CMAKE_CURRENT_SOURCE_DIR}/templates/ |
| --template=${_RULE_TEMPLATE} |
| --out-path=${CMAKE_CURRENT_BINARY_DIR}/generated/${_OP_CODE} |
| --op=${_OP_CODE} |
| ) |
| |
| vec_cc_test( |
| NAME |
| ${_TEST_NAME} |
| SRCS |
| ${_TEST_SRC} |
| DEPS |
| softrvv |
| LINKOPTS |
| ${_RULE_LINKOPTS} |
| TIMEOUT |
| ${_RULE_TIMEOUT} |
| ) |
| endfunction() |
| |
| function(softrvv_vec_cc_generated_test) |
| cmake_parse_arguments( |
| _RULE |
| "" |
| "NAME" |
| "TEMPLATE;LINKOPTS;TIMEOUT" |
| ${ARGN} |
| ) |
| |
| vec_cc_generated_test( |
| NAME |
| ${_RULE_NAME} |
| PREFIX |
| softrvv_ |
| TEMPLATE |
| ${_RULE_TEMPLATE} |
| LINKOPTS |
| ${_RULE_LINKOPTS} |
| TIMEOUT |
| ${_RULE_TIMEOUT} |
| ) |
| |
| endfunction() |