forked from LiamBindle/MQTT-C
-
Notifications
You must be signed in to change notification settings - Fork 2
/
CMakeLists.txt
114 lines (94 loc) · 4.06 KB
/
CMakeLists.txt
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
cmake_minimum_required(VERSION 3.5)
project(MQTT-C VERSION 1.1.2 LANGUAGES C)
# MQTT-C build options
option(MQTT_C_OpenSSL_SUPPORT "Build MQTT-C with OpenSSL support?" OFF)
option(MQTT_C_MbedTLS_SUPPORT "Build MQTT-C with mbed TLS support?" OFF)
option(MQTT_C_BearSSL_SUPPORT "Build MQTT-C with Bear SSL support?" OFF)
option(MQTT_C_EXAMPLES "Build MQTT-C examples?" ON)
option(MQTT_C_TESTS "Build MQTT-C tests?" OFF)
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
# MQTT-C library
add_library(mqttc STATIC
src/mqtt_pal.c
src/mqtt.c
)
target_include_directories(mqttc PUBLIC include)
target_link_libraries(mqttc PUBLIC
$<$<C_COMPILER_ID:MSVC>:ws2_32>
)
if(MQTT_C_BearSSL_SUPPORT)
set(bearssl_root "$ENV{BEARSSL_ROOT}")
set(bearssl_include "${bearssl_root}/include")
find_file(bearinc NAMES bearssl.h PATHS "${bearssl_include}")
if ("${bearinc}" STREQUAL "bearinc-NOTFOUND")
MESSAGE(FATAL_ERROR "BEARSSL_ROOT does not contain include/bearssl.h")
endif()
set(bearssl_lib "${bearssl_root}/lib")
find_library(bearlib NAMES libbearssl.a bearssl.lib PATHS "{bearssl_lib}")
if("${bearlib}" STREQUAL "bearlib-NOTFOUND")
MESSAGE(FATAL_ERROR "BEARSSL_ROOT does not contain lib with bearssl library")
endif()
get_filename_component(bearinc "${bearinc}" DIRECTORY)
get_filename_component(bearlib2 "${bearlib}" DIRECTORY)
target_include_directories(mqttc PUBLIC bearsslinc)
target_link_libraries(mqttc INTERFACE "${bearlib}")
target_compile_definitions(mqttc PUBLIC MQTT_USE_BEARSSL)
endif()
# Configure with OpenSSL support
if(MQTT_C_OpenSSL_SUPPORT)
find_package(OpenSSL REQUIRED)
target_link_libraries(mqttc INTERFACE OpenSSL::SSL)
target_compile_definitions(mqttc PUBLIC MQTT_USE_BIO)
endif()
# Configure with mbed TLS support
if(MQTT_C_MbedTLS_SUPPORT)
find_package(MbedTLS REQUIRED)
target_include_directories(mqttc PUBLIC ${MBEDTLS_INCLUDE_DIRS})
target_link_libraries(mqttc INTERFACE ${MBEDTLS_LIBRARY})
target_compile_definitions(mqttc PUBLIC MQTT_USE_MBEDTLS)
endif()
# Build examples
if(MQTT_C_EXAMPLES)
find_package(Threads REQUIRED)
if(MQTT_C_OpenSSL_SUPPORT)
if(MSVC)
add_executable(bio_publisher examples/bio_publisher_win.c)
add_executable(openssl_publisher examples/openssl_publisher_win.c)
else()
add_executable(bio_publisher examples/bio_publisher.c)
add_executable(openssl_publisher examples/openssl_publisher.c)
endif()
target_link_libraries(bio_publisher Threads::Threads mqttc)
target_link_libraries(openssl_publisher Threads::Threads mqttc)
elseif(MQTT_C_MbedTLS_SUPPORT)
add_executable(mbedtls_publisher examples/mbedtls_publisher.c)
target_link_libraries(mbedtls_publisher Threads::Threads mqttc ${MBEDX509_LIBRARY} ${MBEDCRYPTO_LIBRARY})
elseif(MQTT_C_BearSSL_SUPPORT)
add_executable(bearssl_publisher examples/bearssl_publisher.c)
target_link_libraries(bearssl_publisher mqttc bearssl)
else()
add_executable(simple_publisher examples/simple_publisher.c)
target_link_libraries(simple_publisher Threads::Threads mqttc)
add_executable(simple_subscriber examples/simple_subscriber.c)
target_link_libraries(simple_subscriber Threads::Threads mqttc)
add_executable(reconnect_subscriber examples/reconnect_subscriber.c)
target_link_libraries(reconnect_subscriber Threads::Threads mqttc)
endif()
endif()
# Build tests
if(MQTT_C_TESTS)
find_path(CMOCKA_INCLUDE_DIR cmocka.h)
find_library(CMOCKA_LIBRARY cmocka)
if((NOT CMOCKA_INCLUDE_DIR) OR (NOT CMOCKA_LIBRARY))
message(FATAL_ERROR "Failed to find cmocka! Add cmocka's install prefix to CMAKE_PREFIX_PATH to resolve this error.")
endif()
add_executable(tests tests.c)
target_link_libraries(tests ${CMOCKA_LIBRARY} mqttc)
target_include_directories(tests PRIVATE ${CMOCKA_INCLUDE_DIR})
endif()
# Install includes and library
install(TARGETS mqttc
DESTINATION lib
)
install(DIRECTORY include/
DESTINATION include)