# SPDX-License-Identifier: Apache-2.0 cmake_minimum_required(VERSION 3.20.0) enable_language(C CXX ASM) # Parameters: # SOURCES: list of source files, default main.c # INCLUDE: list of additional include paths relative to ZEPHYR_BASE separate_arguments( EXTRA_CFLAGS_AS_LIST UNIX_COMMAND ${EXTRA_CFLAGS}) separate_arguments( EXTRA_AFLAGS_AS_LIST UNIX_COMMAND ${EXTRA_AFLAGS}) separate_arguments(EXTRA_CPPFLAGS_AS_LIST UNIX_COMMAND ${EXTRA_CPPFLAGS}) separate_arguments(EXTRA_CXXFLAGS_AS_LIST UNIX_COMMAND ${EXTRA_CXXFLAGS}) separate_arguments(EXTRA_LDFLAGS_AS_LIST UNIX_COMMAND ${EXTRA_LDFLAGS}) set(ENV_ZEPHYR_BASE $ENV{ZEPHYR_BASE}) # This add support for old style boilerplate include. if((NOT DEFINED ZEPHYR_BASE) AND (DEFINED ENV_ZEPHYR_BASE)) set(ZEPHYR_BASE ${ENV_ZEPHYR_BASE} CACHE PATH "Zephyr base") endif() if(NOT SOURCES) set(SOURCES main.c) endif() add_executable(testbinary ${SOURCES}) set(KOBJ_TYPES_H_TARGET kobj_types_h_target) include(${ZEPHYR_BASE}/cmake/kobj.cmake) add_dependencies(testbinary ${KOBJ_TYPES_H_TARGET}) gen_kobj(KOBJ_GEN_DIR) list(APPEND INCLUDE subsys/testsuite/ztest/include/zephyr subsys/testsuite/ztest/include subsys/testsuite/include include/zephyr include . ) if(CMAKE_HOST_APPLE) else() if(M64_MODE) set (CMAKE_C_FLAGS "-m64") set (CMAKE_CXX_FLAGS "-m64") else() set (CMAKE_C_FLAGS "-m32") #deprecated on macOS set (CMAKE_CXX_FLAGS "-m32") #deprecated on macOS endif(M64_MODE) endif() target_compile_options(testbinary PRIVATE -Wall -I ${KOBJ_GEN_DIR} ${EXTRA_CPPFLAGS_AS_LIST} ${EXTRA_CFLAGS_AS_LIST} $<$:${EXTRA_CXXFLAGS_AS_LIST}> $<$:${EXTRA_AFLAGS_AS_LIST}> ) target_link_options(testbinary PRIVATE -T "${ZEPHYR_BASE}/subsys/testsuite/include/ztest.ld" ) target_link_libraries(testbinary PRIVATE ${EXTRA_LDFLAGS_AS_LIST} ) if(COVERAGE) target_compile_options(testbinary PRIVATE -fno-default-inline -fno-inline -fprofile-arcs -ftest-coverage ) target_link_libraries(testbinary PRIVATE -lgcov ) endif() if(LIBS) message(FATAL_ERROR "This variable is not supported, see SOURCES instead") endif() target_sources(testbinary PRIVATE ${ZEPHYR_BASE}/subsys/testsuite/ztest/src/ztest.c ${ZEPHYR_BASE}/subsys/testsuite/ztest/src/ztest_mock.c ) target_compile_definitions(testbinary PRIVATE ZTEST_UNITTEST) foreach(inc ${INCLUDE}) target_include_directories(testbinary PRIVATE ${ZEPHYR_BASE}/${inc}) endforeach() find_program(VALGRIND_PROGRAM valgrind) if(VALGRIND_PROGRAM) set(VALGRIND ${VALGRIND_PROGRAM}) set(VALGRIND_FLAGS --leak-check=full --error-exitcode=1 --log-file=valgrind.log ) endif() add_custom_target(run-test COMMAND ${VALGRIND} ${VALGRIND_FLAGS} $ DEPENDS testbinary WORKING_DIRECTORY ${APPLICATION_BINARY_DIR} ) # TODO: Redirect output to unit.log