diff --git a/CMakeLists.txt b/CMakeLists.txt index e8679d5c..c1be0376 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,6 +48,10 @@ include(diagnostics_print) include(enable_extensions) include(FetchContent) +if(ENABLE_COVERAGE) + include(coverage) +endif() + if(POLICY CMP0135) cmake_policy(SET CMP0135 NEW) endif() @@ -80,7 +84,6 @@ set(DRAMSYS_EXTENSIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extensions") option(DRAMSYS_BUILD_TESTS "Build DRAMSys unit tests" OFF) option(DRAMSYS_VERBOSE_CMAKE_OUTPUT "Show detailed CMake output" OFF) option(DRAMSYS_BUILD_CLI "Build DRAMSys Command Line Tool" ON) -option(DRAMSYS_COVERAGE_CHECK "Coverage check of DRAMSys" OFF) option(DRAMSYS_WITH_GEM5 "Build DRAMSys with gem5 coupling" OFF) option(DRAMSYS_WITH_DRAMPOWER "Build with DRAMPower support enabled." OFF) option(DRAMSYS_ENABLE_EXTENSIONS "Enable proprietary DRAMSys extensions." OFF) @@ -88,15 +91,6 @@ option(DRAMSYS_ENABLE_EXTENSIONS "Enable proprietary DRAMSys extensions." OFF) ### Compiler settings ### set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ Standard") -if(DRAMSYS_COVERAGE_CHECK) - message("== Coverage check enabled") - set(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage") - set(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") -endif() - - ############################################### ### Library Settings ### ############################################### diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..96d88df9 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,75 @@ +{ + "version": 2, + "cmakeMinimumRequired": { + "major": 3, + "minor": 14, + "patch": 0 + }, + "configurePresets": [ + { + "name": "cmake-pedantic", + "hidden": true, + "warnings": { + "dev": true, + "deprecated": true, + "unusedCli": true, + "systemVars": false + } + }, + { + "name": "dev-mode", + "hidden": true, + "inherits": "cmake-pedantic", + "cacheVariables": { + "DRAMSYS_BUILD_TESTS": "ON", + "DRAMSYS_ENABLE_EXTENSIONS": "ON" + } + }, + { + "name": "std", + "description": "This preset makes sure the project actually builds with at least the specified standard", + "hidden": true, + "cacheVariables": { + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_STANDARD": "17", + "CMAKE_CXX_STANDARD_REQUIRED": "ON" + } + }, + { + "name": "ci-common", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/build", + "inherits": [ + "std", + "dev-mode" + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "ci-coverage", + "binaryDir": "${sourceDir}/build/coverage", + "inherits": "ci-common", + "cacheVariables": { + "ENABLE_COVERAGE": "ON", + "CMAKE_BUILD_TYPE": "Coverage", + "CMAKE_CXX_FLAGS_COVERAGE": "-Og -g --coverage -fkeep-static-functions", + "CMAKE_EXE_LINKER_FLAGS_COVERAGE": "--coverage", + "CMAKE_SHARED_LINKER_FLAGS_COVERAGE": "--coverage" + } + }, + { + "name": "dev", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/build", + "inherits": [ + "dev-mode", + "std" + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + } + ] +} \ No newline at end of file diff --git a/cmake/coverage.cmake b/cmake/coverage.cmake new file mode 100644 index 00000000..879d9280 --- /dev/null +++ b/cmake/coverage.cmake @@ -0,0 +1,56 @@ +set( + COVERAGE_BASE_COMMAND + lcov -c -q -i + -o "${PROJECT_BINARY_DIR}/coverage_base.info" + -d "${PROJECT_BINARY_DIR}" + --include "${PROJECT_SOURCE_DIR}/src/*" + CACHE STRING + "Command to generate initial zero coverage data" +) + +set( + COVERAGE_TRACE_COMMAND + lcov -c -q + -o "${PROJECT_BINARY_DIR}/coverage_tests.info" + -d "${PROJECT_BINARY_DIR}" + --include "${PROJECT_SOURCE_DIR}/src/*" + CACHE STRING + "Command to generate coverage data" +) + +set( + COVERAGE_COMBINE_COMMAND + lcov -q + -a "${PROJECT_BINARY_DIR}/coverage_base.info" + -a "${PROJECT_BINARY_DIR}/coverage_tests.info" + -o "${PROJECT_BINARY_DIR}/coverage.info" + CACHE STRING + "Command to combine coverage files to resulting coverage data" +) + +set( + COVERAGE_HTML_COMMAND + genhtml --legend -f -q + "${PROJECT_BINARY_DIR}/coverage.info" + -p "${PROJECT_SOURCE_DIR}" + -o "${PROJECT_BINARY_DIR}/coverage_html" + CACHE STRING + "Command to generate HTML report for the coverage" +) + +set( + COVERAGE_LIST_COMMAND + lcov + --list "${PROJECT_BINARY_DIR}/coverage.info" +) + +add_custom_target( + coverage + COMMAND ${COVERAGE_BASE_COMMAND} + COMMAND ${COVERAGE_TRACE_COMMAND} + COMMAND ${COVERAGE_COMBINE_COMMAND} + COMMAND ${COVERAGE_HTML_COMMAND} + COMMAND ${COVERAGE_LIST_COMMAND} + COMMENT "Generate coverage report" + VERBATIM +) diff --git a/src/configuration/CMakeLists.txt b/src/configuration/CMakeLists.txt index 1cec593a..5745f594 100644 --- a/src/configuration/CMakeLists.txt +++ b/src/configuration/CMakeLists.txt @@ -57,12 +57,5 @@ target_compile_definitions(${PROJECT_NAME} add_library(DRAMSys::config ALIAS ${PROJECT_NAME}) -option(DRAMSYS_CONFIGURATION_TESTS "Build the unit tests for configuration." OFF) - -if (DRAMSYS_CONFIGURATION_TESTS) - include("${DRAMSYS_TESTS_DIR}/tests_configuration/CMakeLists.txt") -endif() - - build_source_group() diagnostics_print(${PROJECT_NAME}) \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b9cf95c9..cd1d5ece 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,4 +1,5 @@ set(DRAMSYS_TEST_RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources") +add_subdirectory(tests_configuration) +add_subdirectory(tests_dramsys) add_subdirectory(tests_util) -add_subdirectory(tests_dramsys) \ No newline at end of file diff --git a/tests/tests_configuration/simpletest.cpp b/tests/tests_configuration/simpletest.cpp index c4267240..3f240796 100644 --- a/tests/tests_configuration/simpletest.cpp +++ b/tests/tests_configuration/simpletest.cpp @@ -85,29 +85,6 @@ DRAMSys::Config::SimConfig getSimConfig() 1000}; } -DRAMSys::Config::ThermalConfig getThermalConfig() -{ - std::vector channels { - {"dram_die_channel0", 0.0, 1.0}, - {"dram_die_channel1", 0.0, 1.0}, - {"dram_die_channel2", 0.0, 1.0}, - {"dram_die_channel3", 0.0, 1.0} - }; - - return DRAMSys::Config::ThermalConfig{ - DRAMSys::Config::TemperatureScale::Celsius, - 89, - 100, - DRAMSys::Config::ThermalSimUnit::Microseconds, - DRAMSys::Config::PowerInfo{channels}, - "127.0.0.1", - 118800, - 10, - 5, - true, - true}; -} - DRAMSys::Config::TracePlayer getTracePlayer() { DRAMSys::Config::TracePlayer player; @@ -206,7 +183,6 @@ DRAMSys::Config::Configuration getConfig(const DRAMSys::Config::MemSpec &memSpec memSpec, getSimConfig(), "std::string_simulationId", - getThermalConfig(), // {{}, false}, works too getTraceSetup(), };