some generation-time mud flow tweaking
[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 # Use cmake_config.h
9 add_definitions ( -DUSE_CMAKE_CONFIG_H )
10
11 if(WIN32)
12         # Windows
13         # Surpress some useless warnings
14         add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
15         # Zlib stuff
16         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
17                         CACHE PATH "Zlib include directory")
18         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
19                         CACHE PATH "Path to zlibwapi.lib")
20         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
21                         CACHE PATH "Path to zlibwapi.dll (for installation)")
22 else()
23         # Unix probably
24         if(BUILD_CLIENT)
25                 find_package(X11 REQUIRED)
26                 find_package(OpenGL REQUIRED)
27                 find_package(JPEG REQUIRED)
28                 find_package(BZip2 REQUIRED)
29                 find_package(PNG REQUIRED)
30         endif(BUILD_CLIENT)
31         find_package(ZLIB REQUIRED)
32         set(PLATFORM_LIBS -lpthread)
33         set(CLIENT_PLATFORM_LIBS -lXxf86vm)
34 endif()
35
36 configure_file(
37         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
38         "${PROJECT_BINARY_DIR}/cmake_config.h"
39 )
40
41 set(common_SRCS
42         mineral.cpp
43         porting.cpp
44         materials.cpp
45         defaultsettings.cpp
46         mapnode.cpp
47         voxel.cpp
48         mapblockobject.cpp
49         inventory.cpp
50         debug.cpp
51         serialization.cpp
52         light.cpp
53         filesys.cpp
54         connection.cpp
55         environment.cpp
56         server.cpp
57         socket.cpp
58         mapblock.cpp
59         mapsector.cpp
60         heightmap.cpp
61         map.cpp
62         player.cpp
63         utility.cpp
64         test.cpp
65 )
66
67 set(minetest_SRCS
68         ${common_SRCS}
69         guiMainMenu.cpp
70         guiMessageMenu.cpp
71         guiTextInputMenu.cpp
72         guiInventoryMenu.cpp
73         guiPauseMenu.cpp
74         irrlichtwrapper.cpp
75         client.cpp
76         main.cpp
77 )
78
79 set(minetestserver_SRCS
80         ${common_SRCS}
81         servermain.cpp
82 )
83
84 include_directories(
85         ${PROJECT_BINARY_DIR}
86         ${IRRLICHT_INCLUDE_DIR}
87         ${ZLIB_INCLUDE_DIR}
88         ${CMAKE_BUILD_TYPE}
89         "${PROJECT_SOURCE_DIR}/jthread"
90         ${PNG_INCLUDE_DIR}
91 )
92
93 set(EXECUTABLE_OUTPUT_PATH ../bin)
94
95 set(JTHREAD_LIBRARIES "jthread")
96 set(JTHREAD_SRCS "")
97
98 if(BUILD_CLIENT)
99         add_executable(minetest ${minetest_SRCS} ${JTHREAD_SRCS})
100         target_link_libraries(
101                 minetest
102                 ${ZLIB_LIBRARIES}
103                 ${IRRLICHT_LIBRARY}
104                 ${OPENGL_LIBRARIES}
105                 ${JPEG_LIBRARIES}
106                 ${BZIP2_LIBRARIES}
107                 ${PNG_LIBRARIES}
108                 ${X11_LIBRARIES}
109                 ${JTHREAD_LIBRARIES}
110                 ${PLATFORM_LIBS}
111                 ${CLIENT_PLATFORM_LIBS}
112         )
113 endif(BUILD_CLIENT)
114
115 if(BUILD_SERVER)
116         add_executable(minetestserver ${minetestserver_SRCS} ${JTHREAD_SRCS})
117         target_link_libraries(
118                 minetestserver
119                 ${ZLIB_LIBRARIES}
120                 ${JTHREAD_LIBRARIES}
121                 ${PLATFORM_LIBS}
122         )
123 endif(BUILD_SERVER)
124
125 #
126 # Set some optimizations and tweaks
127 #
128
129 if(MSVC)
130         # Visual Studio
131
132         # EHa enables SEH exceptions (used for catching segfaults)
133         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")
134         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\"")
135
136         # Debug build doesn't catch exceptions by itself
137         # Add some optimizations because otherwise it's VERY slow
138         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
139         
140         if(BUILD_SERVER)
141                 set_target_properties(minetestserver PROPERTIES
142                                 COMPILE_FLAGS "/D SERVER")
143         endif(BUILD_SERVER)
144
145 else()
146         # Probably GCC
147         
148         if(WARN_ALL)
149                 set(WARNING_FLAGS "-Wall")
150         else()
151                 set(WARNING_FLAGS "")
152         endif()
153
154         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
155         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall")
156         
157         if(BUILD_SERVER)
158                 set_target_properties(minetestserver PROPERTIES
159                                 COMPILE_FLAGS "-DSERVER")
160         endif(BUILD_SERVER)
161
162 endif()
163
164 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
165 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
166
167 #
168 # Installation
169 #
170
171 if(BUILD_CLIENT)
172         install(TARGETS minetest DESTINATION ${BINDIR})
173
174         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
175
176         install(FILES ${images} DESTINATION ${DATADIR})
177
178         if(WIN32)
179                 if(DEFINED IRRLICHT_DLL)
180                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
181                 endif()
182                 if(DEFINED ZLIB_DLL)
183                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
184                 endif()
185         endif()
186 endif(BUILD_CLIENT)
187
188 if(BUILD_SERVER)
189         install(TARGETS minetestserver DESTINATION ${BINDIR})
190 endif(BUILD_SERVER)
191
192 # Subdirectories
193
194 add_subdirectory(jthread)
195
196 #end