summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: cf44f0a64722e5d2ee7e0f9f3d21ac0f2177ded0 (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
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
cmake_minimum_required(VERSION 3.16)

project(abaddon)

set(ABADDON_RESOURCE_DIR "/usr/share/abaddon" CACHE PATH "Fallback directory for resources on Linux")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")

option(USE_LIBHANDY "Enable features that require libhandy (default)" ON)
option(USE_KEYCHAIN "Store the token in the keychain (default)" ON)

find_package(nlohmann_json REQUIRED)
find_package(CURL)
find_package(ZLIB REQUIRED)
find_package(SQLite3 REQUIRED)
find_package(gtkmm REQUIRED)

set(USE_TLS TRUE)
set(USE_OPEN_SSL TRUE)
find_package(IXWebSocket QUIET)
if (NOT IXWebSocket_FOUND)
    message("ixwebsocket was not found and will be included as a submodule")
    add_subdirectory(subprojects/ixwebsocket)
    include_directories(IXWEBSOCKET_INCLUDE_DIRS)
endif ()

if (MINGW OR WIN32)
    link_libraries(ws2_32)
endif ()

if (WIN32)
    add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
    add_compile_definitions(NOMINMAX)
endif ()

include(TestBigEndian)
test_big_endian(IS_BIG_ENDIAN)
if (IS_BIG_ENDIAN)
    add_compile_definitions(ABADDON_IS_BIG_ENDIAN)
endif ()

configure_file(${PROJECT_SOURCE_DIR}/src/config.h.in ${PROJECT_BINARY_DIR}/config.h)

file(GLOB_RECURSE ABADDON_SOURCES
        "src/*.h"
        "src/*.hpp"
        "src/*.cpp"
        )

add_executable(abaddon ${ABADDON_SOURCES})
target_include_directories(abaddon PUBLIC ${PROJECT_SOURCE_DIR}/src)
target_include_directories(abaddon PUBLIC ${PROJECT_BINARY_DIR})
target_include_directories(abaddon PUBLIC ${GTKMM_INCLUDE_DIRS})
target_include_directories(abaddon PUBLIC ${ZLIB_INCLUDE_DIRS})
target_include_directories(abaddon PUBLIC ${SQLite3_INCLUDE_DIRS})
target_include_directories(abaddon PUBLIC ${NLOHMANN_JSON_INCLUDE_DIRS})

target_precompile_headers(abaddon PRIVATE <gtkmm.h> src/abaddon.hpp src/util.hpp)

if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR
(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_CXX_COMPILER_VERSION LESS 9))))
    target_link_libraries(abaddon stdc++fs)
endif ()

if (IXWebSocket_LIBRARIES)
    target_link_libraries(abaddon ${IXWebSocket_LIBRARIES})
    find_library(MBEDTLS_X509_LIBRARY mbedx509)
    find_library(MBEDTLS_TLS_LIBRARY mbedtls)
    find_library(MBEDTLS_CRYPTO_LIBRARY mbedcrypto)
    if (MBEDTLS_TLS_LIBRARY)
        target_link_libraries(abaddon ${MBEDTLS_TLS_LIBRARY})
    endif ()
    if (MBEDTLS_X509_LIBRARY)
        target_link_libraries(abaddon ${MBEDTLS_X509_LIBRARY})
    endif ()
    if (MBEDTLS_CRYPTO_LIBRARY)
        target_link_libraries(abaddon ${MBEDTLS_CRYPTO_LIBRARY})
    endif ()
else ()
    target_link_libraries(abaddon $<BUILD_INTERFACE:ixwebsocket>)
endif ()

find_package(Threads)
if (Threads_FOUND)
    target_link_libraries(abaddon Threads::Threads)
endif ()

find_package(Fontconfig QUIET)
if (Fontconfig_FOUND)
    target_link_libraries(abaddon Fontconfig::Fontconfig)
endif ()

target_link_libraries(abaddon ${SQLite3_LIBRARIES})
target_link_libraries(abaddon ${GTKMM_LIBRARIES})
target_link_libraries(abaddon ${CURL_LIBRARIES})
target_link_libraries(abaddon ${ZLIB_LIBRARY})
target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES})

if (USE_LIBHANDY)
    find_package(libhandy REQUIRED)
    target_include_directories(abaddon PUBLIC ${libhandy_INCLUDE_DIRS})
    target_link_libraries(abaddon ${libhandy_LIBRARIES})
    target_compile_definitions(abaddon PRIVATE WITH_LIBHANDY)
endif ()

if (USE_KEYCHAIN)
    find_package(keychain QUIET)
    if (NOT keychain_FOUND)
        message("keychain was not found and will be included as a submodule")
        add_subdirectory(subprojects/keychain)
        target_link_libraries(abaddon keychain)
        target_compile_definitions(abaddon PRIVATE WITH_KEYCHAIN)
    endif ()
endif ()