sof/test/cmocka/CMakeLists.txt

74 lines
2.7 KiB
CMake
Raw Normal View History

include(ExternalProject)
add_library(cmocka STATIC IMPORTED)
if(DEFINED CMOCKA_DIRECTORY)
# Prebuilt Cmocka lib
set_property(TARGET cmocka PROPERTY IMPORTED_LOCATION "${CMOCKA_DIRECTORY}/lib/libcmocka-static.a")
set(CMOCKA_INCLUDE_DIR "${CMOCKA_DIRECTORY}/include")
else()
set(cmocka_binary_directory "${PROJECT_BINARY_DIR}/cmocka_git/build")
# Build Cmocka locally
ExternalProject_Add(cmocka_git
GIT_REPOSITORY https://github.com/thesofproject/cmocka
PREFIX "${PROJECT_BINARY_DIR}/cmocka_git"
BINARY_DIR ${cmocka_binary_directory}
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DWITH_SHARED_LIB=OFF
-DWITH_STATIC_LIB=ON
-DWITH_EXAMPLES=OFF
-DWITH_POSITION_INDEPENDENT_CODE=OFF
-DWITH_TINY_CONFIG=ON
BUILD_BYPRODUCTS "${cmocka_binary_directory}/src/libcmocka-static.a"
INSTALL_COMMAND ""
)
set_property(TARGET cmocka PROPERTY IMPORTED_LOCATION "${cmocka_binary_directory}/src/libcmocka-static.a")
add_dependencies(cmocka cmocka_git)
ExternalProject_Get_Property(cmocka_git source_dir)
set(CMOCKA_INCLUDE_DIR ${source_dir}/include)
endif()
if(CONFIG_CAVS)
target_include_directories(sof_options INTERFACE ${PROJECT_SOURCE_DIR}/src/platform/intel/cavs/include)
endif()
# linker script, just for log entries
set(memory_mock_lds_in ${PROJECT_SOURCE_DIR}/test/cmocka/memory_mock.x.in)
set(memory_mock_lds_out ${PROJECT_BINARY_DIR}/test/cmocka/memory_mock.x)
add_custom_command(OUTPUT ${memory_mock_lds_out}
COMMAND cat ${memory_mock_lds_in} | ${CMAKE_C_COMPILER} -E -P - > ${memory_mock_lds_out}
DEPENDS ${memory_mock_lds_in}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Generating linker script: ${memory_mock_lds_out}"
VERBATIM
USES_TERMINAL
)
add_custom_target(ld_script_memory_mock DEPENDS ${memory_mock_lds_out})
SET(arch_src ${PROJECT_SOURCE_DIR}/src/arch/xtensa/smp/idc.c)
add_library(universal_mock STATIC ${PROJECT_SOURCE_DIR}/test/cmocka/src/universal_mocks.c)
target_link_libraries(universal_mock PRIVATE sof_options)
link_libraries(universal_mock)
# creates exectuable for new test and adds it as test for ctest
function(cmocka_test test_name)
add_executable(${test_name} "")
add_local_sources(${test_name} ${ARGN})
add_dependencies(${test_name} ld_script_memory_mock)
target_include_directories(${test_name} PRIVATE ${PROJECT_SOURCE_DIR}/test/cmocka/include)
target_include_directories(${test_name} PRIVATE ${CMOCKA_INCLUDE_DIR})
target_link_libraries(${test_name} PRIVATE "-T${memory_mock_lds_out}")
target_link_libraries(${test_name} PRIVATE cmocka)
target_link_libraries(${test_name} PRIVATE sof_options)
target_compile_definitions(${test_name} PRIVATE -DCHECK)
add_test(NAME ${test_name} COMMAND xt-run --exit_with_target_code ${test_name})
endfunction()
add_subdirectory(src)