]> git.lizzy.rs Git - minetest.git/blob - src/CMakeLists.txt
updated minetest.conf.example and changed client_unload_unused_data_timeout default...
[minetest.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 else()
31         # Unix probably
32         if(BUILD_CLIENT)
33                 find_package(X11 REQUIRED)
34                 find_package(OpenGL REQUIRED)
35                 find_package(JPEG REQUIRED)
36                 find_package(BZip2 REQUIRED)
37                 find_package(PNG REQUIRED)
38                 if(APPLE)
39                         FIND_LIBRARY(CARBON_LIB Carbon)
40                         FIND_LIBRARY(COCOA_LIB Cocoa)
41                         FIND_LIBRARY(IOKIT_LIB IOKit)
42                         mark_as_advanced(
43                                 CARBON_LIB
44                                 COCOA_LIB
45                                 IOKIT_LIB
46                         )
47                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
48                 endif(APPLE)
49         endif(BUILD_CLIENT)
50         find_package(ZLIB REQUIRED)
51         set(PLATFORM_LIBS -lpthread)
52         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
53         # This way Xxf86vm is found on OpenBSD too
54         find_library(XXF86VM_LIBRARY Xxf86vm)
55         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
56 endif()
57
58 configure_file(
59         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
60         "${PROJECT_BINARY_DIR}/cmake_config.h"
61 )
62
63 set(common_SRCS
64         content_sao.cpp
65         mapgen.cpp
66         content_inventory.cpp
67         content_nodemeta.cpp
68         content_craft.cpp
69         content_mapblock.cpp
70         content_mapnode.cpp
71         auth.cpp
72         collision.cpp
73         nodemetadata.cpp
74         serverobject.cpp
75         noise.cpp
76         mineral.cpp
77         porting.cpp
78         materials.cpp
79         defaultsettings.cpp
80         mapnode.cpp
81         voxel.cpp
82         mapblockobject.cpp
83         inventory.cpp
84         debug.cpp
85         serialization.cpp
86         light.cpp
87         filesys.cpp
88         connection.cpp
89         environment.cpp
90         server.cpp
91         servercommand.cpp
92         socket.cpp
93         mapblock.cpp
94         mapsector.cpp
95         map.cpp
96         player.cpp
97         utility.cpp
98         test.cpp
99         sha1.cpp
100         base64.cpp
101 )
102
103 # Client sources
104 set(minetest_SRCS
105         ${common_SRCS}
106         content_cao.cpp
107         mapblock_mesh.cpp
108         farmesh.cpp
109         keycode.cpp
110         clouds.cpp
111         clientobject.cpp
112         guiMainMenu.cpp
113         guiMessageMenu.cpp
114         guiTextInputMenu.cpp
115         guiInventoryMenu.cpp
116         guiPauseMenu.cpp
117         guiPasswordChange.cpp
118         client.cpp
119         tile.cpp
120         game.cpp
121         main.cpp
122 )
123
124 # Server sources
125 set(minetestserver_SRCS
126         ${common_SRCS}
127         servermain.cpp
128 )
129
130 include_directories(
131         ${PROJECT_BINARY_DIR}
132         ${IRRLICHT_INCLUDE_DIR}
133         ${ZLIB_INCLUDE_DIR}
134         ${CMAKE_BUILD_TYPE}
135         ${PNG_INCLUDE_DIR}
136         "${PROJECT_SOURCE_DIR}/jthread"
137         "${PROJECT_SOURCE_DIR}/sqlite"
138 )
139
140 set(EXECUTABLE_OUTPUT_PATH ../bin)
141
142 if(BUILD_CLIENT)
143         add_executable(minetest ${minetest_SRCS})
144         target_link_libraries(
145                 minetest
146                 ${ZLIB_LIBRARIES}
147                 ${IRRLICHT_LIBRARY}
148                 ${OPENGL_LIBRARIES}
149                 ${JPEG_LIBRARIES}
150                 ${BZIP2_LIBRARIES}
151                 ${PNG_LIBRARIES}
152                 ${X11_LIBRARIES}
153                 ${PLATFORM_LIBS}
154                 ${CLIENT_PLATFORM_LIBS}
155                 jthread
156                 sqlite3
157         )
158 endif(BUILD_CLIENT)
159
160 if(BUILD_SERVER)
161         add_executable(minetestserver ${minetestserver_SRCS})
162         target_link_libraries(
163                 minetestserver
164                 ${ZLIB_LIBRARIES}
165                 ${PLATFORM_LIBS}
166                 jthread
167                 sqlite3
168         )
169 endif(BUILD_SERVER)
170
171 #
172 # Set some optimizations and tweaks
173 #
174
175 if(MSVC)
176         # Visual Studio
177
178         # EHa enables SEH exceptions (used for catching segfaults)
179         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")
180         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
181         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
182
183         # Debug build doesn't catch exceptions by itself
184         # Add some optimizations because otherwise it's VERY slow
185         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
186         
187         if(BUILD_SERVER)
188                 set_target_properties(minetestserver PROPERTIES
189                                 COMPILE_DEFINITIONS "SERVER")
190         endif(BUILD_SERVER)
191
192 else()
193         # Probably GCC
194         
195         if(WARN_ALL)
196                 set(RELEASE_WARNING_FLAGS "-Wall")
197         else()
198                 set(RELEASE_WARNING_FLAGS "")
199         endif()
200         
201         if(NOT APPLE)
202                 set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
203         endif()
204         
205         if(APPLE)
206                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
207                 set(ARCH i386)
208         endif()
209
210         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
211         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
212
213         if(USE_GPROF)
214                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
215         endif()
216         
217         if(BUILD_SERVER)
218                 set_target_properties(minetestserver PROPERTIES
219                                 COMPILE_DEFINITIONS "SERVER")
220         endif(BUILD_SERVER)
221
222 endif()
223
224 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
225 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
226
227 #
228 # Installation
229 #
230
231 # Example configuration file
232 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
233
234 if(BUILD_CLIENT)
235         install(TARGETS minetest DESTINATION ${BINDIR})
236
237         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
238
239         install(FILES ${images} DESTINATION ${DATADIR})
240
241         if(WIN32)
242                 if(DEFINED IRRLICHT_DLL)
243                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
244                 endif()
245                 if(DEFINED ZLIB_DLL)
246                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
247                 endif()
248         endif()
249 endif(BUILD_CLIENT)
250
251 if(BUILD_SERVER)
252         install(TARGETS minetestserver DESTINATION ${BINDIR})
253 endif(BUILD_SERVER)
254
255 # Subdirectories
256
257 add_subdirectory(jthread)
258 add_subdirectory(sqlite)
259
260 #end