-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathCMakeLists.txt
123 lines (107 loc) · 5.61 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
115
116
117
118
119
120
121
122
123
#
# Copyright 2018 WolkAbout Technology s.r.o.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
cmake_minimum_required(VERSION 3.10)
project(WolkConnector-C C)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic \
-Wall \
-Wextra \
-Wstrict-prototypes \
-Wpointer-arith \
-Wmissing-declarations \
-Wno-switch-enum \
-Wno-bad-function-cast \
-Wnested-externs \
-Wunreachable-code \
-Wfloat-equal \
-Winline \
-Wundef \
-Wno-redundant-decls \
-Wold-style-definition \
-Wno-conversion \
-Wshadow \
-Wparentheses \
-Wsequence-point \
-Wno-declaration-after-statement \
-Wuninitialized \
-Wcast-align \
-Wshadow \
-Wcast-qual \
-Wstrict-prototypes \
-Wmissing-prototypes \
-Wconversion")
set(LIBRARY_NAME "WolkConnector-C")
file(GLOB_RECURSE HEADER_FILES "sources/*.h")
file(GLOB_RECURSE SOURCE_FILES "sources/*.c")
include_directories("examples")
file(GLOB_RECURSE SIMPLE_HEADER_FILES "examples/simple/*.h")
file(GLOB_RECURSE SIMPLE_SOURCE_FILES "examples/simple/*.c")
file(GLOB_RECURSE PULL_HEADER_FILES "examples/pull/*.h")
file(GLOB_RECURSE PULL_SOURCE_FILES "examples/pull/*.c")
file(GLOB_RECURSE REGISTER_FEED_AND_ATTRIBUTE_HEADER_FILES "examples/register_feed_and_attribute/*.h")
file(GLOB_RECURSE REGISTER_FEED_AND_ATTRIBUTE_SOURCE_FILES "examples/register_feed_and_attribute/*.c")
file(GLOB_RECURSE FULL_EXAMPLE_HEADER_FILES "examples/full_feature_set/*.h")
file(GLOB_RECURSE FULL_EXAMPLE_SOURCE_FILES "examples/full_feature_set/*.c")
file(GLOB_RECURSE TESTS_SOURCE_FILES "tests/test/*.c")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/lib")
link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
#Dependencies
add_subdirectory(dependencies)
add_library(${LIBRARY_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
target_include_directories(${LIBRARY_NAME} PUBLIC sources)
target_include_directories(${LIBRARY_NAME} PUBLIC dependencies/pahomqttembeddedc/MQTTPacket/src)
target_link_libraries(${LIBRARY_NAME} paho-embed-mqtt3c ssl crypto)
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,./")
add_dependencies(${LIBRARY_NAME} pahomqttembeddedc)
# Format code
add_custom_target(format ALL
COMMAND "clang-format" -i -sort-includes -style=file
${HEADER_FILES} ${SOURCE_FILES}
${FULL_EXAMPLE_HEADER_FILES} ${FULL_EXAMPLE_SOURCE_FILES}
${PULL_HEADER_FILES} ${PULL_SOURCE_FILES}
${REGISTER_FEED_AND_ATTRIBUTE_HEADER_FILES} ${REGISTER_FEED_AND_ATTRIBUTE_SOURCE_FILES}
${SIMPLE_HEADER_FILES} ${SIMPLE_SOURCE_FILES}
${TESTS_SOURCE_FILES}
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
COMMENT "[Formatting source code]"
VERBATIM)
# Run Unit tests
set(TEST_FILES "${CMAKE_CURRENT_LIST_DIR}/tests")
add_custom_target(tests
WORKING_DIRECTORY "${TEST_FILES}"
DEPENDS pahomqttembeddedc
COMMAND ceedling clean
COMMAND ceedling test:all
COMMENT "[Run Unit tests]"
VERBATIM)
file(GLOB_RECURSE PAHO_MQTT_HEADER_FILES "dependencies/pahomqttembeddedc/MQTTPacket/src/*.h")
#install library at /usr/lib
install(DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} DESTINATION /usr
FILES_MATCHING
PATTERN "*so*")
#install headers at /usr/include
install(FILES ${PAHO_MQTT_HEADER_FILES} DESTINATION /usr/include)
install(FILES ${HEADER_FILES} DESTINATION /usr/include)
install(CODE "MESSAGE(\"Installed WolkConnector-C\")")
# Examples
OPTION(BUILD_EXAMPLES "Build the library examples" ON)
if (${BUILD_EXAMPLES})
add_subdirectory(examples/simple)
add_subdirectory(examples/pull)
add_subdirectory(examples/register_feed_and_attribute)
add_subdirectory(examples/full_feature_set)
endif()