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