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