forked from libcsp/libcsp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
164 lines (139 loc) · 5.35 KB
/
CMakeLists.txt
File metadata and controls
164 lines (139 loc) · 5.35 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
cmake_minimum_required(VERSION 3.20)
project(CSP VERSION 2.2)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(DEFAULT_BUILD_SHARED_LIBS ON)
endif()
option(BUILD_SHARED_LIBS "Build using shared libraries" ${DEFAULT_BUILD_SHARED_LIBS})
add_library(csp)
set_target_properties(csp PROPERTIES C_STANDARD 11)
set_target_properties(csp PROPERTIES C_EXTENSIONS ON)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "No build type selected, default to MinSizeRel")
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "Build Type" FORCE)
endif()
option(CSP_REPRODUCIBLE_BUILDS "Reproducible build" OFF)
option(CSP_HAVE_STDIO "OS provides C Standard I/O functions" ON)
option(CSP_ENABLE_CSP_PRINT "Enable csp_print() function" ON)
option(CSP_PRINT_STDIO "Use vprintf() for csp_print() function" ON)
set(CSP_QFIFO_LEN 15 CACHE STRING "Length of incoming queue for router task")
set(CSP_PORT_MAX_BIND 16 CACHE STRING "Maximum number of bindable ports")
set(CSP_CONN_RXQUEUE_LEN 16 CACHE STRING "Number of packets in connection queue")
set(CSP_CONN_MAX 8 CACHE STRING "Number of new connections on socket queue")
set(CSP_BUFFER_SIZE 256 CACHE STRING "Bytes in each packet buffer")
set(CSP_BUFFER_COUNT 15 CACHE STRING "Number of total packet buffers")
set(CSP_RDP_MAX_WINDOW 5 CACHE STRING "Max window size for RDP")
set(CSP_RTABLE_SIZE 10 CACHE STRING "Number of elements in routing table")
option(CSP_USE_RDP "Reliable Datagram Protocol" ON)
option(CSP_USE_HMAC "Hash-based message authentication code" ON)
option(CSP_USE_PROMISC "Promiscious mode" ON)
option(CSP_USE_RTABLE "Use routing table" OFF)
option(CSP_BUFFER_ZERO_CLEAR "Zero out the packet buffer upon allocation" ON)
option(CSP_ENABLE_PYTHON3_BINDINGS "Build Python3 binding" OFF)
option(CSP_BUILD_SAMPLES "Build samples and examples by default" OFF)
option(CSP_FIXUP_V1_ZMQ_LITTLE_ENDIAN "Use little-endian CSP ID for ZMQ with CSPv1" ON)
option(CSP_ENABLE_KISS_CRC "Enables the extra CRC in the KISS interface (legacy)" ON)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CSP_POSIX 1)
elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
set(CSP_POSIX 1)
message(WARNING "CYGWIN detected: experimental port and ethernet not implemented")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Generic")
string(TOLOWER "${CSP_SYSTEM_NAME}" csp_system_name)
if(csp_system_name STREQUAL "freertos")
set(CSP_FREERTOS 1)
elseif(csp_system_name STREQUAL "zephyr")
set(CSP_ZEPHYR 1)
else()
message(FATAL_ERROR "Not supported ${CSP_SYSTEM_NAME}")
endif()
endif()
if(CSP_POSIX AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
include(CheckIncludeFiles)
check_include_files(sys/socket.h HAVE_SYS_SOCKET_H)
check_include_files(arpa/inet.h HAVE_ARPA_INET_H)
find_package(Threads REQUIRED)
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_search_module(LIBYAML yaml-0.1)
if(${LIBYAML_FOUND})
message(STATUS "Found ${LIBYAML_LINK_LIBRARIES} ${LIBYAML_VERSION}")
set(CSP_HAVE_LIBYAML 1)
else()
message(NOTICE "No libyaml found")
endif()
pkg_search_module(LIBZMQ libzmq)
if(${LIBZMQ_FOUND})
message(STATUS "Found ${LIBZMQ_LINK_LIBRARIES} ${LIBZMQ_VERSION}")
set(CSP_HAVE_LIBZMQ 1)
else()
message(NOTICE "No libzmq found")
endif()
pkg_search_module(LIBSOCKETCAN libsocketcan)
if(${LIBSOCKETCAN_FOUND})
message(STATUS "Found ${LIBSOCKETCAN_LINK_LIBRARIES} ${LIBSOCKETCAN_VERSION}")
set(CSP_HAVE_LIBSOCKETCAN 1)
else()
message(NOTICE "No libsocketcan found")
endif()
pkg_search_module(CHECK check)
if(${CHECK_FOUND})
message(STATUS "Found ${CHECK_MODULE_NAME} ${CHECK_VERSION}")
set(CSP_HAVE_CHECK 1)
else()
message(NOTICE "No libcheck found")
endif()
else()
message(NOTICE "No pkg-config found")
endif()
endif()
file(REAL_PATH include csp_inc)
file(REAL_PATH src csp_inc_src)
list(APPEND csp_inc ${CMAKE_CURRENT_BINARY_DIR}/include)
target_include_directories(csp
PUBLIC ${csp_inc}
PRIVATE ${csp_inc_src}
)
add_library(csp_common INTERFACE)
if(CSP_POSIX)
target_compile_options(csp_common INTERFACE
-Wall
-Wcast-align
-Werror
-Wextra
-Wmissing-prototypes
-Wpedantic
-Wpointer-arith
-Wshadow
-Wwrite-strings
$<$<C_COMPILER_ID:Clang>:-Wno-gnu-zero-variadic-macro-arguments>)
endif()
target_link_libraries(csp PRIVATE csp_common)
if(NOT CSP_BUILD_SAMPLES)
set(CSP_SAMPLES_EXCLUDE "EXCLUDE_FROM_ALL")
endif()
add_subdirectory(src)
add_subdirectory(unittests)
if(NOT CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
add_subdirectory(examples)
add_subdirectory(samples)
endif()
if(${CSP_ENABLE_PYTHON3_BINDINGS})
find_package(Python3 COMPONENTS Development.Module)
if(Python3_Development.Module_FOUND)
Python3_add_library(libcsp_py3 MODULE WITH_SOABI src/bindings/python/pycsp.c)
add_compile_options(-Wno-missing-prototypes -Wno-unused-parameter)
target_include_directories(libcsp_py3 PUBLIC ${csp_inc})
target_link_libraries(libcsp_py3 PUBLIC csp)
else()
message(FATAL_ERROR "Python development module not found")
endif()
endif()
configure_file(csp_autoconfig.h.in include/csp/autoconfig.h)
if(NOT CSP_ZEPHYR)
install(TARGETS csp LIBRARY COMPONENT runtime)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/;${CMAKE_CURRENT_SOURCE_DIR}/include/;
TYPE INCLUDE
FILES_MATCHING PATTERN "*.h*"
)
endif()