if(CONFIG_TESTING_CMOCKA)
set(CMOCKA_DIR ${CMAKE_CURRENT_LIST_DIR}/cmocka)
if(NOT EXISTS ${CMOCKA_DIR})
set(CONFIG_CMOCKA_URL https://github.com/clibs/cmocka/archive)
FetchContent_Declare(
cmocka_fetch
URL ${CONFIG_CMOCKA_URL}/1.1.5.zip SOURCE_DIR
${CMAKE_CURRENT_LIST_DIR}/cmocka BINARY_DIR
${CMAKE_BINARY_DIR}/apps/testing/cmocka/cmocka
PATCH_COMMAND
patch -p0 -d ${CMAKE_CURRENT_LIST_DIR}/cmocka <
${CMAKE_CURRENT_LIST_DIR}/0001-cmocka.c-Reduce-the-call-stack-consumption-of-printf.patch
&& patch -p0 -d ${CMAKE_CURRENT_LIST_DIR}/cmocka <
${CMAKE_CURRENT_LIST_DIR}/0002-cmocka-feature-to-forwarding-cmocka-log-message-to-c.patch
&& patch -p0 -d ${CMAKE_CURRENT_LIST_DIR}/cmocka <
${CMAKE_CURRENT_LIST_DIR}/0003-cmocka-update-method-for-strmatch-to-regex-and-add-list-all-testcases-function.patch
&& patch -p0 -d ${CMAKE_CURRENT_LIST_DIR}/cmocka <
${CMAKE_CURRENT_LIST_DIR}/0004-cmocka-xml-report.patch && patch -p0 -d
${CMAKE_CURRENT_LIST_DIR}/cmocka <
${CMAKE_CURRENT_LIST_DIR}/0005-cmocka-cmocka_private-fix-warning-in-cmocka_private.patch
&& patch -p0 -d ${CMAKE_CURRENT_LIST_DIR}/cmocka <
${CMAKE_CURRENT_LIST_DIR}/0006-fix-linux-risc-v-compile-error-list_initialize.patch
DOWNLOAD_NO_PROGRESS true
TIMEOUT 30)
FetchContent_GetProperties(cmocka_fetch)
if(NOT cmocka_fetch_POPULATED)
FetchContent_Populate(cmocka_fetch)
endif()
endif()
nuttx_add_library(cmocka)
file(GLOB SRCS ${CMOCKA_DIR}/src/*.c)
set(EXPORT_INCDIR ${CMOCKA_DIR}/include)
nuttx_export_header(TARGET cmocka INCLUDE_DIRECTORIES ${EXPORT_INCDIR})
set(INCDIR ${CMAKE_CURRENT_LIST_DIR} ${EXPORT_INCDIR})
set(CFLAGS -Dprint_error=nx_print_error -DCMOCKA_PLATFORM_INCLUDE
-DHAVE_CLOCK_REALTIME=1 -DHAVE_STRUCT_TIMESPEC=1)
if(CONFIG_TESTING_CMOCKA_LEAKDETECT)
nuttx_compile_options_for_all_apps(-DUNIT_TESTING=ON)
endif()
target_sources(cmocka PRIVATE ${SRCS})
target_include_directories(cmocka PRIVATE ${INCDIR})
target_compile_options(cmocka PRIVATE ${CFLAGS})
nuttx_include_directories_for_all_apps(${CMOCKA_DIR}/include)
nuttx_add_application(
NAME
${CONFIG_TESTING_CMOCKA_PROGNAME}
PRIORITY
${CONFIG_TESTING_CMOCKA_PRIORITY}
STACKSIZE
${CONFIG_TESTING_CMOCKA_STACKSIZE}
MODULE
${CONFIG_TESTING_CMOCKA}
INCLUDE_DIRECTORIES
${INCDIR}
SRCS
cmocka_main.c
DEPENDS
cmocka)
endif()