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