]> git.lizzy.rs Git - dragonfireclient.git/blob - src/CMakeLists.txt
Update installation in CMakeLists.txt
[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         content_abm.cpp
98         craftdef.cpp
99         nameidmapping.cpp
100         tooldef.cpp
101         nodedef.cpp
102         luaentity_common.cpp
103         scriptapi.cpp
104         script.cpp
105         log.cpp
106         content_sao.cpp
107         mapgen.cpp
108         content_inventory.cpp
109         content_nodemeta.cpp
110         content_craft.cpp
111         content_mapnode.cpp
112         auth.cpp
113         collision.cpp
114         nodemetadata.cpp
115         serverobject.cpp
116         noise.cpp
117         mineral.cpp
118         porting.cpp
119         materials.cpp
120         defaultsettings.cpp
121         mapnode.cpp
122         voxel.cpp
123         inventory.cpp
124         debug.cpp
125         serialization.cpp
126         light.cpp
127         filesys.cpp
128         connection.cpp
129         environment.cpp
130         server.cpp
131         servercommand.cpp
132         socket.cpp
133         mapblock.cpp
134         mapsector.cpp
135         map.cpp
136         player.cpp
137         utility.cpp
138         test.cpp
139         sha1.cpp
140         base64.cpp
141         ban.cpp
142 )
143
144 # This gives us the icon
145 if(WIN32)
146         if(MINGW)
147                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
148                         COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR}
149                         -i${CMAKE_CURRENT_SOURCE_DIR}/winresource.rc
150                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
151                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
152         else(MINGW) # Probably MSVC
153                 set(common_SRCS ${common_SRCS} winresource.rc)
154         endif(MINGW)
155 endif()
156
157 # Client sources
158 set(minetest_SRCS
159         ${common_SRCS}
160         MyBillboardSceneNode.cpp
161         content_mapblock.cpp
162         content_cao.cpp
163         mapblock_mesh.cpp
164         farmesh.cpp
165         keycode.cpp
166         camera.cpp
167         clouds.cpp
168         clientobject.cpp
169         guiMainMenu.cpp
170         guiKeyChangeMenu.cpp
171         guiMessageMenu.cpp
172         guiTextInputMenu.cpp
173         guiInventoryMenu.cpp
174         guiPauseMenu.cpp
175         guiPasswordChange.cpp
176         guiDeathScreen.cpp
177         client.cpp
178         tile.cpp
179         game.cpp
180         main.cpp
181 )
182
183 # Server sources
184 set(minetestserver_SRCS
185         ${common_SRCS}
186         servermain.cpp
187 )
188
189 include_directories(
190         ${PROJECT_BINARY_DIR}
191         ${IRRLICHT_INCLUDE_DIR}
192         ${ZLIB_INCLUDE_DIR}
193         ${CMAKE_BUILD_TYPE}
194         ${PNG_INCLUDE_DIR}
195         ${GETTEXT_INCLUDE_DIR}
196         ${JTHREAD_INCLUDE_DIR}
197         ${SQLITE3_INCLUDE_DIR}
198         ${LUA_INCLUDE_DIR}
199 )
200
201 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
202
203 if(BUILD_CLIENT)
204         add_executable(${PROJECT_NAME} ${minetest_SRCS})
205         target_link_libraries(
206                 ${PROJECT_NAME}
207                 ${ZLIB_LIBRARIES}
208                 ${IRRLICHT_LIBRARY}
209                 ${OPENGL_LIBRARIES}
210                 ${JPEG_LIBRARIES}
211                 ${BZIP2_LIBRARIES}
212                 ${PNG_LIBRARIES}
213                 ${X11_LIBRARIES}
214                 ${GETTEXT_LIBRARY}
215                 ${JTHREAD_LIBRARY}
216                 ${SQLITE3_LIBRARY}
217                 ${LUA_LIBRARY}
218                 ${PLATFORM_LIBS}
219                 ${CLIENT_PLATFORM_LIBS}
220         )
221 endif(BUILD_CLIENT)
222
223 if(BUILD_SERVER)
224         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
225         target_link_libraries(
226                 ${PROJECT_NAME}server
227                 ${ZLIB_LIBRARIES}
228                 ${JTHREAD_LIBRARY}
229                 ${SQLITE3_LIBRARY}
230                 ${LUA_LIBRARY}
231                 ${PLATFORM_LIBS}
232         )
233 endif(BUILD_SERVER)
234
235 #
236 # Set some optimizations and tweaks
237 #
238
239 include(CheckCXXCompilerFlag)
240
241 if(MSVC)
242         # Visual Studio
243
244         # EHa enables SEH exceptions (used for catching segfaults)
245         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")
246         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
247         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
248
249         # Debug build doesn't catch exceptions by itself
250         # Add some optimizations because otherwise it's VERY slow
251         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
252
253         # Flags for C files (sqlite)
254         # /MT = Link statically with standard library stuff
255         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
256         
257         if(BUILD_SERVER)
258                 set_target_properties(${PROJECT_NAME}server PROPERTIES
259                                 COMPILE_DEFINITIONS "SERVER")
260         endif(BUILD_SERVER)
261
262 else()
263         # Probably GCC
264         
265         if(WARN_ALL)
266                 set(RELEASE_WARNING_FLAGS "-Wall")
267         else()
268                 set(RELEASE_WARNING_FLAGS "")
269         endif()
270         
271         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
272                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
273                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
274                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
275                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
276         endif()
277         
278         if(APPLE)
279                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
280                 set(ARCH i386)
281         endif()
282
283         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
284         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
285
286         if(USE_GPROF)
287                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
288         endif()
289         
290         if(BUILD_SERVER)
291                 set_target_properties(${PROJECT_NAME}server PROPERTIES
292                                 COMPILE_DEFINITIONS "SERVER")
293         endif(BUILD_SERVER)
294
295 endif()
296
297 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
298 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
299
300 #
301 # Installation
302 #
303
304 # Example configuration file
305 # NOTE: Install is handled elsewhere
306 #install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
307
308 if(BUILD_CLIENT)
309         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
310
311         #file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/textures/*.png")
312         #install(FILES ${images} DESTINATION ${DATADIR}/textures)
313         install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../data" DESTINATION ${DATADIR})
314
315         if(USE_GETTEXT)
316                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
317                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
318                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
319                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
320                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
321         endif()
322
323         if(WIN32)
324                 if(DEFINED IRRLICHT_DLL)
325                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
326                 endif()
327                 if(DEFINED ZLIB_DLL)
328                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
329                 endif()
330                 if(USE_GETTEXT)
331                         if(DEFINED GETTEXT_DLL)
332                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
333                         endif()
334                         if(DEFINED GETTEXT_ICONV_DLL)
335                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
336                         endif()
337                 endif(USE_GETTEXT)
338         endif()
339 endif(BUILD_CLIENT)
340
341 if(BUILD_SERVER)
342         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
343 endif(BUILD_SERVER)
344
345 if (USE_GETTEXT)
346         set(MO_FILES)
347
348         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
349                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
350                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
351                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
352
353                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
354                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
355                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
356
357                 add_custom_command(
358                         OUTPUT ${MO_FILE_PATH}
359                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
360                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
361                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
362                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
363                         )
364
365                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
366         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
367
368         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
369 endif(USE_GETTEXT)
370
371 # Subdirectories
372
373 if (JTHREAD_FOUND)
374 else (JTHREAD_FOUND)
375         add_subdirectory(jthread)
376 endif (JTHREAD_FOUND)
377
378 if (SQLITE3_FOUND)
379 else (SQLITE3_FOUND)
380         add_subdirectory(sqlite)
381 endif (SQLITE3_FOUND)
382
383 if (LUA_FOUND)
384 else (LUA_FOUND)
385         add_subdirectory(lua)
386 endif (LUA_FOUND)
387
388 #end