1# 2# Arm SCP/MCP Software 3# Copyright (c) 2022, Arm Limited and Contributors. All rights reserved. 4# 5# SPDX-License-Identifier: BSD-3-Clause 6# 7 8if(TEST_ON_HOST) 9 # Duplicate list of framework sources to be added to build 10 foreach(fwk_src IN LISTS FWK_SRC) 11 list(APPEND ${TEST_FILE}_FWK_SRC ${fwk_src}) 12 endforeach() 13 14 # Duplicate list of framework mock sources to be added to build 15 foreach(fwk_mock_src IN LISTS FWK_MOCK_SRC) 16 list(APPEND ${TEST_FILE}_FWK_MOCK_SRC ${fwk_mock_src}) 17 endforeach() 18 19 # Create unit test target 20 add_executable(${UNIT_TEST_TARGET} 21 ${MODULE_UT_SRC}/${TEST_FILE}_unit_test.c) 22endif() 23 24if(TEST_ON_TARGET) 25 # Add sources to test target 26 target_sources(${UNIT_TEST_TARGET} 27 PRIVATE ${MODULE_UT_SRC}/${TEST_FILE}_unit_test.c) 28 29 target_compile_definitions( 30 ${UNIT_TEST_TARGET} 31 PUBLIC "UNITY_INCLUDE_CONFIG_H=\"unity_config.h\"" 32 PUBLIC "TEST_ON_TARGET") 33endif() 34 35# Include test module source in unit test c source file. 36target_compile_definitions( 37 ${UNIT_TEST_TARGET} 38 PUBLIC "UNIT_TEST_SRC=\"${MODULE_SRC}/${TEST_SRC}.c\"") 39 40 41target_include_directories( 42 ${UNIT_TEST_TARGET} 43 PRIVATE ${MODULE_SRC} 44 ${MODULE_INC} 45 ${OTHER_MODULE_INC} 46 ${UNITY_SRC_ROOT} 47 ${CMOCK_SRC_ROOT} 48 ${MODULE_UT_SRC} 49 ${MODULE_UT_INC} 50 ${MODULE_UT_MOCK_SRC}) 51 52if(EXISTS ${MODULE_INC}/internal) 53 target_include_directories(${UNIT_TEST_TARGET} 54 PRIVATE ${MODULE_INC}/internal) 55endif() 56 57if(EXISTS ${MODULE_UT_MOCK_SRC}/Mock${TEST_FILE}_extra.c) 58 target_sources(${UNIT_TEST_TARGET} 59 PRIVATE ${MODULE_UT_MOCK_SRC}/Mock${TEST_FILE}_extra.c) 60endif() 61 62if(TEST_ON_HOST) 63 target_include_directories( 64 ${UNIT_TEST_TARGET} 65 PRIVATE ${FWK_MOCKS_SRC_ROOT} 66 ${FWK_MOCKS_SRC_ROOT}/.. 67 ) 68 69 if(EXISTS ${MODULE_UT_INC}/fwk_module_idx.h) 70 target_compile_definitions( 71 ${UNIT_TEST_TARGET} 72 PRIVATE "FWK_TEST_FILE_IDX_H=\"${${TEST_TARGET}_MODULE_IDX_H}\"") 73 endif() 74 75 macro(replace_with_mock FILENAME) 76 list(FILTER ${TEST_FILE}_FWK_SRC EXCLUDE REGEX "${FILENAME}.c") 77 list(APPEND ${TEST_FILE}_FWK_SRC ${FWK_MOCKS_SRC_ROOT}/Mock${FILENAME}.c) 78 if(EXISTS ${FWK_MOCKS_SRC_ROOT}/internal/Mock${FILENAME}_internal.c) 79 list(APPEND ${TEST_FILE}_FWK_SRC 80 ${FWK_MOCKS_SRC_ROOT}/internal/Mock${FILENAME}_internal.c) 81 endif() 82 endmacro() 83 84 foreach(MOCK IN LISTS MOCK_REPLACEMENTS) 85 if(${MOCK} STREQUAL fwk_notify) 86 target_compile_definitions(${UNIT_TEST_TARGET} PUBLIC "BUILD_HAS_NOTIFICATION") 87 list(APPEND ${TEST_FILE}_FWK_SRC ${FWK_MOCKS_SRC_ROOT}/Mockfwk_notification.c) 88 list(APPEND ${TEST_FILE}_FWK_SRC 89 ${FWK_MOCKS_SRC_ROOT}/internal/Mockfwk_notification_internal.c) 90 elseif(${MOCK} STREQUAL fwk_core) 91 replace_with_mock(fwk_core) 92 list(FILTER ${TEST_FILE}_FWK_SRC EXCLUDE REGEX "fwk_delayed_resp.c") 93 else() 94 replace_with_mock(${MOCK}) 95 endif() 96 endforeach() 97 98 target_sources(${UNIT_TEST_TARGET} PRIVATE ${${TEST_FILE}_FWK_SRC} 99 ${${TEST_FILE}_FWK_MOCK_SRC}) 100 101 target_compile_definitions( 102 ${UNIT_TEST_TARGET} 103 PUBLIC "BUILD_VERSION_DESCRIBE_STRING=\"${SCP_UNIT_TEST_DESCRIBE}\"" 104 "BUILD_VERSION_MAJOR=${SCP_UNIT_TEST_VERSION_MAJOR}" 105 "BUILD_VERSION_MINOR=${SCP_UNIT_TEST_VERSION_MINOR}" 106 "BUILD_VERSION_PATCH=0") 107 108 target_compile_definitions(${UNIT_TEST_TARGET} PUBLIC "PERF_OPT") 109 110 foreach(COMPILE_FLAG IN LISTS EXTRA_COMPILE_FLAGS) 111 target_compile_options(${UNIT_TEST_TARGET} PRIVATE "${COMPILE_FLAG}") 112 endforeach() 113 114 # Include framework includes 115 target_include_directories(${UNIT_TEST_TARGET} PUBLIC "${FWK_INC_ROOT}") 116 target_sources(${UNIT_TEST_TARGET} PUBLIC ${SCP_UNITY_SRC}) 117 target_link_options(${UNIT_TEST_TARGET} 118 PRIVATE "LINKER:-wrap=fwk_log_printf --coverage -lgcov") 119 target_link_libraries(${UNIT_TEST_TARGET} PRIVATE gcov) 120 # Add test to CTest 121 add_test(NAME ${UNIT_TEST_TARGET} COMMAND ${UNIT_TEST_TARGET}) 122endif() 123 124unset(MOCK_REPLACEMENTS) 125