-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
150 lines (115 loc) · 4.01 KB
/
Copy pathCMakeLists.txt
File metadata and controls
150 lines (115 loc) · 4.01 KB
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
cmake_minimum_required(VERSION 3.10)
project(DearChat VERSION 1.0.0 LANGUAGES CXX)
include(FetchContent)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CPP_COMPILE_OPTIONS -Werror -Wall -Wextra -Wno-deprecated -Wno-unused-parameter -pedantic)
### EXTERNAL LIBRARIES ###
FetchContent_Declare(
spdlog
GIT_REPOSITORY https://github.com/gabime/spdlog.git
GIT_TAG v1.14.1
)
FetchContent_MakeAvailable(spdlog)
FetchContent_Declare(
imgui
URL https://github.com/ocornut/imgui/archive/refs/tags/v1.91.1.tar.gz
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(imgui)
add_library(imgui STATIC
${imgui_SOURCE_DIR}/imgui.h
${imgui_SOURCE_DIR}/imgui_internal.h
${imgui_SOURCE_DIR}/imgui.cpp
${imgui_SOURCE_DIR}/imgui_demo.cpp
${imgui_SOURCE_DIR}/imgui_draw.cpp
${imgui_SOURCE_DIR}/imgui_tables.cpp
${imgui_SOURCE_DIR}/imgui_widgets.cpp
${imgui_SOURCE_DIR}/misc/cpp/imgui_stdlib.h
)
target_include_directories(imgui PUBLIC
${imgui_SOURCE_DIR}/
${imgui_SOURCE_DIR}/backends
${imgui_SOURCE_DIR}/misc/cpp
)
set(IMGUI_SRC
${imgui_SOURCE_DIR}/imgui.cpp
${imgui_SOURCE_DIR}/imgui_draw.cpp
${imgui_SOURCE_DIR}/imgui_tables.cpp
${imgui_SOURCE_DIR}/imgui_widgets.cpp
${imgui_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
)
# TODO: add fetchdeclare for libzmq and cppzmq
# https://chatgpt.com/share/1ed154ad-863d-4bc0-a315-21f066400477
## ZMQ (cppzmq) library
find_package(cppzmq)
## find packages for imgui
if (APPLE)
# install glfw3 via brew
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
find_library(COCOA_LIBRARY Cocoa)
find_library(IOKIT_LIBRARY IOKit)
find_library(COREVIDEO_LIBRARY CoreVideo)
include_directories(/usr/local/include /opt/local/include /opt/homebrew/include)
link_directories(/usr/local/lib /opt/homebrew/lib)
target_link_libraries(imgui PUBLIC ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
elseif (UNIX AND NOT APPLE)
# TODO: test build on linux machine
# no clue if this will work
find_package(OpenGL REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GLFW3 REQUIRED glfw3)
include_directories(${GLFW3_INCLUDE_DIRS})
link_directories(${GLFW3_LIBRARY_DIRS})
target_link_libraries(imgui PUBLIC ${GLFW3_LIBRARIES} ${OPENGL_LIBRARIES})
endif()
### HEADER ONLY LIBs ###
add_library(zpp_bits INTERFACE)
target_include_directories(zpp_bits INTERFACE src/lib/zpp_bits)
# library for the lib folder
add_library(lib INTERFACE)
target_include_directories(lib INTERFACE src/lib)
target_link_libraries(lib INTERFACE zpp_bits)
### LOCAL CODE FILES ###
## exchange
set(SERVER_SOURCE_FILES
src/server/server.cpp
)
add_library(server_lib STATIC ${SERVER_SOURCE_FILES})
target_include_directories(server_lib
PUBLIC
${PROJECT_SOURCE_DIR}/src/server
)
target_link_libraries(server_lib PUBLIC spdlog::spdlog cppzmq lib)
add_executable(server src/server/server.m.cpp)
target_link_libraries(server PRIVATE server_lib)
## client
set(CLIENT_SOURCE_FILES
src/client/client.cpp
)
add_library(client_lib STATIC ${CLIENT_SOURCE_FILES})
target_include_directories(client_lib
PUBLIC
${PROJECT_SOURCE_DIR}/src/client
)
# TODO: remove orderbook_lib from client as only need the order.h class
target_link_libraries(client_lib PUBLIC spdlog::spdlog cppzmq lib imgui glfw3 OpenGL::GL)
add_executable(client src/client/client.m.cpp ${IMGUI_SRC})
target_link_libraries(client PRIVATE client_lib)
## CLIENT GUI
if (APPLE OR UNIX)
set(CLIENT_GUI_SOURCE_FILES
src/client/client.cpp
)
add_library(client_gui_lib STATIC ${CLIENT_GUI_SOURCE_FILES})
target_include_directories(client_gui_lib
PUBLIC
${PROJECT_SOURCE_DIR}/src/client
)
target_link_libraries(client_gui_lib PUBLIC spdlog::spdlog client_lib)
add_executable(client_gui src/client/clientgui.m.cpp ${IMGUI_SRC})
target_link_libraries(client_gui PRIVATE client_gui_lib)
endif()