From d58a207257af3d079ad4632e7ad6fbb57bc696d1 Mon Sep 17 00:00:00 2001 From: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:14:58 -0800 Subject: [PATCH] Fix `check` targets and remove `check_leak` (#2430) * Remove check_leak target * Fix check target names mismatch --- ci/tests/25-fputil-comp.bash | 2 +- cmake/FPrime.cmake | 1 - cmake/options.cmake | 4 +- cmake/target/check.cmake | 17 +++-- cmake/target/check_leak.cmake | 98 ---------------------------- docs/UsersGuide/user/fprime-util.md | 3 +- docs/UsersGuide/user/unit-testing.md | 3 +- 7 files changed, 17 insertions(+), 111 deletions(-) delete mode 100644 cmake/target/check_leak.cmake diff --git a/ci/tests/25-fputil-comp.bash b/ci/tests/25-fputil-comp.bash index 2d409920f0..9ea8df3184 100755 --- a/ci/tests/25-fputil-comp.bash +++ b/ci/tests/25-fputil-comp.bash @@ -13,7 +13,7 @@ deployment="${FPRIME_DIR}/Ref" component="SignalGen" echo -e "${BLUE}Testing ${deployment} against fprime-util targets: ${FPUTIL_TARGETS}${NOCOLOR}" export CHECK_TARGET_PLATFORM="native" -for target in "impl" "impl --ut" "build" "build --ut" "check --leak" +for target in "impl" "impl --ut" "build" "build --ut" do if [[ "${TEST_TYPE}" != "QUICK" ]] || [[ "${target}" == "generate" ]] then diff --git a/cmake/FPrime.cmake b/cmake/FPrime.cmake index cc597ffa39..015ae67b05 100644 --- a/cmake/FPrime.cmake +++ b/cmake/FPrime.cmake @@ -114,7 +114,6 @@ macro(fprime_setup_standard_targets) if (FPRIME_ENABLE_UTIL_TARGETS) register_fprime_target(target/refresh_cache) register_fprime_ut_target(target/check) - register_fprime_ut_target(target/check_leak) endif() endif() endmacro(fprime_setup_standard_targets) diff --git a/cmake/options.cmake b/cmake/options.cmake index d20716da07..1ae0754baa 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -93,8 +93,8 @@ endif() #### # `FPRIME_ENABLE_UTIL_TARGETS`: # -# Enables the targets required to run using `fprime-util`. These include: check, check-leak, coverage, impl, and -# testimpl targets. This switch defaults to "ON" providing those targets, but may be set to off when running within an +# Enables the targets required to run using `fprime-util`. These include: check and refresh_cache. +# This switch defaults to "ON" providing those targets, but may be set to off when running within an # IDE where limiting the number of targets is desirable. Note: unit test targets are still only generated when running # with -DBUILD_TESTING=ON. # diff --git a/cmake/target/check.cmake b/cmake/target/check.cmake index 0bced5053b..41e2800c28 100644 --- a/cmake/target/check.cmake +++ b/cmake/target/check.cmake @@ -1,3 +1,5 @@ +include(target/ut) + #### # check.cmake: # @@ -46,9 +48,9 @@ function(check_add_deployment_target MODULE TARGET SOURCES DEPENDENCIES FULL_DEP endfunction() #### -# Dict function `add_module_target`: +# Function `check_add_module_target`: # -# Creates each module's coverage targets. Note: only run for "BUILD_TESTING=ON" builds. +# Creates each module's check targets. Note: only run for "BUILD_TESTING=ON" builds. # # - **MODULE_NAME:** name of the module # - **TARGET_NAME:** name of target to produce @@ -59,12 +61,17 @@ function(check_add_module_target MODULE_NAME TARGET_NAME SOURCE_FILES DEPENDENCI # Protects against multiple calls to fprime_register_ut() if (NOT BUILD_TESTING OR NOT MODULE_TYPE STREQUAL "Unit Test") return() - elseif (NOT TARGET ${MODULE_NAME}_${TARGET_NAME}) + endif() + # UTs MODULE_NAME defaults to _ut_exe + # The below handling gives CHECK_TARGET_NAME = _check + string(REGEX REPLACE "_${UT_TARGET}$" "" CHECK_TARGET_NAME "${MODULE_NAME}") + string(APPEND CHECK_TARGET_NAME "_${TARGET_NAME}") + if (NOT TARGET ${CHECK_TARGET_NAME}) add_custom_target( - "${MODULE_NAME}_${TARGET_NAME}" + "${CHECK_TARGET_NAME}" COMMAND ${CMAKE_CTEST_COMMAND} --verbose ) endif() - add_dependencies("${MODULE_NAME}_check" ${UT_EXE_NAME}) + add_dependencies("${CHECK_TARGET_NAME}" ${UT_EXE_NAME}) add_dependencies(check ${UT_EXE_NAME}) endfunction(check_add_module_target) diff --git a/cmake/target/check_leak.cmake b/cmake/target/check_leak.cmake deleted file mode 100644 index e68e2ec7f5..0000000000 --- a/cmake/target/check_leak.cmake +++ /dev/null @@ -1,98 +0,0 @@ -#### -# check.cmake: -# -# Check target adds in an endpoint for running the individual unit tests with memory leak checking. -#### -set(MEM_TEST_CLI_OPTIONS '--leak-check=full --error-exitcode=100 --show-leak-kinds=all -v') -#### -# Function `add_global_target`: -# -# Adds a global target. Note: only run for "BUILD_TESTING=ON" builds. -# -# - **TARGET_NAME:** target name to be generated -#### -function(check_leak_add_global_target TARGET_NAME) - find_program(VALGRIND valgrind) - if (VALGRIND) - add_custom_target(${TARGET_NAME} - COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} find . -name "*.gcda" -delete - COMMAND ${CMAKE_CTEST_COMMAND} - --overwrite MemoryCheckCommand=${VALGRIND} - --overwrite MemoryCheckCommandOptions=${MEM_TEST_CLI_OPTIONS} - -T MemCheck) - else() - add_custom_target(${TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E echo "[WARNING] 'valgrind' not found. Will not check for leaks.") - endif() -endfunction(check_leak_add_global_target) - -#### -# Function `add_deployment_target`: -# -# Creates a target for "check_leak" per-deployment, to run all UTs within that deployment. -# -# - **MODULE:** name of the module -# - **TARGET:** name of target to produce -# - **SOURCES:** list of source file inputs -# - **DEPENDENCIES:** MOD_DEPS input from CMakeLists.txt -# - **FULL_DEPENDENCIES:** MOD_DEPS input from CMakeLists.txt -#### -function(check_leak_add_deployment_target MODULE TARGET SOURCES DEPENDENCIES FULL_DEPENDENCIES) - find_program(VALGRIND valgrind) - if (VALGRIND) - set(ALL_UTS) - foreach(DEPENDENCY IN LISTS FULL_DEPENDENCIES) - get_property(DEPENDENCY_UTS TARGET "${DEPENDENCY}" PROPERTY FPRIME_UTS) - list(APPEND ALL_UTS ${DEPENDENCY_UTS}) - endforeach() - string(REPLACE ";" "\\|" JOINED_UTS "${ALL_UTS}") - add_custom_target(${MODULE}_${TARGET_NAME} - COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} find . -name "*.gcda" -delete - COMMAND ${CMAKE_CTEST_COMMAND} - --overwrite MemoryCheckCommand=${VALGRIND} - --overwrite MemoryCheckCommandOptions=${MEM_TEST_CLI_OPTIONS} - -T MemCheck -R "${JOINED_UTS}" - DEPENDS ${ALL_UTS} - ) - foreach(DEPENDENCY IN LISTS FULL_DEPENDENCIES) - get_property(DEPENDENCY_UTS TARGET "${DEPENDENCY}" PROPERTY FPRIME_UTS) - if (DEPENDENCY_UTS) - add_dependencies("${MODULE}_${TARGET}" ${DEPENDENCY_UTS}) - endif() - endforeach() - else() - add_custom_target(${MODULE}_${TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E echo "[WARNING] 'valgrind' not found. WIll not check for leaks.") - endif() -endfunction() - -#### -# Dict function `add_module_target`: -# -# Creates each module's coverage targets. Note: only run for "BUILD_TESTING=ON" builds. -# -# - **MODULE_NAME:** name of the module -# - **TARGET_NAME:** name of target to produce -# - **SOURCE_FILES:** list of source file inputs -# - **DEPENDENCIES:** MOD_DEPS input from CMakeLists.txt -#### -function(check_leak_add_module_target MODULE_NAME TARGET_NAME SOURCE_FILES DEPENDENCIES) - find_program(VALGRIND valgrind) - # Protects against multiple calls to fprime_register_ut() - if (NOT VALGRIND) - if (NOT TARGET ${MODULE_NAME}_${TARGET_NAME}) - add_custom_target(${MODULE_NAME}_${TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E echo "[WARNING] 'valgrind' not found. Will not check for leaks.") - endif() - return() - endif() - if (NOT TARGET ${MODULE_NAME}_${TARGET_NAME}) - add_custom_target( - "${MODULE_NAME}_${TARGET_NAME}" - COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} find . -name "*.gcda" -delete - COMMAND ${CMAKE_CTEST_COMMAND} - --overwrite MemoryCheckCommand=${VALGRIND} - --overwrite MemoryCheckCommandOptions=${MEM_TEST_CLI_OPTIONS} - --verbose -T MemCheck - ) - endif() - add_dependencies("${MODULE_NAME}_${TARGET_NAME}" ${UT_EXE_NAME}) - add_dependencies("${TARGET_NAME}" ${UT_EXE_NAME}) -endfunction(check_leak_add_module_target) diff --git a/docs/UsersGuide/user/fprime-util.md b/docs/UsersGuide/user/fprime-util.md index 8b6875cd90..62d15c1037 100644 --- a/docs/UsersGuide/user/fprime-util.md +++ b/docs/UsersGuide/user/fprime-util.md @@ -48,8 +48,7 @@ each command's usage in more detail. *Ai.xml file, saving significant development time. Providing the `--ut` flag will generate a unit testing skeleton for the component. 7. `check`: Builds, if necessary, then runs unit tests in the current directory. The `--all` runs all - unit tests known to a deployment. The `--leak` flag will check for memory leaks while running the - unit tests. + unit tests known to a deployment. 8. `coverage`: Similar to check, but calculates and generates unit test code coverage reports. 9. `new`: Creates either a new component or port. Use `--component` or `--port` to specify whether you want to create a component or port. If you would like to use a custom component diff --git a/docs/UsersGuide/user/unit-testing.md b/docs/UsersGuide/user/unit-testing.md index d04294eca4..5baa95648e 100644 --- a/docs/UsersGuide/user/unit-testing.md +++ b/docs/UsersGuide/user/unit-testing.md @@ -193,9 +193,8 @@ directory) and run `fprime-util check [parameter flags]`. Unit test check parameter | Description ---|--- -`--all` | Run all unit tests, combinable with `leak` or `coverage` +`--all` | Run all unit tests, combinable with `coverage` `--coverage` | Check for code coverage in unit tests -`--leak` | Check for memory leaks in unit tests For example, to run all unit tests and check for code coverage, run `fprime-util check --all --coverage`.