]> git.lizzy.rs Git - dragonfireclient.git/blob - src/CMakeLists.txt
merged CiaranG's stuff again: auto-admin powers to local user, DSTACK macro -Wformat...
[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         endif(BUILD_CLIENT)
39         find_package(ZLIB REQUIRED)
40         set(PLATFORM_LIBS -lpthread)
41         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
42         # This way Xxf86vm is found on OpenBSD too
43         find_library(XXF86VM_LIBRARY Xxf86vm)
44         set(CLIENT_PLATFORM_LIBS ${XXF86VM_LIBRARY})
45 endif()
46
47 configure_file(
48         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
49         "${PROJECT_BINARY_DIR}/cmake_config.h"
50 )
51
52 set(common_SRCS
53         collision.cpp
54         nodemetadata.cpp
55         serverobject.cpp
56         noise.cpp
57         mineral.cpp
58         porting.cpp
59         materials.cpp
60         defaultsettings.cpp
61         mapnode.cpp
62         voxel.cpp
63         mapblockobject.cpp
64         inventory.cpp
65         debug.cpp
66         serialization.cpp
67         light.cpp
68         filesys.cpp
69         connection.cpp
70         environment.cpp
71         server.cpp
72         servercommand.cpp
73         socket.cpp
74         mapblock.cpp
75         mapsector.cpp
76         map.cpp
77         player.cpp
78         utility.cpp
79         test.cpp
80 )
81
82 # Client sources
83 set(minetest_SRCS
84         ${common_SRCS}
85         keycode.cpp
86         clouds.cpp
87         clientobject.cpp
88         guiFurnaceMenu.cpp
89         guiMainMenu.cpp
90         guiMessageMenu.cpp
91         guiTextInputMenu.cpp
92         guiInventoryMenu.cpp
93         guiPauseMenu.cpp
94         client.cpp
95         tile.cpp
96         game.cpp
97         main.cpp
98 )
99
100 # Server sources
101 set(minetestserver_SRCS
102         ${common_SRCS}
103         servermain.cpp
104 )
105
106 include_directories(
107         ${PROJECT_BINARY_DIR}
108         ${IRRLICHT_INCLUDE_DIR}
109         ${ZLIB_INCLUDE_DIR}
110         ${CMAKE_BUILD_TYPE}
111         ${PNG_INCLUDE_DIR}
112         "${PROJECT_SOURCE_DIR}/jthread"
113 )
114
115 set(EXECUTABLE_OUTPUT_PATH ../bin)
116
117 if(BUILD_CLIENT)
118         add_executable(minetest ${minetest_SRCS})
119         target_link_libraries(
120                 minetest
121                 ${ZLIB_LIBRARIES}
122                 ${IRRLICHT_LIBRARY}
123                 ${OPENGL_LIBRARIES}
124                 ${JPEG_LIBRARIES}
125                 ${BZIP2_LIBRARIES}
126                 ${PNG_LIBRARIES}
127                 ${X11_LIBRARIES}
128                 ${PLATFORM_LIBS}
129                 ${CLIENT_PLATFORM_LIBS}
130                 jthread
131         )
132 endif(BUILD_CLIENT)
133
134 if(BUILD_SERVER)
135         add_executable(minetestserver ${minetestserver_SRCS})
136         target_link_libraries(
137                 minetestserver
138                 ${ZLIB_LIBRARIES}
139                 ${PLATFORM_LIBS}
140                 jthread
141         )
142 endif(BUILD_SERVER)
143
144 #
145 # Set some optimizations and tweaks
146 #
147
148 if(MSVC)
149         # Visual Studio
150
151         # EHa enables SEH exceptions (used for catching segfaults)
152         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")
153         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
154         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
155
156         # Debug build doesn't catch exceptions by itself
157         # Add some optimizations because otherwise it's VERY slow
158         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
159         
160         if(BUILD_SERVER)
161                 set_target_properties(minetestserver PROPERTIES
162                                 COMPILE_DEFINITIONS "SERVER")
163         endif(BUILD_SERVER)
164
165 else()
166         # Probably GCC
167         
168         if(WARN_ALL)
169                 set(WARNING_FLAGS "-Wall")
170         else()
171                 set(WARNING_FLAGS "")
172         endif()
173
174         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
175
176         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
177         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall")
178
179         if(USE_GPROF)
180                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
181         endif()
182         
183         if(BUILD_SERVER)
184                 set_target_properties(minetestserver PROPERTIES
185                                 COMPILE_DEFINITIONS "SERVER")
186         endif(BUILD_SERVER)
187
188 endif()
189
190 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
191 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
192
193 #
194 # Installation
195 #
196
197 # Example configuration file
198 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
199
200 if(BUILD_CLIENT)
201         install(TARGETS minetest DESTINATION ${BINDIR})
202
203         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
204
205         install(FILES ${images} DESTINATION ${DATADIR})
206
207         if(WIN32)
208                 if(DEFINED IRRLICHT_DLL)
209                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
210                 endif()
211                 if(DEFINED ZLIB_DLL)
212                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
213                 endif()
214         endif()
215 endif(BUILD_CLIENT)
216
217 if(BUILD_SERVER)
218         install(TARGETS minetestserver DESTINATION ${BINDIR})
219 endif(BUILD_SERVER)
220
221 # Subdirectories
222
223 add_subdirectory(jthread)
224
225 #end