1 cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
3 option(SKIP_RADIANT "don't build the gui, useful for map compile servers" OFF)
5 project(NetRadiant C CXX)
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)
12 #-----------------------------------------------------------------------
14 #-----------------------------------------------------------------------
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)
24 find_package(Git REQUIRED)
26 COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
27 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
28 OUTPUT_VARIABLE GIT_VERSION
29 OUTPUT_STRIP_TRAILING_WHITESPACE
31 set(RADIANT_VERSION_STRING "${NetRadiant_VERSION}n")
33 set(RADIANT_VERSION_STRING "${RADIANT_VERSION_STRING}-git-${GIT_VERSION}")
34 set(Q3MAP_VERSION "${Q3MAP_VERSION}-git-${GIT_VERSION}")
37 configure_file("${PROJECT_SOURCE_DIR}/include/version.cpp.in" "${PROJECT_BINARY_DIR}/version.cpp")
39 add_library(version "${PROJECT_BINARY_DIR}/version.cpp")
40 set_property(TARGET version PROPERTY POSITION_INDEPENDENT_CODE TRUE)
42 set(RADIANT_ABOUTMSG "Custom build" CACHE STRING "About message")
43 message(STATUS "Building ${PROJECT_NAME} ${RADIANT_VERSION_STRING} ${RADIANT_ABOUTMSG}")
45 #-----------------------------------------------------------------------
47 #-----------------------------------------------------------------------
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)
56 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++${CMAKE_CXX_STANDARD}")
58 message(SEND_ERROR "Requires C++${CMAKE_CXX_STANDARD} or better")
61 message(WARNING "Unrecognized compiler: ${CMAKE_CXX_COMPILER_ID}, make sure it supports C++${CMAKE_CXX_STANDARD}")
64 #-----------------------------------------------------------------------
66 #-----------------------------------------------------------------------
68 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
70 if (CMAKE_BUILD_TYPE MATCHES Debug)
71 add_definitions(-D_DEBUG=1)
75 -DGTK_DISABLE_SINGLE_INCLUDES
77 -DGDK_DISABLE_DEPRECATED
78 -DGTK_DISABLE_DEPRECATED
86 find_package(X11 REQUIRED)
87 include_directories(${X11_INCLUDE_DIR})
95 #-----------------------------------------------------------------------
97 #-----------------------------------------------------------------------
99 add_subdirectory(libs)
108 include/idatastream.h
111 include/ifilesystem.h
124 include/iscenegraph.h
129 include/itextstream.h
135 include/moduleobserver.h
136 include/modulesystem.h
139 include/preferencesystem.cpp
140 include/preferencesystem.h
144 include/stream_version.h
147 include/windowobserver.h
149 add_library(includes ${INCLUDELIST})
151 #-----------------------------------------------------------------------
153 #-----------------------------------------------------------------------
155 if (NOT SKIP_RADIANT)
156 add_subdirectory(contrib)
159 #-----------------------------------------------------------------------
161 #-----------------------------------------------------------------------
163 if (NOT SKIP_RADIANT)
164 add_subdirectory(plugins)
167 #-----------------------------------------------------------------------
169 #-----------------------------------------------------------------------
171 if (NOT SKIP_RADIANT)
172 add_subdirectory(radiant build)
175 if (CMAKE_EXECUTABLE_SUFFIX)
176 set(RADIANT_EXECUTABLE ${CMAKE_EXECUTABLE_SUFFIX})
180 OUTPUT_VARIABLE RADIANT_EXECUTABLE
181 OUTPUT_STRIP_TRAILING_WHITESPACE
185 if (NOT SKIP_RADIANT)
186 set_target_properties(radiant PROPERTIES
187 COMPILE_DEFINITIONS RADIANT_EXECUTABLE="${RADIANT_EXECUTABLE}"
191 #-----------------------------------------------------------------------
193 #-----------------------------------------------------------------------
195 add_subdirectory(tools)
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")
206 #-----------------------------------------------------------------------
208 #-----------------------------------------------------------------------
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"
216 add_custom_command(OUTPUT games
217 COMMAND make game_packs
218 DEPENDS download-gamepacks.sh install-gamepacks.sh install-gamepack.sh
220 if (DOWNLOAD_GAMEPACKS)
221 add_custom_target(game_packs_all ALL DEPENDS games)