]> git.lizzy.rs Git - minetest.git/blob - src/CMakeLists.txt
Merge remote-tracking branch 'upstream/master'
[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         collision.cpp
65         nodemetadata.cpp
66         serverobject.cpp
67         noise.cpp
68         mineral.cpp
69         porting.cpp
70         materials.cpp
71         defaultsettings.cpp
72         mapnode.cpp
73         voxel.cpp
74         mapblockobject.cpp
75         inventory.cpp
76         debug.cpp
77         serialization.cpp
78         light.cpp
79         filesys.cpp
80         connection.cpp
81         environment.cpp
82         server.cpp
83         servercommand.cpp
84         socket.cpp
85         mapblock.cpp
86         mapsector.cpp
87         map.cpp
88         player.cpp
89         utility.cpp
90         test.cpp
91         sha1.cpp
92         base64.cpp
93 )
94
95 # Client sources
96 set(minetest_SRCS
97         ${common_SRCS}
98         keycode.cpp
99         clouds.cpp
100         clientobject.cpp
101         guiFurnaceMenu.cpp
102         guiMainMenu.cpp
103         guiKeyChangeMenu.cpp
104         guiMessageMenu.cpp
105         guiTextInputMenu.cpp
106         guiInventoryMenu.cpp
107         guiPauseMenu.cpp
108         guiPasswordChange.cpp
109         client.cpp
110         tile.cpp
111         game.cpp
112         main.cpp
113 )
114
115 # Server sources
116 set(minetestserver_SRCS
117         ${common_SRCS}
118         servermain.cpp
119 )
120
121 include_directories(
122         ${PROJECT_BINARY_DIR}
123         ${IRRLICHT_INCLUDE_DIR}
124         ${ZLIB_INCLUDE_DIR}
125         ${CMAKE_BUILD_TYPE}
126         ${PNG_INCLUDE_DIR}
127         "${PROJECT_SOURCE_DIR}/jthread"
128 )
129
130 set(EXECUTABLE_OUTPUT_PATH ../bin)
131
132 if(BUILD_CLIENT)
133         add_executable(minetest ${minetest_SRCS})
134         target_link_libraries(
135                 minetest
136                 ${ZLIB_LIBRARIES}
137                 ${IRRLICHT_LIBRARY}
138                 ${OPENGL_LIBRARIES}
139                 ${JPEG_LIBRARIES}
140                 ${BZIP2_LIBRARIES}
141                 ${PNG_LIBRARIES}
142                 ${X11_LIBRARIES}
143                 ${PLATFORM_LIBS}
144                 ${CLIENT_PLATFORM_LIBS}
145                 jthread
146         )
147 endif(BUILD_CLIENT)
148
149 if(BUILD_SERVER)
150         add_executable(minetestserver ${minetestserver_SRCS})
151         target_link_libraries(
152                 minetestserver
153                 ${ZLIB_LIBRARIES}
154                 ${PLATFORM_LIBS}
155                 jthread
156         )
157 endif(BUILD_SERVER)
158
159 #
160 # Set some optimizations and tweaks
161 #
162
163 if(MSVC)
164         # Visual Studio
165
166         # EHa enables SEH exceptions (used for catching segfaults)
167         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")
168         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
169         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
170
171         # Debug build doesn't catch exceptions by itself
172         # Add some optimizations because otherwise it's VERY slow
173         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
174         
175         if(BUILD_SERVER)
176                 set_target_properties(minetestserver PROPERTIES
177                                 COMPILE_DEFINITIONS "SERVER")
178         endif(BUILD_SERVER)
179
180 else()
181         # Probably GCC
182         
183         if(WARN_ALL)
184                 set(WARNING_FLAGS "-Wall")
185         else()
186                 set(WARNING_FLAGS "")
187         endif()
188
189         if(NOT APPLE)
190                 set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
191         endif()
192         if(APPLE)
193                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
194                 set(ARCH i386)
195         endif()
196         
197         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
198         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall")
199
200         if(USE_GPROF)
201                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
202         endif()
203         
204         if(BUILD_SERVER)
205                 set_target_properties(minetestserver PROPERTIES
206                                 COMPILE_DEFINITIONS "SERVER")
207         endif(BUILD_SERVER)
208
209 endif()
210
211 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
212 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
213
214 #
215 # Installation
216 #
217
218 # Example configuration file
219 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
220
221 if(BUILD_CLIENT)
222         install(TARGETS minetest DESTINATION ${BINDIR})
223
224         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
225
226         install(FILES ${images} DESTINATION ${DATADIR})
227
228         if(WIN32)
229                 if(DEFINED IRRLICHT_DLL)
230                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
231                 endif()
232                 if(DEFINED ZLIB_DLL)
233                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
234                 endif()
235         endif()
236 endif(BUILD_CLIENT)
237
238 if(BUILD_SERVER)
239         install(TARGETS minetestserver DESTINATION ${BINDIR})
240 endif(BUILD_SERVER)
241
242 # Subdirectories
243
244 add_subdirectory(jthread)
245
246 #end