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