]> git.lizzy.rs Git - dragonfireclient.git/blob - src/CMakeLists.txt
3b3b326c454f9967ffef4a823507b737212616ea
[dragonfireclient.git] / src / CMakeLists.txt
1 project(minetest)
2 cmake_minimum_required( VERSION 2.6 )
3
4 if(RUN_IN_PLACE)
5         add_definitions ( -DRUN_IN_PLACE )
6 endif(RUN_IN_PLACE)
7
8 # user-visible option to enable/disable gettext usage
9 OPTION(ENABLE_GETTEXT "Use GetText for internationalization" ON)
10
11 # this is only set to 1 if gettext is enabled _and_ available
12 set(USE_GETTEXT 0)
13
14 find_package(GettextLib)
15
16 if(GETTEXT_FOUND AND ENABLE_GETTEXT)
17         message(STATUS "gettext include path: ${GETTEXT_INCLUDE_DIR}")
18         message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
19         if(WIN32)
20                 message(STATUS "gettext library: ${GETTEXT_LIBRARY}")
21                 message(STATUS "gettext dll: ${GETTEXT_DLL}")
22                 message(STATUS "gettext iconv dll: ${GETTEXT_ICONV_DLL}")
23         endif()
24         set(USE_GETTEXT 1)
25         message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
26 elseif(GETTEXT_FOUND AND NOT ENABLE_GETTEXT)
27         MESSAGE(STATUS "GetText found but disabled;")
28 else(GETTEXT_FOUND AND ENABLE_GETTEXT)
29         message(STATUS "GetText disabled")
30 endif(GETTEXT_FOUND AND ENABLE_GETTEXT)
31
32 if(NOT MSVC)
33         set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
34 endif()
35
36 # Use cmake_config.h
37 add_definitions ( -DUSE_CMAKE_CONFIG_H )
38
39 if(WIN32)
40         # Windows
41         if(MSVC) # MSVC Specifics
42                 # Surpress some useless warnings
43                 add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
44         else() # Probably MinGW = GCC
45                 set(PLATFORM_LIBS ws2_32.lib)
46         endif()
47         # Zlib stuff
48         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
49                         CACHE PATH "Zlib include directory")
50         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
51                         CACHE FILEPATH "Path to zlibwapi.lib")
52         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
53                         CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
54         set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2"
55                         CACHE PATH "irrlicht dir")
56 else()
57         # Unix probably
58         if(BUILD_CLIENT)
59                 find_package(X11 REQUIRED)
60                 find_package(OpenGL REQUIRED)
61                 find_package(JPEG REQUIRED)
62                 find_package(BZip2 REQUIRED)
63                 find_package(PNG REQUIRED)
64                 if(APPLE)
65                         FIND_LIBRARY(CARBON_LIB Carbon)
66                         FIND_LIBRARY(COCOA_LIB Cocoa)
67                         FIND_LIBRARY(IOKIT_LIB IOKit)
68                         mark_as_advanced(
69                                 CARBON_LIB
70                                 COCOA_LIB
71                                 IOKIT_LIB
72                         )
73                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
74                 endif(APPLE)
75         endif(BUILD_CLIENT)
76         find_package(ZLIB REQUIRED)
77         set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
78         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
79         # This way Xxf86vm is found on OpenBSD too
80         find_library(XXF86VM_LIBRARY Xxf86vm)
81         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
82 endif()
83
84 find_package(Jthread REQUIRED)
85 find_package(Sqlite3 REQUIRED)
86
87 # TODO: Create proper find script for Lua
88 set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
89 set(LUA_LIBRARY "lua")
90
91 configure_file(
92         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
93         "${PROJECT_BINARY_DIR}/cmake_config.h"
94 )
95
96 set(common_SRCS
97         inventorymanager.cpp
98         mods.cpp
99         serverremoteplayer.cpp
100         content_abm.cpp
101         craftdef.cpp
102         nameidmapping.cpp
103         tooldef.cpp
104         nodedef.cpp
105         craftitemdef.cpp
106         luaentity_common.cpp
107         scriptapi.cpp
108         script.cpp
109         log.cpp
110         content_sao.cpp
111         mapgen.cpp
112         content_nodemeta.cpp
113         content_mapnode.cpp
114         auth.cpp
115         collision.cpp
116         nodemetadata.cpp
117         serverobject.cpp
118         noise.cpp
119         mineral.cpp
120         porting.cpp
121         materials.cpp
122         defaultsettings.cpp
123         mapnode.cpp
124         voxel.cpp
125         inventory.cpp
126         debug.cpp
127         serialization.cpp
128         light.cpp
129         filesys.cpp
130         connection.cpp
131         environment.cpp
132         server.cpp
133         servercommand.cpp
134         socket.cpp
135         mapblock.cpp
136         mapsector.cpp
137         map.cpp
138         player.cpp
139         utility.cpp
140         test.cpp
141         sha1.cpp
142         base64.cpp
143         ban.cpp
144 )
145
146 # This gives us the icon
147 if(WIN32)
148         if(MINGW)
149                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
150                         COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR}
151                         -i${CMAKE_CURRENT_SOURCE_DIR}/winresource.rc
152                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
153                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
154         else(MINGW) # Probably MSVC
155                 set(common_SRCS ${common_SRCS} winresource.rc)
156         endif(MINGW)
157 endif()
158
159 # Client sources
160 set(minetest_SRCS
161         ${common_SRCS}
162         content_mapblock.cpp
163         content_cao.cpp
164         mesh.cpp
165         mapblock_mesh.cpp
166         farmesh.cpp
167         keycode.cpp
168         camera.cpp
169         clouds.cpp
170         clientobject.cpp
171         guiMainMenu.cpp
172         guiKeyChangeMenu.cpp
173         guiMessageMenu.cpp
174         guiTextInputMenu.cpp
175         guiInventoryMenu.cpp
176         guiPauseMenu.cpp
177         guiPasswordChange.cpp
178         guiDeathScreen.cpp
179         client.cpp
180         tile.cpp
181         game.cpp
182         main.cpp
183 )
184
185 # Server sources
186 set(minetestserver_SRCS
187         ${common_SRCS}
188         servermain.cpp
189 )
190
191 include_directories(
192         ${PROJECT_BINARY_DIR}
193         ${IRRLICHT_INCLUDE_DIR}
194         ${ZLIB_INCLUDE_DIR}
195         ${CMAKE_BUILD_TYPE}
196         ${PNG_INCLUDE_DIR}
197         ${GETTEXT_INCLUDE_DIR}
198         ${JTHREAD_INCLUDE_DIR}
199         ${SQLITE3_INCLUDE_DIR}
200         ${LUA_INCLUDE_DIR}
201 )
202
203 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
204
205 if(BUILD_CLIENT)
206         add_executable(${PROJECT_NAME} ${minetest_SRCS})
207         target_link_libraries(
208                 ${PROJECT_NAME}
209                 ${ZLIB_LIBRARIES}
210                 ${IRRLICHT_LIBRARY}
211                 ${OPENGL_LIBRARIES}
212                 ${JPEG_LIBRARIES}
213                 ${BZIP2_LIBRARIES}
214                 ${PNG_LIBRARIES}
215                 ${X11_LIBRARIES}
216                 ${GETTEXT_LIBRARY}
217                 ${JTHREAD_LIBRARY}
218                 ${SQLITE3_LIBRARY}
219                 ${LUA_LIBRARY}
220                 ${PLATFORM_LIBS}
221                 ${CLIENT_PLATFORM_LIBS}
222         )
223 endif(BUILD_CLIENT)
224
225 if(BUILD_SERVER)
226         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
227         target_link_libraries(
228                 ${PROJECT_NAME}server
229                 ${ZLIB_LIBRARIES}
230                 ${JTHREAD_LIBRARY}
231                 ${SQLITE3_LIBRARY}
232                 ${LUA_LIBRARY}
233                 ${PLATFORM_LIBS}
234         )
235 endif(BUILD_SERVER)
236
237 #
238 # Set some optimizations and tweaks
239 #
240
241 include(CheckCXXCompilerFlag)
242
243 if(MSVC)
244         # Visual Studio
245
246         # EHa enables SEH exceptions (used for catching segfaults)
247         set(CMAKE_CXX_FLAGS_RELEASE "/EHa /O2 /Ob2 /Oi /Ot /Oy /GL /FD /MT /GS- /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
248         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
249         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
250
251         # Debug build doesn't catch exceptions by itself
252         # Add some optimizations because otherwise it's VERY slow
253         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
254
255         # Flags for C files (sqlite)
256         # /MT = Link statically with standard library stuff
257         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
258         
259         if(BUILD_SERVER)
260                 set_target_properties(${PROJECT_NAME}server PROPERTIES
261                                 COMPILE_DEFINITIONS "SERVER")
262         endif(BUILD_SERVER)
263
264 else()
265         # Probably GCC
266         
267         if(WARN_ALL)
268                 set(RELEASE_WARNING_FLAGS "-Wall")
269         else()
270                 set(RELEASE_WARNING_FLAGS "")
271         endif()
272         
273         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
274                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
275                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
276                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
277                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
278         endif()
279         
280         if(APPLE)
281                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
282                 set(ARCH i386)
283         endif()
284
285         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
286         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
287
288         if(USE_GPROF)
289                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
290         endif()
291         
292         if(BUILD_SERVER)
293                 set_target_properties(${PROJECT_NAME}server PROPERTIES
294                                 COMPILE_DEFINITIONS "SERVER")
295         endif(BUILD_SERVER)
296
297 endif()
298
299 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
300 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
301
302 #
303 # Installation
304 #
305
306 # Example configuration file
307 # NOTE: Install is handled elsewhere
308 #install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
309
310 if(BUILD_CLIENT)
311         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
312
313         #file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/textures/*.png")
314         #install(FILES ${images} DESTINATION ${DATADIR}/textures)
315         #file(GLOB datasubstuff "${CMAKE_CURRENT_SOURCE_DIR}/../data/*")
316         #install(DIRECTORY "${datasubstuff}" DESTINATION ${DATADIR})
317         install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../data/" DESTINATION ${DATADIR})
318
319         if(USE_GETTEXT)
320                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
321                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
322                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
323                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
324                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
325         endif()
326
327         if(WIN32)
328                 if(DEFINED IRRLICHT_DLL)
329                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
330                 endif()
331                 if(DEFINED ZLIB_DLL)
332                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
333                 endif()
334                 if(USE_GETTEXT)
335                         if(DEFINED GETTEXT_DLL)
336                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
337                         endif()
338                         if(DEFINED GETTEXT_ICONV_DLL)
339                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
340                         endif()
341                 endif(USE_GETTEXT)
342         endif()
343 endif(BUILD_CLIENT)
344
345 if(BUILD_SERVER)
346         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
347 endif(BUILD_SERVER)
348
349 if (USE_GETTEXT)
350         set(MO_FILES)
351
352         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
353                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
354                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
355                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
356
357                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
358                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
359                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
360
361                 add_custom_command(
362                         OUTPUT ${MO_FILE_PATH}
363                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
364                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
365                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
366                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
367                         )
368
369                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
370         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
371
372         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
373 endif(USE_GETTEXT)
374
375 # Subdirectories
376
377 if (JTHREAD_FOUND)
378 else (JTHREAD_FOUND)
379         add_subdirectory(jthread)
380 endif (JTHREAD_FOUND)
381
382 if (SQLITE3_FOUND)
383 else (SQLITE3_FOUND)
384         add_subdirectory(sqlite)
385 endif (SQLITE3_FOUND)
386
387 if (LUA_FOUND)
388 else (LUA_FOUND)
389         add_subdirectory(lua)
390 endif (LUA_FOUND)
391
392 #end