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