First release of the solver component
- Added build script - Fixed merge errors for the makefile - Extended the makefile header Change-Id: Icbf2d9f76ab0f13eea70796fef20422ecdb3e342
This commit is contained in:
parent
e730917516
commit
f5cb0bc6f3
34
.vscode/c_cpp_properties.json
vendored
34
.vscode/c_cpp_properties.json
vendored
@ -3,26 +3,40 @@
|
|||||||
{
|
{
|
||||||
"name": "Linux",
|
"name": "Linux",
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"${default}",
|
"/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13",
|
||||||
"/home/GHo/Documents/Code/CxxOpts/include",
|
"/home/GHo/Documents/Code/CxxOpts/include",
|
||||||
"/usr/include",
|
|
||||||
"/home/GHo/Documents/Code/Theron++",
|
"/home/GHo/Documents/Code/Theron++",
|
||||||
"/home/GHo/Documents/Code/Theron++/Utility",
|
"/home/GHo/Documents/Code/Theron++/Utility",
|
||||||
"/home/GHo/Documents/Code/Theron++/Communication",
|
"/home/GHo/Documents/Code/Theron++/Communication",
|
||||||
"/home/GHo/Documents/Code/Theron++/Communication/AMQ",
|
"/home/GHo/Documents/Code/Theron++/Communication/AMQ",
|
||||||
"/opt/AMPL/amplapi/include",
|
"/opt/AMPL/amplapi/include/ampl",
|
||||||
"${workspaceFolder}/**"
|
"${workspaceFolder}/**"
|
||||||
],
|
],
|
||||||
"defines": [],
|
"defines": [],
|
||||||
"compilerArgs": [
|
|
||||||
"--std=c++23",
|
|
||||||
"-I/opt/AMPL/amplapi/include",
|
|
||||||
"-I/usr/include"
|
|
||||||
],
|
|
||||||
"cStandard": "c23",
|
"cStandard": "c23",
|
||||||
"cppStandard": "c++23",
|
|
||||||
"intelliSenseMode": "linux-gcc-x64",
|
"intelliSenseMode": "linux-gcc-x64",
|
||||||
"compilerPath": "/usr/bin/g++"
|
"compilerPath": "/usr/bin/g++",
|
||||||
|
"compilerArgs": [
|
||||||
|
"-std=c++23",
|
||||||
|
"-I/home/GHo/Documents/Code/Theron++",
|
||||||
|
"-I/home/GHo/Documents/Code/CxxOpts/include",
|
||||||
|
"-I/opt/AMPL/amplapi/include/ampl"
|
||||||
|
],
|
||||||
|
"cppStandard": "c++23",
|
||||||
|
"compilerPathInCppPropertiesJson": "/usr/bin/g++",
|
||||||
|
"mergeConfigurations": false,
|
||||||
|
"configurationProvider": "ms-vscode.makefile-tools",
|
||||||
|
"browse": {
|
||||||
|
"path": [
|
||||||
|
"/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13",
|
||||||
|
"/home/GHo/Documents/Code/Theron++",
|
||||||
|
"/home/GHo/Documents/Code/CxxOpts/include",
|
||||||
|
"/home/GHo/Documents/Code/Theron++/Utility",
|
||||||
|
"/home/GHo/Documents/Code/Theron++/Communication",
|
||||||
|
"/home/GHo/Documents/Code/Theron++/Examples"
|
||||||
|
],
|
||||||
|
"limitSymbolsToIncludedHeaders": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version": 4
|
"version": 4
|
||||||
|
39
MakeSolver.sh
Normal file
39
MakeSolver.sh
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
# ==============================================================================
|
||||||
|
#
|
||||||
|
# Solver Component
|
||||||
|
#
|
||||||
|
# This script will build the Solver Component on an 'empty' machine with
|
||||||
|
# minimal installation of the latest Fedora version. The intent is to load
|
||||||
|
# all dependencies in a constructive way.
|
||||||
|
#
|
||||||
|
# Author and Copyright: Geir Horn, University of Oslo
|
||||||
|
# Contact: Geir.Horn@mn.uio.no
|
||||||
|
# License: MPL2.0 (https://www.mozilla.org/en-US/MPL/2.0/)
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Installing the development framework for the distribution
|
||||||
|
|
||||||
|
dnf --assumeyes group 'Development Tools'
|
||||||
|
dnf --assumeyes install ccache qpid-proton-cpp* json-devel coin-or-Couenne
|
||||||
|
|
||||||
|
# Cloning the open source dependencies
|
||||||
|
|
||||||
|
mkdir Externals
|
||||||
|
cd Externals
|
||||||
|
git clone https://github.com/jarro2783/cxxopts.git CxxOpts
|
||||||
|
git clone https://github.com/GeirHo/TheronPlusPlus.git Theron++
|
||||||
|
cd
|
||||||
|
|
||||||
|
# Installing the AMPL library
|
||||||
|
|
||||||
|
wget https://portal.ampl.com/external/?url=\
|
||||||
|
https://portal.ampl.com/dl/amplce/ampl.linux64.tgz
|
||||||
|
tar --file=ampl.linux64.tgz --extract --directory=Externals/AMPL
|
||||||
|
cp ampl.lic Externals/AMPL
|
||||||
|
|
||||||
|
# Building the solver component
|
||||||
|
|
||||||
|
make SolverComponent -e THERON=Externals/Theron++ \
|
||||||
|
AMPL_INCLUDE=Externals/AMPL/amplapi/include AMPL_LIB=Externals/AMPL/amplapi/lib\
|
||||||
|
CxxOpts_DIR=Externals/CxxOpts/include
|
@ -87,7 +87,8 @@ constexpr std::string_view TimePoint = "predictionTime";
|
|||||||
// application execution context as published by the Optimiser Controller is
|
// application execution context as published by the Optimiser Controller is
|
||||||
// defined next.
|
// defined next.
|
||||||
|
|
||||||
constexpr std::string_view MetricSubscriptions = "ApplicationContext";
|
constexpr std::string_view MetricSubscriptions
|
||||||
|
= "eu.nebulouscloud.optimiser.solver.metrics";
|
||||||
|
|
||||||
// The metric value messages will be published on different topics and to
|
// The metric value messages will be published on different topics and to
|
||||||
// check if an inbound message is from a metric value topic, it is necessary
|
// check if an inbound message is from a metric value topic, it is necessary
|
||||||
@ -126,7 +127,7 @@ constexpr std::string_view ObjectiveFunctionName = "ObjectiveFunction";
|
|||||||
// should follow some standard topic convention.
|
// should follow some standard topic convention.
|
||||||
|
|
||||||
constexpr std::string_view SLOViolationTopic
|
constexpr std::string_view SLOViolationTopic
|
||||||
= "eu.nebulouscloud.optimiser.slo.violation";
|
= "eu.nebulouscloud.optimiser.solver.slo";
|
||||||
|
|
||||||
/*==============================================================================
|
/*==============================================================================
|
||||||
|
|
||||||
|
@ -67,7 +67,8 @@ License: MPL2.0 (https://www.mozilla.org/en-US/MPL/2.0/)
|
|||||||
#include "Communication/AMQ/AMQEndpoint.hpp" // The AMP endpoint
|
#include "Communication/AMQ/AMQEndpoint.hpp" // The AMP endpoint
|
||||||
#include "Communication/AMQ/AMQjson.hpp" // Transparent JSON-AMQP
|
#include "Communication/AMQ/AMQjson.hpp" // Transparent JSON-AMQP
|
||||||
|
|
||||||
// The cxxopts command line options parser
|
// The cxxopts command line options parser that can be cloned from
|
||||||
|
// https://github.com/jarro2783/cxxopts
|
||||||
|
|
||||||
#include "cxxopts.hpp"
|
#include "cxxopts.hpp"
|
||||||
|
|
||||||
|
42
makefile
42
makefile
@ -5,6 +5,23 @@
|
|||||||
# The NebulOuS solver consists of several interacting actors using the AMQ
|
# The NebulOuS solver consists of several interacting actors using the AMQ
|
||||||
# interface of the Theron++ framework.
|
# interface of the Theron++ framework.
|
||||||
#
|
#
|
||||||
|
# The following packages should be available on Fedora prior to compiling
|
||||||
|
# the file
|
||||||
|
#
|
||||||
|
# ccache # for effcient C++ compilations
|
||||||
|
# qpid-proton-cpp* # Qpid Proton Active Message Queue protocol API
|
||||||
|
# json-devel # Niels Lohmann's JSON library
|
||||||
|
# coin-or-Couenne # The solver to be used by AMPL
|
||||||
|
#
|
||||||
|
# In addtition the problem is formuated using A Mathematical Programming
|
||||||
|
# Language (AMPL) and so it should be installed from
|
||||||
|
# https://portal.ampl.com/user/ampl/request/amplce/trial/new
|
||||||
|
#
|
||||||
|
# There are source code dependencies that should be cloned to local disk
|
||||||
|
#
|
||||||
|
# Theron++ # https://github.com/GeirHo/TheronPlusPlus.git
|
||||||
|
# cxxopts # https://github.com/jarro2783/cxxopts.git
|
||||||
|
#
|
||||||
# Author and Copyright: Geir Horn, University of Oslo
|
# Author and Copyright: Geir Horn, University of Oslo
|
||||||
# Contact: Geir.Horn@mn.uio.no
|
# Contact: Geir.Horn@mn.uio.no
|
||||||
# License: MPL2.0 (https://www.mozilla.org/en-US/MPL/2.0/)
|
# License: MPL2.0 (https://www.mozilla.org/en-US/MPL/2.0/)
|
||||||
@ -14,25 +31,40 @@
|
|||||||
# Defining compiler and commands
|
# Defining compiler and commands
|
||||||
#
|
#
|
||||||
|
|
||||||
CC = g++
|
CC = ccache g++
|
||||||
#CC = clang++
|
#CC = clang++
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Paths
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# The default values of the paths are given here to be overridden by build
|
||||||
|
# definitions on the command line for creating the component container.
|
||||||
|
#
|
||||||
# Location of the Theron++ framework relative to this make file and the code
|
# Location of the Theron++ framework relative to this make file and the code
|
||||||
|
|
||||||
THERON = /home/GHo/Documents/Code/Theron++
|
THERON ?= /home/GHo/Documents/Code/Theron++
|
||||||
|
|
||||||
# Location of the AMPL API directory
|
# Location of the AMPL API directory
|
||||||
|
|
||||||
AMPL_INCLUDE = /opt/AMPL/amplapi/include
|
AMPL_INCLUDE ?= /opt/AMPL/amplapi/include
|
||||||
|
|
||||||
|
# Location of the library directory
|
||||||
|
|
||||||
|
AMPL_LIB ?= /opt/AMPL/amplapi/lib
|
||||||
|
|
||||||
# The solver component uses the CxxOpts class for parsing the command line
|
# The solver component uses the CxxOpts class for parsing the command line
|
||||||
# options since it is header only and lighter than the Options library of
|
# options since it is header only and lighter than the Options library of
|
||||||
# boost, which seems to have lost the most recent C++ features. The CxxOpts
|
# boost, which seems to have lost the most recent C++ features. The CxxOpts
|
||||||
# library can be cloned from https://github.com/jarro2783/cxxopts
|
# library can be cloned from https://github.com/jarro2783/cxxopts
|
||||||
|
|
||||||
CxxOpts_DIR = /home/GHo/Documents/Code/CxxOpts/include
|
CxxOpts_DIR ?= /home/GHo/Documents/Code/CxxOpts/include
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Options for the compiler and linker
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
# Optimisation -O3 is the highest level of optimisation and should be used
|
# Optimisation -O3 is the highest level of optimisation and should be used
|
||||||
# with production code. -Og is the code optimising and offering debugging
|
# with production code. -Og is the code optimising and offering debugging
|
||||||
# transparency and should be use while the code is under development
|
# transparency and should be use while the code is under development
|
||||||
@ -67,7 +99,7 @@ CXXFLAGS = $(GENERAL_OPTIONS) $(INCLUDE_DIRECTORIES) $(DEPENDENCY_FLAGS) \
|
|||||||
|
|
||||||
CFLAGS = $(DEPENDENCY_FLAGS) $(OPTIMISATION_FLAG) $(GENERAL_OPTIONS)
|
CFLAGS = $(DEPENDENCY_FLAGS) $(OPTIMISATION_FLAG) $(GENERAL_OPTIONS)
|
||||||
LDFLAGS = -fuse-ld=gold -ggdb -D_DEBUG -pthread -l$(THERON)/Theron++.a \
|
LDFLAGS = -fuse-ld=gold -ggdb -D_DEBUG -pthread -l$(THERON)/Theron++.a \
|
||||||
-lqpid-proton-cpp -l/opt/AMPL/amplapi/lib/libampl.so
|
-lqpid-proton-cpp -l$(AMPL_LIB)/libampl.so
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Theron library
|
# Theron library
|
||||||
|
Loading…
Reference in New Issue
Block a user