I am implementing some unit test for zephyr and I need to mock a function that is included in a file that I can not remove from the test. So I am trying to use the -Wl,--wrap=symbol
flag to create a wrapper that is called instead.
At GCC wrapper is shown that with a command gcc main.c foo.c -Wl,--wrap=foo -o main
I would be able wrap foo
function.
My problem is that Zephyr is mainly implemented with CMake and I am struggling to make it generate a call like that. How can I set my CMakeLists.txt so that I can link to files and use the wrap function?
I tried the following in my CMakeLists.txt:
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(motion_monitor_test)
set(SOURCES
file1_path.c
file2_path.c
)
target_sources(app PRIVATE ${SOURCES})
target_compile_options(app PRIVATE "-Wl,--wrap=set_tx_power")
But instead of generating one call gcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file.c.obj -c file1_path.c file2_path.c
, it creates to separated calls: gcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file1.c.obj -c file1_path.c
and gcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file2.c.obj -c file2_path.c
.