-
Notifications
You must be signed in to change notification settings - Fork 3
/
CMakeLists.txt
161 lines (126 loc) · 4.94 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
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
cmake_minimum_required(VERSION 3.13.0 FATAL_ERROR)
set(APEX_VERSION_MAJOR 1)
set(APEX_VERSION_MINOR 0)
set(APEX_VERSION "${APEX_VERSION_MAJOR}.${APEX_VERSION_MINOR}")
project(apex VERSION ${APEX_VERSION})
# Version number
# Include extra cmake modules
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake")
set (CMAKE_CXX_STANDARD 20)
##
## Platform based options defaults
##
if (CMAKE_HOST_UNIX)
set(DEFAULT_BUILD_SHARED_LIBS "ON")
set(DEFAULT_BUILD_UTILS "ON")
else ()
set(DEFAULT_BUILD_SHARED_LIBS "OFF")
set(DEFAULT_BUILD_UTILS "OFF")
endif ()
##
## Build options
##
option(BUILD_SHARED_LIBS "Use shared libraries" ${DEFAULT_BUILD_SHARED_LIBS})
option(BUILD_STATIC_LIBS "Use static libraries" ON)
option(BUILD_EXAMPLES "Build example apps" ON)
option(BUILD_UTILS "Build utility apps" ${DEFAULT_BUILD_UTILS})
option(BUILD_TESTS "Build test apps" OFF)
set(LIBUV_DIR "" CACHE STRING "libuv installation directory")
include(GNUInstallDirs)
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH "Installation directory for executables")
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Installation directory for libraries")
set(INSTALL_INC_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH "Installation directory for headers")
set(INSTALL_CFG_DIR "${CMAKE_INSTALL_PREFIX}/config" CACHE PATH "Installation directory for config")
set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
# Allow settin of RPATH for install
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
##
## Platform checks, and generate config.h
##
include(PlatformCheck)
include(CheckLibraryExists)
##
## Compiler settings
##
# Only enable warning flags for Linux, since there are too many warning
# generated by Visual Studio
if (CMAKE_HOST_UNIX)
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-Wall temp)
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Wextra -pthread -g3 -O0")
set(CMAKE_CXX_FLAGS_RELEASE "-Wall -Wextra -pthread -g -O3")
# if(temp)
# #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wfatal-errors -pthread -g3 -O0")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wfatal-errors -pthread")
# endif()
endif ()
# Find dependencies
find_package(OpenSSL REQUIRED)
find_package(ZLIB REQUIRED)
##
## Try to find libuv
##
find_package(Libuv REQUIRED)
set(HAVE_LIBUV ON)
##
## Try to find google protobuf3
##
find_package(LibProtobuf3 REQUIRED)
set(HAVE_LIBPROTOBUF3 ON)
##
## Try to find libcurl
##
find_package(Libcurl REQUIRED)
set(HAVE_LIBCURL ON)
message(STATUS "OpenSSL_INCLUDE_DIR: " ${OPENSSL_INCLUDE_DIR})
message(STATUS "OpenSSL_LIBRARIES: " ${OPENSSL_LIBRARIES})
message(STATUS "ZLIB_INCLUDE_DIRS: " ${ZLIB_INCLUDE_DIRS})
message(STATUS "ZLIB_LIBRARIES: " ${ZLIB_LIBRARIES})
message(STATUS "LIBUV_INCLUDE_DIRS: " ${LIBUV_INCLUDE_DIRS})
message(STATUS "LIBUV_LIBRARIES: " ${LIBUV_LIBRARIES})
message(STATUS "LIBCURL_INCLUDE_DIR: " ${LIBCURL_INCLUDE_DIRS})
message(STATUS "LIBCURL_LIBRARY: " ${LIBCURL_LIBRARIES})
message(STATUS "LIBPROTOBUF3_INCLUDE_DIR: " ${LIBPROTOBUF3_INCLUDE_DIRS})
message(STATUS "LIBPROTOBUF3_LIBRARY: " ${LIBPROTOBUF3_LIBRARIES})
# configure a header file to pass some of the CMake settings
# to the source code
configure_file(
"${PROJECT_SOURCE_DIR}/cmake/config.h.incmake"
"${PROJECT_BINARY_DIR}/config.h"
)
# check websocketpp is available in the source tree
set(websocketpp "${PROJECT_SOURCE_DIR}/3rdparty/websocketpp/websocketpp/message_buffer/message.hpp")
message(STATUS "checking for ${websocketpp}")
if (NOT EXISTS "${websocketpp}")
message(FATAL_ERROR "websocketpp header not found! Check that websocketpp is unzipped under 3rdparty/")
endif ()
##
## Setup RPATH
##
# use, i.e. don't skip the full RPATH for the build tree
set(CMAKE_SKIP_BUILD_RPATH FALSE)
# when building, don't use the install RPATH already
# (but later on when installing)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# add the binary tree to the search path for include files
# so that we will find config.h
include_directories("${PROJECT_BINARY_DIR}")
include_directories("${PROJECT_SOURCE_DIR}/src")
include_directories("${PROJECT_SOURCE_DIR}/3rdparty/websocketpp")
include_directories("${PROJECT_SOURCE_DIR}/3rdparty")
# TODO: bring in curl correctly
#include_directories("/var/tmp/opt/curl-7.75.0/include")
# add external dependencies after project includes
include_directories(${OPENSSL_INCLUDE_DIR})
# include sub directories
add_subdirectory(src/apex-gx)
add_subdirectory(src/tick-collector)
add_subdirectory(src/apex)
add_subdirectory(src/examples)
add_subdirectory(src/tests)
add_subdirectory(src/tools)
#include(cmake/MakeDebPackages.cmake)