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