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