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