-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
132 lines (113 loc) · 4.1 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
# Minimum required version of CMake
cmake_minimum_required(VERSION 3.15)
# Project name and version
project(GekkoNet VERSION 1.0)
# Set the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# Option to build both shared and static libraries
option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
option(BUILD_DOCS "Build documentation" OFF)
if(MSVC)
# Visual Studio specific flags
if(BUILD_SHARED_LIBS)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
else()
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
endif()
else()
# GCC/Clang flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif()
# Option to exclude ASIO from the shared and static libraries
option(NO_ASIO_BUILD "Exclude ASIO from the build" OFF)
# Include directories for your project headers
include_directories(${PROJECT_SOURCE_DIR}/include)
# Include directories for third-party header-only libraries
include_directories(${PROJECT_SOURCE_DIR}/thirdparty)
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/asio)
# Manually list all your source files
set(SRC_FILES
${PROJECT_SOURCE_DIR}/src/gekkonet.cpp
${PROJECT_SOURCE_DIR}/src/backend.cpp
${PROJECT_SOURCE_DIR}/src/event.cpp
${PROJECT_SOURCE_DIR}/src/gekko.cpp
${PROJECT_SOURCE_DIR}/src/input.cpp
${PROJECT_SOURCE_DIR}/src/net.cpp
${PROJECT_SOURCE_DIR}/src/player.cpp
${PROJECT_SOURCE_DIR}/src/storage.cpp
${PROJECT_SOURCE_DIR}/src/sync.cpp
)
# Shared libraries
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out)
# Static libraries
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out)
# Create both static and shared library targets
add_library(GekkoNet ${SRC_FILES})
# Set the output names conditionally based on used options
set(TARGET_SUFFIX "")
if(NOT BUILD_SHARED_LIBS)
set(TARGET_SUFFIX "${TARGET_SUFFIX}_STATIC")
endif()
if(NO_ASIO_BUILD)
set(TARGET_SUFFIX "${TARGET_SUFFIX}_NO_ASIO")
endif()
# Set the output name with the conditional suffix
set_target_properties(GekkoNet PROPERTIES OUTPUT_NAME "GekkoNet${TARGET_SUFFIX}")
# Set properties for Windows DLL export macros (if building a DLL)
if(WIN32 AND BUILD_SHARED_LIBS)
target_compile_definitions(GekkoNet PRIVATE GEKKONET_DLL_EXPORT)
else()
target_compile_definitions(GekkoNet PRIVATE GEKKONET_STATIC)
endif()
if(NO_ASIO_BUILD)
target_compile_definitions(GekkoNet PRIVATE GEKKONET_NO_ASIO)
endif()
# Documentation configuration
if(BUILD_DOCS)
find_package(Doxygen
REQUIRED dot
OPTIONAL_COMPONENTS mscgen dia)
# Get all header files
file(GLOB_RECURSE HEADER_FILES
${PROJECT_SOURCE_DIR}/include/*.h
)
# Combine sources and headers for documentation
set(DOXYGEN_INPUT_FILES
${SRC_FILES}
${HEADER_FILES}
${PROJECT_SOURCE_DIR}/README.md
)
# Configure Doxygen settings
set(DOXYGEN_PROJECT_NAME "GekkoNet")
set(DOXYGEN_PROJECT_VERSION ${PROJECT_VERSION})
set(DOXYGEN_PROJECT_BRIEF "C/C++ Peer to Peer Game Networking SDK")
set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs)
set(DOXYGEN_GENERATE_HTML YES)
set(DOXYGEN_GENERATE_TREEVIEW YES)
set(DOXYGEN_EXTRACT_ALL YES)
set(DOXYGEN_EXTRACT_PRIVATE YES)
set(DOXYGEN_EXTRACT_STATIC YES)
set(DOXYGEN_RECURSIVE YES)
set(DOXYGEN_SOURCE_BROWSER YES)
set(DOXYGEN_GENERATE_LATEX NO)
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "README.md")
set(DOXYGEN_COLLABORATION_GRAPH YES)
set(DOXYGEN_CLASS_GRAPH YES)
set(DOXYGEN_CALL_GRAPH YES)
set(DOXYGEN_CALLER_GRAPH YES)
set(DOXYGEN_HIDE_UNDOC_RELATIONS NO)
# Add custom settings for networking library
set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
set(DOXYGEN_EXTRACT_LOCAL_CLASSES YES)
set(DOXYGEN_SHOW_INCLUDE_FILES YES)
set(DOXYGEN_GENERATE_TODOLIST YES)
set(DOXYGEN_WARNINGS YES)
set(DOXYGEN_WARN_IF_UNDOCUMENTED YES)
# Generate documentation
doxygen_add_docs(docs
${DOXYGEN_INPUT_FILES}
COMMENT "Generating API documentation with Doxygen"
)
endif()