]> git.xonotic.org Git - xonotic/netradiant.git/blob - CMakeLists.txt
Fix compile on CentOS 7
[xonotic/netradiant.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
2
3 option(SKIP_RADIANT "don't build the gui, useful for map compile servers" OFF)
4
5 project(NetRadiant C CXX)
6
7 # Enable Debug by default, can be changed with -DCMAKE_BUILD_TYPE=Release
8 if (NOT CMAKE_BUILD_TYPE)
9     set(CMAKE_BUILD_TYPE Debug)
10 endif ()
11
12 #-----------------------------------------------------------------------
13 # Version
14 #-----------------------------------------------------------------------
15
16 #CMake 3.0+ would allow this in project()
17 set(NetRadiant_VERSION_MAJOR 1)
18 set(NetRadiant_VERSION_MINOR 5)
19 set(NetRadiant_VERSION_PATCH 0)
20 set(NetRadiant_VERSION ${NetRadiant_VERSION_MAJOR}.${NetRadiant_VERSION_MINOR}.${NetRadiant_VERSION_PATCH})
21 set(Q3MAP_VERSION 2.5.17n)
22 set(Q3MAP_STREAM_VERSION 1)
23
24 find_package(Git REQUIRED)
25 execute_process(
26         COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
27         WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
28         OUTPUT_VARIABLE GIT_VERSION
29         OUTPUT_STRIP_TRAILING_WHITESPACE
30 )
31 set(RADIANT_VERSION_STRING "${NetRadiant_VERSION}n")
32 if (GIT_VERSION)
33     set(RADIANT_VERSION_STRING "${RADIANT_VERSION_STRING}-git-${GIT_VERSION}")
34     set(Q3MAP_VERSION "${Q3MAP_VERSION}-git-${GIT_VERSION}")
35 endif ()
36
37 configure_file("${PROJECT_SOURCE_DIR}/include/version.cpp.in" "${PROJECT_BINARY_DIR}/version.cpp")
38
39 add_library(version "${PROJECT_BINARY_DIR}/version.cpp")
40 set_property(TARGET version PROPERTY POSITION_INDEPENDENT_CODE TRUE)
41
42 set(RADIANT_ABOUTMSG "Custom build" CACHE STRING "About message")
43 message(STATUS "Building ${PROJECT_NAME} ${RADIANT_VERSION_STRING} ${RADIANT_ABOUTMSG}")
44
45 #-----------------------------------------------------------------------
46 # Language standard
47 #-----------------------------------------------------------------------
48
49 set(CMAKE_CXX_STANDARD 11)
50 set(CMAKE_CXX_STANDARD_REQUIRED ON)
51 # For some reason the above flags don't really work...
52 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCXX)
53     include(CheckCXXCompilerFlag)
54     check_cxx_compiler_flag(--std=c++${CMAKE_CXX_STANDARD} STD_CXX)
55     if (STD_CXX)
56         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++${CMAKE_CXX_STANDARD}")
57     else ()
58         message(SEND_ERROR "Requires C++${CMAKE_CXX_STANDARD} or better")
59     endif ()
60 else ()
61     message(WARNING "Unrecognized compiler: ${CMAKE_CXX_COMPILER_ID}, make sure it supports C++${CMAKE_CXX_STANDARD}")
62 endif ()
63
64 #-----------------------------------------------------------------------
65 # Defs
66 #-----------------------------------------------------------------------
67
68 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
69
70 if (CMAKE_BUILD_TYPE MATCHES Debug)
71     add_definitions(-D_DEBUG=1)
72 endif ()
73
74 add_definitions(
75         -DGTK_DISABLE_SINGLE_INCLUDES
76         -DGSEAL_ENABLE
77         -DGDK_DISABLE_DEPRECATED
78         -DGTK_DISABLE_DEPRECATED
79 )
80
81 if (NOT WIN32)
82     add_definitions(
83             -DPOSIX=1
84             -DXWINDOWS=1
85     )
86     find_package(X11 REQUIRED)
87     include_directories(${X11_INCLUDE_DIR})
88 else ()
89     add_definitions(
90             -DWIN32=1
91             -D_WIN32=1
92     )
93 endif ()
94
95 #-----------------------------------------------------------------------
96 # Libraries
97 #-----------------------------------------------------------------------
98
99 add_subdirectory(libs)
100
101 set(INCLUDELIST
102         include/aboutmsg.h
103         include/cullable.h
104         include/editable.h
105         include/iarchive.h
106         include/ibrush.h
107         include/icamera.h
108         include/idatastream.h
109         include/ieclass.h
110         include/ientity.h
111         include/ifilesystem.h
112         include/ifiletypes.h
113         include/ifilter.h
114         include/igl.h
115         include/iglrender.h
116         include/igtkgl.h
117         include/iimage.h
118         include/imap.h
119         include/imodel.h
120         include/ipatch.h
121         include/iplugin.h
122         include/ireference.h
123         include/irender.h
124         include/iscenegraph.h
125         include/iscriplib.h
126         include/iselection.h
127         include/ishaders.h
128         include/itexdef.h
129         include/itextstream.h
130         include/itextures.h
131         include/itoolbar.h
132         include/iundo.h
133         include/mapfile.h
134         include/modelskin.h
135         include/moduleobserver.h
136         include/modulesystem.h
137         include/nameable.h
138         include/namespace.h
139         include/preferencesystem.cpp
140         include/preferencesystem.h
141         include/qerplugin.h
142         include/renderable.h
143         include/selectable.h
144         include/stream_version.h
145         include/version.h
146         include/warnings.h
147         include/windowobserver.h
148         )
149 add_library(includes ${INCLUDELIST})
150
151 #-----------------------------------------------------------------------
152 # Plugins
153 #-----------------------------------------------------------------------
154
155 if (NOT SKIP_RADIANT)
156     add_subdirectory(contrib)
157 endif ()
158
159 #-----------------------------------------------------------------------
160 # Modules
161 #-----------------------------------------------------------------------
162
163 if (NOT SKIP_RADIANT)
164     add_subdirectory(plugins)
165 endif ()
166
167 #-----------------------------------------------------------------------
168 # Radiant
169 #-----------------------------------------------------------------------
170
171 if (NOT SKIP_RADIANT)
172     add_subdirectory(radiant build)
173 endif ()
174
175 if (CMAKE_EXECUTABLE_SUFFIX)
176     set(RADIANT_EXECUTABLE ${CMAKE_EXECUTABLE_SUFFIX})
177 else ()
178     execute_process(
179             COMMAND uname -m
180             OUTPUT_VARIABLE RADIANT_EXECUTABLE
181             OUTPUT_STRIP_TRAILING_WHITESPACE
182     )
183 endif ()
184
185 if (NOT SKIP_RADIANT)
186     set_target_properties(radiant PROPERTIES
187             COMPILE_DEFINITIONS RADIANT_EXECUTABLE="${RADIANT_EXECUTABLE}"
188             )
189 endif ()
190
191 #-----------------------------------------------------------------------
192 # Tools
193 #-----------------------------------------------------------------------
194
195 add_subdirectory(tools)
196
197 if (NOT (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR))
198     # Copy data files from sources to the build directory
199     message(STATUS "Copying data files")
200     file(GLOB DATA_FILES "${PROJECT_SOURCE_DIR}/setup/data/tools/*")
201     file(COPY ${DATA_FILES} DESTINATION "${PROJECT_BINARY_DIR}")
202     file(GLOB DATA_FILES "${PROJECT_SOURCE_DIR}/docs/*")
203     file(COPY ${DATA_FILES} DESTINATION "${PROJECT_BINARY_DIR}/docs")
204 endif ()
205
206 #-----------------------------------------------------------------------
207 # Game packs
208 #-----------------------------------------------------------------------
209
210 option(DOWNLOAD_GAMEPACKS "Download game packs" ON)
211 add_custom_target(game_packs
212         COMMAND ${CMAKE_COMMAND} -E make_directory games
213         COMMAND DOWNLOAD_GAMEPACKS=yes SOURCE_DIR="${PROJECT_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}/install-gamepacks.sh" "${PROJECT_BINARY_DIR}"
214         COMMENT "Downloading game packs"
215         )
216 add_custom_command(OUTPUT games
217         COMMAND make game_packs
218         DEPENDS download-gamepacks.sh install-gamepacks.sh install-gamepack.sh
219         )
220 if (DOWNLOAD_GAMEPACKS)
221     add_custom_target(game_packs_all ALL DEPENDS games)
222 endif ()