]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/CMakeLists.txt
Update CIrrDeviceSDL to support SDL2 (#85)
[irrlicht.git] / source / Irrlicht / CMakeLists.txt
1 option(BUILD_SHARED_LIBS "Build shared library" TRUE)
2
3 # Compiler flags
4
5 add_definitions(-DIRRLICHT_EXPORTS)
6 if(NOT BUILD_SHARED_LIBS)
7         add_definitions(-D_IRR_STATIC_LIB_)
8 endif()
9 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
10         add_definitions(-D_DEBUG)
11 endif()
12 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
13 set(CMAKE_CXX_STANDARD 11)
14 set(CMAKE_CXX_STANDARD_REQUIRED ON)
15
16 if(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
17         set(CMAKE_CXX_FLAGS_RELEASE "-O3")
18         set(CMAKE_CXX_FLAGS_DEBUG "-g")
19
20         add_compile_options(-Wall -pipe -fno-exceptions -fno-rtti)
21
22         # Enable SSE for floating point math on 32-bit x86 by default
23         # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
24         if(CMAKE_SIZEOF_VOID_P EQUAL 4)
25                 include(CheckCXXSourceCompiles)
26                 check_cxx_source_compiles("#ifndef __i686__\n#error\n#endif\nint main(){}" IS_I686)
27                 if(IS_I686)
28                         message(STATUS "Detected Intel x86: using SSE instead of x87 FPU")
29                         add_compile_options(-mfpmath=sse -msse)
30                 endif()
31         endif()
32
33 elseif(MSVC)
34         string(APPEND CMAKE_CXX_STANDARD_LIBRARIES " msvcrt.lib") # ???? fuck off
35
36         add_compile_options(/GR- /Zl)
37
38         # Enable SSE for floating point math on 32-bit x86 by default
39         # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
40         if(CMAKE_SIZEOF_VOID_P EQUAL 4)
41                 add_compile_options(/arch:SSE)
42         endif()
43 endif()
44
45 # Required libs
46
47 find_package(ZLIB REQUIRED)
48 find_package(JPEG REQUIRED)
49 find_package(PNG REQUIRED)
50
51 # To configure the features available in this Irrlicht build please edit
52 # include/IrrCompileConfig.h and re-run CMake from a clean state
53 include(CheckSymbolExists)
54 set(CMAKE_REQUIRED_INCLUDES ${PROJECT_SOURCE_DIR}/include)
55 unset(OGLES1_ENABLED CACHE)
56 unset(OGLES2_ENABLED CACHE)
57 unset(OGL_ENABLED CACHE)
58 unset(XINPUT2_ENABLED CACHE)
59 unset(SDL_ENABLED CACHE)
60
61 check_symbol_exists(_IRR_COMPILE_WITH_OGLES1_ "IrrCompileConfig.h" OGLES1_ENABLED)
62 if(OGLES1_ENABLED)
63         # only tested on Android, probably works on Linux (is this needed anywhere else?)
64         find_library(OPENGLES_LIBRARY NAMES GLESv1_CM REQUIRED)
65         find_library(EGL_LIBRARY NAMES EGL REQUIRED)
66
67         message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}")
68 endif()
69 check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
70 if(OGLES2_ENABLED)
71         find_package(OpenGLES2 REQUIRED)
72 endif()
73 check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
74 if(OGL_ENABLED)
75         set(OpenGL_GL_PREFERENCE "LEGACY")
76         find_package(OpenGL REQUIRED)
77 endif()
78 check_symbol_exists(_IRR_LINUX_X11_XINPUT2_ "IrrCompileConfig.h" XINPUT2_ENABLED)
79 if(XINPUT2_ENABLED)
80         find_library(XINPUT_LIBRARY Xi REQUIRED)
81 endif()
82
83 check_symbol_exists(_IRR_COMPILE_WITH_SDL_DEVICE_ "IrrCompileConfig.h" SDL_ENABLED)
84 if(SDL_ENABLED)
85         find_package(SDL2 CONFIG REQUIRED)
86         message(STATUS "Found SDL2: ${SDL2_LIBRARIES}")
87 endif()
88
89 # Platform-specific libs
90
91 if(ANDROID)
92         enable_language(C)
93         add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
94 elseif(APPLE)
95         find_library(COCOA_LIB Cocoa REQUIRED)
96         find_library(IOKIT_LIB IOKit REQUIRED)
97
98         add_definitions(-DGL_SILENCE_DEPRECATION)
99 else()
100         # Unix probably
101         find_package(X11 REQUIRED)
102 endif()
103
104 set(link_includes
105         "${PROJECT_SOURCE_DIR}/include"
106         "${CMAKE_CURRENT_SOURCE_DIR}"
107
108         "${ZLIB_INCLUDE_DIR}"
109         "${JPEG_INCLUDE_DIR}"
110         "${PNG_INCLUDE_DIR}"
111         "${SDL2_INCLUDE_DIRS}"
112
113         ${OPENGL_INCLUDE_DIR}
114         ${OPENGLES2_INCLUDE_DIR}
115         ${EGL_INCLUDE_DIR}
116
117         "$<$<PLATFORM_ID:Android>:${ANDROID_NDK}/sources/android/native_app_glue>"
118         ${X11_INCLUDE_DIR}
119 )
120
121 set(link_libs
122         "${ZLIB_LIBRARY}"
123         "${JPEG_LIBRARY}"
124         "${PNG_LIBRARY}"
125         "${SDL2_LIBRARIES}"
126
127         ${OPENGL_LIBRARIES}
128         ${OPENGLES_LIBRARY}
129         ${OPENGLES2_LIBRARIES}
130         ${EGL_LIBRARY}
131         ${XINPUT_LIBRARY}
132
133         "$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
134         ${COCOA_LIB}
135         ${IOKIT_LIB}
136         "$<$<PLATFORM_ID:Windows>:gdi32>"
137         "$<$<PLATFORM_ID:Windows>:winmm>"
138         ${X11_X11_LIB}
139         ${X11_Xxf86vm_LIB}
140 )
141
142 # Source files
143
144 set(IRRMESHLOADER
145         CB3DMeshFileLoader.cpp
146         COBJMeshFileLoader.cpp
147         CXMeshFileLoader.cpp
148 )
149
150 add_library(IRRMESHOBJ OBJECT
151         CSkinnedMesh.cpp
152         CBoneSceneNode.cpp
153         CMeshSceneNode.cpp
154         CAnimatedMeshSceneNode.cpp
155         ${IRRMESHLOADER}
156 )
157
158 add_library(IRROBJ OBJECT
159         CBillboardSceneNode.cpp
160         CCameraSceneNode.cpp
161         CDummyTransformationSceneNode.cpp
162         CEmptySceneNode.cpp
163         CMeshManipulator.cpp
164         CSceneCollisionManager.cpp
165         CSceneManager.cpp
166         CMeshCache.cpp
167         CDefaultSceneNodeFactory.cpp
168 )
169
170 set(IRRDRVROBJ
171         CNullDriver.cpp
172         COpenGLCacheHandler.cpp
173         COpenGLDriver.cpp
174         COpenGLShaderMaterialRenderer.cpp
175         COpenGLSLMaterialRenderer.cpp
176         COpenGLExtensionHandler.cpp
177         COGLESDriver.cpp
178         COGLESExtensionHandler.cpp
179         COGLES2Driver.cpp
180         COGLES2ExtensionHandler.cpp
181         COGLES2FixedPipelineRenderer.cpp
182         COGLES2MaterialRenderer.cpp
183         COGLES2Renderer2D.cpp
184         CWebGL1Driver.cpp
185         CGLXManager.cpp
186         CWGLManager.cpp
187         CEGLManager.cpp
188         mt_opengl_loader.cpp
189 )
190
191 set(IRRIMAGEOBJ
192         CColorConverter.cpp
193         CImage.cpp
194         CImageLoaderBMP.cpp
195         CImageLoaderJPG.cpp
196         CImageLoaderPNG.cpp
197         CImageLoaderTGA.cpp
198         CImageWriterJPG.cpp
199         CImageWriterPNG.cpp
200 )
201
202 add_library(IRRVIDEOOBJ OBJECT
203         CVideoModeList.cpp
204         CFPSCounter.cpp
205         ${IRRDRVROBJ}
206         ${IRRIMAGEOBJ}
207 )
208
209 add_library(IRRIOOBJ OBJECT
210         CFileList.cpp
211         CFileSystem.cpp
212         CLimitReadFile.cpp
213         CMemoryFile.cpp
214         CReadFile.cpp
215         CWriteFile.cpp
216         CZipReader.cpp
217         CMountPointReader.cpp
218         CAttributes.cpp
219 )
220
221 add_library(IRROTHEROBJ OBJECT
222         CIrrDeviceSDL.cpp
223         CIrrDeviceLinux.cpp
224         CIrrDeviceConsole.cpp
225         CIrrDeviceStub.cpp
226         CIrrDeviceWin32.cpp
227         CIrrDeviceFB.cpp
228         CLogger.cpp
229         COSOperator.cpp
230         Irrlicht.cpp
231         os.cpp
232         leakHunter.cpp
233         CProfiler.cpp
234 )
235
236 if(ANDROID)
237         target_sources(IRROTHEROBJ PRIVATE
238                 Android/CIrrDeviceAndroid.cpp
239                 Android/CAndroidAssetReader.cpp
240                 Android/CAndroidAssetFileArchive.cpp
241                 Android/CKeyEventWrapper.cpp
242         )
243 elseif(APPLE)
244         # Build all IRROTHEROBJ sources as objc++, including the .cpp's
245         set_target_properties(IRROTHEROBJ PROPERTIES COMPILE_OPTIONS "-xobjective-c++")
246         target_sources(IRROTHEROBJ PRIVATE
247                 CIrrDeviceOSX.mm
248                 CNSOGLManager.mm
249         )
250 endif()
251
252 add_library(IRRGUIOBJ OBJECT
253         CGUIButton.cpp
254         CGUICheckBox.cpp
255         CGUIComboBox.cpp
256         CGUIContextMenu.cpp
257         CGUIEditBox.cpp
258         CGUIEnvironment.cpp
259         CGUIFileOpenDialog.cpp
260         CGUIFont.cpp
261         CGUIImage.cpp
262         CGUIInOutFader.cpp
263         CGUIListBox.cpp
264         CGUIMenu.cpp
265         CGUIMeshViewer.cpp
266         CGUIMessageBox.cpp
267         CGUIModalScreen.cpp
268         CGUIScrollBar.cpp
269         CGUISpinBox.cpp
270         CGUISkin.cpp
271         CGUIStaticText.cpp
272         CGUITabControl.cpp
273         CGUITable.cpp
274         CGUIToolBar.cpp
275         CGUIWindow.cpp
276         CGUIColorSelectDialog.cpp
277         CDefaultGUIElementFactory.cpp
278         CGUISpriteBank.cpp
279         CGUIImageList.cpp
280         CGUITreeView.cpp
281         CGUIProfiler.cpp
282 )
283
284 # Library
285
286 add_library(IrrlichtMt)
287 foreach(object_lib
288         IRRMESHOBJ IRROBJ IRRVIDEOOBJ
289         IRRIOOBJ IRROTHEROBJ IRRGUIOBJ)
290         # Set include directories for object library compilation
291         target_include_directories(${object_lib} PRIVATE ${link_includes})
292         # Add objects from object library to main library
293         target_sources(IrrlichtMt PRIVATE $<TARGET_OBJECTS:${object_lib}>)
294 endforeach()
295
296 # Alias target provides add_submodule compatibility
297 add_library(IrrlichtMt::IrrlichtMt ALIAS IrrlichtMt)
298
299 target_include_directories(IrrlichtMt
300         PUBLIC
301                 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
302                 "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
303                 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt>"
304         PRIVATE
305                 ${link_includes}
306 )
307
308 target_link_libraries(IrrlichtMt PRIVATE ${link_libs})
309
310 # Propagate static library flag to lib users, only needed for Windows
311 if(NOT BUILD_SHARED_LIBS)
312         target_compile_definitions(IrrlichtMt INTERFACE _IRR_STATIC_LIB_)
313 endif()
314
315 set_target_properties(IrrlichtMt PROPERTIES
316         VERSION ${PROJECT_VERSION}
317         SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
318 )
319
320 if(WIN32)
321         set_target_properties(IrrlichtMt PROPERTIES PREFIX "") # for DLL name
322 endif()
323
324 # Installation of library
325 if(ANDROID)
326         set(INSTALL_TARGETS IrrlichtMt native_app_glue)
327 else()
328         set(INSTALL_TARGETS IrrlichtMt)
329 endif()
330
331 install(TARGETS ${INSTALL_TARGETS}
332         EXPORT IrrlichtMt-export
333         DESTINATION "${CMAKE_INSTALL_LIBDIR}"
334 )