random build system tweaking
[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(WIN32)
9         # Windows
10         # Surpress some warnings
11         add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
12         # Zlib stuff
13         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
14                         CACHE PATH "Zlib include directory")
15         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
16                         CACHE PATH "Path to zlibwapi.lib")
17         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
18                         CACHE PATH "Path to zlibwapi.dll (for installation)")
19 else()
20         # Unix probably
21         if(BUILD_CLIENT)
22                 find_package(X11 REQUIRED)
23                 find_package(OpenGL REQUIRED)
24                 find_package(JPEG REQUIRED)
25                 find_package(BZip2 REQUIRED)
26                 find_package(PNG REQUIRED)
27         endif(BUILD_CLIENT)
28         find_package(ZLIB REQUIRED)
29         set(PLATFORM_LIBS -lpthread)
30         set(CLIENT_PLATFORM_LIBS -lXxf86vm)
31 endif()
32
33 configure_file(
34         "${PROJECT_SOURCE_DIR}/config.h.in"
35         "${PROJECT_BINARY_DIR}/config.h"
36 )
37
38 set(minetest_SRCS
39         porting.cpp
40         guiMessageMenu.cpp
41         materials.cpp
42         guiTextInputMenu.cpp
43         guiInventoryMenu.cpp
44         irrlichtwrapper.cpp
45         guiPauseMenu.cpp
46         defaultsettings.cpp
47         mapnode.cpp
48         tile.cpp
49         voxel.cpp
50         mapblockobject.cpp
51         inventory.cpp
52         debug.cpp
53         serialization.cpp
54         light.cpp
55         filesys.cpp
56         connection.cpp
57         environment.cpp
58         client.cpp
59         server.cpp
60         socket.cpp
61         mapblock.cpp
62         mapsector.cpp
63         heightmap.cpp
64         map.cpp
65         player.cpp
66         utility.cpp
67         main.cpp
68         test.cpp
69 )
70
71 set(minetestserver_SRCS
72         porting.cpp
73         materials.cpp
74         defaultsettings.cpp
75         mapnode.cpp
76         voxel.cpp
77         mapblockobject.cpp
78         inventory.cpp
79         debug.cpp
80         serialization.cpp
81         light.cpp
82         filesys.cpp
83         connection.cpp
84         environment.cpp
85         server.cpp
86         socket.cpp
87         mapblock.cpp
88         mapsector.cpp
89         heightmap.cpp
90         map.cpp
91         player.cpp
92         utility.cpp
93         servermain.cpp
94         test.cpp
95 )
96
97 include_directories(
98         ${PROJECT_BINARY_DIR}
99         ${IRRLICHT_INCLUDE_DIR}
100         ${ZLIB_INCLUDE_DIR}
101         ${CMAKE_BUILD_TYPE}
102         "${PROJECT_SOURCE_DIR}/jthread"
103         ${PNG_INCLUDE_DIR}
104 )
105
106 set(EXECUTABLE_OUTPUT_PATH ../bin)
107
108 if(BUILD_CLIENT)
109         add_executable(minetest ${minetest_SRCS})
110         target_link_libraries(
111                 minetest
112                 ${ZLIB_LIBRARIES}
113                 ${IRRLICHT_LIBRARY}
114                 ${OPENGL_LIBRARIES}
115                 ${JPEG_LIBRARIES}
116                 ${BZIP2_LIBRARIES}
117                 ${PNG_LIBRARIES}
118                 ${X11_LIBRARIES}
119                 jthread
120                 ${PLATFORM_LIBS}
121                 ${CLIENT_PLATFORM_LIBS}
122         )
123 endif(BUILD_CLIENT)
124
125 if(BUILD_SERVER)
126         add_executable(minetestserver ${minetestserver_SRCS})
127         target_link_libraries(
128                 minetestserver
129                 ${ZLIB_LIBRARIES}
130                 jthread
131                 ${PLATFORM_LIBS}
132         )
133 endif(BUILD_SERVER)
134
135 #
136 # Set some optimizations and tweaks
137 #
138
139 if(MSVC)
140         # Visual Studio
141
142         # EHa enables SEH exceptions (used for catching segfaults)
143         set(CMAKE_CXX_FLAGS_RELEASE "/EHa /MD /O2 /Ob2 /Oi /Ot /Oy /GL /FD /MT /GS- /arch:SSE /fp:fast")
144         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
145         
146         if(BUILD_SERVER)
147                 set_target_properties(minetestserver PROPERTIES
148                                 COMPILE_FLAGS "/D SERVER")
149         endif(BUILD_SERVER)
150
151 else()
152         # Probably GCC
153         
154         if(WARN_ALL)
155                 set(WARNING_FLAGS "-Wall")
156         else()
157                 set(WARNING_FLAGS "")
158         endif()
159
160         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
161         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall")
162         
163         if(BUILD_SERVER)
164                 set_target_properties(minetestserver PROPERTIES
165                                 COMPILE_FLAGS "-DSERVER")
166         endif(BUILD_SERVER)
167
168 endif()
169
170 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
171 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
172
173 #
174 # Installation
175 #
176
177 if(BUILD_CLIENT)
178         install(TARGETS minetest DESTINATION ${BINDIR})
179
180         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
181
182         install(FILES ${images} DESTINATION ${DATADIR})
183
184         if(WIN32)
185                 if(DEFINED IRRLICHT_DLL)
186                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
187                 endif()
188                 if(DEFINED ZLIB_DLL)
189                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
190                 endif()
191         endif()
192 endif(BUILD_CLIENT)
193
194 if(BUILD_SERVER)
195         install(TARGETS minetestserver DESTINATION ${BINDIR})
196 endif(BUILD_SERVER)
197
198 # Subdirectories
199
200 add_subdirectory(jthread)
201
202 #end