blob: 57dc61bfdc2ab4e547c4d9ec5e49a4fb629e8adc (
about) (
plain) (
blame)
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
|
#
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2019 Robby <robby@chatbelgie.be>
# Copyright (C) 2018-2019, 2021-2024 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013-2014 Attila Molnar <attilamolnar@hush.com>
# Copyright (C) 2013-2014 Adam <Adam@anope.org>
#
# This file is part of InspIRCd. InspIRCd is free software: you can
# redistribute it and/or modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
cmake_minimum_required(VERSION 3.20 FATAL_ERROR)
project("InspIRCd" CXX)
if(NOT WIN32)
message(FATAL_ERROR "CMake can only be used on Windows!")
endif()
set(CONFIG_DIR "conf" CACHE PATH "Configuration path")
set(MODULE_DIR "modules" CACHE PATH "Module path")
set(DATA_DIR "data" CACHE PATH "Data path")
set(LOG_DIR "logs" CACHE PATH "Log path")
# Find the root of the source directory
cmake_path(GET CMAKE_CURRENT_SOURCE_DIR PARENT_PATH INSPIRCD_BASE)
# Build with multiple processes
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
# Use our own NSIS template
set(CMAKE_MODULE_PATH "${INSPIRCD_BASE}/win")
# Require C++17
set(CMAKE-CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD "17")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Put modules in their own folder
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
add_compile_definitions(
"_WIN32_WINNT=0x0A00" # Set the minimum OS to Windows 10
"FD_SETSIZE=24000" # Increase the default socket limit to something reasonable
"NOMINMAX" # Avoid the Windows API breaking std::{min,max}
"NTDDI_VERSION=0x0A000005" # Set the minimum OS to Windows 10 1803 "Redstone 4"
"WIN32_LEAN_AND_MEAN" # Trim down the size of the included headers.
)
add_compile_options("/utf-8")
include_directories("${INSPIRCD_BASE}/win" "${INSPIRCD_BASE}/include")
include_directories(SYSTEM "${INSPIRCD_BASE}/vendor")
# win32memory is statically linked into every target later
add_library("win32memory" STATIC "${INSPIRCD_BASE}/win/win32memory.cpp")
# Grab version info from version.sh
file(STRINGS "${INSPIRCD_BASE}/src/version.sh" VERSIONSH)
string(REGEX REPLACE ".*InspIRCd-([0-9]*).*" "\\1" VERSION_MAJOR "${VERSIONSH}")
string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.([0-9]*).*" "\\1" VERSION_MINOR "${VERSIONSH}")
string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.[0-9]*\\.([0-9]*).*" "\\1" VERSION_PATCH "${VERSIONSH}")
string(REGEX REPLACE ".*InspIRCd-([^\"]+).*" "\\1" VERSION_FULL "${VERSIONSH}")
# Preconfigure files that the InspIRCd build needs.
configure_file("${INSPIRCD_BASE}/make/template/config.h" "${INSPIRCD_BASE}/include/config.h")
configure_file("${INSPIRCD_BASE}/win/inspircd.rc.cmake" "${INSPIRCD_BASE}/win/inspircd.rc")
file(GLOB INSPIRCD_HEADERS
"${INSPIRCD_BASE}/include/*.h"
"${INSPIRCD_BASE}/include/modules/*.h"
"${INSPIRCD_BASE}/include/utility/*.h"
)
list(SORT INSPIRCD_HEADERS)
file(GLOB INSPIRCD_SOURCES
"${INSPIRCD_BASE}/src/*.cpp"
"${INSPIRCD_BASE}/src/socketengines/select.cpp"
"${INSPIRCD_BASE}/win/win32wrapper.cpp"
"${INSPIRCD_BASE}/win/win32service.cpp"
)
list(SORT INSPIRCD_SOURCES)
# The main server executable
add_executable("inspircd" ${INSPIRCD_HEADERS} ${INSPIRCD_SOURCES} "${INSPIRCD_BASE}/win/inspircd.rc")
add_dependencies("inspircd" "win32memory")
target_compile_definitions("inspircd" PRIVATE "FMT_LIB_EXPORT" "INSPIRCD_CORE")
set_target_properties("inspircd" PROPERTIES "ENABLE_EXPORTS" ON)
target_link_libraries("inspircd" "win32memory")
install(TARGETS "inspircd" RUNTIME DESTINATION ".")
# Also build modules
add_subdirectory("modules")
# Package any DLLs from Conan
file(GLOB EXTRA_DLLS "${CMAKE_CURRENT_SOURCE_DIR}/*.dll")
install(FILES ${EXTRA_DLLS} DESTINATION ".")
# Install example configs
install(DIRECTORY "${INSPIRCD_BASE}/docs/conf/" DESTINATION "${CONFIG_DIR}/examples")
install(DIRECTORY "${INSPIRCD_BASE}/docs/sql/" DESTINATION "${CONFIG_DIR}/sql")
# Create an empty data and logs directory and install them
file(MAKE_DIRECTORY ${DATA_DIR})
install(DIRECTORY ${DATA_DIR} DESTINATION .)
file(MAKE_DIRECTORY ${LOG_DIR})
install(DIRECTORY ${LOG_DIR} DESTINATION .)
if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
# Place runtime libraries next to the InspIRCd binary
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ".")
include("InstallRequiredSystemLibraries")
set(CPACK_PACKAGE_NAME "InspIRCd -- Internet Relay Chat Daemon")
set(CPACK_PACKAGE_VENDOR "InspIRCd Team")
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
set(CPACK_PACKAGE_FILE_NAME "InspIRCd-${VERSION_FULL}")
set(CPACK_RESOURCE_FILE_LICENSE "${INSPIRCD_BASE}/docs/LICENSE.txt")
set(CPACK_GENERATOR "NSIS")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "InspIRCd")
# NSIS has a bug with full nix paths, so this must contain at least one backslash
set(CPACK_PACKAGE_ICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
set(CPACK_NSIS_MUI_ICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
set(CPACK_NSIS_MUI_UNIICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
set(CPACK_NSIS_INSTALLED_ICON_NAME "inspircd.exe")
set(CPACK_NSIS_URL_INFO_ABOUT "https://www.inspircd.org")
set(CPACK_NSIS_COMPRESSOR "/SOLID zlib")
include("CPack")
endif()
|