made old build system to work too. the cmake one doesn't make working binaries for...
[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 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(minetest_SRCS
42         porting.cpp
43         guiMessageMenu.cpp
44         materials.cpp
45         guiTextInputMenu.cpp
46         guiInventoryMenu.cpp
47         irrlichtwrapper.cpp
48         guiPauseMenu.cpp
49         defaultsettings.cpp
50         mapnode.cpp
51         tile.cpp
52         voxel.cpp
53         mapblockobject.cpp
54         inventory.cpp
55         debug.cpp
56         serialization.cpp
57         light.cpp
58         filesys.cpp
59         connection.cpp
60         environment.cpp
61         client.cpp
62         server.cpp
63         socket.cpp
64         mapblock.cpp
65         mapsector.cpp
66         heightmap.cpp
67         map.cpp
68         player.cpp
69         utility.cpp
70         main.cpp
71         test.cpp
72 )
73
74 set(minetestserver_SRCS
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         socket.cpp
90         mapblock.cpp
91         mapsector.cpp
92         heightmap.cpp
93         map.cpp
94         player.cpp
95         utility.cpp
96         servermain.cpp
97         test.cpp
98 )
99
100 include_directories(
101         ${PROJECT_BINARY_DIR}
102         ${IRRLICHT_INCLUDE_DIR}
103         ${ZLIB_INCLUDE_DIR}
104         ${CMAKE_BUILD_TYPE}
105         "${PROJECT_SOURCE_DIR}/jthread"
106         ${PNG_INCLUDE_DIR}
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                 jthread
123                 ${PLATFORM_LIBS}
124                 ${CLIENT_PLATFORM_LIBS}
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                 jthread
134                 ${PLATFORM_LIBS}
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")
147         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
148         
149         if(BUILD_SERVER)
150                 set_target_properties(minetestserver PROPERTIES
151                                 COMPILE_FLAGS "/D SERVER")
152         endif(BUILD_SERVER)
153
154 else()
155         # Probably GCC
156         
157         if(WARN_ALL)
158                 set(WARNING_FLAGS "-Wall")
159         else()
160                 set(WARNING_FLAGS "")
161         endif()
162
163         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
164         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall")
165         
166         if(BUILD_SERVER)
167                 set_target_properties(minetestserver PROPERTIES
168                                 COMPILE_FLAGS "-DSERVER")
169         endif(BUILD_SERVER)
170
171 endif()
172
173 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
174 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
175
176 #
177 # Installation
178 #
179
180 if(BUILD_CLIENT)
181         install(TARGETS minetest DESTINATION ${BINDIR})
182
183         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
184
185         install(FILES ${images} DESTINATION ${DATADIR})
186
187         if(WIN32)
188                 if(DEFINED IRRLICHT_DLL)
189                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
190                 endif()
191                 if(DEFINED ZLIB_DLL)
192                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
193                 endif()
194         endif()
195 endif(BUILD_CLIENT)
196
197 if(BUILD_SERVER)
198         install(TARGETS minetestserver DESTINATION ${BINDIR})
199 endif(BUILD_SERVER)
200
201 # Subdirectories
202
203 add_subdirectory(jthread)
204
205 #end