]> git.lizzy.rs Git - minetest.git/blob - src/CMakeLists.txt
added simple skybox
[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         clouds.cpp
85         clientobject.cpp
86         guiFurnaceMenu.cpp
87         guiMainMenu.cpp
88         guiMessageMenu.cpp
89         guiTextInputMenu.cpp
90         guiInventoryMenu.cpp
91         guiPauseMenu.cpp
92         client.cpp
93         tile.cpp
94         game.cpp
95         main.cpp
96 )
97
98 # Server sources
99 set(minetestserver_SRCS
100         ${common_SRCS}
101         servermain.cpp
102 )
103
104 include_directories(
105         ${PROJECT_BINARY_DIR}
106         ${IRRLICHT_INCLUDE_DIR}
107         ${ZLIB_INCLUDE_DIR}
108         ${CMAKE_BUILD_TYPE}
109         ${PNG_INCLUDE_DIR}
110         "${PROJECT_SOURCE_DIR}/jthread"
111 )
112
113 set(EXECUTABLE_OUTPUT_PATH ../bin)
114
115 if(BUILD_CLIENT)
116         add_executable(minetest ${minetest_SRCS})
117         target_link_libraries(
118                 minetest
119                 ${ZLIB_LIBRARIES}
120                 ${IRRLICHT_LIBRARY}
121                 ${OPENGL_LIBRARIES}
122                 ${JPEG_LIBRARIES}
123                 ${BZIP2_LIBRARIES}
124                 ${PNG_LIBRARIES}
125                 ${X11_LIBRARIES}
126                 ${PLATFORM_LIBS}
127                 ${CLIENT_PLATFORM_LIBS}
128                 jthread
129         )
130 endif(BUILD_CLIENT)
131
132 if(BUILD_SERVER)
133         add_executable(minetestserver ${minetestserver_SRCS})
134         target_link_libraries(
135                 minetestserver
136                 ${ZLIB_LIBRARIES}
137                 ${PLATFORM_LIBS}
138                 jthread
139         )
140 endif(BUILD_SERVER)
141
142 #
143 # Set some optimizations and tweaks
144 #
145
146 if(MSVC)
147         # Visual Studio
148
149         # EHa enables SEH exceptions (used for catching segfaults)
150         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")
151         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
152         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
153
154         # Debug build doesn't catch exceptions by itself
155         # Add some optimizations because otherwise it's VERY slow
156         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
157         
158         if(BUILD_SERVER)
159                 set_target_properties(minetestserver PROPERTIES
160                                 COMPILE_DEFINITIONS "SERVER")
161         endif(BUILD_SERVER)
162
163 else()
164         # Probably GCC
165         
166         if(WARN_ALL)
167                 set(WARNING_FLAGS "-Wall")
168         else()
169                 set(WARNING_FLAGS "")
170         endif()
171
172         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
173         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall")
174
175         if(USE_GPROF)
176                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
177         endif()
178         
179         if(BUILD_SERVER)
180                 set_target_properties(minetestserver PROPERTIES
181                                 COMPILE_DEFINITIONS "SERVER")
182         endif(BUILD_SERVER)
183
184 endif()
185
186 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
187 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
188
189 #
190 # Installation
191 #
192
193 # Example configuration file
194 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
195
196 if(BUILD_CLIENT)
197         install(TARGETS minetest DESTINATION ${BINDIR})
198
199         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
200
201         install(FILES ${images} DESTINATION ${DATADIR})
202
203         if(WIN32)
204                 if(DEFINED IRRLICHT_DLL)
205                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
206                 endif()
207                 if(DEFINED ZLIB_DLL)
208                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
209                 endif()
210         endif()
211 endif(BUILD_CLIENT)
212
213 if(BUILD_SERVER)
214         install(TARGETS minetestserver DESTINATION ${BINDIR})
215 endif(BUILD_SERVER)
216
217 # Subdirectories
218
219 add_subdirectory(jthread)
220
221 #end