Intensive refactor of DRAMSys project structure and CMakeFiles
This commit is contained in:
16
.gitmodules
vendored
16
.gitmodules
vendored
@@ -1,16 +0,0 @@
|
|||||||
[submodule "DRAMSys/library/src/common/third_party/DRAMPower"]
|
|
||||||
path = DRAMSys/library/src/common/third_party/DRAMPower
|
|
||||||
url = https://github.com/tukl-msd/DRAMPower.git
|
|
||||||
branch = rgr
|
|
||||||
[submodule "DRAMSys/unitTests/googletest"]
|
|
||||||
path = DRAMSys/unitTests/googletest
|
|
||||||
url = https://github.com/google/googletest.git
|
|
||||||
[submodule "DRAMSys/library/src/common/third_party/systemc"]
|
|
||||||
path = DRAMSys/library/src/common/third_party/systemc
|
|
||||||
url = https://github.com/accellera-official/systemc.git
|
|
||||||
[submodule "DRAMSys/library/src/common/third_party/sqlite-amalgamation"]
|
|
||||||
path = DRAMSys/library/src/common/third_party/sqlite-amalgamation
|
|
||||||
url = https://github.com/azadkuh/sqlite-amalgamation.git
|
|
||||||
[submodule "DRAMSys/library/src/common/third_party/nlohmann"]
|
|
||||||
path = DRAMSys/library/src/common/third_party/nlohmann
|
|
||||||
url = https://github.com/nlohmann/json
|
|
||||||
174
CMakeLists.txt
Normal file
174
CMakeLists.txt
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
# Copyright (c) 2020, Technische Universität Kaiserslautern
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are
|
||||||
|
# met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# 3. Neither the name of the copyright holder nor the names of its
|
||||||
|
# contributors may be used to endorse or promote products derived from
|
||||||
|
# this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
||||||
|
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# Thomas Psota
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### DRAMSys ###
|
||||||
|
###############################################
|
||||||
|
cmake_minimum_required(VERSION 3.13.0)
|
||||||
|
|
||||||
|
set(PROJECT_NAME "DRAMSys 5.0")
|
||||||
|
set(PROJECT_SHORTNAME "DRAMSys")
|
||||||
|
|
||||||
|
project(${PROJECT_NAME} VERSION "5.0")
|
||||||
|
|
||||||
|
### CMake settings ###
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||||
|
include(build_source_group)
|
||||||
|
include(diagnostics_print)
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
# Check if standalone build or being included as submodule
|
||||||
|
get_directory_property(DRAMSYS_IS_SUBMODULE PARENT_DIRECTORY)
|
||||||
|
|
||||||
|
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)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
### DRAMPower 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}/resources")
|
||||||
|
|
||||||
|
### Build options ###
|
||||||
|
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" OFF)
|
||||||
|
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)
|
||||||
|
|
||||||
|
### Compiler settings ###
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
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 ###
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
### Detect OS threading library ###
|
||||||
|
find_package(Threads)
|
||||||
|
|
||||||
|
### nlohmann_json ###
|
||||||
|
add_subdirectory(${DRAMSYS_LIBRARY_DIR}/nlohmann_json)
|
||||||
|
|
||||||
|
### 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()
|
||||||
|
|
||||||
|
### sqlite-amalgamation ###
|
||||||
|
FetchContent_Declare(
|
||||||
|
sqlite-amalgamation
|
||||||
|
GIT_REPOSITORY https://github.com/azadkuh/sqlite-amalgamation.git
|
||||||
|
GIT_TAG 3.38.2)
|
||||||
|
|
||||||
|
set(BUILD_ENABLE_RTREE ON)
|
||||||
|
FetchContent_MakeAvailable(sqlite-amalgamation)
|
||||||
|
set_target_properties(SQLite3 PROPERTIES FOLDER lib)
|
||||||
|
|
||||||
|
### SystemC ###
|
||||||
|
FetchContent_Declare(
|
||||||
|
systemc
|
||||||
|
GIT_REPOSITORY https://github.com/accellera-official/systemc.git
|
||||||
|
GIT_TAG 2.3.4)
|
||||||
|
|
||||||
|
FetchContent_MakeAvailable(systemc)
|
||||||
|
set_target_properties(systemc PROPERTIES FOLDER lib)
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### Source Directory ###
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
add_subdirectory(src/util)
|
||||||
|
add_subdirectory(src/configuration)
|
||||||
|
add_subdirectory(src/libdramsys)
|
||||||
|
|
||||||
|
if(DRAMSYS_BUILD_CLI)
|
||||||
|
add_subdirectory(src/simulator)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### Test Directory ###
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
if(DRAMSYS_BUILD_TESTS)
|
||||||
|
include( GoogleTest )
|
||||||
|
include( CTest )
|
||||||
|
add_subdirectory(tests)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Add TraceAnalyzer:
|
||||||
|
#if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/traceAnalyzer)
|
||||||
|
# option(DRAMSYS_BUILD_TRACE_ANALYZER "Build DRAMSys TraceAnalyzer" OFF)
|
||||||
|
# if(DRAMSYS_BUILD_TRACE_ANALYZER)
|
||||||
|
# message("== Trace Analyzer included")
|
||||||
|
# add_subdirectory(traceAnalyzer)
|
||||||
|
# endif()
|
||||||
|
#endif()
|
||||||
|
|
||||||
|
# Add DRAMSysgem5
|
||||||
|
#if(DEFINED ENV{GEM5} AND DRAMSYS_WITH_GEM5)
|
||||||
|
# message("== gem5 coupling included")
|
||||||
|
# add_subdirectory(gem5)
|
||||||
|
#endif()
|
||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
add_executable(simpletest simpletest.cpp)
|
|
||||||
target_link_libraries(simpletest PRIVATE DRAMSysConfiguration nlohmann_json::nlohmann_json)
|
|
||||||
|
|
||||||
add_executable(converter converter.cpp)
|
|
||||||
target_link_libraries(converter PRIVATE DRAMSysConfiguration nlohmann_json::nlohmann_json)
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2021, Technische Universität Kaiserslautern
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* 3. Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Derek Christ
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <DRAMSysConfiguration.h>
|
|
||||||
#include <fstream>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using json = nlohmann::json;
|
|
||||||
|
|
||||||
DRAMSysConfiguration::AddressMapping getAddressMapping()
|
|
||||||
{
|
|
||||||
return DRAMSysConfiguration::AddressMapping{{{0, 1}},
|
|
||||||
{{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}},
|
|
||||||
{{16}},
|
|
||||||
{{13, 14, 15}},
|
|
||||||
{{17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}},
|
|
||||||
{{33}},
|
|
||||||
{{}},
|
|
||||||
{{}}};
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::McConfig getMcConfig()
|
|
||||||
{
|
|
||||||
return DRAMSysConfiguration::McConfig{DRAMSysConfiguration::PagePolicy::Open,
|
|
||||||
DRAMSysConfiguration::Scheduler::FrFcfs,
|
|
||||||
DRAMSysConfiguration::SchedulerBuffer::Bankwise,
|
|
||||||
8,
|
|
||||||
DRAMSysConfiguration::CmdMux::Oldest,
|
|
||||||
DRAMSysConfiguration::RespQueue::Fifo,
|
|
||||||
DRAMSysConfiguration::RefreshPolicy::AllBank,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
DRAMSysConfiguration::PowerDownPolicy::NoPowerDown,
|
|
||||||
DRAMSysConfiguration::Arbiter::Simple,
|
|
||||||
128,
|
|
||||||
{}};
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::SimConfig getSimConfig()
|
|
||||||
{
|
|
||||||
return DRAMSysConfiguration::SimConfig{
|
|
||||||
0, false, true, false, false, {"error.csv"},
|
|
||||||
42, false, {"ddr5"}, true, DRAMSysConfiguration::StoreMode::NoStorage, false, false,
|
|
||||||
1000};
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::ThermalConfig getThermalConfig()
|
|
||||||
{
|
|
||||||
std::vector<DRAMSysConfiguration::DramDieChannel> 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 DRAMSysConfiguration::ThermalConfig{
|
|
||||||
DRAMSysConfiguration::TemperatureScale::Celsius,
|
|
||||||
89,
|
|
||||||
100,
|
|
||||||
DRAMSysConfiguration::ThermalSimUnit::Microseconds,
|
|
||||||
DRAMSysConfiguration::PowerInfo{channels},
|
|
||||||
"127.0.0.1",
|
|
||||||
118800,
|
|
||||||
10,
|
|
||||||
5,
|
|
||||||
true,
|
|
||||||
true};
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TracePlayer getTracePlayer()
|
|
||||||
{
|
|
||||||
DRAMSysConfiguration::TracePlayer player;
|
|
||||||
player.clkMhz = 100;
|
|
||||||
player.name = "mytrace.stl";
|
|
||||||
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceGenerator getTraceGeneratorOneState()
|
|
||||||
{
|
|
||||||
DRAMSysConfiguration::TraceGenerator gen;
|
|
||||||
gen.clkMhz = 100;
|
|
||||||
gen.name = "MyTestGen";
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceGeneratorTrafficState state0;
|
|
||||||
state0.numRequests = 1000;
|
|
||||||
state0.rwRatio = 0.5;
|
|
||||||
state0.addressDistribution = DRAMSysConfiguration::AddressDistribution::Random;
|
|
||||||
state0.addressIncrement = {};
|
|
||||||
state0.minAddress = {};
|
|
||||||
state0.maxAddress = {};
|
|
||||||
state0.clksPerRequest = {};
|
|
||||||
|
|
||||||
gen.states.emplace(0, state0);
|
|
||||||
|
|
||||||
return gen;
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceGenerator getTraceGeneratorMultipleStates()
|
|
||||||
{
|
|
||||||
DRAMSysConfiguration::TraceGenerator gen;
|
|
||||||
|
|
||||||
gen.clkMhz = 100;
|
|
||||||
gen.name = "MyTestGen";
|
|
||||||
gen.maxPendingReadRequests = 8;
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceGeneratorTrafficState state0;
|
|
||||||
state0.numRequests = 1000;
|
|
||||||
state0.rwRatio = 0.5;
|
|
||||||
state0.addressDistribution = DRAMSysConfiguration::AddressDistribution::Sequential;
|
|
||||||
state0.addressIncrement = 256;
|
|
||||||
state0.minAddress = {};
|
|
||||||
state0.maxAddress = 1024;
|
|
||||||
state0.clksPerRequest = {};
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceGeneratorTrafficState state1;
|
|
||||||
state1.numRequests = 100;
|
|
||||||
state1.rwRatio = 0.75;
|
|
||||||
state1.addressDistribution = DRAMSysConfiguration::AddressDistribution::Sequential;
|
|
||||||
state1.addressIncrement = 512;
|
|
||||||
state1.minAddress = 1024;
|
|
||||||
state1.maxAddress = 2048;
|
|
||||||
state1.clksPerRequest = {};
|
|
||||||
|
|
||||||
gen.states.emplace(0, state0);
|
|
||||||
gen.states.emplace(1, state1);
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceGeneratorStateTransition transistion0{1, 1.0};
|
|
||||||
|
|
||||||
gen.transitions.emplace(0, transistion0);
|
|
||||||
|
|
||||||
return gen;
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceHammer getTraceHammer()
|
|
||||||
{
|
|
||||||
DRAMSysConfiguration::TraceHammer hammer;
|
|
||||||
|
|
||||||
hammer.clkMhz = 100;
|
|
||||||
hammer.name = "MyTestHammer";
|
|
||||||
hammer.numRequests = 4000;
|
|
||||||
hammer.rowIncrement = 2097152;
|
|
||||||
|
|
||||||
return hammer;
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::TraceSetup getTraceSetup()
|
|
||||||
{
|
|
||||||
using namespace DRAMSysConfiguration;
|
|
||||||
|
|
||||||
std::vector<std::variant<TracePlayer, TraceGenerator, TraceHammer>> initiators;
|
|
||||||
initiators.emplace_back(getTracePlayer());
|
|
||||||
initiators.emplace_back(getTraceGeneratorOneState());
|
|
||||||
initiators.emplace_back(getTraceGeneratorMultipleStates());
|
|
||||||
initiators.emplace_back(getTraceHammer());
|
|
||||||
|
|
||||||
return DRAMSysConfiguration::TraceSetup{initiators};
|
|
||||||
}
|
|
||||||
|
|
||||||
DRAMSysConfiguration::Configuration getConfig(const DRAMSysConfiguration::MemSpec &memSpec)
|
|
||||||
{
|
|
||||||
return DRAMSysConfiguration::Configuration{
|
|
||||||
getAddressMapping(),
|
|
||||||
getMcConfig(),
|
|
||||||
memSpec,
|
|
||||||
getSimConfig(),
|
|
||||||
"std::string_simulationId",
|
|
||||||
getThermalConfig(),
|
|
||||||
// {{}, false}, works too
|
|
||||||
getTraceSetup(),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
DRAMSysConfiguration::Configuration conf = DRAMSysConfiguration::from_path("ddr5.json");
|
|
||||||
std::ofstream fileout("myjson.json");
|
|
||||||
json j_my;
|
|
||||||
j_my["simulation"] = getConfig(conf.memSpec); // just copy memspec over
|
|
||||||
fileout << j_my.dump(4);
|
|
||||||
|
|
||||||
std::ifstream file2("hbm2.json");
|
|
||||||
json hbm2_j = json::parse(file2, nullptr, false);
|
|
||||||
json hbm2_config = hbm2_j.at("simulation");
|
|
||||||
DRAMSysConfiguration::Configuration hbm2conf = hbm2_config.get<DRAMSysConfiguration::Configuration>();
|
|
||||||
std::ofstream filehbm2("myhbm2.json");
|
|
||||||
json j_myhbm2;
|
|
||||||
j_myhbm2["simulation"] = hbm2conf;
|
|
||||||
filehbm2 << j_myhbm2.dump(4);
|
|
||||||
|
|
||||||
std::ifstream file3("myjson.json");
|
|
||||||
json ddr5_old = json::parse(file3, nullptr, false);
|
|
||||||
json ddr5_old_conf = ddr5_old.at("simulation");
|
|
||||||
DRAMSysConfiguration::Configuration ddr5_old_config = ddr5_old_conf.get<DRAMSysConfiguration::Configuration>();
|
|
||||||
std::ofstream fileoldout("myjson2.json");
|
|
||||||
json j_oldconfconv;
|
|
||||||
j_oldconfconv["simulation"] = ddr5_old_config;
|
|
||||||
fileoldout << j_oldconfconv.dump(4);
|
|
||||||
}
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2021, Technische Universität Kaiserslautern
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* 3. Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Derek Christ
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef DRAMSYSCONFIGURATION_UTIL_H
|
|
||||||
#define DRAMSYSCONFIGURATION_UTIL_H
|
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
|
||||||
#include <optional>
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
namespace DRAMSysConfiguration
|
|
||||||
{
|
|
||||||
using json = nlohmann::json;
|
|
||||||
|
|
||||||
// template <typename T>
|
|
||||||
// class Optional : public std::pair<T, bool>
|
|
||||||
// {
|
|
||||||
// public:
|
|
||||||
// Optional() : std::pair<T, bool>{{}, false}
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
// Optional(const T &v) : std::pair<T, bool>{v, true}
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
|
|
||||||
// bool isValid() const
|
|
||||||
// {
|
|
||||||
// return this->second;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const T &getValue() const
|
|
||||||
// {
|
|
||||||
// assert(this->second == true);
|
|
||||||
// return this->first;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void setValue(const T &v)
|
|
||||||
// {
|
|
||||||
// this->first = v;
|
|
||||||
// this->second = true;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void invalidate()
|
|
||||||
// {
|
|
||||||
// this->second = false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * This methods only purpose is to make a optional type
|
|
||||||
// * valid so that it can be written to by reference.
|
|
||||||
// */
|
|
||||||
// T &setByReference()
|
|
||||||
// {
|
|
||||||
// this->second = true;
|
|
||||||
// return this->first;
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void invalidateEnum(T &value)
|
|
||||||
{
|
|
||||||
if (value.has_value() && value.value() == T::value_type::Invalid)
|
|
||||||
value.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
json get_config_json(const json &j, const std::string &configPath, const std::string &objectName);
|
|
||||||
|
|
||||||
inline void remove_null_values(json &j)
|
|
||||||
{
|
|
||||||
std::vector<std::string> keysToRemove;
|
|
||||||
|
|
||||||
for (const auto &element : j.items())
|
|
||||||
{
|
|
||||||
if (element.value() == nullptr)
|
|
||||||
keysToRemove.emplace_back(element.key());
|
|
||||||
}
|
|
||||||
|
|
||||||
std::for_each(keysToRemove.begin(), keysToRemove.end(), [&](const std::string &key) { j.erase(key); });
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace DRAMSysConfiguration
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inspired from
|
|
||||||
* https://json.nlohmann.me/features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types
|
|
||||||
*/
|
|
||||||
namespace nlohmann
|
|
||||||
{
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void to_json(nlohmann::json &j, const std::optional<T> &v)
|
|
||||||
{
|
|
||||||
if (v.has_value())
|
|
||||||
j = v.value();
|
|
||||||
else
|
|
||||||
j = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void from_json(const nlohmann::json &j, std::optional<T> &v)
|
|
||||||
{
|
|
||||||
if (j.is_null())
|
|
||||||
v = std::nullopt;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
v = j.get<T>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace nlohmann
|
|
||||||
|
|
||||||
#endif // DRAMSYSCONFIGURATION_UTIL_H
|
|
||||||
Submodule DRAMSys/library/src/common/third_party/DRAMPower deleted from 1ddc48a387
Submodule DRAMSys/library/src/common/third_party/nlohmann deleted from b7be613b6e
Submodule DRAMSys/library/src/common/third_party/sqlite-amalgamation deleted from 9be05e1340
Submodule DRAMSys/library/src/common/third_party/systemc deleted from 6041825095
@@ -1,146 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, Technische Universität Kaiserslautern
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* 3. Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Lukas Steiner
|
|
||||||
* Derek Christ
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "MemSpec.h"
|
|
||||||
|
|
||||||
using namespace sc_core;
|
|
||||||
using namespace tlm;
|
|
||||||
|
|
||||||
MemSpec::MemSpec(const DRAMSysConfiguration::MemSpec &memSpec,
|
|
||||||
MemoryType memoryType,
|
|
||||||
unsigned numberOfChannels, unsigned pseudoChannelsPerChannel,
|
|
||||||
unsigned ranksPerChannel, unsigned banksPerRank,
|
|
||||||
unsigned groupsPerRank, unsigned banksPerGroup,
|
|
||||||
unsigned banksPerChannel, unsigned bankGroupsPerChannel,
|
|
||||||
unsigned devicesPerRank)
|
|
||||||
: numberOfChannels(numberOfChannels),
|
|
||||||
pseudoChannelsPerChannel(pseudoChannelsPerChannel),
|
|
||||||
ranksPerChannel(ranksPerChannel),
|
|
||||||
banksPerRank(banksPerRank),
|
|
||||||
groupsPerRank(groupsPerRank),
|
|
||||||
banksPerGroup(banksPerGroup),
|
|
||||||
banksPerChannel(banksPerChannel),
|
|
||||||
bankGroupsPerChannel(bankGroupsPerChannel),
|
|
||||||
devicesPerRank(devicesPerRank),
|
|
||||||
rowsPerBank(memSpec.memArchitectureSpec.entries.at("nbrOfRows")),
|
|
||||||
columnsPerRow(memSpec.memArchitectureSpec.entries.at("nbrOfColumns")),
|
|
||||||
defaultBurstLength(memSpec.memArchitectureSpec.entries.at("burstLength")),
|
|
||||||
maxBurstLength(memSpec.memArchitectureSpec.entries.find("maxBurstLength") !=
|
|
||||||
memSpec.memArchitectureSpec.entries.end()
|
|
||||||
? memSpec.memArchitectureSpec.entries.at("maxBurstLength")
|
|
||||||
: defaultBurstLength),
|
|
||||||
dataRate(memSpec.memArchitectureSpec.entries.at("dataRate")),
|
|
||||||
bitWidth(memSpec.memArchitectureSpec.entries.at("width")),
|
|
||||||
dataBusWidth(bitWidth * devicesPerRank),
|
|
||||||
bytesPerBeat(dataBusWidth / 8),
|
|
||||||
defaultBytesPerBurst((defaultBurstLength * dataBusWidth) / 8),
|
|
||||||
maxBytesPerBurst((maxBurstLength * dataBusWidth) / 8),
|
|
||||||
fCKMHz(memSpec.memTimingSpec.entries.at("clkMhz")),
|
|
||||||
tCK(sc_time(1.0 / fCKMHz, SC_US)),
|
|
||||||
memoryId(memSpec.memoryId),
|
|
||||||
memoryType(memoryType),
|
|
||||||
burstDuration(tCK * (static_cast<double>(defaultBurstLength) / dataRate)),
|
|
||||||
memorySizeBytes(0)
|
|
||||||
{
|
|
||||||
commandLengthInCycles = std::vector<double>(Command::numberOfCommands(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
sc_time MemSpec::getCommandLength(Command command) const
|
|
||||||
{
|
|
||||||
return tCK * commandLengthInCycles[command];
|
|
||||||
}
|
|
||||||
|
|
||||||
double MemSpec::getCommandLengthInCycles(Command command) const
|
|
||||||
{
|
|
||||||
return commandLengthInCycles[command];
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t MemSpec::getSimMemSizeInBytes() const
|
|
||||||
{
|
|
||||||
return memorySizeBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
sc_time MemSpec::getRefreshIntervalAB() const
|
|
||||||
{
|
|
||||||
SC_REPORT_FATAL("MemSpec", "All-bank refresh not supported");
|
|
||||||
return SC_ZERO_TIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
sc_time MemSpec::getRefreshIntervalPB() const
|
|
||||||
{
|
|
||||||
SC_REPORT_FATAL("MemSpec", "Per-bank refresh not supported");
|
|
||||||
return SC_ZERO_TIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
sc_time MemSpec::getRefreshIntervalP2B() const
|
|
||||||
{
|
|
||||||
SC_REPORT_FATAL("MemSpec", "Per-2-bank refresh not supported");
|
|
||||||
return SC_ZERO_TIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
sc_time MemSpec::getRefreshIntervalSB() const
|
|
||||||
{
|
|
||||||
SC_REPORT_FATAL("MemSpec", "Same-bank refresh not supported");
|
|
||||||
return SC_ZERO_TIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned MemSpec::getPer2BankOffset() const
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned MemSpec::getRAACDR() const
|
|
||||||
{
|
|
||||||
SC_REPORT_FATAL("MemSpec", "Refresh Management not supported");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned MemSpec::getRAAIMT() const
|
|
||||||
{
|
|
||||||
SC_REPORT_FATAL("MemSpec", "Refresh Management not supported");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned MemSpec::getRAAMMT() const
|
|
||||||
{
|
|
||||||
SC_REPORT_FATAL("MemSpec", "Refresh Management not supported");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MemSpec::hasRasAndCasBus() const
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, Technische Universität Kaiserslautern
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* 3. Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Janik Schlemminger
|
|
||||||
* Matthias Jung
|
|
||||||
* Lukas Steiner
|
|
||||||
* Derek Christ
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MEMSPEC_H
|
|
||||||
#define MEMSPEC_H
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
#include <DRAMSysConfiguration.h>
|
|
||||||
#include <systemc>
|
|
||||||
#include <tlm>
|
|
||||||
#include "../../common/utils.h"
|
|
||||||
#include "../../controller/Command.h"
|
|
||||||
|
|
||||||
class MemSpec
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
const unsigned numberOfChannels;
|
|
||||||
const unsigned pseudoChannelsPerChannel;
|
|
||||||
const unsigned ranksPerChannel;
|
|
||||||
const unsigned banksPerRank;
|
|
||||||
const unsigned groupsPerRank;
|
|
||||||
const unsigned banksPerGroup;
|
|
||||||
const unsigned banksPerChannel;
|
|
||||||
const unsigned bankGroupsPerChannel;
|
|
||||||
const unsigned devicesPerRank;
|
|
||||||
const unsigned rowsPerBank;
|
|
||||||
const unsigned columnsPerRow;
|
|
||||||
const unsigned defaultBurstLength;
|
|
||||||
const unsigned maxBurstLength;
|
|
||||||
const unsigned dataRate;
|
|
||||||
const unsigned bitWidth;
|
|
||||||
const unsigned dataBusWidth;
|
|
||||||
const unsigned bytesPerBeat;
|
|
||||||
const unsigned defaultBytesPerBurst;
|
|
||||||
const unsigned maxBytesPerBurst;
|
|
||||||
|
|
||||||
// Clock
|
|
||||||
const double fCKMHz;
|
|
||||||
const sc_core::sc_time tCK;
|
|
||||||
|
|
||||||
const std::string memoryId;
|
|
||||||
const enum class MemoryType {DDR3, DDR4, DDR5, LPDDR4, LPDDR5, WideIO,
|
|
||||||
WideIO2, GDDR5, GDDR5X, GDDR6, HBM2, HBM3, STTMRAM} memoryType;
|
|
||||||
|
|
||||||
virtual ~MemSpec() = default;
|
|
||||||
|
|
||||||
virtual sc_core::sc_time getRefreshIntervalAB() const;
|
|
||||||
virtual sc_core::sc_time getRefreshIntervalPB() const;
|
|
||||||
virtual sc_core::sc_time getRefreshIntervalP2B() const;
|
|
||||||
virtual sc_core::sc_time getRefreshIntervalSB() const;
|
|
||||||
|
|
||||||
virtual unsigned getPer2BankOffset() const;
|
|
||||||
|
|
||||||
virtual unsigned getRAAIMT() const;
|
|
||||||
virtual unsigned getRAAMMT() const;
|
|
||||||
virtual unsigned getRAACDR() const;
|
|
||||||
|
|
||||||
virtual bool hasRasAndCasBus() const;
|
|
||||||
|
|
||||||
virtual sc_core::sc_time getExecutionTime(Command command, const tlm::tlm_generic_payload &payload) const = 0;
|
|
||||||
virtual TimeInterval getIntervalOnDataStrobe(Command command, const tlm::tlm_generic_payload &payload) const = 0;
|
|
||||||
|
|
||||||
sc_core::sc_time getCommandLength(Command) const;
|
|
||||||
double getCommandLengthInCycles(Command) const;
|
|
||||||
uint64_t getSimMemSizeInBytes() const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
MemSpec(const DRAMSysConfiguration::MemSpec &memSpec,
|
|
||||||
MemoryType memoryType,
|
|
||||||
unsigned numberOfChannels, unsigned pseudoChannelsPerChannel,
|
|
||||||
unsigned ranksPerChannel, unsigned banksPerRank,
|
|
||||||
unsigned groupsPerRank, unsigned banksPerGroup,
|
|
||||||
unsigned banksPerChannel, unsigned bankGroupsPerChannel,
|
|
||||||
unsigned devicesPerRank);
|
|
||||||
|
|
||||||
// Command lengths in cycles on bus, usually one clock cycle
|
|
||||||
std::vector<double> commandLengthInCycles;
|
|
||||||
sc_core::sc_time burstDuration;
|
|
||||||
uint64_t memorySizeBytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MEMSPEC_H
|
|
||||||
|
|
||||||
Submodule DRAMSys/unitTests/googletest deleted from b77e5c7625
13
cmake/build_source_group.cmake
Normal file
13
cmake/build_source_group.cmake
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
###############################################
|
||||||
|
### build_source_group ###
|
||||||
|
###############################################
|
||||||
|
###
|
||||||
|
### Builds a source group from a set of files
|
||||||
|
### for nicer display in IDEs
|
||||||
|
###
|
||||||
|
|
||||||
|
function( build_source_group )
|
||||||
|
file(GLOB_RECURSE files ${CMAKE_CURRENT_SOURCE_DIR}/*.* )
|
||||||
|
list(REMOVE_ITEM files "CMakeLists.txt")
|
||||||
|
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "[src]" FILES ${files})
|
||||||
|
endfunction()
|
||||||
32
cmake/diagnostics_print.cmake
Normal file
32
cmake/diagnostics_print.cmake
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
###############################################
|
||||||
|
### 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()
|
||||||
10
lib/nlohmann_json/CMakeLists.txt
Normal file
10
lib/nlohmann_json/CMakeLists.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
########################################
|
||||||
|
### nlohmann_json ###
|
||||||
|
########################################
|
||||||
|
|
||||||
|
project(nlohmann_json VERSION 3.11.2)
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
|
target_include_directories(${PROJECT_NAME} INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
|
||||||
24640
lib/nlohmann_json/include/nlohmann/json.hpp
Normal file
24640
lib/nlohmann_json/include/nlohmann/json.hpp
Normal file
File diff suppressed because it is too large
Load Diff
176
lib/nlohmann_json/include/nlohmann/json_fwd.hpp
Normal file
176
lib/nlohmann_json/include/nlohmann/json_fwd.hpp
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
// __ _____ _____ _____
|
||||||
|
// __| | __| | | | JSON for Modern C++
|
||||||
|
// | | |__ | | | | | | version 3.11.2
|
||||||
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
||||||
|
//
|
||||||
|
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
|
||||||
|
#define INCLUDE_NLOHMANN_JSON_FWD_HPP_
|
||||||
|
|
||||||
|
#include <cstdint> // int64_t, uint64_t
|
||||||
|
#include <map> // map
|
||||||
|
#include <memory> // allocator
|
||||||
|
#include <string> // string
|
||||||
|
#include <vector> // vector
|
||||||
|
|
||||||
|
// #include <nlohmann/detail/abi_macros.hpp>
|
||||||
|
// __ _____ _____ _____
|
||||||
|
// __| | __| | | | JSON for Modern C++
|
||||||
|
// | | |__ | | | | | | version 3.11.2
|
||||||
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
||||||
|
//
|
||||||
|
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// This file contains all macro definitions affecting or depending on the ABI
|
||||||
|
|
||||||
|
#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
|
||||||
|
#if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
|
||||||
|
#if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2
|
||||||
|
#warning "Already included a different version of the library!"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum)
|
||||||
|
#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum)
|
||||||
|
#define NLOHMANN_JSON_VERSION_PATCH 2 // NOLINT(modernize-macro-to-enum)
|
||||||
|
|
||||||
|
#ifndef JSON_DIAGNOSTICS
|
||||||
|
#define JSON_DIAGNOSTICS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
|
||||||
|
#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if JSON_DIAGNOSTICS
|
||||||
|
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag
|
||||||
|
#else
|
||||||
|
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
|
||||||
|
#define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp
|
||||||
|
#else
|
||||||
|
#define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Construct the namespace ABI tags component
|
||||||
|
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b
|
||||||
|
#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
|
||||||
|
NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
|
||||||
|
|
||||||
|
#define NLOHMANN_JSON_ABI_TAGS \
|
||||||
|
NLOHMANN_JSON_ABI_TAGS_CONCAT( \
|
||||||
|
NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \
|
||||||
|
NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
|
||||||
|
|
||||||
|
// Construct the namespace version component
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
|
||||||
|
_v ## major ## _ ## minor ## _ ## patch
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
|
||||||
|
NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
|
||||||
|
|
||||||
|
#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_VERSION
|
||||||
|
#else
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_VERSION \
|
||||||
|
NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
|
||||||
|
NLOHMANN_JSON_VERSION_MINOR, \
|
||||||
|
NLOHMANN_JSON_VERSION_PATCH)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Combine namespace components
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
|
||||||
|
NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
|
||||||
|
|
||||||
|
#ifndef NLOHMANN_JSON_NAMESPACE
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE \
|
||||||
|
nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
|
||||||
|
NLOHMANN_JSON_ABI_TAGS, \
|
||||||
|
NLOHMANN_JSON_NAMESPACE_VERSION)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_BEGIN \
|
||||||
|
namespace nlohmann \
|
||||||
|
{ \
|
||||||
|
inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
|
||||||
|
NLOHMANN_JSON_ABI_TAGS, \
|
||||||
|
NLOHMANN_JSON_NAMESPACE_VERSION) \
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
#define NLOHMANN_JSON_NAMESPACE_END \
|
||||||
|
} /* namespace (inline namespace) NOLINT(readability/namespace) */ \
|
||||||
|
} // namespace nlohmann
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief namespace for Niels Lohmann
|
||||||
|
@see https://github.com/nlohmann
|
||||||
|
@since version 1.0.0
|
||||||
|
*/
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief default JSONSerializer template argument
|
||||||
|
|
||||||
|
This serializer ignores the template arguments and uses ADL
|
||||||
|
([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl))
|
||||||
|
for serialization.
|
||||||
|
*/
|
||||||
|
template<typename T = void, typename SFINAE = void>
|
||||||
|
struct adl_serializer;
|
||||||
|
|
||||||
|
/// a class to store JSON values
|
||||||
|
/// @sa https://json.nlohmann.me/api/basic_json/
|
||||||
|
template<template<typename U, typename V, typename... Args> class ObjectType =
|
||||||
|
std::map,
|
||||||
|
template<typename U, typename... Args> class ArrayType = std::vector,
|
||||||
|
class StringType = std::string, class BooleanType = bool,
|
||||||
|
class NumberIntegerType = std::int64_t,
|
||||||
|
class NumberUnsignedType = std::uint64_t,
|
||||||
|
class NumberFloatType = double,
|
||||||
|
template<typename U> class AllocatorType = std::allocator,
|
||||||
|
template<typename T, typename SFINAE = void> class JSONSerializer =
|
||||||
|
adl_serializer,
|
||||||
|
class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
|
||||||
|
class CustomBaseClass = void>
|
||||||
|
class basic_json;
|
||||||
|
|
||||||
|
/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
|
||||||
|
/// @sa https://json.nlohmann.me/api/json_pointer/
|
||||||
|
template<typename RefStringType>
|
||||||
|
class json_pointer;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief default specialization
|
||||||
|
@sa https://json.nlohmann.me/api/json/
|
||||||
|
*/
|
||||||
|
using json = basic_json<>;
|
||||||
|
|
||||||
|
/// @brief a minimal map-like container that preserves insertion order
|
||||||
|
/// @sa https://json.nlohmann.me/api/ordered_map/
|
||||||
|
template<class Key, class T, class IgnoredLess, class Allocator>
|
||||||
|
struct ordered_map;
|
||||||
|
|
||||||
|
/// @brief specialization that maintains the insertion order of object keys
|
||||||
|
/// @sa https://json.nlohmann.me/api/ordered_json/
|
||||||
|
using ordered_json = basic_json<nlohmann::ordered_map>;
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user