Skip to content

Commit 0035b41

Browse files
committed
first draft of sdk, work in progress
1 parent 5b07ca5 commit 0035b41

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+4828
-3
lines changed

CMakeLists.txt

+12
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ configure_file(include/reactor-cpp/config.hh.in include/reactor-cpp/config.hh @O
6262
include(GNUInstallDirs)
6363

6464
add_subdirectory(lib)
65+
add_subdirectory(reactor-sdk)
66+
6567
if(NOT DEFINED LF_REACTOR_CPP_SUFFIX)
6668
add_subdirectory(examples)
6769
endif()
@@ -71,3 +73,13 @@ if (DEFINED LF_REACTOR_CPP_SUFFIX)
7173
else()
7274
install(DIRECTORY include/ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
7375
endif()
76+
77+
if(NOT TARGET uninstall)
78+
configure_file(
79+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
80+
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
81+
IMMEDIATE @ONLY)
82+
83+
add_custom_target(uninstall
84+
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
85+
endif()

cmake_uninstall.cmake.in

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
2+
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt")
3+
endif()
4+
5+
file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files)
6+
string(REGEX REPLACE "\n" ";" files "${files}")
7+
foreach(file ${files})
8+
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
9+
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
10+
exec_program(
11+
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
12+
OUTPUT_VARIABLE rm_out
13+
RETURN_VALUE rm_retval
14+
)
15+
if(NOT "${rm_retval}" STREQUAL 0)
16+
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
17+
endif()
18+
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
19+
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
20+
endif()
21+
endforeach()
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*build
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
cmake_minimum_required(VERSION 3.9)
2+
project(src_sink_fanout VERSION 0.0.0 LANGUAGES CXX)
3+
4+
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard is cached for visibility in external tools." FORCE)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6+
7+
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
8+
9+
set(LF_MAIN_TARGET src_sink_fanout)
10+
11+
find_package(reactor-cpp PATHS )
12+
find_package(reactor-sdk PATHS )
13+
14+
add_executable(${LF_MAIN_TARGET}
15+
main.cc
16+
)
17+
18+
include_directories(${CMAKE_CURRENT_LIST_DIR})
19+
20+
target_link_libraries(${LF_MAIN_TARGET} reactor-cpp)
21+
target_link_libraries(${LF_MAIN_TARGET} reactor-sdk)
22+
23+
target_compile_options(${LF_MAIN_TARGET} PRIVATE -Wall -Wextra -pedantic)
24+
25+
include(Sink/SinkReactor.cmake)
26+
include(Source/SourceReactor.cmake)
27+
include(Main/MainReactor.cmake)
28+
include(Config-a/Config-a.cmake)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "Config-a.hh"
2+
3+
UserParameters cfg_parameters;
4+
5+
ConfigParameter<int, uint32_t>::ParametersMap UserParameters::homogeneous_config() {
6+
return {
7+
{"Main.Source.iterations", ConfigParameterMetadata<int> { 0 } }
8+
};
9+
}
10+
11+
ConfigParameter<int, uint32_t>::ParametersMap UserParameters::heterogeneous_config() {
12+
return {
13+
{"Main.Source.iterations", ConfigParameterMetadata<int> { 20 } },
14+
{"Main.Sink.n_ports", ConfigParameterMetadata<int> { 2 } }
15+
16+
};
17+
}
18+
19+
// UserParameters::filter_out () {
20+
// if (cfg_map["T0.P0.L1.n_ervers"] != cfg_map["T0.P0.L2.n_ervers"]) {
21+
22+
// }
23+
// }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
include_directories(${CMAKE_CURRENT_LIST_DIR})
2+
3+
set(INCLUDE_FILES
4+
"${CMAKE_CURRENT_LIST_DIR}/Config-a.hh"
5+
)
6+
7+
set(SOURCE_FILES
8+
"${CMAKE_CURRENT_LIST_DIR}/Config-a.cc"
9+
)
10+
11+
12+
foreach(file IN LISTS INCLUDE_FILES)
13+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${file}")
14+
endforeach()
15+
16+
target_sources(${LF_MAIN_TARGET} PRIVATE ${SOURCE_FILES})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#ifndef USER_PARAMETERS_H
2+
#define USER_PARAMETERS_H
3+
4+
#include <reactor-sdk/reactor-sdk.hh>
5+
#include <map>
6+
#include <variant>
7+
#include <string>
8+
9+
using namespace sdk;
10+
11+
struct UserParameters : public ConfigParameter<int, uint32_t> {
12+
ConfigParameter<int, uint32_t>::ParametersMap homogeneous_config();
13+
ConfigParameter<int, uint32_t>::ParametersMap heterogeneous_config();
14+
};
15+
16+
// using ParametersMap = std::map<std::string, SystemParameterMetadata<std::variant<SystemParameterMetadata<ParameterValueType>...>>>;
17+
18+
extern UserParameters cfg_parameters;
19+
20+
#endif // USER_PARAMETERS_H
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include "MainReactor.hh"
2+
3+
void MainReactor::construction() {
4+
5+
cout << "Construction Main\n";
6+
7+
src = std::make_unique<SourceReactor>("Source", this);
8+
snk = std::make_unique<SinkReactor>("Sink", this);
9+
}
10+
11+
void MainReactor::assembling() {
12+
cout << "Assembling Main\n";
13+
14+
src->req -->> snk->req;
15+
snk->rsp --> src->rsp;
16+
17+
reaction("reaction_1").
18+
triggers(&startup).
19+
effects().
20+
function(
21+
[&](Startup& startup) {
22+
cout << "(" << get_elapsed_logical_time() << ", " << get_microstep() << "), physical_time: " << get_elapsed_physical_time() << " " <<
23+
"Starting up reaction\n" << "Bank:" << bank_index << " name:" << parameters.alias.value << " fqn:" << fqn() << endl;
24+
}
25+
);
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
include_directories(${CMAKE_CURRENT_LIST_DIR})
2+
3+
set(INCLUDE_FILES
4+
"${CMAKE_CURRENT_LIST_DIR}/MainReactor.hh"
5+
)
6+
7+
set(SOURCE_FILES
8+
"${CMAKE_CURRENT_LIST_DIR}/MainReactor.cc"
9+
)
10+
11+
12+
foreach(file IN LISTS INCLUDE_FILES)
13+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${file}")
14+
endforeach()
15+
16+
target_sources(${LF_MAIN_TARGET} PRIVATE ${SOURCE_FILES})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#pragma once
2+
3+
#include <reactor-sdk/reactor-sdk.hh>
4+
5+
#include "Source/SourceReactor.hh"
6+
#include "Sink/SinkReactor.hh"
7+
8+
using namespace sdk;
9+
10+
class MainReactor: public Reactor {
11+
public:
12+
struct Parameters : public SystemParameter<string, int> {
13+
ParameterMetadata<string> alias = ParameterMetadata<string> {
14+
.name = "alias",
15+
.description = "Alternate name",
16+
.min_value = "another",
17+
.max_value = "another",
18+
.value = "another"
19+
};
20+
21+
ParameterMetadata<int> log_level = ParameterMetadata<int> {
22+
.name = "log_level",
23+
.description = "Log level",
24+
.min_value = 0,
25+
.max_value = 1,
26+
.value = 1
27+
};
28+
29+
Parameters(Reactor *container)
30+
: SystemParameter<string, int>(container) {
31+
register_parameters (alias, log_level);
32+
}
33+
};
34+
35+
private:
36+
Parameters parameters{this};
37+
38+
std::unique_ptr<SourceReactor> src;
39+
std::unique_ptr<SinkReactor> snk;
40+
41+
public:
42+
MainReactor(const std::string &name, Environment *env)
43+
: Reactor(name, env) {}
44+
MainReactor(const std::string &name, Reactor *container)
45+
: Reactor(name, container) {}
46+
47+
void construction() override;
48+
void assembling() override;
49+
};
50+
51+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include "SinkReactor.hh"
2+
using namespace std;
3+
4+
void SinkReactor::construction() {
5+
cout << "Construction Sink n_ports:" << parameters.n_ports.value << "\n";
6+
req.set_width (parameters.n_ports.value);
7+
rsp.set_width (parameters.n_ports.value);
8+
}
9+
10+
void SinkReactor::assembling() {
11+
12+
cout << "Assembling Sink\n";
13+
14+
reaction("startup_reaction").
15+
triggers(&startup).
16+
effects().
17+
function(pass_function(startup_reaction)
18+
);
19+
20+
reaction("process_request").
21+
triggers(&req).
22+
effects(&rsp).
23+
function(pass_function(process_request)
24+
);
25+
}
26+
27+
28+
29+
void SinkReactor::startup_reaction (Startup& startup) {
30+
cout << "(" << get_elapsed_logical_time() << ", " << get_microstep() << "), physical_time: " << get_elapsed_physical_time() << " " <<
31+
"Starting up reaction\n" << "Bank:" << bank_index << " name:" << parameters.name.value << " fqn:" << fqn() << endl;
32+
}
33+
34+
void SinkReactor::process_request (MultiportInput<int>& req, MultiportOutput<int>& rsp) {
35+
for (int i = 0; i < parameters.n_ports.value; ++i) {
36+
if (req[i].is_present()) {
37+
cout << "(" << get_elapsed_logical_time() << ", " << get_microstep() << "), physical_time: " << get_elapsed_physical_time() << " " <<
38+
"Received input:" << *req[i].get() << " port:" << i << endl;
39+
rsp[i].set (*req[i].get());
40+
}
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
set(INCLUDE_FILES
2+
"${CMAKE_CURRENT_LIST_DIR}/SinkReactor.hh"
3+
)
4+
5+
set(SOURCE_FILES
6+
"${CMAKE_CURRENT_LIST_DIR}/SinkReactor.cc"
7+
)
8+
9+
10+
foreach(file IN LISTS INCLUDE_FILES)
11+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${file}")
12+
endforeach()
13+
14+
target_sources(${LF_MAIN_TARGET} PRIVATE ${SOURCE_FILES})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#pragma once
2+
3+
#include <reactor-sdk/reactor-sdk.hh>
4+
using namespace std;
5+
using namespace sdk;
6+
7+
class SinkReactor : public Reactor {
8+
public:
9+
struct Parameters : public SystemParameter<string, int> {
10+
ParameterMetadata<string> name = ParameterMetadata<string> {
11+
.name = "Name",
12+
.description = "Alternate name",
13+
.min_value = "Sink",
14+
.max_value = "Sink",
15+
.value = "Sink"
16+
};
17+
18+
ParameterMetadata<int> n_ports = ParameterMetadata<int> {
19+
.name = "n_ports",
20+
.description = "Size of multiports",
21+
.min_value = 1,
22+
.max_value = 10,
23+
.value = 1
24+
};
25+
26+
Parameters(Reactor *container)
27+
: SystemParameter<string, int>(container) {
28+
register_parameters (name, n_ports);
29+
}
30+
};
31+
32+
SinkReactor(const std::string &name, Environment *env)
33+
: Reactor(name, env) {}
34+
SinkReactor(const std::string &name, Reactor *container)
35+
: Reactor(name, container) {}
36+
37+
Parameters parameters{this};
38+
39+
MultiportInput<int> req{"req", this};
40+
MultiportOutput<int> rsp{"rsp", this};
41+
42+
void construction() override;
43+
void assembling() override;
44+
45+
void startup_reaction (Startup &startup);
46+
void process_request (MultiportInput<int>& req, MultiportOutput<int>& rsp);
47+
};

0 commit comments

Comments
 (0)