Skip to content

Commit d8dd951

Browse files
committed
Add ESP32-oriented embedded core build profile
1 parent df787df commit d8dd951

1 file changed

Lines changed: 100 additions & 0 deletions

File tree

‎embedded/CMakeLists.txt‎

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
cmake_minimum_required(VERSION 3.20)
2+
3+
project(ARIEC61850EmbeddedCore
4+
VERSION 0.1.0
5+
DESCRIPTION "MCU-oriented build profile for arstack61850 wire protocols"
6+
LANGUAGES CXX)
7+
8+
option(ARIEC61850_EMBEDDED_NO_RTTI "Disable C++ RTTI in the embedded profile" ON)
9+
option(ARIEC61850_EMBEDDED_NO_EXCEPTIONS "Disable C++ exceptions after legacy throw paths are removed" OFF)
10+
option(ARIEC61850_EMBEDDED_WARNINGS_AS_ERRORS "Treat embedded-profile warnings as errors" ON)
11+
12+
set(ARIEC61850_ROOT "${CMAKE_CURRENT_LIST_DIR}/..")
13+
14+
# Keep this source list deliberately small. It is the MCU portability boundary:
15+
# wire codecs and protocol state only, with no TCP host transport, live discovery,
16+
# PCAP, COMTRADE, SCL parsing, filesystem, JSON or CLI tooling.
17+
set(ARIEC61850_EMBEDDED_SOURCES
18+
${ARIEC61850_ROOT}/src/asn1/ber.cpp
19+
${ARIEC61850_ROOT}/src/ethernet/ethernet.cpp
20+
21+
${ARIEC61850_ROOT}/src/goose/retransmission_schedule.cpp
22+
${ARIEC61850_ROOT}/src/goose/pdu_codec.cpp
23+
${ARIEC61850_ROOT}/src/goose/frame_codec.cpp
24+
25+
${ARIEC61850_ROOT}/src/sampled_values/pdu_codec.cpp
26+
${ARIEC61850_ROOT}/src/sampled_values/frame_codec.cpp
27+
${ARIEC61850_ROOT}/src/sampled_values/quality.cpp
28+
${ARIEC61850_ROOT}/src/sampled_values/payload_inspector.cpp
29+
${ARIEC61850_ROOT}/src/sampled_values/sample_counter.cpp
30+
31+
${ARIEC61850_ROOT}/src/osi/tpkt.cpp
32+
${ARIEC61850_ROOT}/src/osi/cotp.cpp
33+
${ARIEC61850_ROOT}/src/osi/session.cpp
34+
${ARIEC61850_ROOT}/src/osi/presentation.cpp
35+
${ARIEC61850_ROOT}/src/acse/association.cpp
36+
37+
${ARIEC61850_ROOT}/src/mms/utc_time.cpp
38+
${ARIEC61850_ROOT}/src/mms/data_value.cpp
39+
${ARIEC61850_ROOT}/src/mms/data_codec.cpp
40+
${ARIEC61850_ROOT}/src/mms/pdu.cpp
41+
${ARIEC61850_ROOT}/src/mms/services.cpp)
42+
43+
add_library(ariec61850_embedded_core STATIC ${ARIEC61850_EMBEDDED_SOURCES})
44+
add_library(ARIEC61850::embedded_core ALIAS ariec61850_embedded_core)
45+
46+
target_compile_features(ariec61850_embedded_core PUBLIC cxx_std_20)
47+
target_include_directories(ariec61850_embedded_core PUBLIC ${ARIEC61850_ROOT}/include)
48+
target_compile_definitions(ariec61850_embedded_core PUBLIC
49+
ARIEC61850_EMBEDDED_PROFILE=1
50+
ARIEC61850_HOST_SERVICES=0)
51+
52+
function(ariec61850_apply_embedded_flags target)
53+
if(MSVC)
54+
target_compile_options(${target} PRIVATE /W4 /permissive-)
55+
if(ARIEC61850_EMBEDDED_NO_RTTI)
56+
target_compile_options(${target} PRIVATE /GR-)
57+
endif()
58+
if(ARIEC61850_EMBEDDED_NO_EXCEPTIONS)
59+
message(FATAL_ERROR
60+
"ARIEC61850_EMBEDDED_NO_EXCEPTIONS is not ready on MSVC yet. "
61+
"Legacy protocol error paths still use C++ exceptions.")
62+
endif()
63+
if(ARIEC61850_EMBEDDED_WARNINGS_AS_ERRORS)
64+
target_compile_options(${target} PRIVATE /WX)
65+
endif()
66+
else()
67+
target_compile_options(${target} PRIVATE
68+
-Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion)
69+
if(ARIEC61850_EMBEDDED_NO_RTTI)
70+
target_compile_options(${target} PRIVATE -fno-rtti)
71+
endif()
72+
if(ARIEC61850_EMBEDDED_NO_EXCEPTIONS)
73+
target_compile_options(${target} PRIVATE -fno-exceptions)
74+
endif()
75+
if(ARIEC61850_EMBEDDED_WARNINGS_AS_ERRORS)
76+
target_compile_options(${target} PRIVATE -Werror)
77+
endif()
78+
endif()
79+
endfunction()
80+
81+
ariec61850_apply_embedded_flags(ariec61850_embedded_core)
82+
83+
# Link every embedded source into one executable. This catches accidental
84+
# dependencies on host-only objects that a static-library-only build can hide.
85+
add_executable(ariec61850_embedded_link_smoke
86+
${CMAKE_CURRENT_LIST_DIR}/embedded_link_smoke.cpp
87+
${ARIEC61850_EMBEDDED_SOURCES})
88+
target_compile_features(ariec61850_embedded_link_smoke PRIVATE cxx_std_20)
89+
target_include_directories(ariec61850_embedded_link_smoke PRIVATE ${ARIEC61850_ROOT}/include)
90+
target_compile_definitions(ariec61850_embedded_link_smoke PRIVATE
91+
ARIEC61850_EMBEDDED_PROFILE=1
92+
ARIEC61850_HOST_SERVICES=0)
93+
ariec61850_apply_embedded_flags(ariec61850_embedded_link_smoke)
94+
95+
enable_testing()
96+
add_test(NAME ariec61850_embedded_link_smoke COMMAND ariec61850_embedded_link_smoke)
97+
98+
message(STATUS "arstack61850 embedded profile: host services excluded")
99+
message(STATUS "arstack61850 embedded profile: RTTI disabled=${ARIEC61850_EMBEDDED_NO_RTTI}")
100+
message(STATUS "arstack61850 embedded profile: exceptions disabled=${ARIEC61850_EMBEDDED_NO_EXCEPTIONS}")

0 commit comments

Comments
 (0)