aboutsummaryrefslogtreecommitdiff
path: root/src/CMakeLists.txt
blob: 2b889ca6690a38110f7dc556fc33365df92fc1a9 (plain)
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
ADD_SUBDIRECTORY(lib)

ADD_LIBRARY(mqtt STATIC
    client.c
    deserialize.c
    misc.c
    packet.c
    serialize.c
    socket.c
    socketstream.c
    stream.c
    stream_mqtt.c
    $<TARGET_OBJECTS:bstrlib>
)

IF(MSVC)
ELSEIF(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES Clang))
    TARGET_COMPILE_OPTIONS(mqtt PRIVATE -Wall -Wextra $<$<CONFIG:Debug>:-O0>)
ENDIF()

SET(MQTT_LOG_LEVEL "" CACHE STRING
    "(DEBUG|INFO|WARNING|ERROR) or leave empty for no logging")

IF(MQTT_LOG_LEVEL)
    TARGET_COMPILE_DEFINITIONS(mqtt PRIVATE
        $<$<CONFIG:Debug>:LOG_LEVEL=LOG_LEVEL_${MQTT_LOG_LEVEL}>)
ENDIF()

OPTION(MQTT_STREAM_HEXDUMP_READ "Hexdump all read data to stdout" OFF)
OPTION(MQTT_STREAM_HEXDUMP_WRITE "Hexdump all written data to stdout" OFF)

IF(MQTT_STREAM_HEXDUMP_READ)
    TARGET_COMPILE_DEFINITIONS(mqtt PRIVATE STREAM_HEXDUMP_READ)
ENDIF()

IF(MQTT_STREAM_HEXDUMP_WRITE)
    TARGET_COMPILE_DEFINITIONS(mqtt PRIVATE STREAM_HEXDUMP_WRITE)
ENDIF()

TARGET_INCLUDE_DIRECTORIES(mqtt
    INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib
)

OPTION(MQTT_AMALGAMATE "Create an amalgamation of all the sources" OFF)
IF(MQTT_AMALGAMATE)
    SET(AMALGAMATION_DIR ${PROJECT_SOURCE_DIR}/amalgamation CACHE PATH "Where to output the amalgamation")
    SET(AMALGAMATION_TOOL ${PROJECT_SOURCE_DIR}/tools/amalgamate.py)
    FIND_PROGRAM(PYTHON python)
    ADD_CUSTOM_COMMAND(OUTPUT ${AMALGAMATION_DIR}/mqtt.c
        COMMAND ${CMAKE_COMMAND} -E make_directory ${AMALGAMATION_DIR}
        COMMAND ${PYTHON} ${AMALGAMATION_TOOL} ${AMALGAMATION_DIR}/mqtt.c
        COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mqtt.h ${AMALGAMATION_DIR}
        DEPENDS mqtt
    )
    ADD_CUSTOM_TARGET(amalgamate DEPENDS ${AMALGAMATION_DIR}/mqtt.c)
ENDIF()