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