Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 1 | # |
Imre Kis | 590cd9c | 2020-01-08 16:51:57 +0100 | [diff] [blame^] | 2 | # Copyright (c) 2019-2020, Arm Limited. All rights reserved. |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 3 | # |
| 4 | # SPDX-License-Identifier: BSD-3-Clause |
| 5 | # |
| 6 | |
| 7 | include_guard(DIRECTORY) |
| 8 | |
| 9 | # Global dependencies: |
| 10 | # Variables |
| 11 | # CPICKER_COMMAND: command of the c-picker |
| 12 | # CPICKER_CACHE_PATH: root directory of the c-picker generate files |
| 13 | # UNIT_TEST_COMMON_SOURCES: common source files for every test build |
Imre Kis | c0d4b44 | 2019-12-03 23:52:26 +0100 | [diff] [blame] | 14 | # CLANG_LIBRARY_PATH: libclang directory for c-picker |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 15 | # Modules |
| 16 | # CTest module should be included in the root CMakeLists.txt before calling this function |
| 17 | |
Imre Kis | 590cd9c | 2020-01-08 16:51:57 +0100 | [diff] [blame^] | 18 | function(unit_test_add_suite) |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 19 | set(_OPTIONS_ARGS args1) |
Imre Kis | 590cd9c | 2020-01-08 16:51:57 +0100 | [diff] [blame^] | 20 | set(_ONE_VALUE_ARGS NAME) |
| 21 | set(_MULTI_VALUE_ARGS SOURCES INCLUDE_DIRECTORIES COMPILE_DEFINITIONS) |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 22 | cmake_parse_arguments(_MY_PARAMS "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN}) |
| 23 | # TODO: check_args(add_unit_test_suite args1 args2 args3) |
| 24 | |
Imre Kis | 590cd9c | 2020-01-08 16:51:57 +0100 | [diff] [blame^] | 25 | set(TEST_NAME ${_MY_PARAMS_NAME}) |
| 26 | set(TEST_INCLUDE_DIRECTORIES ${_MY_PARAMS_INCLUDE_DIRECTORIES}) |
| 27 | set(TEST_COMPILE_DEFINITIONS ${_MY_PARAMS_COMPILE_DEFINITIONS}) |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 28 | |
| 29 | add_executable(${TEST_NAME} ${UNIT_TEST_COMMON_SOURCES}) |
| 30 | |
Imre Kis | 590cd9c | 2020-01-08 16:51:57 +0100 | [diff] [blame^] | 31 | foreach(TEST_SOURCE ${_MY_PARAMS_SOURCES}) |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 32 | get_filename_component(TEST_SOURCE_EXTENSION ${TEST_SOURCE} EXT) |
| 33 | |
| 34 | if (${TEST_SOURCE_EXTENSION} STREQUAL ".yml") |
| 35 | # Building output file name: tests/a/b/test.yml -> ${CPICKER_CACHE_PATH}/a/b/test.c |
| 36 | get_filename_component(TEST_SOURCE_DIR ${TEST_SOURCE} DIRECTORY) |
| 37 | file(RELATIVE_PATH CPICKER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests ${TEST_SOURCE_DIR}) |
| 38 | get_filename_component(TEST_SOURCE_NAME ${TEST_SOURCE} NAME_WE) |
| 39 | set(CPICKER_OUTPUT ${CPICKER_CACHE_PATH}/${TEST_NAME}/${CPICKER_SOURCE_DIR}/${TEST_SOURCE_NAME}.c) |
| 40 | |
| 41 | # Creating output directory |
| 42 | get_filename_component(OUTPUT_DIRECTORY ${CPICKER_OUTPUT} DIRECTORY) |
| 43 | file(MAKE_DIRECTORY ${OUTPUT_DIRECTORY}) |
| 44 | |
| 45 | # Fetching referenced source files as the dependencies of the generated file |
| 46 | execute_process( |
Imre Kis | c0d4b44 | 2019-12-03 23:52:26 +0100 | [diff] [blame] | 47 | COMMAND |
| 48 | ${CMAKE_COMMAND} -E env CLANG_LIBRARY_PATH=${CLANG_LIBRARY_PATH} |
| 49 | ${CPICKER_COMMAND} --config ${TEST_SOURCE} --root ${TF_A_PATH} --print-dependencies |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 50 | OUTPUT_VARIABLE CPICKER_DEPENDENCIES |
| 51 | ) |
| 52 | |
| 53 | # Adding custom command for invoking c-picker |
| 54 | add_custom_command( |
| 55 | OUTPUT ${CPICKER_OUTPUT} |
Imre Kis | c0d4b44 | 2019-12-03 23:52:26 +0100 | [diff] [blame] | 56 | COMMAND |
| 57 | ${CMAKE_COMMAND} -E env CLANG_LIBRARY_PATH=${CLANG_LIBRARY_PATH} |
| 58 | ${CPICKER_COMMAND} --config ${TEST_SOURCE} --root ${TF_A_PATH} > ${CPICKER_OUTPUT} |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 59 | DEPENDS ${TEST_SOURCE} ${CPICKER_DEPENDENCIES} |
| 60 | COMMENT "Generating c-picker output ${CPICKER_OUTPUT}" |
| 61 | ) |
| 62 | set(TEST_SOURCE ${CPICKER_OUTPUT}) |
| 63 | endif() |
| 64 | |
| 65 | target_sources(${TEST_NAME} PRIVATE ${TEST_SOURCE}) |
| 66 | endforeach() |
| 67 | |
Imre Kis | 590cd9c | 2020-01-08 16:51:57 +0100 | [diff] [blame^] | 68 | target_include_directories(${TEST_NAME} PRIVATE ${TEST_INCLUDE_DIRECTORIES}) |
| 69 | target_compile_definitions(${TEST_NAME} PRIVATE ${TEST_COMPILE_DEFINITIONS}) |
Imre Kis | ed98e9c | 2019-10-15 16:17:55 +0200 | [diff] [blame] | 70 | add_test(${TEST_NAME} ${TEST_NAME}) |
| 71 | endfunction() |