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