Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
This commit is contained in:
289
tools/EVerest-main/lib/everest/framework/CMakeLists.txt
Normal file
289
tools/EVerest-main/lib/everest/framework/CMakeLists.txt
Normal file
@@ -0,0 +1,289 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project(everest-framework
|
||||
VERSION 0.25.0
|
||||
DESCRIPTION "The open operating system for e-mobility charging stations"
|
||||
LANGUAGES CXX C
|
||||
)
|
||||
|
||||
if(DEFINED EVEREST_IO_WITH_MQTT AND NOT EVEREST_IO_WITH_MQTT)
|
||||
message(FATAL_ERROR "everest-framework requires MQTT support in everest::io. "
|
||||
"Set EVEREST_IO_WITH_MQTT=ON or exclude framework from the build "
|
||||
"(e.g. via EVEREST_EXCLUDE_LIBS=framework).")
|
||||
endif()
|
||||
|
||||
find_package(everest-cmake 0.5 REQUIRED
|
||||
PATHS ../everest-cmake
|
||||
)
|
||||
|
||||
# options
|
||||
option(${PROJECT_NAME}_BUILD_TESTING "Build unit tests, used if included as dependency" OFF)
|
||||
option(BUILD_TESTING "Build unit tests, used if standalone project" OFF)
|
||||
option(FRAMEWORK_INSTALL "Install the library (shared data might be installed anyway)" ${EVC_MAIN_PROJECT})
|
||||
option(CMAKE_RUN_CLANG_TIDY "Run clang-tidy" OFF)
|
||||
option(EVEREST_ENABLE_JS_SUPPORT "Enable everestjs for JavaScript modules" OFF)
|
||||
option(EVEREST_ENABLE_PY_SUPPORT "Enable everestpy for Python modules" ON)
|
||||
option(EVEREST_ENABLE_RS_SUPPORT "Enable everestrs for Rust modules" OFF)
|
||||
option(EVEREST_ENABLE_ADMIN_PANEL_BACKEND "Enable everest admin panel backend" OFF)
|
||||
option(EVEREST_INSTALL_ADMIN_PANEL "Download and install everest admin panel" OFF)
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY "latency" CACHE STRING
|
||||
"Thread pool scaling policy for framework message handling: latency, greedy, conservative, fixed_size, custom")
|
||||
set_property(CACHE EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY PROPERTY STRINGS
|
||||
latency greedy conservative fixed_size custom)
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_LATENCY_THRESHOLD_MS "50" CACHE STRING
|
||||
"Maximum queued task wait time in milliseconds before latency scaling grows the framework message handler pool")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_LATENCY_TICK_MS "5" CACHE STRING
|
||||
"Supervisor tick in milliseconds for framework message handler latency scaling")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_FIXED_SIZE_THRESHOLD "3" CACHE STRING
|
||||
"Queue size threshold for framework message handler fixed-size scaling")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER "" CACHE STRING
|
||||
"Header to include when EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY=custom")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE "" CACHE STRING
|
||||
"Fully-qualified scaling policy type when EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY=custom")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_INCLUDE_DIR "" CACHE PATH
|
||||
"Include directory for the custom thread pool scaling policy header")
|
||||
|
||||
foreach(_scaling_option IN ITEMS
|
||||
EVEREST_FRAMEWORK_THREAD_POOL_SCALING_LATENCY_THRESHOLD_MS
|
||||
EVEREST_FRAMEWORK_THREAD_POOL_SCALING_LATENCY_TICK_MS
|
||||
EVEREST_FRAMEWORK_THREAD_POOL_SCALING_FIXED_SIZE_THRESHOLD)
|
||||
if(NOT ${_scaling_option} MATCHES "^[1-9][0-9]*$")
|
||||
message(FATAL_ERROR
|
||||
"${_scaling_option} must be a positive integer, got '${${_scaling_option}}'")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY STREQUAL "latency")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_ID 1)
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER_CONFIG "everest/util/async/thread_pool_scaling.hpp")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE_CONFIG "void")
|
||||
elseif(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY STREQUAL "greedy")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_ID 2)
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER_CONFIG "everest/util/async/thread_pool_scaling.hpp")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE_CONFIG "void")
|
||||
elseif(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY STREQUAL "conservative")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_ID 3)
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER_CONFIG "everest/util/async/thread_pool_scaling.hpp")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE_CONFIG "void")
|
||||
elseif(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY STREQUAL "fixed_size")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_ID 4)
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER_CONFIG "everest/util/async/thread_pool_scaling.hpp")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE_CONFIG "void")
|
||||
elseif(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY STREQUAL "custom")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_ID 5)
|
||||
|
||||
if(NOT EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER)
|
||||
message(FATAL_ERROR
|
||||
"EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER must be set when "
|
||||
"EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY=custom")
|
||||
endif()
|
||||
if(NOT EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE)
|
||||
message(FATAL_ERROR
|
||||
"EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE must be set when "
|
||||
"EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY=custom")
|
||||
endif()
|
||||
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER_CONFIG
|
||||
"${EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_HEADER}")
|
||||
set(EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE_CONFIG
|
||||
"${EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY_CUSTOM_TYPE}")
|
||||
else()
|
||||
message(FATAL_ERROR
|
||||
"Invalid EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY: "
|
||||
"${EVEREST_FRAMEWORK_THREAD_POOL_SCALING_POLICY}. "
|
||||
"Allowed values: latency, greedy, conservative, fixed_size, custom")
|
||||
endif()
|
||||
ev_setup_cmake_variables_python_wheel()
|
||||
option(${PROJECT_NAME}_USE_PYTHON_VENV "Use python venv for pip install targets" OFF)
|
||||
set(${PROJECT_NAME}_PYTHON_VENV_PATH "${CMAKE_BINARY_DIR}/venv" CACHE PATH "Path to python venv")
|
||||
ev_setup_python_executable(
|
||||
USE_PYTHON_VENV ${${PROJECT_NAME}_USE_PYTHON_VENV}
|
||||
PYTHON_VENV_PATH ${${PROJECT_NAME}_PYTHON_VENV_PATH}
|
||||
)
|
||||
|
||||
if((${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME} OR ${PROJECT_NAME}_BUILD_TESTING) AND BUILD_TESTING)
|
||||
set(EVEREST_FRAMEWORK_BUILD_TESTING ON)
|
||||
# this policy allows us to link gcov to targets defined in other directories
|
||||
if(POLICY CMP0079)
|
||||
set(CMAKE_POLICY_DEFAULT_CMP0079 NEW)
|
||||
endif()
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
if(EVEREST_ENABLE_DEBUG_BUILD)
|
||||
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE)
|
||||
else()
|
||||
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "Build type" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# make own cmake modules available
|
||||
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
|
||||
# this policy allows us to continue using the removed FindBoost module for now
|
||||
if(POLICY CMP0167)
|
||||
cmake_policy(SET CMP0167 OLD)
|
||||
endif()
|
||||
|
||||
# dependencies
|
||||
find_package(Boost
|
||||
COMPONENTS
|
||||
program_options
|
||||
thread
|
||||
REQUIRED
|
||||
)
|
||||
|
||||
if(Boost_VERSION_STRING VERSION_LESS "1.69.0")
|
||||
find_package(Boost
|
||||
COMPONENTS
|
||||
system
|
||||
REQUIRED
|
||||
)
|
||||
endif()
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(libcap
|
||||
REQUIRED
|
||||
IMPORTED_TARGET
|
||||
libcap
|
||||
)
|
||||
|
||||
# Make sure stdc++fs is linked for GCC < 9
|
||||
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
|
||||
set(STD_FILESYSTEM_COMPAT_LIB "stdc++fs")
|
||||
else()
|
||||
set(STD_FILESYSTEM_COMPAT_LIB "")
|
||||
endif()
|
||||
|
||||
if(NOT DISABLE_EDM)
|
||||
evc_setup_edm()
|
||||
|
||||
# In EDM mode, we can't install exports (because the dependencies usually do not install their exports)
|
||||
set(FRAMEWORK_INSTALL OFF)
|
||||
|
||||
if (EVEREST_ENABLE_ADMIN_PANEL_BACKEND)
|
||||
# FIXME (aw): libwebsockets/ninja clean doesn't delete recursivly ..
|
||||
set_property(
|
||||
TARGET websockets_shared
|
||||
APPEND
|
||||
PROPERTY ADDITIONAL_CLEAN_FILES "${libwebsockets_BINARY_DIR}/include/libwebsockets"
|
||||
)
|
||||
|
||||
# FIXME (aw): libwebsockets enum-int-mismatch FIX
|
||||
# see https://github.com/warmcat/libwebsockets/pull/2824
|
||||
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 13.0)
|
||||
target_compile_options(websockets_shared PRIVATE -Wno-error=enum-int-mismatch)
|
||||
endif()
|
||||
endif()
|
||||
set_property(TARGET nlohmann_json_schema_validator PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# FIXME (aw): add catch2's cmake folder
|
||||
if (BUILD_TESTING)
|
||||
list(APPEND CMAKE_MODULE_PATH "${Catch2_SOURCE_DIR}/contrib")
|
||||
endif()
|
||||
else()
|
||||
find_package(date REQUIRED)
|
||||
find_package(nlohmann_json REQUIRED)
|
||||
find_package(nlohmann_json_schema_validator REQUIRED)
|
||||
find_package(fmt REQUIRED)
|
||||
|
||||
if (EVEREST_ENABLE_ADMIN_PANEL_BACKEND)
|
||||
find_package(libwebsockets REQUIRED)
|
||||
endif()
|
||||
|
||||
if (BUILD_TESTING)
|
||||
find_package(Catch2 REQUIRED)
|
||||
endif()
|
||||
|
||||
include(find-mqttc)
|
||||
endif()
|
||||
|
||||
include(${everest-sqlite_SOURCE_DIR}/cmake/CollectMigrationFiles.cmake)
|
||||
|
||||
set(EVEREST_FRAMEWORK_GENERATED_INC_DIR ${PROJECT_BINARY_DIR}/generated)
|
||||
configure_file(
|
||||
include/compile_time_settings.hpp.in
|
||||
${EVEREST_FRAMEWORK_GENERATED_INC_DIR}/everest/compile_time_settings.hpp
|
||||
)
|
||||
|
||||
# library code
|
||||
add_subdirectory(lib)
|
||||
|
||||
# executable code
|
||||
add_subdirectory(src)
|
||||
|
||||
# auxillary files
|
||||
add_subdirectory(schemas)
|
||||
|
||||
# everest javascript wrapper
|
||||
if (EVEREST_ENABLE_JS_SUPPORT)
|
||||
add_subdirectory(everestjs)
|
||||
endif()
|
||||
|
||||
# everest python wrapper
|
||||
if (EVEREST_ENABLE_PY_SUPPORT)
|
||||
set(PYTHON_MODULE_EXTENSION ".so")
|
||||
add_subdirectory(everestpy)
|
||||
endif()
|
||||
|
||||
if (EVEREST_ENABLE_RS_SUPPORT)
|
||||
add_subdirectory(everestrs)
|
||||
endif()
|
||||
|
||||
# FIXME (aw): should this be installed or not? Right now it is needed for the
|
||||
# current packaging approach
|
||||
install(TARGETS framework
|
||||
EXPORT framework-targets
|
||||
LIBRARY
|
||||
)
|
||||
|
||||
# packaging
|
||||
if (FRAMEWORK_INSTALL)
|
||||
install(
|
||||
DIRECTORY include/
|
||||
DESTINATION include/everest
|
||||
)
|
||||
|
||||
install(
|
||||
FILES ${EVEREST_FRAMEWORK_GENERATED_INC_DIR}/everest/compile_time_settings.hpp
|
||||
DESTINATION include/everest
|
||||
)
|
||||
|
||||
evc_setup_package(
|
||||
NAME everest-framework
|
||||
EXPORT framework-targets
|
||||
NAMESPACE everest
|
||||
ADDITIONAL_CONTENT
|
||||
"find_dependency(everest-helpers)"
|
||||
"find_dependency(everest-util)"
|
||||
"find_dependency(nlohmann_json)"
|
||||
"find_dependency(nlohmann_json_schema_validator)"
|
||||
"find_dependency(fmt)"
|
||||
"find_dependency(date)"
|
||||
"set(EVEREST_SCHEMA_DIR \"@PACKAGE_EVEREST_SCHEMA_DIR@\")"
|
||||
PATH_VARS
|
||||
EVEREST_SCHEMA_DIR "${CMAKE_INSTALL_DATADIR}/everest/schemas"
|
||||
)
|
||||
endif ()
|
||||
|
||||
# testing
|
||||
if(EVEREST_FRAMEWORK_BUILD_TESTING)
|
||||
include(CTest)
|
||||
add_subdirectory(tests)
|
||||
else()
|
||||
message(STATUS "Not running unit tests")
|
||||
endif()
|
||||
|
||||
# configure clang-tidy if requested
|
||||
if(CMAKE_RUN_CLANG_TIDY)
|
||||
message("Enabling clang-tidy")
|
||||
set(CMAKE_CXX_CLANG_TIDY clang-tidy)
|
||||
endif()
|
||||
|
||||
# build doxygen documentation if doxygen is available
|
||||
find_package(Doxygen)
|
||||
if(DOXYGEN_FOUND)
|
||||
set( DOXYGEN_OUTPUT_DIRECTORY dist/docs )
|
||||
doxygen_add_docs(doxygen-${PROJECT_NAME} everest.js include lib src)
|
||||
else()
|
||||
message("Doxygen is needed to generate documentation")
|
||||
endif()
|
||||
Reference in New Issue
Block a user