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