| # 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. |
| |
| function(vec_cc_test) |
| cmake_parse_arguments( |
| _RULE |
| "" |
| "NAME" |
| "SRCS;COPTS;DEFINES;LINKOPTS;DATA;DEPS;LABELS;TIMEOUT" |
| ${ARGN} |
| ) |
| |
| set(_NAME "${_RULE_NAME}") |
| project(${_RULE_NAME}) |
| set (CMAKE_CXX_STANDARD 17) |
| |
| vec_cc_binary( |
| NAME |
| ${_RULE_NAME} |
| SRCS |
| ${_RULE_SRCS} |
| DEPS |
| pw_unit_test |
| pw_unit_test.main |
| pw_assert_basic |
| test_v_helpers |
| softrvv |
| ${_RULE_DEPS} |
| LINKOPTS |
| ${_RULE_LINKOPTS} |
| ) |
| |
| if("${_RULE_TIMEOUT}" STREQUAL "") |
| set(_TIMEOUT 30) |
| else() |
| set(_TIMEOUT ${_RULE_TIMEOUT}) |
| endif() |
| |
| if(DEFINED TEST_RUNNER) |
| find_program(QEMU_RV32 qemu-system-riscv32 HINTS $ENV{OUT}/host/qemu) |
| if(QEMU_RV32) |
| add_test( |
| NAME |
| "qemu_${_RULE_NAME}" |
| COMMAND |
| ${TEST_RUNNER} qemu $<TARGET_FILE:${_RULE_NAME}.elf> --qemu-path ${QEMU_RV32} --timeout=${_TIMEOUT} |
| ) |
| set_tests_properties("qemu_${_RULE_NAME}" PROPERTIES TIMEOUT ${_TIMEOUT}) |
| else() |
| message(WARNING "qemu-system-riscv32 doesn't exist. Make sure you build qemu first and start a clean build to enable the qemu test") |
| endif() |
| find_program(RENODE_BIN renode HINTS $ENV{CACHE}/renode) |
| if(RENODE_BIN) |
| add_test( |
| NAME |
| "renode_${_RULE_NAME}" |
| COMMAND |
| ${TEST_RUNNER} renode $<TARGET_FILE:${_RULE_NAME}.elf> --renode-path ${RENODE_BIN} --quick_test --timeout=${_TIMEOUT} |
| ) |
| set_tests_properties("renode_${_RULE_NAME}" PROPERTIES TIMEOUT ${_TIMEOUT}) |
| else() |
| message(WARNING "renode doesn't exist. Make sure you build renode first and start a clean build to enable the renode test") |
| endif() |
| endif(DEFINED TEST_RUNNER) |
| endfunction() |