merged Mac OSX build fix from minetest-delta
[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                 if(APPLE)
39                         FIND_LIBRARY(CARBON_LIB Carbon)
40                         FIND_LIBRARY(COCOA_LIB Cocoa)
41                         FIND_LIBRARY(IOKIT_LIB IOKit)
42                         mark_as_advanced(
43                                 CARBON_LIB
44                                 COCOA_LIB
45                                 IOKIT_LIB
46                         )
47                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
48                 endif(APPLE)
49         endif(BUILD_CLIENT)
50         find_package(ZLIB REQUIRED)
51         set(PLATFORM_LIBS -lpthread)
52         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
53         # This way Xxf86vm is found on OpenBSD too
54         find_library(XXF86VM_LIBRARY Xxf86vm)
55         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
56 endif()
57
58 configure_file(
59         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
60         "${PROJECT_BINARY_DIR}/cmake_config.h"
61 )
62
63 set(common_SRCS
64         content_inventory.cpp
65         content_nodemeta.cpp
66         content_craft.cpp
67         content_mapblock.cpp
68         content_mapnode.cpp
69         auth.cpp
70         collision.cpp
71         nodemetadata.cpp
72         serverobject.cpp
73         noise.cpp
74         mineral.cpp
75         porting.cpp
76         materials.cpp
77         defaultsettings.cpp
78         mapnode.cpp
79         voxel.cpp
80         mapblockobject.cpp
81         inventory.cpp
82         debug.cpp
83         serialization.cpp
84         light.cpp
85         filesys.cpp
86         connection.cpp
87         environment.cpp
88         server.cpp
89         servercommand.cpp
90         socket.cpp
91         mapblock.cpp
92         mapsector.cpp
93         map.cpp
94         player.cpp
95         utility.cpp
96         test.cpp
97         sha1.cpp
98         base64.cpp
99 )
100
101 # Client sources
102 set(minetest_SRCS
103         ${common_SRCS}
104         mapblock_mesh.cpp
105         farmesh.cpp
106         keycode.cpp
107         clouds.cpp
108         clientobject.cpp
109         guiMainMenu.cpp
110         guiMessageMenu.cpp
111         guiTextInputMenu.cpp
112         guiInventoryMenu.cpp
113         guiPauseMenu.cpp
114         guiPasswordChange.cpp
115         client.cpp
116         tile.cpp
117         game.cpp
118         main.cpp
119 )
120
121 # Server sources
122 set(minetestserver_SRCS
123         ${common_SRCS}
124         servermain.cpp
125 )
126
127 include_directories(
128         ${PROJECT_BINARY_DIR}
129         ${IRRLICHT_INCLUDE_DIR}
130         ${ZLIB_INCLUDE_DIR}
131         ${CMAKE_BUILD_TYPE}
132         ${PNG_INCLUDE_DIR}
133         "${PROJECT_SOURCE_DIR}/jthread"
134 )
135
136 set(EXECUTABLE_OUTPUT_PATH ../bin)
137
138 if(BUILD_CLIENT)
139         add_executable(minetest ${minetest_SRCS})
140         target_link_libraries(
141                 minetest
142                 ${ZLIB_LIBRARIES}
143                 ${IRRLICHT_LIBRARY}
144                 ${OPENGL_LIBRARIES}
145                 ${JPEG_LIBRARIES}
146                 ${BZIP2_LIBRARIES}
147                 ${PNG_LIBRARIES}
148                 ${X11_LIBRARIES}
149                 ${PLATFORM_LIBS}
150                 ${CLIENT_PLATFORM_LIBS}
151                 jthread
152         )
153 endif(BUILD_CLIENT)
154
155 if(BUILD_SERVER)
156         add_executable(minetestserver ${minetestserver_SRCS})
157         target_link_libraries(
158                 minetestserver
159                 ${ZLIB_LIBRARIES}
160                 ${PLATFORM_LIBS}
161                 jthread
162         )
163 endif(BUILD_SERVER)
164
165 #
166 # Set some optimizations and tweaks
167 #
168
169 if(MSVC)
170         # Visual Studio
171
172         # EHa enables SEH exceptions (used for catching segfaults)
173         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")
174         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
175         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
176
177         # Debug build doesn't catch exceptions by itself
178         # Add some optimizations because otherwise it's VERY slow
179         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
180         
181         if(BUILD_SERVER)
182                 set_target_properties(minetestserver PROPERTIES
183                                 COMPILE_DEFINITIONS "SERVER")
184         endif(BUILD_SERVER)
185
186 else()
187         # Probably GCC
188         
189         if(WARN_ALL)
190                 set(RELEASE_WARNING_FLAGS "-Wall")
191         else()
192                 set(RELEASE_WARNING_FLAGS "")
193         endif()
194         
195         if(NOT APPLE)
196                 set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
197         endif()
198         
199         if(APPLE)
200                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
201                 set(ARCH i386)
202         endif()
203
204         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
205         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
206
207         if(USE_GPROF)
208                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
209         endif()
210         
211         if(BUILD_SERVER)
212                 set_target_properties(minetestserver PROPERTIES
213                                 COMPILE_DEFINITIONS "SERVER")
214         endif(BUILD_SERVER)
215
216 endif()
217
218 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
219 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
220
221 #
222 # Installation
223 #
224
225 # Example configuration file
226 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
227
228 if(BUILD_CLIENT)
229         install(TARGETS minetest DESTINATION ${BINDIR})
230
231         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
232
233         install(FILES ${images} DESTINATION ${DATADIR})
234
235         if(WIN32)
236                 if(DEFINED IRRLICHT_DLL)
237                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
238                 endif()
239                 if(DEFINED ZLIB_DLL)
240                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
241                 endif()
242         endif()
243 endif(BUILD_CLIENT)
244
245 if(BUILD_SERVER)
246         install(TARGETS minetestserver DESTINATION ${BINDIR})
247 endif(BUILD_SERVER)
248
249 # Subdirectories
250
251 add_subdirectory(jthread)
252
253 #end