]> git.lizzy.rs Git - minetest.git/blob - src/CMakeLists.txt
Created and moved stuff to content_nodemeta.{h,cpp}
[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_nodemeta.cpp
54         content_craft.cpp
55         content_mapblock.cpp
56         content_mapnode.cpp
57         auth.cpp
58         collision.cpp
59         nodemetadata.cpp
60         serverobject.cpp
61         noise.cpp
62         mineral.cpp
63         porting.cpp
64         materials.cpp
65         defaultsettings.cpp
66         mapnode.cpp
67         voxel.cpp
68         mapblockobject.cpp
69         inventory.cpp
70         debug.cpp
71         serialization.cpp
72         light.cpp
73         filesys.cpp
74         connection.cpp
75         environment.cpp
76         server.cpp
77         servercommand.cpp
78         socket.cpp
79         mapblock.cpp
80         mapsector.cpp
81         map.cpp
82         player.cpp
83         utility.cpp
84         test.cpp
85         sha1.cpp
86         base64.cpp
87 )
88
89 # Client sources
90 set(minetest_SRCS
91         ${common_SRCS}
92         mapblock_mesh.cpp
93         farmesh.cpp
94         keycode.cpp
95         clouds.cpp
96         clientobject.cpp
97         guiFurnaceMenu.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