fea1f264410db7d1df536a5e77c11e1709b6803f
[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(UNIX)
9         # Unix
10         if(BUILD_CLIENT)
11                 find_package(X11 REQUIRED)
12                 find_package(OpenGL REQUIRED)
13                 find_package(JPEG REQUIRED)
14                 find_package(BZip2 REQUIRED)
15                 find_package(PNG REQUIRED)
16         endif(BUILD_CLIENT)
17         find_package(ZLIB REQUIRED)
18         set(PLATFORM_LIBS -lpthread)
19         set(CLIENT_PLATFORM_LIBS -lXxf86vm)
20 elseif(WIN32)
21         # Windows
22         # Surpress some warnings
23         add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
24         # Zlib stuff
25         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
26                         CACHE PATH "Zlib include directory")
27         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
28                         CACHE PATH "Path to zlibwapi.lib")
29         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
30                         CACHE PATH "Path to zlibwapi.dll (for installation)")
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 if(BUILD_SERVER)
125         add_executable(minetestserver ${minetestserver_SRCS})
126         target_link_libraries(
127                 minetestserver
128                 ${ZLIB_LIBRARIES}
129                 jthread
130                 ${PLATFORM_LIBS}
131         )
132 endif(BUILD_SERVER)
133
134 # Set some optimizations and tweaks
135 if( UNIX )
136         # Unix
137         
138         # NOTE: -Wall gets applied automatically to debug builds
139
140         #set(UNIX_FLAGS "")
141
142         if(BUILD_CLIENT)
143                 set_target_properties(minetest PROPERTIES COMPILE_FLAGS
144                                 "${UNIX_FLAGS}")
145         endif(BUILD_CLIENT)
146
147         if(BUILD_SERVER)
148                 set_target_properties(minetestserver PROPERTIES COMPILE_FLAGS
149                                 "${UNIX_FLAGS} -DSERVER")
150         endif(BUILD_SERVER)
151
152 else( UNIX )
153         # Windows
154         
155         if(BUILD_CLIENT)
156                 # EHa enables SEH exceptions (used for catching segfaults)
157                 set_target_properties(minetest PROPERTIES COMPILE_FLAGS
158                                 "/O2 /Ob2 /Oi /Ot /Oy /GL /EHa")
159         endif(BUILD_CLIENT)
160
161         if(BUILD_SERVER)
162                 # EHa enables SEH exceptions (used for catching segfaults)
163                 set_target_properties(minetestserver PROPERTIES COMPILE_FLAGS
164                                 "/O2 /Ob2 /Oi /Ot /Oy /GL /EHa /D SERVER")
165         endif(BUILD_SERVER)
166
167 endif( UNIX )
168
169 #
170 # Installation
171 #
172
173 if(BUILD_CLIENT)
174         install(TARGETS minetest DESTINATION ${BINDIR})
175
176         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
177
178         install(FILES ${images} DESTINATION ${DATADIR})
179
180         if(WIN32)
181                 if(DEFINED IRRLICHT_DLL)
182                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
183                 endif()
184                 if(DEFINED ZLIB_DLL)
185                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
186                 endif()
187         endif()
188 endif(BUILD_CLIENT)
189
190 if(BUILD_SERVER)
191         install(TARGETS minetestserver DESTINATION ${BINDIR})
192 endif(BUILD_SERVER)
193
194 # Subdirectories
195
196 add_subdirectory(jthread)
197
198 #end