Passwords - password entry at main menu, stored and checked by server
[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         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         sha1.cpp
99         base64.cpp
100 )
101
102 # Server sources
103 set(minetestserver_SRCS
104         ${common_SRCS}
105         servermain.cpp
106 )
107
108 include_directories(
109         ${PROJECT_BINARY_DIR}
110         ${IRRLICHT_INCLUDE_DIR}
111         ${ZLIB_INCLUDE_DIR}
112         ${CMAKE_BUILD_TYPE}
113         ${PNG_INCLUDE_DIR}
114         "${PROJECT_SOURCE_DIR}/jthread"
115 )
116
117 set(EXECUTABLE_OUTPUT_PATH ../bin)
118
119 if(BUILD_CLIENT)
120         add_executable(minetest ${minetest_SRCS})
121         target_link_libraries(
122                 minetest
123                 ${ZLIB_LIBRARIES}
124                 ${IRRLICHT_LIBRARY}
125                 ${OPENGL_LIBRARIES}
126                 ${JPEG_LIBRARIES}
127                 ${BZIP2_LIBRARIES}
128                 ${PNG_LIBRARIES}
129                 ${X11_LIBRARIES}
130                 ${PLATFORM_LIBS}
131                 ${CLIENT_PLATFORM_LIBS}
132                 jthread
133         )
134 endif(BUILD_CLIENT)
135
136 if(BUILD_SERVER)
137         add_executable(minetestserver ${minetestserver_SRCS})
138         target_link_libraries(
139                 minetestserver
140                 ${ZLIB_LIBRARIES}
141                 ${PLATFORM_LIBS}
142                 jthread
143         )
144 endif(BUILD_SERVER)
145
146 #
147 # Set some optimizations and tweaks
148 #
149
150 if(MSVC)
151         # Visual Studio
152
153         # EHa enables SEH exceptions (used for catching segfaults)
154         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")
155         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
156         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
157
158         # Debug build doesn't catch exceptions by itself
159         # Add some optimizations because otherwise it's VERY slow
160         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
161         
162         if(BUILD_SERVER)
163                 set_target_properties(minetestserver PROPERTIES
164                                 COMPILE_DEFINITIONS "SERVER")
165         endif(BUILD_SERVER)
166
167 else()
168         # Probably GCC
169         
170         if(WARN_ALL)
171                 set(WARNING_FLAGS "-Wall")
172         else()
173                 set(WARNING_FLAGS "")
174         endif()
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