]> git.lizzy.rs Git - dragonfireclient.git/blob - src/CMakeLists.txt
Uppercase DEFINED or cmake 2.8.4 complains
[dragonfireclient.git] / src / CMakeLists.txt
1 project(minetest-delta)
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 if(USE_GETTEXT)
9         find_package(GettextLib REQUIRED)
10         if (GETTEXT_FOUND)
11                 add_definitions( -DUSE_GETTEXT )
12                 message(STATUS "gettext include path: ${GETTEXT_INCLUDE_DIR}")
13                 message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
14                 if(WIN32)
15                         message(STATUS "gettext library: ${GETTEXT_LIBRARY}")
16                         message(STATUS "gettext dll: ${GETTEXT_DLL}")
17                         message(STATUS "gettext iconv dll: ${GETTEXT_ICONV_DLL}")
18                 endif()
19                 message(STATUS "GetText enabled")
20         else()
21                 message(ERROR "GetText enabled but not found, disabling")
22                 set(USE_GETTEXT FALSE)
23         endif(GETTEXT_FOUND)
24 else(USE_GETTEXT)
25         message(STATUS "GetText disabled")
26 endif(USE_GETTEXT)
27
28 if(NOT MSVC)
29         set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
30 endif()
31
32 # Use cmake_config.h
33 add_definitions ( -DUSE_CMAKE_CONFIG_H )
34
35 if(WIN32)
36         # Windows
37         if(MSVC) # MSVC Specifics
38                 # Surpress some useless warnings
39                 add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
40         else() # Probably MinGW = GCC
41                 set(PLATFORM_LIBS ws2_32.lib)
42         endif()
43         # Zlib stuff
44         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
45                         CACHE PATH "Zlib include directory")
46         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
47                         CACHE FILEPATH "Path to zlibwapi.lib")
48         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
49                         CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
50         set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2"
51                         CACHE PATH "irrlicht dir")
52 else()
53         # Unix probably
54         if(BUILD_CLIENT)
55                 find_package(X11 REQUIRED)
56                 find_package(OpenGL REQUIRED)
57                 find_package(JPEG REQUIRED)
58                 find_package(BZip2 REQUIRED)
59                 find_package(PNG REQUIRED)
60                 if(APPLE)
61                         FIND_LIBRARY(CARBON_LIB Carbon)
62                         FIND_LIBRARY(COCOA_LIB Cocoa)
63                         FIND_LIBRARY(IOKIT_LIB IOKit)
64                         mark_as_advanced(
65                                 CARBON_LIB
66                                 COCOA_LIB
67                                 IOKIT_LIB
68                         )
69                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
70                 endif(APPLE)
71         endif(BUILD_CLIENT)
72         find_package(ZLIB REQUIRED)
73         set(PLATFORM_LIBS -lpthread)
74         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
75         # This way Xxf86vm is found on OpenBSD too
76         find_library(XXF86VM_LIBRARY Xxf86vm)
77         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
78 endif()
79
80 find_package(Jthread REQUIRED)
81 find_package(Sqlite3 REQUIRED)
82
83 configure_file(
84         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
85         "${PROJECT_BINARY_DIR}/cmake_config.h"
86 )
87
88 set(common_SRCS
89         content_sao.cpp
90         mapgen.cpp
91         content_inventory.cpp
92         content_nodemeta.cpp
93         content_craft.cpp
94         content_mapblock.cpp
95         content_mapnode.cpp
96         auth.cpp
97         collision.cpp
98         nodemetadata.cpp
99         serverobject.cpp
100         noise.cpp
101         mineral.cpp
102         porting.cpp
103         materials.cpp
104         defaultsettings.cpp
105         mapnode.cpp
106         voxel.cpp
107         mapblockobject.cpp
108         inventory.cpp
109         debug.cpp
110         serialization.cpp
111         light.cpp
112         filesys.cpp
113         connection.cpp
114         environment.cpp
115         server.cpp
116         servercommand.cpp
117         socket.cpp
118         mapblock.cpp
119         mapsector.cpp
120         map.cpp
121         player.cpp
122         utility.cpp
123         test.cpp
124         sha1.cpp
125         base64.cpp
126 )
127
128 # Client sources
129 set(minetest_SRCS
130         ${common_SRCS}
131         content_cao.cpp
132         mapblock_mesh.cpp
133         farmesh.cpp
134         keycode.cpp
135         clouds.cpp
136         clientobject.cpp
137         guiMainMenu.cpp
138         guiKeyChangeMenu.cpp
139         guiMessageMenu.cpp
140         guiTextInputMenu.cpp
141         guiInventoryMenu.cpp
142         guiPauseMenu.cpp
143         guiPasswordChange.cpp
144         client.cpp
145         tile.cpp
146         game.cpp
147         main.cpp
148 )
149
150 # Server sources
151 set(minetestserver_SRCS
152         ${common_SRCS}
153         servermain.cpp
154 )
155
156 include_directories(
157         ${PROJECT_BINARY_DIR}
158         ${IRRLICHT_INCLUDE_DIR}
159         ${ZLIB_INCLUDE_DIR}
160         ${CMAKE_BUILD_TYPE}
161         ${PNG_INCLUDE_DIR}
162         ${GETTEXT_INCLUDE_DIR}
163         ${JTHREAD_INCLUDE_DIR}
164         ${SQLITE3_INCLUDE_DIR}
165 )
166
167 set(EXECUTABLE_OUTPUT_PATH ../bin)
168
169 if(BUILD_CLIENT)
170         add_executable(${PROJECT_NAME} ${minetest_SRCS})
171         target_link_libraries(
172                 ${PROJECT_NAME}
173                 ${ZLIB_LIBRARIES}
174                 ${IRRLICHT_LIBRARY}
175                 ${OPENGL_LIBRARIES}
176                 ${JPEG_LIBRARIES}
177                 ${BZIP2_LIBRARIES}
178                 ${PNG_LIBRARIES}
179                 ${X11_LIBRARIES}
180                 ${GETTEXT_LIBRARY}
181                 ${PLATFORM_LIBS}
182                 ${CLIENT_PLATFORM_LIBS}
183                 ${JTHREAD_LIBRARY}
184                 ${SQLITE3_LIBRARY}
185         )
186 endif(BUILD_CLIENT)
187
188 if(BUILD_SERVER)
189         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
190         target_link_libraries(
191                 ${PROJECT_NAME}server
192                 ${ZLIB_LIBRARIES}
193                 ${PLATFORM_LIBS}
194                 ${JTHREAD_LIBRARY}
195                 ${SQLITE3_LIBRARY}
196         )
197 endif(BUILD_SERVER)
198
199 #
200 # Set some optimizations and tweaks
201 #
202
203 if(MSVC)
204         # Visual Studio
205
206         # EHa enables SEH exceptions (used for catching segfaults)
207         set(CMAKE_CXX_FLAGS_RELEASE "/EHa /MD /O2 /Ob2 /Oi /Ot /Oy /GL /FD /MT /GS- /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
208         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
209         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
210
211         # Debug build doesn't catch exceptions by itself
212         # Add some optimizations because otherwise it's VERY slow
213         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
214         
215         if(BUILD_SERVER)
216                 set_target_properties(${PROJECT_NAME}server PROPERTIES
217                                 COMPILE_DEFINITIONS "SERVER")
218         endif(BUILD_SERVER)
219
220 else()
221         # Probably GCC
222         
223         if(WARN_ALL)
224                 set(RELEASE_WARNING_FLAGS "-Wall")
225         else()
226                 set(RELEASE_WARNING_FLAGS "")
227         endif()
228         
229         if(NOT APPLE)
230                 set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
231         endif()
232         
233         if(APPLE)
234                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
235                 set(ARCH i386)
236         endif()
237
238         if(WIN32 AND USE_GETTEXT)
239                 set(CMAKE_EXE_LINKER_FLAGS "-l${GETTEXT_LIBRARY}")
240         endif()
241
242         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
243         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
244
245         if(USE_GPROF)
246                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
247         endif()
248         
249         if(BUILD_SERVER)
250                 set_target_properties(${PROJECT_NAME}server PROPERTIES
251                                 COMPILE_DEFINITIONS "SERVER")
252         endif(BUILD_SERVER)
253
254 endif()
255
256 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
257 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
258
259 #
260 # Installation
261 #
262
263 # Example configuration file
264 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
265
266 if(BUILD_CLIENT)
267         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
268
269         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
270
271         install(FILES ${images} DESTINATION ${DATADIR})
272
273         install(FILES ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-delta.mo DESTINATION locale/de/LC_MESSAGES)
274  
275         if(WIN32)
276                 if(DEFINED IRRLICHT_DLL)
277                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
278                 endif()
279                 if(DEFINED ZLIB_DLL)
280                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
281                 endif()
282                 if(USE_GETTEXT)
283                         if(DEFINED GETTEXT_DLL)
284                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
285                         endif()
286                         if(DEFINED GETTEXT_ICONV_DLL)
287                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
288                         endif()
289                 endif(USE_GETTEXT)
290         endif()
291 endif(BUILD_CLIENT)
292
293 if(BUILD_SERVER)
294         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
295 endif(BUILD_SERVER)
296
297 if (USE_GETTEXT)
298         add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES COMMENT "mo-update [de]: Creating locale directory.")
299
300         add_custom_command(
301                         OUTPUT ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-delta.mo
302                         COMMAND ${GETTEXT_MSGFMT} -o ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-delta.mo ${CMAKE_SOURCE_DIR}/po/de/minetest-c55.po 
303                         DEPENDS 
304                                 ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES
305                                 ${CMAKE_SOURCE_DIR}/po/de/minetest-c55.po
306                         WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/po/de
307                         COMMENT "mo-update [de]: Creating mo file."
308                         )
309         add_custom_target(translation_de ALL COMMENT "mo update [de]" DEPENDS ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-delta.mo)
310 endif(USE_GETTEXT)
311
312 # Subdirectories
313
314 if (JTHREAD_FOUND)
315 else (JTHREAD_FOUND)
316         add_subdirectory(jthread)
317 endif (JTHREAD_FOUND)
318
319 if (SQLITE3_FOUND)
320 else (SQLITE3_FOUND)
321 add_subdirectory(sqlite)
322 endif (SQLITE3_FOUND)
323
324 #end