Files
cariflex/tools/EVerest-main/lib/everest/ocpp/lib/CMakeLists.txt
Eric F d398a6ced2 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
2026-06-08 00:38:27 -04:00

234 lines
8.2 KiB
CMake

# OCPP library
add_library(ocpp)
add_library(everest::ocpp ALIAS ocpp)
target_compile_options(ocpp
PRIVATE
#-Werror # turn warnings into errors
-Wimplicit-fallthrough # avoid unintended fallthroughs
-pedantic-errors
-Werror=switch-enum
)
target_compile_definitions(ocpp
PRIVATE
MIGRATION_FILE_VERSION_V16=${MIGRATION_FILE_VERSION_V16}
MIGRATION_FILE_VERSION_V2=${MIGRATION_FILE_VERSION_V2}
MIGRATION_DEVICE_MODEL_FILE_VERSION_V2=${MIGRATION_DEVICE_MODEL_FILE_VERSION_V2}
)
target_sources(ocpp
PRIVATE
ocpp/common/call_types.cpp
ocpp/common/charging_station_base.cpp
ocpp/common/connectivity_manager.cpp
ocpp/common/ocpp_logging.cpp
ocpp/common/schemas.cpp
ocpp/common/types.cpp
ocpp/common/utils.cpp
ocpp/common/evse_security_impl.cpp
ocpp/common/evse_security.cpp
ocpp/common/database/database_handler_common.cpp
)
if(LIBOCPP_ENABLE_V16)
target_sources(ocpp
PRIVATE
ocpp/v16/charge_point.cpp
ocpp/v16/database_handler.cpp
ocpp/v16/charge_point_impl.cpp
ocpp/v16/message_dispatcher.cpp
ocpp/v16/smart_charging.cpp
ocpp/v16/known_keys.cpp
ocpp/v16/charge_point_configuration_base.cpp
ocpp/v16/charge_point_configuration_devicemodel.cpp
ocpp/v16/charge_point_configuration.cpp
ocpp/v16/charge_point_state_machine.cpp
ocpp/v16/message_queue.cpp
ocpp/v16/profile.cpp
ocpp/v16/transaction.cpp
ocpp/v16/ocpp_enums.cpp
ocpp/v16/ocpp_types.cpp
ocpp/v16/types.cpp
ocpp/v16/utils.cpp
ocpp/v2/messages/InstallCertificate.cpp
ocpp/v2/messages/CertificateSigned.cpp
ocpp/v2/messages/Authorize.cpp
ocpp/v2/messages/GetCertificateStatus.cpp
ocpp/v2/messages/Get15118EVCertificate.cpp
ocpp/v2/messages/DeleteCertificate.cpp
ocpp/v2/messages/TriggerMessage.cpp
ocpp/v2/ocpp_enums.cpp
ocpp/v2/ocpp_types.cpp
ocpp/v2/types.cpp
ocpp/v2/messages/SignCertificate.cpp
ocpp/v2/messages/GetInstalledCertificateIds.cpp
)
add_subdirectory(ocpp/v16/messages)
endif()
if(LIBOCPP_ENABLE_V2)
target_sources(ocpp
PRIVATE
ocpp/v2/average_meter_values.cpp
ocpp/v2/charge_point.cpp
ocpp/v2/charge_point_callbacks.cpp
ocpp/v2/connector.cpp
ocpp/v2/ctrlr_component_variables.cpp
ocpp/v2/database_handler.cpp
ocpp/v2/device_model.cpp
ocpp/v2/device_model_storage_sqlite.cpp
ocpp/v2/enums.cpp
ocpp/v2/evse.cpp
ocpp/v2/evse_manager.cpp
ocpp/v2/init_device_model_db.cpp
ocpp/v2/notify_report_requests_splitter.cpp
ocpp/v2/message_queue.cpp
ocpp/v2/ocpp_enums.cpp
ocpp/v2/profile.cpp
ocpp/v2/ocpp_types.cpp
ocpp/v2/ocsp_updater.cpp
ocpp/v2/monitoring_updater.cpp
ocpp/v2/transaction.cpp
ocpp/v2/types.cpp
ocpp/v2/utils.cpp
ocpp/v2/component_state_manager.cpp
ocpp/v2/message_dispatcher.cpp
ocpp/v2/functional_blocks/authorization.cpp
ocpp/v2/functional_blocks/availability.cpp
ocpp/v2/functional_blocks/security.cpp
ocpp/v2/functional_blocks/smart_charging.cpp
ocpp/v2/functional_blocks/data_transfer.cpp
ocpp/v2/functional_blocks/firmware_update.cpp
ocpp/v2/functional_blocks/reservation.cpp
ocpp/v2/functional_blocks/diagnostics.cpp
ocpp/v2/functional_blocks/display_message.cpp
ocpp/v2/functional_blocks/meter_values.cpp
ocpp/v2/functional_blocks/provisioning.cpp
ocpp/v2/functional_blocks/remote_transaction_control.cpp
ocpp/v2/functional_blocks/tariff_and_cost.cpp
ocpp/v2/functional_blocks/transaction.cpp
ocpp/v21/functional_blocks/bidirectional.cpp
ocpp/v21/functional_blocks/der_control.cpp
)
add_subdirectory(ocpp/v2/messages)
add_subdirectory(ocpp/v21/messages)
# Embed the canonical NetworkConfiguration_1 schema as a build-time C++ string so
# blob migration can bootstrap a per-slot component without a filesystem dependency.
set(OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_SOURCE
"${PROJECT_SOURCE_DIR}/config/common/component_config/standardized/NetworkConfiguration_1.json")
file(READ "${OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_SOURCE}"
OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_JSON)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
"${OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_SOURCE}")
set(OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_GENERATED
"${CMAKE_CURRENT_BINARY_DIR}/generated/network_configuration_default_schema.cpp")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/ocpp/v2/network_configuration_default_schema.cpp.in"
"${OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_GENERATED}"
@ONLY)
target_sources(ocpp PRIVATE
"${OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_GENERATED}")
set(OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_GENERATED
"${OCPP_NETWORK_CONFIGURATION_DEFAULT_SCHEMA_GENERATED}" PARENT_SCOPE)
endif()
add_subdirectory(ocpp/common/websocket)
option(LIBOCPP_USE_BOOST_FILESYSTEM "Usage of boost/filesystem.hpp instead of std::filesystem" OFF)
target_include_directories(ocpp
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_include_directories(ocpp
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/3rd_party>
)
#############
# Logging configuration
#
# Set EVEREST_CUSTOM_LOGGING_LIBRARY to use a custom library.
# Alternatively set EVEREST_CUSTOM_LOGGING_INCLUDE_PATH to use a custom header file.
#
# Both options need to make a header file available on path "everest/logging.hpp"
#
# To use the normal library, don't set any of these options.
#
#############
if (EVEREST_CUSTOM_LOGGING_LIBRARY)
if(NOT TARGET ${EVEREST_CUSTOM_LOGGING_LIBRARY})
message(FATAL_ERROR "${EVEREST_CUSTOM_LOGGING_LIBRARY} is not a valid library")
else()
target_link_libraries(ocpp
PUBLIC
${EVEREST_CUSTOM_LOGGING_LIBRARY}
)
message(STATUS "Using custom logging library: ${EVEREST_CUSTOM_LOGGING_LIBRARY}")
endif()
elseif(EVEREST_CUSTOM_LOGGING_INCLUDE_PATH)
if (NOT EXISTS "${EVEREST_CUSTOM_LOGGING_INCLUDE_PATH}/everest/logging.hpp")
message(FATAL_ERROR "everest/logging.hpp not found in directory ${EVEREST_CUSTOM_LOGGING_INCLUDE_PATH}")
else()
target_include_directories(ocpp
PUBLIC
include
${EVEREST_CUSTOM_LOGGING_INCLUDE_PATH}
)
message(STATUS "Using the following logging header: ${EVEREST_CUSTOM_LOGGING_INCLUDE_PATH}/everest/logging.hpp")
endif()
else()
target_link_libraries(ocpp
PUBLIC
everest::log
)
message(STATUS "Using the default logging header")
endif()
#############
# End logging configuration
#############
target_link_libraries(ocpp
PUBLIC
everest::timer
everest::util
nlohmann_json_schema_validator
everest::evse_security
websockets_shared
everest::sqlite
PRIVATE
OpenSSL::SSL
OpenSSL::Crypto
SQLite::SQLite3
Threads::Threads
nlohmann_json::nlohmann_json
date::date-tz
)
if(LIBOCPP_USE_BOOST_FILESYSTEM)
find_package(Boost REQUIRED COMPONENTS filesystem)
target_link_libraries(ocpp
PRIVATE
Boost::filesystem
)
target_compile_definitions(ocpp
PRIVATE
LIBOCPP_USE_BOOST_FILESYSTEM
)
endif()
target_link_libraries(ocpp
PUBLIC
${ATOMIC_LIBS}
)
# FIXME (aw): right now nlohmann_json and boost::optional don't compile
# with gcc 10.x and C++11/14, so we need to publish the
# C++17 standard
target_compile_features(ocpp PUBLIC cxx_std_17)