Page MenuHomePhorge

No OneTemporary

Size
26 KB
Referenced Files
None
Subscribers
None
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f18614c..748e7ef 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,234 +1,234 @@
cmake_minimum_required(VERSION 3.15)
# Start project, set version here.
project("RoSA")
# NOTE: Adjust the variables version and release in docs/conf.py according to
# version changes here.
set(ROSA_VERSION_MAJOR 1)
set(ROSA_VERSION_MINOR 0)
set(ROSA_VERSION_PATCH 0)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Add path for custom modules
set(CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
)
# Package information
if( NOT PACKAGE_VERSION )
set(PACKAGE_VERSION "${ROSA_VERSION_MAJOR}.${ROSA_VERSION_MINOR}.${ROSA_VERSION_PATCH}")
endif()
set(PACKAGE_NAME "Research on Self-Awareness Framework")
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "david.juhasz@tuwien.ac.at")
#TODO: cpack?
# Sanity check we are to make out-of-tree build
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
message(FATAL_ERROR "In-source builds are not allowed.")
endif()
string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
# Set various paths
set(ROSA_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(ROSA_MAIN_INCLUDE_DIR ${ROSA_MAIN_SRC_DIR}/include)
set(ROSA_MAIN_BIN_DIR ${ROSA_MAIN_SRC_DIR}/bin)
set(ROSA_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(ROSA_RUNTIME_OUTPUT_INTDIR ${ROSA_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
set(ROSA_LIBRARY_OUTPUT_INTDIR ${ROSA_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib)
set(ROSA_EXEC_BINARY_DIR ${ROSA_BINARY_DIR}/bin)
set(ROSA_LIBRARY_DIR ${ROSA_BINARY_DIR}/lib)
set(ROSA_INCLUDE_DIR ${ROSA_BINARY_DIR}/include)
set(ROSA_MAIN_MODULE_DIR ${ROSA_MAIN_SRC_DIR}/modules)
# Add some generic helpers.
include(AddCMakeTools)
# Set build options
option(ROSA_INCLUDE_TOOLS "Generate build targets for RoSA tools." ON)
option(ROSA_INCLUDE_EXAMPLES "Generate build targets for RoSA examples." ON)
option(ROSA_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
# Assertions are always enabled for Debug builds, this option is respected only
# for non-Debug builds.
option(ROSA_ENABLE_ASSERTIONS "Enable assertions for non-Debug builds." OFF)
option(ROSA_ENABLE_CLANG_TIDY "Run clang-tidy checks when building RoSA." OFF)
option(ROSA_INCLUDE_CLANG_FORMAT "Generate build target for formatting RoSA sources with clang-format." OFF)
option(ROSA_INCLUDE_DOCS "Generate build targets for RoSA documentation." ON)
option(ROSA_BUILD_DOCS "Build RoSA documentation." OFF)
option(ROSA_ENABLE_DOXYGEN "Use doxygen to generate RoSA API documentation." OFF)
option(ROSA_ENABLE_SPHINX "Use Sphinx to generate RoSA documentation." OFF)
set(ROSA_LOG_LEVEL "" CACHE STRING "Level of logging to be used.")
set(ROSA_INCLUDE_APPS "" CACHE STRING "Generate build targets for the defined RoSA applications.")
# All options referred to from HandleROSAOptions have to be specified
# BEFORE this include, otherwise options will not be correctly set on
# first cmake run
include(config-ix)
include(HandleROSAOptions)
# Configure the ROSA configuration header file.
if( NOT ROSA_LOG_LEVEL STREQUAL "")
if( ${ROSA_LOG_LEVEL} EQUAL 5 )
set(ROSA_LOG_LEVEL_INT -1)
else()
set(ROSA_LOG_LEVEL_INT ${ROSA_LOG_LEVEL})
endif()
else()
set(ROSA_LOG_LEVEL_INT -1)
endif()
configure_file(
${ROSA_MAIN_INCLUDE_DIR}/rosa/config/rosa_config.h.cmake
${ROSA_INCLUDE_DIR}/rosa/config/rosa_config.h
)
##################
# Handling modules
# Submodules added to this list will be excluded from the project.
# Use it if a submodule is not used under some conditions or built separately.
set(ROSA_EXCLUDE_SUBMODULES "")
# Set configuration of modules
set(CXXOPTS_BUILD_TESTS OFF CACHE INTERNAL "")
set(JSON_BuildTests OFF CACHE INTERNAL "")
set(JSON_Install OFF CACHE INTERNAL "")
set(JSON_MultipleHeaders OFF CACHE INTERNAL "")
SET(PAHO_BUILD_STATIC TRUE CACHE INTERNAL "")
SET(PAHO_BUILD_WITH_SSL FALSE CACHE INTERNAL "")
SET(PAHO_ENABLE_TESTING FALSE CACHE INTERNAL "")
include(cmake/pahomqttc.cmake)
include(cmake/pahomqttcpp.cmake)
# These libraries will be built as external projects, so exclude them from this project.
list(APPEND ROSA_EXCLUDE_SUBMODULES paho.mqtt.c paho.mqtt.cpp)
# Fetch and configure modules
add_subdirectory(modules)
# "Install" headers for RoSA build
file(COPY
${ROSA_MAIN_MODULE_DIR}/cxxopts/include/cxxopts.hpp
DESTINATION ${ROSA_INCLUDE_DIR}/cxxopts
)
file(COPY
${ROSA_MAIN_MODULE_DIR}/json/single_include/nlohmann
DESTINATION ${ROSA_INCLUDE_DIR}
)
##################
# They are not referenced. See set_output_directory().
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ROSA_EXEC_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ROSA_LIBRARY_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ROSA_LIBRARY_DIR})
# Set include directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories(${ROSA_INCLUDE_DIR} ${ROSA_MAIN_INCLUDE_DIR})
# Set up YCM
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
message("Set compilation_database_folder in .ymc_extra_conf.py in the source directory if you want to use YMC.")
# Add parts of the project
include(AddROSATools)
add_subdirectory(lib)
add_subdirectory(apps)
if( ROSA_INCLUDE_TOOLS )
add_subdirectory(tools)
endif()
if( ROSA_INCLUDE_EXAMPLES )
add_subdirectory(examples)
endif()
if( ROSA_INCLUDE_DOCS )
add_subdirectory(docs)
endif()
#TODO: install?
# Print summary
set(ROSA_ENABLE_ASSERTIONS_STR "OFF")
if( ROSA_ENABLE_ASSERTIONS_INT EQUAL 1 )
set(ROSA_ENABLE_ASSERTIONS_STR "ON")
endif()
set(LOG_LEVEL_STR "disabled")
if( NOT ROSA_LOG_LEVEL STREQUAL "" )
if( ${ROSA_LOG_LEVEL} EQUAL 0 )
set(LOG_LEVEL_STR "ERROR")
elseif( ${ROSA_LOG_LEVEL} EQUAL 1 )
set(LOG_LEVEL_STR "WARNING")
elseif( ${ROSA_LOG_LEVEL} EQUAL 2 )
set(LOG_LEVEL_STR "INFO")
elseif( ${ROSA_LOG_LEVEL} EQUAL 3 )
set(LOG_LEVEL_STR "DEBUG")
elseif( ${ROSA_LOG_LEVEL} EQUAL 4 )
set(LOG_LEVEL_STR "TRACE")
elseif( ${ROSA_LOG_LEVEL} EQUAL 5 )
set(LOG_LEVEL_STR "disabled")
else()
set(LOG_LEVEL_STR "invalid")
endif()
endif()
message(STATUS
"\n====================| Build Summary |===================="
"\n"
"\nRoSA version: ${PACKAGE_VERSION}"
"\n"
"\nBuild type: ${CMAKE_BUILD_TYPE}"
"\nAssertions: ${ROSA_ENABLE_ASSERTIONS_STR}"
"\nClang-tidy: ${ROSA_ENABLE_CLANG_TIDY}"
"\nClang-format: ${ROSA_INCLUDE_CLANG_FORMAT}"
"\nLog level: ${LOG_LEVEL_STR}"
"\n"
"\nBuild apps: ${ROSA_INCLUDE_APPS}"
"\nBuild tools: ${ROSA_INCLUDE_TOOLS}"
"\nBuild examples: ${ROSA_INCLUDE_EXAMPLES}"
"\nInclude docs: ${ROSA_INCLUDE_DOCS}"
"\nBuild docs: ${ROSA_BUILD_DOCS}"
"\n -enable doxygen: ${ROSA_ENABLE_DOXYGEN}"
"\n -enable Sphinx: ${ROSA_ENABLE_SPHINX}"
"\n"
"\nCC: ${CMAKE_C_COMPILER}"
"\nCFLAGS: ${CMAKE_C_FLAGS}"
"\nCXX: ${CMAKE_CXX_COMPILER}"
"\nCXXFLAGS: ${CMAKE_CXX_FLAGS}"
"\nLIBRARIES: ${LD_FLAGS}"
"\n"
"\nSource directory: ${ROSA_MAIN_SRC_DIR}"
"\nBuild directory: ${ROSA_BINARY_DIR}"
"\nExecutable path: ${ROSA_EXEC_BINARY_DIR}"
"\nLibrary path: ${ROSA_LIBRARY_DIR}"
"\nGenerator: ${CMAKE_GENERATOR}"
"\n"
"\n===========================================================\n")
diff --git a/cmake/modules/HandleROSAOptions.cmake b/cmake/modules/HandleROSAOptions.cmake
index 9dd271c..cefd49a 100644
--- a/cmake/modules/HandleROSAOptions.cmake
+++ b/cmake/modules/HandleROSAOptions.cmake
@@ -1,192 +1,192 @@
# This CMake module is responsible for interpreting the user defined ROSA_
# options and executing the appropriate CMake commands to realize the users'
# selections.
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
if ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
set(ROSA_COMPILER_IS_CLANG ON)
# Enforce minimum version.
- if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0.0" )
+ if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0" )
message(FATAL_ERROR "Insufficient LLVM version")
endif()
else()
set(ROSA_COMPILER_IS_CLANG OFF)
endif()
if( CMAKE_COMPILER_IS_GNUCXX )
set(ROSA_COMPILER_IS_GCC_COMPATIBLE ON)
elseif( MSVC )
set(ROSA_COMPILER_IS_GCC_COMPATIBLE OFF)
elseif( ROSA_COMPILER_IS_CLANG )
set(ROSA_COMPILER_IS_GCC_COMPATIBLE ON)
else()
message(FATAL_ERROR "Unexpected C++ compiler!")
endif()
function(append value)
foreach(variable ${ARGN})
set(${variable} "${${variable}} ${value}" PARENT_SCOPE)
endforeach(variable)
endfunction()
function(append_if condition value)
if (${condition})
foreach(variable ${ARGN})
set(${variable} "${${variable}} ${value}" PARENT_SCOPE)
endforeach(variable)
endif()
endfunction()
function(remove value)
foreach(variable ${ARGN})
string(REPLACE "${value}" "" NEWVAR "${${variable}}")
set(${variable} "${NEWVAR}" PARENT_SCOPE)
endforeach(variable)
endfunction()
# NDEBUG on non-Debug builds
append("-DNDEBUG" CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL)
# Disable optimization in Debug builds
if ( ROSA_COMPILER_IS_GCC_COMPATIBLE )
append("-O0" CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG)
elseif ( MSVC )
append("/Od" CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG)
endif()
# Assertions are always enabled on Debug builds, this is interesting for
# non-Debug builds.
if( NOT "${uppercase_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG" AND ${ROSA_ENABLE_ASSERTIONS} )
# MSVC doesn't like _DEBUG on release builds. See PR 4379.
if( NOT MSVC )
add_definitions( -D_DEBUG )
set(ENABLE_ASSERTIONS "1")
else()
set(ENABLE_ASSERTIONS "0")
endif()
# On non-Debug builds we NDEBUG, but in this case we need to undefine it:
add_definitions(-UNDEBUG)
# Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines.
foreach (flags_var_to_scrub
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL)
string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " "
"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
endforeach()
endif()
set(ROSA_ENABLE_ASSERTIONS_INT -1)
if( "${uppercase_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG" OR ${ROSA_ENABLE_ASSERTIONS} )
set(ROSA_ENABLE_ASSERTIONS_INT 1)
endif()
if( ROSA_COMPILER_IS_GCC_COMPATIBLE )
append("-Wall -Wextra -Wdocumentation -Werror" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
append_if(ROSA_ENABLE_PEDANTIC "-pedantic -Wno-long-long" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
append("-fno-rtti -fno-exceptions" CMAKE_CXX_FLAGS)
append("-Wno-c++1z-compat" CMAKE_CXX_FLAGS)
elseif ( MSVC )
if (ROSA_COMPILER_IS_CLANG)
# Remove/adjsut incorrect flags that might be generated automatically.
foreach (flags_var_to_scrub
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL)
string (REGEX REPLACE "(^| )-Wall($| )" " "
"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
string (REGEX REPLACE "(^| )-frtti($| )" " "
"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
string (REGEX REPLACE "(^| )-fexceptions($| )" " "
"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
string (REGEX REPLACE "(^| )-fno-inline($| )" " -Ob0 "
"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
string (REGEX REPLACE "(^| )-gline-tables-only($| )" " "
"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
message("${flags_var_to_scrub}: ${${flags_var_to_scrub}}")
endforeach()
endif()
# Flags matching GCC-compatible "-Wall -Wextra -Werror".
# NOTE: Do not use -Wall for MSVC because it generates silly warning (e.g.,
# warnings about things in external libraries), use -W4 instead.
append("/W4 /WX" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
if ( ROSA_COMPILER_IS_CLANG )
# GCC-compatible flags without corresponding MSVC options.
append("-Wdocumentation" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
# The flag "-pedantic" is not in the MSVC flavour.
append_if(ROSA_ENABLE_PEDANTIC "-Wno-long-long" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()
# Flags matching GCC-compatible "-fno-rtti".
append("/GR-" CMAKE_CXX_FLAGS)
# NOTE: We cannot disable unwind semantics (i.e., -fno-exceptions) for Windows
# libraries...
append("/EHsc" CMAKE_CXX_FLAGS)
if ( ROSA_COMPILER_IS_CLANG )
append("-Wno-c++1z-compat" CMAKE_CXX_FLAGS)
# MSVC puts there some garbage which needs to be ignored...
append("-Qunused-arguments" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()
if ( MSVC )
# Make MSVC ignore warning C4514 about unreferenced inline functions.
append("/nowarn:4514")
# Make MSVC ignore warning LNK4221 in libraries. The warning is caused by
# empty object files that correspond to the empty .cpp files, which we have
# for generating compile database entries for all header files.
append("/IGNORE:4221" CMAKE_STATIC_LINKER_FLAGS)
# Let's make the compiler handle a big number of sections in object files.
append("/bigobj" CMAKE_CXX_FLAGS)
endif()
endif()
if( ROSA_ENABLE_CLANG_TIDY )
# Set clang-tidy arguments, use the same for both C and CXX.
set(CMAKE_C_CLANG_TIDY "${CLANGTIDY_EXECUTABLE};-header-filter=.*")
set(CMAKE_CXX_CLANG_TIDY ${CMAKE_C_CLANG_TIDY})
# Apply suggested fixes if requested.
append_if(ROSA_CLANG_TIDY_FIX ",-fix" CMAKE_C_CLANG_TIDY CMAKE_CXX_CLANG_TIDY)
endif( ROSA_ENABLE_CLANG_TIDY )
if( ROSA_INCLUDE_APPS STREQUAL "")
message(STATUS "Include all apps by default.")
SUBDIRLIST(ROSA_INCLUDE_APPS ${ROSA_MAIN_SRC_DIR}/apps)
else()
message(STATUS "Include apps: ${ROSA_INCLUDE_APPS}.")
endif()
diff --git a/docs/Build.rst b/docs/Build.rst
index 740b6ec..1c4a442 100755
--- a/docs/Build.rst
+++ b/docs/Build.rst
@@ -1,324 +1,324 @@
===========================
Building the RoSA Framework
===========================
.. contents::
:local:
.. _build_deps:
Build Dependencies
==================
In order to build RoSA, the following tools are required:
* `CMake <https://cmake.org/>`_ (minimum version 3.15.0);
* Build system of your choice (`Ninja <https://ninja-build.org/>` is recommended for Linux) that can be targeted by CMake -- including a
- compiler supporting *C++17*.
+ compiler supporting *C++20*.
- * Clang/LLVM -- minimum version 5.0.0
+ * Clang/LLVM -- minimum version 9.0.0
- * A proper C++ standard library implementation is needed as well (e.g., `libstdc++` from GCC with minimum version 7)
+ * A proper C++ standard library implementation is needed as well (e.g., `libstdc++` from GCC with minimum version 7 should be enough for the library features used.)
- * Visual Studio 2017 -- minimum version 15.7
+ * Visual Studio 2017 -- minimum version 15.7 (check this!)
The following additional tools are required to generate documentation:
* `Doxygen <http://doxygen.org>`_ -- for generating API documentation;
* `Graphviz <http://www.graphviz.org/>`_ -- not necessary, but the API
documentation has nicer graphics when `dot` is available;
* `Sphinx <http://www.sphinx-doc.org/>`_ -- for generating documentation.
The following additional tools are required to check and possibly enforce coding
standard:
* `clang-tidy <https://clang.llvm.org/extra/clang-tidy/>`_
* `clang-format <https://clang.llvm.org/docs/ClangFormat.html>`_
General notes
=============
* The repository defines git submodules, which are necessary to build RoSA.
Initialize and update submodules before building.
* The framework is delivered with a CMake project, which can be used to generate
build projects to build the framework.
* The provided CMake project supports building in a dedicated build directory
either inside or outside of the RoSA source directory.
.. _doxygen-warnings:
* Doxygen warnings -- typically indicating actual errors -- are printed to
`stderr`, do check that when generating API documentation.
.. _cmake-variables:
CMake Variables
===============
Beyond the usual CMake variables, the following project-related options are
available:
`ROSA_INCLUDE_APPS`
Generate build targets for the defined RoSA applications. The option is a string that is a list of app names. All apps that are present in the option are built, others are ignored. All apps are built by default.
`ROSA_INCLUDE_TOOLS`
Generate build targets for RoSA tools. The tools are also built when the
option is set to `ON`, which is the default setting.
`ROSA_INCLUDE_EXAMPLES`
Generate build targets for RoSA examples. The examples are also built when the
option is set to `ON`, which is the default setting.
`ROSA_ENABLE_PEDANTIC`
Compile the framework with using `-pedantic` for GCC-compatible compilers,
otherwise ignored. The option defaults to `ON`.
`ROSA_ENABLE_ASSERTIONS`
Enable assertions for non-Debug builds, which defaults to `OFF`.
Note that assertions are always enabled for Debug builds and this option is
ignored for such builds.
.. _CMake_clang_tidy:
`ROSA_ENABLE_CLANG_TIDY`
Run *clang-tidy* checks when building RoSA, which defaults to `OFF`.
When the variable is enabled, build targets created by *Makefile* and *Ninja*
generators include calls for clang-tidy. Other generators ignore this option.
Note that CMake variables `CMAKE_<LANG>_CLANG_TIDY` are set when enabled.
Settings for clang-tidy are defined by the file `.clang-tidy` in the RoSA
source directory.
Consider the following options when the option is enabled:
`ROSA_CLANG_TIDY_PATH`
Custom path for `clang-tidy` executable.
In order to use clang-tidy, CMake needs to find the `clang-tidy`
executable. If `clang-tidy` to be used is available via `PATH`, just leave
the option empty -- which is default. Set the absolute path of the
directory containing the `clang-tidy` executable otherwise, in which case
no default path is searched for `clang-tidy`.
`ROSA_CLANG_TIDY_FIX`
Apply suggested clang-tidy fixes to the sources, which defaults to `OFF`.
Enable the option only if you know what you are doing.
.. _CMake_clang_format:
`ROSA_INCLUDE_CLANG_FORMAT` **[experimental]**
Generate build target -- `format-rosa` -- for formatting RoSA sources with
*clang-format*, which defatuls to `OFF`.
When the variable is enabled and *CMake is not running on a Windows host*, a
build target is generated which can be used to have all the RoSA sources
formatted with clang-format. Settings for clang-format are defined by the file
`.clang-format` in the RoSA source directory.
Note that executing build target `format-rosa` will reformat all the source
files *inplace*.
Consider the following option when a build target for clang-format is to be
generated:
`ROSA_CLANG_FORMAT_PATH`
Custom path for `clang-format` executable.
In order to use clang-format, CMake needs to find the `clang-format`
executable. If `clang-format` to be used is available via `PATH`, just
leave the option empty -- which is default. Set the absolute path of the
directory containing the `clang-format` executable otherwise, in which case
no default path is search for `clang-format`.
`ROSA_LOG_LEVEL`
Level of logging to be used, use one of the following valid integer values.
======== =========
Variable Log Level
======== =========
`0` `ERROR`
`1` `WARNING`
`2` `INFO`
`3` `DEBUG`
`4` `TRACE`
`5` *disabled*
======== =========
Level of logging defaults to *disabled*.
`ROSA_INCLUDE_DOCS`
Generate build targets for RoSA documentation, defaults to `ON`.
Note that the automatic execution of the generated build targets is
controlled by the option `ROSA_BUILD_DOCS`. The actual documentations to
build are controlled by the options `ROSA_ENABLE_DOXYGEN` and
`ROSA_ENABLE_SPHINX`.
`ROSA_BUILD_DOCS`
Build RoSA documentation automatically as part of the build process. The
option defaults to `OFF` and takes effect only if the option
`ROSA_INCLUDE_DOCS` is enabled.
.. _CMake_doxygen:
`ROSA_ENABLE_DOXYGEN`
Use *doxygen* to generate RoSA API documentation. The option defaults to `OFF`
and takes effect only if the option `ROSA_INCLUDE_DOCS` is enabled.
Doxygen documentation may be generated by executing build target
`doxygen-rosa`, which is done as part of the default build process if
`ROSA_BUILD_DOCS` is enabled.
Doxygen must be available via `PATH` if the option is enabled.
The following options are also available to tune doxygen:
`ROSA_DOXYGEN_SVG`
Use *svg* instead of *png* files for doxygen graphs. The option defaults to
`OFF` and takes effect if the tool *dot* is available via `PATH` to be used
to generated graph images.
`ROSA_DOXYGEN_EXTERNAL_SEARCH`
Enable doxygen external search, which defatuls to `OFF`.
The following options need to be set if the option is enabled:
`ROSA_DOXYGEN_SEARCHENGINE_URL`
URL to use for external search.
`ROSA_DOXYGEN_SEARCH_MAPPINGS`
Doxygen Search Mappings.
.. _CMake_sphinx:
`ROSA_ENABLE_SPHINX`
Use *Sphinx* to generate RoSA documentation. The option defaults to `OFF` and
takes effect only if the option `ROSA_INCLUDE_DOCS` is enabled.
Sphinx must be available via `PATH` if the option is enabled.
The following options are also available to tune Sphinx:
`SPHINX_OUTPUT_HTML`
Output standalone HTML files. The option defaults to `ON`.
Documentation may be generated by executing build target `docs-rosa-html`,
which is done as part of the default build process if `ROSA_BUILD_DOCS` is
enabled.
`SPHINX_OUTPUT_MAN`
Output man pages for RoSA applications and tools. The option defaults to
`ON`.
Man pages may be generated by executing build target `docs-rosa-man`, which
is done as part of the default build process if `ROSA_BUILD_DOCS` is
enabled.
`SPHINX_WARNINGS_AS_ERRORS`
When building documentation, treat Sphinx warnings as errors. The option
defaults to `ON`.
Building RoSA Step-by-Step
==========================
Building on Linux with Ninja
----------------------------
Configuring and building the framework on Linux using *Ninja* is a
straightforward process which does not require performing any tricks.
Set C and C++ compilers with the variables `CC` and `CXX`, respectively. Use the
CMake variable `CMAKE_BUILD_TYPE` to set the type of build: `Debug`, `Release`.
Follows an example on building the framework with all options turned on. CMake
variables may be skipped as necessary. You need to have RoSA sources on your
computer.::
rosa$ mkdir build
$ cd build
rosa/build$ CC=<clang-executable> CXX=<clang++-executable> <cmake-executable> -G Ninja -DROSA_ENABLE_CLANG_TIDY=ON -DROSA_CLANG_TIDY_PATH=<clang-tidy-execdir> -DROSA_INCLUDE_CLANG_FORMAT=ON -DROSA_CLANG_FORMAT_PATH=<clang-format-execdir> -DROSA_LOG_LEVEL=4 -DROSA_ENABLE_DOXYGEN=ON -DROSA_DOXYGEN_SVG=ON -DROSA_ENABLE_SPHINX=ON -DCMAKE_BUILD_TYPE=Debug ..
[CMake configures and generates without errors]
rosa/build$ cmake --build .
[Ninja builds the project]
You just need to run the build command again in order to re-build the project after changing
the source code and the CMake project.
In order to build documentation and enforce coding standard, refer to
corresponding :ref:`cmake-variables`.
.. _Build_VS:
Building on Windows with Visual Studio
--------------------------------------
This is how to use the native MSVC compiler to build RoSA.
Having your build system prepared (see `Build Dependencies`_) and RoSA sources
fetched to your computer, configure and build the framework like this:
#. Generate Visual Studio solution with CMake:
#. Start CMake.
#. Define *source directory* and a separate *build directory* in CMake.
#. Click *Configure*.
#. Select the proper *generator* for your version of Visual Studio.
#. Click *Finish*.
#. Tune CMake variables as you wish.
* Note that Visual Studio Generators are multi-configuration generators,
hence you cannot set `CMAKE_BUILD_TYPE`. You need to select a
configuration to build in Visual Studio.
#. Click *Generate*.
#. Build the framework with Visual Studio:
#. Open the generated `RoSA.sln` from the build directory with Visual
Studio.
#. Build the project `ALL_BUILD`.
You just need to re-build the project in Visual Studio after changing the
source code and the CMake project.
In case the CMake project is changed, Visual Studio automatically calls CMake
the update the build project.
Build Result
============
The build process works in the build directory. After a successful build, one
can find the following final outputs there -- besides some intermediate files.
.. _Build_Result_Software:
Software
--------
In the build directory, `include` contains header files which are generated by
CMake and provide configuration-specific information.
The build process generates static libraries in `lib` and executables --
examples, apps, and tools -- in `bin`. Projects generated by a
multi-configuration generator result in the actual libraries and executables
being located in subdirectories corresponding to different build configurations.
.. _Build_Result_Documentation:
Documentation
-------------
Documentation is generated in `docs`.
The general documentation can be found in `docs/html`. Man pages for apps and
tools can be found in `docs/man`.
The API documentation can be found in `docs/doxygen/html`.
.. rubric:: Footnotes

File Metadata

Mime Type
text/x-diff
Expires
Sat, May 17, 11:46 AM (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
141536
Default Alt Text
(26 KB)

Event Timeline