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