+ volumetric clouds (thanks teddydestodes)
[oweals/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         guiKeyChangeMenu.cpp
114         guiMessageMenu.cpp
115         guiTextInputMenu.cpp
116         guiInventoryMenu.cpp
117         guiPauseMenu.cpp
118         guiPasswordChange.cpp
119         client.cpp
120         tile.cpp
121         game.cpp
122         main.cpp
123 )
124
125 # Server sources
126 set(minetestserver_SRCS
127         ${common_SRCS}
128         servermain.cpp
129 )
130
131 include_directories(
132         ${PROJECT_BINARY_DIR}
133         ${IRRLICHT_INCLUDE_DIR}
134         ${ZLIB_INCLUDE_DIR}
135         ${CMAKE_BUILD_TYPE}
136         ${PNG_INCLUDE_DIR}
137         "${PROJECT_SOURCE_DIR}/jthread"
138         "${PROJECT_SOURCE_DIR}/sqlite"
139 )
140
141 set(EXECUTABLE_OUTPUT_PATH ../bin)
142
143 if(BUILD_CLIENT)
144         add_executable(minetest ${minetest_SRCS})
145         target_link_libraries(
146                 minetest
147                 ${ZLIB_LIBRARIES}
148                 ${IRRLICHT_LIBRARY}
149                 ${OPENGL_LIBRARIES}
150                 ${JPEG_LIBRARIES}
151                 ${BZIP2_LIBRARIES}
152                 ${PNG_LIBRARIES}
153                 ${X11_LIBRARIES}
154                 ${PLATFORM_LIBS}
155                 ${CLIENT_PLATFORM_LIBS}
156                 jthread
157                 sqlite3
158         )
159 endif(BUILD_CLIENT)
160
161 if(BUILD_SERVER)
162         add_executable(minetestserver ${minetestserver_SRCS})
163         target_link_libraries(
164                 minetestserver
165                 ${ZLIB_LIBRARIES}
166                 ${PLATFORM_LIBS}
167                 jthread
168                 sqlite3
169         )
170 endif(BUILD_SERVER)
171
172 #
173 # Set some optimizations and tweaks
174 #
175
176 if(MSVC)
177         # Visual Studio
178
179         # EHa enables SEH exceptions (used for catching segfaults)
180         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")
181         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
182         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
183
184         # Debug build doesn't catch exceptions by itself
185         # Add some optimizations because otherwise it's VERY slow
186         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
187         
188         if(BUILD_SERVER)
189                 set_target_properties(minetestserver PROPERTIES
190                                 COMPILE_DEFINITIONS "SERVER")
191         endif(BUILD_SERVER)
192
193 else()
194         # Probably GCC
195         
196         if(WARN_ALL)
197                 set(RELEASE_WARNING_FLAGS "-Wall")
198         else()
199                 set(RELEASE_WARNING_FLAGS "")
200         endif()
201         
202         if(NOT APPLE)
203                 set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
204         endif()
205         
206         if(APPLE)
207                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
208                 set(ARCH i386)
209         endif()
210
211         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
212         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
213
214         if(USE_GPROF)
215                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
216         endif()
217         
218         if(BUILD_SERVER)
219                 set_target_properties(minetestserver PROPERTIES
220                                 COMPILE_DEFINITIONS "SERVER")
221         endif(BUILD_SERVER)
222
223 endif()
224
225 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
226 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
227
228 #
229 # Installation
230 #
231
232 # Example configuration file
233 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
234
235 if(BUILD_CLIENT)
236         install(TARGETS minetest DESTINATION ${BINDIR})
237
238         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
239
240         install(FILES ${images} DESTINATION ${DATADIR})
241
242         if(WIN32)
243                 if(DEFINED IRRLICHT_DLL)
244                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
245                 endif()
246                 if(DEFINED ZLIB_DLL)
247                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
248                 endif()
249         endif()
250 endif(BUILD_CLIENT)
251
252 if(BUILD_SERVER)
253         install(TARGETS minetestserver DESTINATION ${BINDIR})
254 endif(BUILD_SERVER)
255
256 # Subdirectories
257
258 add_subdirectory(jthread)
259 add_subdirectory(sqlite)
260
261 #end