[修改] 增加freeRTOS
1. 版本FreeRTOSv202212.01,命名为kernel;
This commit is contained in:
@ -0,0 +1,70 @@
|
||||
# Taken from amazon-freertos repository
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
set(BINARY_DIR ${CMAKE_BINARY_DIR})
|
||||
# reset coverage counters
|
||||
execute_process(
|
||||
COMMAND lcov --directory ${CMAKE_BINARY_DIR}
|
||||
--base-directory ${CMAKE_BINARY_DIR}
|
||||
--zerocounters
|
||||
|
||||
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/coverage
|
||||
)
|
||||
# make the initial/baseline capture a zeroed out files
|
||||
execute_process( COMMAND lcov --directory ${CMAKE_BINARY_DIR}
|
||||
--base-directory ${CMAKE_BINARY_DIR}
|
||||
--initial
|
||||
--capture
|
||||
--rc lcov_branch_coverage=1
|
||||
--rc genhtml_branch_coverage=1
|
||||
--output-file=${CMAKE_BINARY_DIR}/base_coverage.info
|
||||
)
|
||||
file(GLOB files "${CMAKE_BINARY_DIR}/bin/tests/*")
|
||||
|
||||
set(REPORT_FILE ${CMAKE_BINARY_DIR}/utest_report.txt)
|
||||
file(WRITE ${REPORT_FILE} "")
|
||||
# execute all files in bin directory, gathering the output to show it in CI
|
||||
foreach(testname ${files})
|
||||
get_filename_component(test
|
||||
${testname}
|
||||
NAME_WLE
|
||||
)
|
||||
message("Running ${testname}")
|
||||
execute_process(COMMAND ${testname} OUTPUT_FILE ${CMAKE_BINARY_DIR}/${test}_out.txt)
|
||||
|
||||
file(READ ${CMAKE_BINARY_DIR}/${test}_out.txt CONTENTS)
|
||||
file(APPEND ${REPORT_FILE} "${CONTENTS}")
|
||||
endforeach()
|
||||
|
||||
# generate Junit style xml output
|
||||
execute_process(COMMAND ruby
|
||||
${CMOCK_DIR}/vendor/unity/auto/parse_output.rb
|
||||
-xml ${REPORT_FILE}
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
# capture data after running the tests
|
||||
execute_process(
|
||||
COMMAND lcov --capture
|
||||
--rc lcov_branch_coverage=1
|
||||
--rc genhtml_branch_coverage=1
|
||||
--base-directory ${CMAKE_BINARY_DIR}
|
||||
--directory ${CMAKE_BINARY_DIR}
|
||||
--output-file ${CMAKE_BINARY_DIR}/second_coverage.info
|
||||
)
|
||||
|
||||
# combile baseline results (zeros) with the one after running the tests
|
||||
execute_process(
|
||||
COMMAND lcov --base-directory ${CMAKE_BINARY_DIR}
|
||||
--directory ${CMAKE_BINARY_DIR}
|
||||
--add-tracefile ${CMAKE_BINARY_DIR}/base_coverage.info
|
||||
--add-tracefile ${CMAKE_BINARY_DIR}/second_coverage.info
|
||||
--output-file ${CMAKE_BINARY_DIR}/coverage.info
|
||||
--no-external
|
||||
--rc lcov_branch_coverage=1
|
||||
)
|
||||
execute_process(
|
||||
COMMAND genhtml --rc lcov_branch_coverage=1
|
||||
--branch-coverage
|
||||
--output-directory ${CMAKE_BINARY_DIR}/coverage
|
||||
${CMAKE_BINARY_DIR}/coverage.info
|
||||
)
|
||||
@ -0,0 +1,168 @@
|
||||
# Taken from amazon-freertos repository
|
||||
|
||||
#function to create the test executable
|
||||
function(create_test test_name
|
||||
test_src
|
||||
link_list
|
||||
dep_list
|
||||
include_list)
|
||||
set(mocks_dir "${CMAKE_CURRENT_BINARY_DIR}/mocks")
|
||||
include (CTest)
|
||||
get_filename_component(test_src_absolute ${test_src} ABSOLUTE)
|
||||
add_custom_command(OUTPUT ${test_name}_runner.c
|
||||
COMMAND ruby
|
||||
${CMOCK_DIR}/vendor/unity/auto/generate_test_runner.rb
|
||||
${MODULE_ROOT_DIR}/tools/cmock/project.yml
|
||||
${test_src_absolute}
|
||||
${test_name}_runner.c
|
||||
DEPENDS ${test_src}
|
||||
)
|
||||
add_executable(${test_name} ${test_src} ${test_name}_runner.c)
|
||||
set_target_properties(${test_name} PROPERTIES
|
||||
COMPILE_FLAG "-O0 -ggdb"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/tests"
|
||||
INSTALL_RPATH_USE_LINK_PATH TRUE
|
||||
LINK_FLAGS " \
|
||||
-Wl,-rpath,${CMAKE_BINARY_DIR}/lib \
|
||||
-Wl,-rpath,${CMAKE_CURRENT_BINARY_DIR}/lib"
|
||||
)
|
||||
target_include_directories(${test_name} PUBLIC
|
||||
${mocks_dir}
|
||||
${include_list}
|
||||
)
|
||||
|
||||
target_link_directories(${test_name} PUBLIC
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
|
||||
# link all libraries sent through parameters
|
||||
foreach(link IN LISTS link_list)
|
||||
target_link_libraries(${test_name} ${link})
|
||||
endforeach()
|
||||
|
||||
# add dependency to all the dep_list parameter
|
||||
foreach(dependency IN LISTS dep_list)
|
||||
add_dependencies(${test_name} ${dependency})
|
||||
target_link_libraries(${test_name} ${dependency})
|
||||
endforeach()
|
||||
target_link_libraries(${test_name} -lgcov unity)
|
||||
target_link_directories(${test_name} PUBLIC
|
||||
${CMAKE_CURRENT_BINARY_DIR}/lib
|
||||
)
|
||||
add_test(NAME ${test_name}
|
||||
COMMAND ${CMAKE_BINARY_DIR}/bin/tests/${test_name}
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
# Run the C preprocessor on target files.
|
||||
# Takes a CMAKE list of arguments to pass to the C compiler
|
||||
function(preprocess_mock_list mock_name file_list compiler_args)
|
||||
set_property(GLOBAL PROPERTY ${mock_name}_processed TRUE)
|
||||
foreach (target_file IN LISTS file_list)
|
||||
# Has to be TARGET ALL so the file is pre-processed before CMOCK
|
||||
# is executed on the file.
|
||||
add_custom_command(OUTPUT ${target_file}.backup
|
||||
COMMAND scp ${target_file} ${target_file}.backup
|
||||
VERBATIM COMMAND ${CMAKE_C_COMPILER} -E ${compiler_args} ${target_file} > ${target_file}.out
|
||||
)
|
||||
add_custom_target(pre_${mock_name}
|
||||
COMMAND mv ${target_file}.out ${target_file}
|
||||
DEPENDS ${target_file}.backup
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# Clean up temporary files that were created.
|
||||
# First we test to see if the backup file still exists. If it does we revert
|
||||
# the change made to the original file.
|
||||
foreach (target_file IN LISTS file_list)
|
||||
add_custom_command(TARGET ${mock_name}
|
||||
POST_BUILD
|
||||
COMMAND test ! -e ${target_file}.backup || mv ${target_file}.backup ${target_file}
|
||||
)
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
# Generates a mock library based on a module's header file
|
||||
# places the generated source file in the build directory
|
||||
# @param mock_name: name of the target name
|
||||
# @param mock_list list of header files to mock
|
||||
# @param cmock_config configuration file of the cmock framework
|
||||
# @param mock_include_list include list for the target
|
||||
# @param mock_define_list special definitions to control compilation
|
||||
function(create_mock_list mock_name
|
||||
mock_list
|
||||
cmock_config
|
||||
mock_include_list
|
||||
mock_define_list)
|
||||
set(mocks_dir "${CMAKE_CURRENT_BINARY_DIR}/mocks")
|
||||
add_library(${mock_name} SHARED)
|
||||
foreach (mock_file IN LISTS mock_list)
|
||||
get_filename_component(mock_file_abs
|
||||
${mock_file}
|
||||
ABSOLUTE
|
||||
)
|
||||
get_filename_component(mock_file_name
|
||||
${mock_file}
|
||||
NAME_WLE
|
||||
)
|
||||
get_filename_component(mock_file_dir
|
||||
${mock_file}
|
||||
DIRECTORY
|
||||
)
|
||||
add_custom_command (
|
||||
OUTPUT ${mocks_dir}/mock_${mock_file_name}.c
|
||||
COMMAND ruby
|
||||
${CMOCK_DIR}/lib/cmock.rb
|
||||
-o${cmock_config} ${mock_file_abs}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
target_sources(${mock_name} PUBLIC
|
||||
${mocks_dir}/mock_${mock_file_name}.c
|
||||
)
|
||||
|
||||
target_include_directories(${mock_name} PUBLIC
|
||||
${mock_file_dir}
|
||||
)
|
||||
endforeach()
|
||||
target_include_directories(${mock_name} PUBLIC
|
||||
${mocks_dir}
|
||||
${mock_include_list}
|
||||
)
|
||||
set_target_properties(${mock_name} PROPERTIES
|
||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
)
|
||||
target_compile_definitions(${mock_name} PUBLIC
|
||||
${mock_define_list}
|
||||
)
|
||||
target_link_libraries(${mock_name} cmock unity)
|
||||
endfunction()
|
||||
|
||||
|
||||
function(create_real_library target
|
||||
src_file
|
||||
real_include_list
|
||||
mock_name)
|
||||
add_library(${target} STATIC
|
||||
${src_file}
|
||||
)
|
||||
target_include_directories(${target} PUBLIC
|
||||
${real_include_list}
|
||||
)
|
||||
set_target_properties(${target} PROPERTIES
|
||||
COMPILE_FLAGS "-Wextra -Wpedantic \
|
||||
-fprofile-arcs -ftest-coverage -fprofile-generate \
|
||||
-Wno-unused-but-set-variable"
|
||||
LINK_FLAGS "-fprofile-arcs -ftest-coverage \
|
||||
-fprofile-generate "
|
||||
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib
|
||||
)
|
||||
if(NOT(mock_name STREQUAL ""))
|
||||
add_dependencies(${target} ${mock_name})
|
||||
target_link_libraries(${target}
|
||||
-l${mock_name}
|
||||
-lgcov
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
@ -0,0 +1,25 @@
|
||||
:cmock:
|
||||
:mock_prefix: mock_
|
||||
:when_no_prototypes: :warn
|
||||
:enforce_strict_ordering: TRUE
|
||||
:plugins:
|
||||
- :ignore
|
||||
- :ignore_arg
|
||||
- :expect_any_args
|
||||
- :array
|
||||
- :callback
|
||||
- :return_thru_ptr
|
||||
:callback_include_count: true # include a count arg when calling the callback
|
||||
:callback_after_arg_check: false # check arguments before calling the callback
|
||||
:treat_as:
|
||||
uint8: HEX8
|
||||
uint16: HEX16
|
||||
uint32: UINT32
|
||||
int8: INT8
|
||||
bool: UINT8
|
||||
:includes: # This will add these includes to each mock.
|
||||
- <stdbool.h>
|
||||
- <stdint.h>
|
||||
:treat_externs: :exclude # Now the extern-ed functions will be mocked.
|
||||
:weak: __attribute__((weak))
|
||||
:treat_externs: :include
|
||||
Reference in New Issue
Block a user