-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
91 lines (81 loc) · 2.61 KB
/
Copy pathCMakeLists.txt
File metadata and controls
91 lines (81 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
cmake_minimum_required(VERSION 3.10)
# Version 2.0.0
project(iolinki VERSION 2.0.0 LANGUAGES C)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra")
# Code Coverage Support
option(ENABLE_COVERAGE "Enable code coverage instrumentation" OFF)
if(ENABLE_COVERAGE)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
endif()
endif()
# Include directories
include_directories(include)
add_library(iolinki STATIC
src/phy_generic.c
src/phy_virtual.c
src/crc.c
src/frame.c
src/dll.c
src/isdu.c
src/events.c
src/platform.c
src/params.c
src/data_storage.c
src/device_info.c
src/device.c
src/platform_stubs.c
)
# Platform Selection
set(IOLINK_PLATFORM "LINUX" CACHE STRING "Target platform: LINUX, BAREMETAL (Zephyr builds use module.yml)")
if(IOLINK_PLATFORM STREQUAL "LINUX")
target_sources(iolinki PRIVATE
src/platform/linux/time_utils.c
src/platform/linux/nvm_mock.c
)
message(STATUS "Building for Linux host")
elseif(IOLINK_PLATFORM STREQUAL "BAREMETAL")
target_sources(iolinki PRIVATE src/platform/baremetal/time_utils.c)
message(STATUS "Building for Bare Metal (Stub)")
endif()
# Note: Zephyr builds don't use this CMakeLists.txt directly for sources if integrated via module.yml
# Examples
add_subdirectory(examples/simple_device)
if(IOLINK_PLATFORM STREQUAL "LINUX")
add_subdirectory(examples/host_demo)
elseif(IOLINK_PLATFORM STREQUAL "BAREMETAL")
add_subdirectory(examples/bare_metal_app)
endif()
# Testing
option(BUILD_TESTING "Build unit tests" ON)
if(BUILD_TESTING)
enable_testing()
add_subdirectory(tests)
endif()
# Documentation
option(IOLINK_ENABLE_DOCS "Enable Doxygen documentation target" OFF)
if(IOLINK_ENABLE_DOCS)
find_package(Doxygen)
if(DOXYGEN_FOUND)
add_custom_target(doc
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM
)
else()
message(WARNING "Doxygen not found; documentation target disabled.")
endif()
endif()
# IODD Generation
find_package(Python3)
if(Python3_FOUND)
add_custom_target(iodd
COMMAND ${Python3_EXECUTABLE} tools/iodd_gen.py examples/simple_device/simple_device.json
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating IODD XML for simple_device"
VERBATIM
)
endif()