17 |
17 |
18 #use available modules, fallback to ours if not present (CMP0017 helps) |
18 #use available modules, fallback to ours if not present (CMP0017 helps) |
19 set(CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules" "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules") |
19 set(CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules" "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules") |
20 |
20 |
21 |
21 |
22 #usually this is set at release time |
22 #possible cmake configuration |
23 option(NOREVISION "Build Hedgewars without revision information [default: off]" OFF) |
|
24 |
|
25 #set other default values |
|
26 option(NOSERVER "Disable gameServer build [default: auto]" OFF) |
23 option(NOSERVER "Disable gameServer build [default: auto]" OFF) |
27 option(NOPNG "Disable screenshoot compression [default: auto]" OFF) |
24 option(NOPNG "Disable screenshoot compression [default: auto]" OFF) |
28 option(NOVIDEOREC "Disable video recording [default: auto]" OFF) |
25 option(NOVIDEOREC "Disable video recording [default: auto]" OFF) |
29 |
26 |
30 #set this to ON when 2.1.0 becomes more widespread (and only for linux) |
27 #set this to ON when 2.1.0 becomes more widespread (and only for linux) |
39 set(GHFLAGS "" CACHE STRING "Additional Haskell flags") |
36 set(GHFLAGS "" CACHE STRING "Additional Haskell flags") |
40 if(UNIX AND NOT APPLE) |
37 if(UNIX AND NOT APPLE) |
41 set(DATA_INSTALL_DIR "share/hedgewars" CACHE STRING "Resource folder path") |
38 set(DATA_INSTALL_DIR "share/hedgewars" CACHE STRING "Resource folder path") |
42 endif() |
39 endif() |
43 |
40 |
44 #detect Mercurial revision (if present) |
41 |
45 if(NOT NOREVISION) |
42 #detect Mercurial revision and init rev/hash information |
|
43 find_program(HGCOMMAND hg) |
|
44 if(HGCOMMAND AND (EXISTS ${CMAKE_SOURCE_DIR}/.hg)) |
|
45 execute_process(COMMAND ${HGCOMMAND} identify -in |
|
46 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
|
47 OUTPUT_VARIABLE internal_version |
|
48 ERROR_QUIET |
|
49 ) |
|
50 #check local repo status |
|
51 string(REGEX REPLACE "[^+]" "" HGCHANGED ${internal_version}) |
|
52 string(REGEX REPLACE "[0-9a-zA-Z]+(.*) ([0-9]+)(.*)" "\\2" revision_number ${internal_version}) |
|
53 string(REGEX REPLACE "([0-9a-zA-Z]+)(.*) [0-9]+(.*)" "\\1" hash_number ${internal_version}) |
|
54 |
|
55 if(HGCHANGED) |
|
56 message(${WARNING} "You have uncommitted changes in your repository!") |
|
57 endif() |
|
58 #let's assume that if you have hg you might be interested in debugging |
46 set(default_build_type "DEBUG") |
59 set(default_build_type "DEBUG") |
47 set(HW_DEV true) #becomes isDevBuild |
60 else() |
48 find_program(HGCOMMAND hg) |
|
49 if(HGCOMMAND AND (EXISTS ${CMAKE_SOURCE_DIR}/.hg)) |
|
50 execute_process(COMMAND ${HGCOMMAND} identify -in |
|
51 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
|
52 OUTPUT_VARIABLE internal_version |
|
53 ERROR_QUIET |
|
54 ) |
|
55 #check local repo status |
|
56 string(REGEX REPLACE "[^+]" "" HGCHANGED ${internal_version}) |
|
57 |
|
58 string(REGEX REPLACE "[0-9a-zA-Z]+(.*) ([0-9]+)(.*)" "\\2" revision_number ${internal_version}) |
|
59 string(REGEX REPLACE "([0-9a-zA-Z]+)(.*) [0-9]+(.*)" "\\1" hash_number ${internal_version}) |
|
60 |
|
61 message(STATUS "Building revision ${revision_number} from hash ${hash_number}") |
|
62 if(HGCHANGED) |
|
63 MESSAGE(${WARNING} "You have uncommitted changes in your repository!") |
|
64 endif() |
|
65 endif() |
|
66 else(NOT NOREVISION) |
|
67 set(default_build_type "RELEASE") |
61 set(default_build_type "RELEASE") |
68 set(HWDEV false) |
62 # TODO think of a better fallback when hg not found |
69 message(STATUS "Building distributable version") |
63 set(revision_number "0000") |
70 endif(NOT NOREVISION) |
64 set(hash_number "unknown") |
|
65 endif() |
71 |
66 |
72 |
67 |
73 #versioning |
68 #versioning |
74 set(CPACK_PACKAGE_VERSION_MAJOR 0) |
69 set(CPACK_PACKAGE_VERSION_MAJOR 0) |
75 set(CPACK_PACKAGE_VERSION_MINOR 9) |
70 set(CPACK_PACKAGE_VERSION_MINOR 9) |
76 set(CPACK_PACKAGE_VERSION_PATCH 19) |
71 set(CPACK_PACKAGE_VERSION_PATCH 19) |
77 set(HEDGEWARS_PROTO_VER 44) |
72 set(HEDGEWARS_PROTO_VER 44) |
78 set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") |
73 set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") |
79 |
74 |
80 |
75 message(STATUS "Building ${HEDGEWARS_VERSION}-r${revision_number} (${hash_number})") |
|
76 |
|
77 |
|
78 #where to build libs and bins |
81 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
79 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
82 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
80 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
83 |
81 |
|
82 #resource paths |
84 if(UNIX AND NOT APPLE) |
83 if(UNIX AND NOT APPLE) |
85 set(target_binary_install_dir "bin") |
84 set(target_binary_install_dir "bin") |
86 set(target_library_install_dir "lib") |
85 set(target_library_install_dir "lib") |
87 set(SHAREPATH "${DATA_INSTALL_DIR}/") |
86 set(SHAREPATH "${DATA_INSTALL_DIR}/") |
88 else() |
87 else() |
184 |
183 |
185 #when build type is not specified, assume Debug/Release according to build version information |
184 #when build type is not specified, assume Debug/Release according to build version information |
186 if (CMAKE_BUILD_TYPE) |
185 if (CMAKE_BUILD_TYPE) |
187 string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE) |
186 string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE) |
188 if ( NOT( (CMAKE_BUILD_TYPE MATCHES "RELEASE") OR (CMAKE_BUILD_TYPE MATCHES "DEBUG") ) ) |
187 if ( NOT( (CMAKE_BUILD_TYPE MATCHES "RELEASE") OR (CMAKE_BUILD_TYPE MATCHES "DEBUG") ) ) |
189 set (CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Choose the build type, options are: Debug Release." FORCE) |
188 set (CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Build type (Debug/Release)" FORCE) |
190 message (STATUS "Unknown build type, using default (${default_build_type})") |
189 message (STATUS "Unknown build type, using default (${default_build_type})") |
191 endif () |
190 endif () |
192 else (CMAKE_BUILD_TYPE) |
191 else (CMAKE_BUILD_TYPE) |
193 set (CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Choose the build type, options are: Debug Release." FORCE) |
192 set (CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Build type (Debug/Release)" FORCE) |
194 endif (CMAKE_BUILD_TYPE) |
193 endif (CMAKE_BUILD_TYPE) |
|
194 |
195 |
195 |
196 #set default flags values for all projects (unless MINIMAL_FLAGS is true) |
196 #set default flags values for all projects (unless MINIMAL_FLAGS is true) |
197 if(NOT ${MINIMAL_FLAGS}) |
197 if(NOT ${MINIMAL_FLAGS}) |
198 set(CMAKE_C_FLAGS "-pipe ${CMAKE_C_FLAGS}") |
198 set(CMAKE_C_FLAGS "-pipe ${CMAKE_C_FLAGS}") |
199 set(CMAKE_C_FLAGS_RELEASE "-w -Os -fomit-frame-pointer ${CMAKE_C_FLAGS_RELEASE}") |
199 set(CMAKE_C_FLAGS_RELEASE "-w -Os -fomit-frame-pointer ${CMAKE_C_FLAGS_RELEASE}") |
206 set(CMAKE_C_FLAGS_RELEASE "") |
206 set(CMAKE_C_FLAGS_RELEASE "") |
207 set(CMAKE_C_FLAGS_DEBUG "-Wall -DDEBUG") |
207 set(CMAKE_C_FLAGS_DEBUG "-Wall -DDEBUG") |
208 set(CMAKE_CXX_FLAGS_RELEASE "") |
208 set(CMAKE_CXX_FLAGS_RELEASE "") |
209 set(CMAKE_CXX_FLAGS_DEBUG "-Wall -DDEBUG") |
209 set(CMAKE_CXX_FLAGS_DEBUG "-Wall -DDEBUG") |
210 endif() |
210 endif() |
|
211 |
211 |
212 |
212 #parse additional parameters |
213 #parse additional parameters |
213 if(FPFLAGS OR GHFLAGS) |
214 if(FPFLAGS OR GHFLAGS) |
214 if(${allow_parse_args}) |
215 if(${allow_parse_args}) |
215 message(${WARNING} "FPFLAGS and GHFLAGS are available only when using CMake >= 2.8") |
216 message(${WARNING} "FPFLAGS and GHFLAGS are available only when using CMake >= 2.8") |
229 "-vewnq" # fpc output verbosity |
230 "-vewnq" # fpc output verbosity |
230 "-dDEBUGFILE" # macro for engine output |
231 "-dDEBUGFILE" # macro for engine output |
231 ) |
232 ) |
232 list(APPEND haskell_flags "-O2" ${ghflags_parsed}) |
233 list(APPEND haskell_flags "-O2" ${ghflags_parsed}) |
233 |
234 |
|
235 |
234 #get BUILD_TYPE and enable/disable optimisation |
236 #get BUILD_TYPE and enable/disable optimisation |
235 message(STATUS "Using ${CMAKE_BUILD_TYPE} configuration") |
237 message(STATUS "Using ${CMAKE_BUILD_TYPE} configuration") |
236 if(CMAKE_BUILD_TYPE MATCHES "DEBUG") |
238 if(CMAKE_BUILD_TYPE MATCHES "DEBUG") |
|
239 set(HW_DEV true) #becomes isDevBuild |
|
240 |
237 list(APPEND pascal_flags "-O-" # disable all optimisations |
241 list(APPEND pascal_flags "-O-" # disable all optimisations |
238 "-g" # enable debug symbols |
242 "-g" # enable debug symbols |
239 "-gl" # add line info to bt |
243 "-gl" # add line info to bt |
240 "-gv" # allow valgrind |
244 "-gv" # allow valgrind |
241 ) |
245 ) |
242 list(APPEND haskell_flags "-Wall" "-debug" "-dcore-lint" "-fno-warn-unused-do-bind") |
246 list(APPEND haskell_flags "-Wall" "-debug" "-dcore-lint" "-fno-warn-unused-do-bind") |
243 else() |
247 else() |
|
248 set(HW_DEV false) |
|
249 |
244 list(APPEND pascal_flags "-Os" # optimise for size |
250 list(APPEND pascal_flags "-Os" # optimise for size |
245 "-Xs" # strip binary |
251 "-Xs" # strip binary |
246 "-Si" # turn on inlining |
252 "-Si" # turn on inlining |
247 ) |
253 ) |
248 list(APPEND haskell_flags "-w" "-fno-warn-unused-do-bind") |
254 list(APPEND haskell_flags "-w" "-fno-warn-unused-do-bind") |
249 endif() |
255 endif() |
|
256 |
250 |
257 |
251 |
258 |
252 #server discovery |
259 #server discovery |
253 if(NOT NOSERVER) |
260 if(NOT NOSERVER) |
254 if(GHC) |
261 if(GHC) |