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