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