From e1b8bbf12d2fcca80320f47c54555ecef22c78b4 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Mon, 11 Nov 2024 17:00:25 +0100 Subject: [PATCH] Clean up and refactor CMakeLists --- CMakeLists.txt | 138 +++++++++++----------------------- CMakePresets.json | 2 +- benches/CMakeLists.txt | 11 ++- cmake/diagnostics_print.cmake | 32 -------- lib/CMakeLists.txt | 1 + src/libdramsys/CMakeLists.txt | 2 + src/simulator/CMakeLists.txt | 2 + tests/CMakeLists.txt | 9 +++ 8 files changed, 67 insertions(+), 130 deletions(-) delete mode 100644 cmake/diagnostics_print.cmake create mode 100644 lib/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index ac8b9229..d9013ed1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,7 @@ # Authors: # Thomas Psota # Lukas Steiner +# Derek Christ ############################################### ### DRAMSys ### @@ -39,126 +40,74 @@ cmake_minimum_required(VERSION 3.21) set(PROJECT_NAME "DRAMSys") -project(${PROJECT_NAME} VERSION "5.0") - -### Compiler settings ### -set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ Standard") -message(STATUS "CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD}") -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) -endif() -message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") - -### CMake settings ### -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") -include(diagnostics_print) -include(enable_extensions) -include(FetchContent) - -if(ENABLE_COVERAGE) - include(coverage) -endif() +project(${PROJECT_NAME} VERSION 5.0) if(POLICY CMP0135) cmake_policy(SET CMP0135 NEW) endif() -# Check if standalone build or being included as submodule -get_directory_property(DRAMSYS_IS_SUBMODULE PARENT_DIRECTORY) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") +include(FetchContent) +include(enable_extensions) -set_property(GLOBAL PROPERTY USE_FOLDERS ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - -### Project settings ### -message(STATUS "CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}") -message(STATUS "CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}") -message(STATUS "" ) - -if(NOT DRAMSYS_IS_SUBMODULE) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +if(DRAMSYS_ENABLE_COVERAGE) + include(coverage) endif() -### DRAMSys directories ### -set(DRAMSYS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") -set(DRAMSYS_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib") -set(DRAMSYS_TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests") -set(DRAMSYS_RESOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/configs") -set(DRAMSYS_EXTENSIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extensions") - -### Build options ### -option(BUILD_SHARED_LIBS "Build shared libraries" OFF) - -option(DRAMSYS_VERBOSE_CMAKE_OUTPUT "Show detailed CMake output" OFF) +### Project settings ### option(DRAMSYS_BUILD_TESTS "Build DRAMSys unit tests" OFF) option(DRAMSYS_BUILD_BENCHMARKS "Build DRAMSys benchmarks" OFF) option(DRAMSYS_BUILD_CLI "Build DRAMSys Command Line Tool" ON) option(DRAMSYS_BUILD_TRACE_ANALYZER "Build DRAMSys Trace Analyzer" OFF) -option(DRAMSYS_WITH_DRAMPOWER "Build with DRAMPower support enabled." OFF) -option(DRAMSYS_USE_EXTERNAL_SYSTEMC "Use an external SystemC installation." OFF) +option(DRAMSYS_WITH_DRAMPOWER "Build with DRAMPower support enabled." ON) + +# TODO: Remove as soon as DRAMPower is updated +set(DRAMSYS_SHARED_LIBS OFF) + +if(DEFINED DRAMSYS_SHARED_LIBS) + set(BUILD_SHARED_LIBS ${DRAMSYS_SHARED_LIBS}) +endif() + +if (PROJECT_IS_TOP_LEVEL) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() + +### DRAMSys directories ### +set(DRAMSYS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") +set(DRAMSYS_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib") +set(DRAMSYS_TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests") +set(DRAMSYS_RESOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/configs") +set(DRAMSYS_EXTENSIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extensions") ############################################### ### Library Settings ### ############################################### -### Detect OS threading library ### -find_package(Threads) - ### nlohmann_json ### -FetchContent_Declare(nlohmann_json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz) -FetchContent_MakeAvailable(nlohmann_json) +add_subdirectory(${DRAMSYS_LIBRARY_DIR}) -### sqlite3 ### -add_subdirectory(${DRAMSYS_LIBRARY_DIR}/sqlite3) - -### GoogleTest ### -if(DRAMSYS_BUILD_TESTS) - FetchContent_Declare( - googletest - GIT_REPOSITORY https://github.com/google/googletest - GIT_TAG release-1.12.1) - - # For Windows: Prevent overriding the parent project's compiler/linker settings - set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - FetchContent_MakeAvailable(googletest) - set_target_properties(gmock PROPERTIES FOLDER lib/gtest) - set_target_properties(gmock_main PROPERTIES FOLDER lib/gtest) - set_target_properties(gtest PROPERTIES FOLDER lib/gtest) - set_target_properties(gtest_main PROPERTIES FOLDER lib/gtest) -endif() - -### GoogleBenchmark ### -if(DRAMSYS_BUILD_BENCHMARKS) - set(BENCHMARK_ENABLE_TESTING OFF) - - FetchContent_Declare( - benchmark - URL https://github.com/google/benchmark/archive/refs/tags/v1.8.3.zip - ) - - FetchContent_MakeAvailable(benchmark) -endif() +if (NOT TARGET nlohmann_json::nlohmann_json) + FetchContent_Declare(nlohmann_json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz) + FetchContent_MakeAvailable(nlohmann_json) +endif () ### SystemC ### -if (DRAMSYS_USE_EXTERNAL_SYSTEMC) - list(APPEND CMAKE_PREFIX_PATH $ENV{SYSTEMC_HOME} /opt/systemc) - find_package(systemc NAMES SystemCLanguage) -endif() +if (NOT TARGET SystemC::systemc) # TODO ist das wirklich so korrekt? + set(DISABLE_COPYRIGHT_MESSAGE True) -FetchContent_Declare( - systemc - GIT_REPOSITORY https://github.com/accellera-official/systemc.git - GIT_TAG 2.3.4) + FetchContent_Declare( + systemc + GIT_REPOSITORY https://github.com/accellera-official/systemc.git + GIT_TAG 2.3.4) -set(DISABLE_COPYRIGHT_MESSAGE True) - -# Allow populating of a user-set SystemC package -if (NOT TARGET SystemC::systemc) FetchContent_MakeAvailable(systemc) # Set include directories to SYSTEM to suppress warnings set_target_properties(systemc PROPERTIES SYSTEM TRUE) +else() + find_package(systemc NAMES SystemCLanguage) endif() @@ -195,8 +144,7 @@ dramsys_enable_extensions() ############################################### if(DRAMSYS_BUILD_TESTS) - include(GoogleTest) - include(CTest) + enable_testing() add_subdirectory(tests) endif() diff --git a/CMakePresets.json b/CMakePresets.json index 6fa80588..827e0500 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -52,7 +52,7 @@ "binaryDir": "${sourceDir}/build/coverage", "inherits": "ci-common", "cacheVariables": { - "ENABLE_COVERAGE": "ON", + "DRAMSYS_ENABLE_COVERAGE": "ON", "CMAKE_BUILD_TYPE": "Coverage", "CMAKE_CXX_FLAGS_COVERAGE": "-Og -g --coverage -fkeep-static-functions", "CMAKE_EXE_LINKER_FLAGS_COVERAGE": "--coverage", diff --git a/benches/CMakeLists.txt b/benches/CMakeLists.txt index 23e7b1c8..81ef50a3 100644 --- a/benches/CMakeLists.txt +++ b/benches/CMakeLists.txt @@ -37,6 +37,15 @@ project(benches_dramsys) +set(BENCHMARK_ENABLE_TESTING OFF) + +FetchContent_Declare( + benchmark + URL https://github.com/google/benchmark/archive/refs/tags/v1.8.3.zip +) + +FetchContent_MakeAvailable(benchmark) + add_executable(${PROJECT_NAME} main.cpp simulation.cpp @@ -52,5 +61,3 @@ target_link_libraries(${PROJECT_NAME} SystemC::systemc benchmark ) - -build_source_group() diff --git a/cmake/diagnostics_print.cmake b/cmake/diagnostics_print.cmake deleted file mode 100644 index a07ec142..00000000 --- a/cmake/diagnostics_print.cmake +++ /dev/null @@ -1,32 +0,0 @@ -############################################### -### diagnostics_print ### -############################################### -### -### Prints different diagnostics and infos -### about the specified target -### - -function( diagnostics_print target_name ) - message(STATUS "${target_name} settings:") - message(STATUS "==============\n") - - message(STATUS "Source Files:") - get_target_property(SOURCE_FILES ${target_name} SOURCES) - if(SOURCE_FILES) - message(STATUS "${SOURCE_FILES}") - endif() - - message(STATUS "\nInclude Directories:") - get_target_property(HEADER_DIR ${target_name} INCLUDE_DIRECTORIES) - if(HEADER_DIR) - message(STATUS "${HEADER_DIR}") - endif() - - message(STATUS "\nLink Libraries:") - get_target_property(LINKED_LIBS ${target_name} LINK_LIBRARIES) - if(LINKED_LIBS) - message(STATUS "${LINKED_LIBS}") - endif() - - message(STATUS "\n") -endfunction() \ No newline at end of file diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 00000000..bbdf1add --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(sqlite3) diff --git a/src/libdramsys/CMakeLists.txt b/src/libdramsys/CMakeLists.txt index e002b137..c10d0fbe 100644 --- a/src/libdramsys/CMakeLists.txt +++ b/src/libdramsys/CMakeLists.txt @@ -105,6 +105,8 @@ target_link_libraries(${PROJECT_NAME} SQLite::SQLite3 ) +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17) + if (DRAMSYS_WITH_DRAMPOWER) target_link_libraries(${PROJECT_NAME} PUBLIC DRAMPower) target_compile_definitions(${PROJECT_NAME} PUBLIC DRAMPOWER) diff --git a/src/simulator/CMakeLists.txt b/src/simulator/CMakeLists.txt index bc4ec87c..0c506cb9 100644 --- a/src/simulator/CMakeLists.txt +++ b/src/simulator/CMakeLists.txt @@ -40,6 +40,8 @@ project(DRAMSys_Simulator) +find_package(Threads) + add_library(${PROJECT_NAME} simulator/Cache.cpp simulator/EccModule.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cc942252..cfb4e5cd 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,14 @@ +include(GoogleTest) + set(DRAMSYS_TEST_RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources") +FetchContent_Declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest + GIT_TAG release-1.12.1) + +FetchContent_MakeAvailable(googletest) + add_subdirectory(tests_configuration) add_subdirectory(tests_dramsys) add_subdirectory(tests_regression)