]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/CMakeLists.txt
CMake Config and Version exports (#22)
[irrlicht.git] / source / Irrlicht / CMakeLists.txt
1 include_directories(
2         ${CMAKE_SOURCE_DIR}/include
3         ${CMAKE_CURRENT_SOURCE_DIR}
4 )
5 add_definitions(-DIRRLICHT_EXPORTS=1)
6 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
7         add_definitions(-D_DEBUG)
8 endif()
9 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
10
11 # Compiler flags
12
13 if(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
14         set(CMAKE_CXX_FLAGS_RELEASE "-O3")
15         set(CMAKE_CXX_FLAGS_DEBUG "-g")
16
17         add_compile_options(-Wall -pipe -fno-exceptions -fno-rtti)
18 elseif(MSVC)
19         string(APPEND CMAKE_CXX_STANDARD_LIBRARIES " msvcrt.lib") # ???? fuck off
20
21         add_compile_options(/GR- /Zl)
22 endif()
23
24 # Required libs
25
26 find_package(ZLIB REQUIRED)
27 find_package(JPEG REQUIRED)
28 find_package(PNG REQUIRED)
29 include_directories(${ZLIB_INCLUDE_DIR} ${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR})
30 link_libraries(${ZLIB_LIBRARY} ${JPEG_LIBRARY} ${PNG_LIBRARY})
31
32 # To configure the features available in this Irrlicht build please edit
33 # include/IrrCompileConfig.h and re-run CMake from a clean state
34 include(CheckSymbolExists)
35 set(CMAKE_REQUIRED_INCLUDES ${CMAKE_SOURCE_DIR}/include)
36 unset(OGLES1_ENABLED CACHE)
37 unset(OGLES2_ENABLED CACHE)
38 unset(OGL_ENABLED CACHE)
39
40 check_symbol_exists(_IRR_COMPILE_WITH_OGLES1_ "IrrCompileConfig.h" OGLES1_ENABLED)
41 if(OGLES1_ENABLED)
42         # only tested on Android, probably works on Linux (is this needed anywhere else?)
43         find_library(OPENGLES_LIBRARY NAMES GLESv1_CM REQUIRED)
44         find_library(EGL_LIBRARY NAMES EGL REQUIRED)
45
46         message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}")
47         link_libraries(${OPENGLES_LIBRARY} ${EGL_LIBRARY})
48 endif()
49 check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
50 if(OGLES2_ENABLED)
51         find_package(OpenGLES2 REQUIRED)
52         include_directories(${OPENGLES2_INCLUDE_DIR} ${EGL_INCLUDE_DIR})
53         link_libraries(${OPENGLES2_LIBRARIES})
54 endif()
55 check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
56 if(OGL_ENABLED)
57         set(OpenGL_GL_PREFERENCE "LEGACY")
58         find_package(OpenGL REQUIRED)
59         include_directories(${OPENGL_INCLUDE_DIR})
60         link_libraries(${OPENGL_LIBRARIES})
61 endif()
62
63 # Platform-specific libs
64
65 if(ANDROID)
66         enable_language(C)
67         add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
68         include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
69         link_libraries(native_app_glue -landroid -llog)
70 elseif(APPLE)
71         find_library(COCOA_LIB Cocoa REQUIRED)
72         find_library(IOKIT_LIB IOKit REQUIRED)
73         link_libraries(${COCOA_LIB} ${IOKIT_LIB})
74
75         add_definitions(-DGL_SILENCE_DEPRECATION)
76 elseif(WIN32)
77         link_libraries(gdi32 winmm)
78 else()
79         # Unix probably
80         find_package(X11 REQUIRED)
81         include_directories(${X11_INCLUDE_DIR})
82         link_libraries(${X11_X11_LIB} ${X11_Xxf86vm_LIB})
83 endif()
84
85 # Source files
86
87 set(IRRMESHLOADER
88         CBSPMeshFileLoader.cpp
89         CMD2MeshFileLoader.cpp
90         CMD3MeshFileLoader.cpp
91         CMS3DMeshFileLoader.cpp
92         CB3DMeshFileLoader.cpp
93         C3DSMeshFileLoader.cpp
94         COgreMeshFileLoader.cpp
95         COBJMeshFileLoader.cpp
96         CColladaFileLoader.cpp
97         CCSMLoader.cpp
98         CDMFLoader.cpp
99         CLMTSMeshFileLoader.cpp
100         CMY3DMeshFileLoader.cpp
101         COCTLoader.cpp
102         CXMeshFileLoader.cpp
103         CIrrMeshFileLoader.cpp
104         CSTLMeshFileLoader.cpp
105         CLWOMeshFileLoader.cpp
106         CPLYMeshFileLoader.cpp
107         CSMFMeshFileLoader.cpp
108         CMeshTextureLoader.cpp
109 )
110
111 set(IRRMESHWRITER
112         CColladaMeshWriter.cpp
113         CIrrMeshWriter.cpp
114         CSTLMeshWriter.cpp
115         COBJMeshWriter.cpp
116         CPLYMeshWriter.cpp
117         CB3DMeshWriter.cpp
118 )
119
120 add_library(IRRMESHOBJ OBJECT
121         CSkinnedMesh.cpp
122         CBoneSceneNode.cpp
123         CMeshSceneNode.cpp
124         CAnimatedMeshSceneNode.cpp
125         CAnimatedMeshMD2.cpp
126         CAnimatedMeshMD3.cpp
127         CQ3LevelMesh.cpp
128         CQuake3ShaderSceneNode.cpp
129         CAnimatedMeshHalfLife.cpp
130         ${IRRMESHLOADER}
131         ${IRRMESHWRITER}
132 )
133
134 add_library(IRROBJ OBJECT
135         CBillboardSceneNode.cpp
136         CCameraSceneNode.cpp
137         CDummyTransformationSceneNode.cpp
138         CEmptySceneNode.cpp
139         CGeometryCreator.cpp
140         CLightSceneNode.cpp
141         CMeshManipulator.cpp
142         CMetaTriangleSelector.cpp
143         COctreeSceneNode.cpp
144         COctreeTriangleSelector.cpp
145         CSceneCollisionManager.cpp
146         CSceneManager.cpp
147         CShadowVolumeSceneNode.cpp
148         CSkyBoxSceneNode.cpp
149         CSkyDomeSceneNode.cpp
150         CTerrainSceneNode.cpp
151         CTerrainTriangleSelector.cpp
152         CVolumeLightSceneNode.cpp
153         CCubeSceneNode.cpp
154         CSphereSceneNode.cpp
155         CTextSceneNode.cpp
156         CTriangleBBSelector.cpp
157         CTriangleSelector.cpp
158         CWaterSurfaceSceneNode.cpp
159         CMeshCache.cpp
160         CDefaultSceneNodeAnimatorFactory.cpp
161         CDefaultSceneNodeFactory.cpp
162         CSceneLoaderIrr.cpp
163 )
164
165 add_library(IRRPARTICLEOBJ OBJECT
166         CParticleAnimatedMeshSceneNodeEmitter.cpp
167         CParticleBoxEmitter.cpp
168         CParticleCylinderEmitter.cpp
169         CParticleMeshEmitter.cpp
170         CParticlePointEmitter.cpp
171         CParticleRingEmitter.cpp
172         CParticleSphereEmitter.cpp
173         CParticleAttractionAffector.cpp
174         CParticleFadeOutAffector.cpp
175         CParticleGravityAffector.cpp
176         CParticleRotationAffector.cpp
177         CParticleSystemSceneNode.cpp
178         CParticleScaleAffector.cpp
179 )
180
181 add_library(IRRANIMOBJ OBJECT
182         CSceneNodeAnimatorCameraFPS.cpp
183         CSceneNodeAnimatorCameraMaya.cpp
184         CSceneNodeAnimatorCollisionResponse.cpp
185         CSceneNodeAnimatorDelete.cpp
186         CSceneNodeAnimatorFlyCircle.cpp
187         CSceneNodeAnimatorFlyStraight.cpp
188         CSceneNodeAnimatorFollowSpline.cpp
189         CSceneNodeAnimatorRotation.cpp
190         CSceneNodeAnimatorTexture.cpp
191 )
192
193 set(IRRDRVROBJ
194         CNullDriver.cpp
195         COpenGLCacheHandler.cpp
196         COpenGLDriver.cpp
197         COpenGLNormalMapRenderer.cpp
198         COpenGLParallaxMapRenderer.cpp
199         COpenGLShaderMaterialRenderer.cpp
200         COpenGLSLMaterialRenderer.cpp
201         COpenGLExtensionHandler.cpp
202         CD3D9Driver.cpp
203         CD3D9HLSLMaterialRenderer.cpp
204         CD3D9NormalMapRenderer.cpp
205         CD3D9ParallaxMapRenderer.cpp
206         CD3D9ShaderMaterialRenderer.cpp
207         CD3D9Texture.cpp
208         COGLESDriver.cpp
209         COGLESExtensionHandler.cpp
210         COGLES2Driver.cpp
211         COGLES2ExtensionHandler.cpp
212         COGLES2FixedPipelineRenderer.cpp
213         COGLES2MaterialRenderer.cpp
214         COGLES2NormalMapRenderer.cpp
215         COGLES2ParallaxMapRenderer.cpp
216         COGLES2Renderer2D.cpp
217         CWebGL1Driver.cpp
218         CGLXManager.cpp
219         CWGLManager.cpp
220         CEGLManager.cpp
221 )
222
223 set(IRRIMAGEOBJ
224         CColorConverter.cpp
225         CImage.cpp
226         CImageLoaderBMP.cpp
227         CImageLoaderDDS.cpp
228         CImageLoaderJPG.cpp
229         CImageLoaderPCX.cpp
230         CImageLoaderPNG.cpp
231         CImageLoaderPSD.cpp
232         CImageLoaderPVR.cpp
233         CImageLoaderTGA.cpp
234         CImageLoaderPPM.cpp
235         CImageLoaderWAL.cpp
236         CImageLoaderRGB.cpp
237         CImageWriterBMP.cpp
238         CImageWriterJPG.cpp
239         CImageWriterPCX.cpp
240         CImageWriterPNG.cpp
241         CImageWriterPPM.cpp
242         CImageWriterPSD.cpp
243         CImageWriterTGA.cpp
244 )
245
246 add_library(IRRVIDEOOBJ OBJECT
247         CVideoModeList.cpp
248         CFPSCounter.cpp
249         ${IRRDRVROBJ}
250         ${IRRIMAGEOBJ}
251 )
252
253 add_library(IRRSWRENDEROBJ OBJECT
254         CSoftwareDriver.cpp
255         CSoftwareTexture.cpp
256         CTRFlat.cpp
257         CTRFlatWire.cpp
258         CTRGouraud.cpp
259         CTRGouraudWire.cpp
260         CTRNormalMap.cpp
261         CTRStencilShadow.cpp
262         CTRTextureFlat.cpp
263         CTRTextureFlatWire.cpp
264         CTRTextureGouraud.cpp
265         CTRTextureGouraudAdd.cpp
266         CTRTextureGouraudNoZ.cpp
267         CTRTextureGouraudWire.cpp
268         CZBuffer.cpp
269         CTRTextureGouraudVertexAlpha2.cpp
270         CTRTextureGouraudNoZ2.cpp
271         CTRTextureLightMap2_M2.cpp
272         CTRTextureLightMap2_M4.cpp
273         CTRTextureLightMap2_M1.cpp
274         CSoftwareDriver2.cpp
275         CSoftwareTexture2.cpp
276         CTRTextureGouraud2.cpp
277         CTRGouraud2.cpp
278         CTRGouraudAlpha2.cpp
279         CTRGouraudAlphaNoZ2.cpp
280         CTRTextureDetailMap2.cpp
281         CTRTextureGouraudAdd2.cpp
282         CTRTextureGouraudAddNoZ2.cpp
283         CTRTextureWire2.cpp
284         CTRTextureLightMap2_Add.cpp
285         CTRTextureLightMapGouraud2_M4.cpp
286         IBurningShader.cpp
287         CTRTextureBlend.cpp
288         CTRTextureGouraudAlpha.cpp
289         CTRTextureGouraudAlphaNoZ.cpp
290         CDepthBuffer.cpp
291         CBurningShader_Raster_Reference.cpp
292         CTR_transparent_reflection_2_layer.cpp
293         CTRGouraudNoZ2.cpp
294         burning_shader_color.cpp
295 )
296
297 add_library(IRRIOOBJ OBJECT
298         CFileList.cpp
299         CFileSystem.cpp
300         CLimitReadFile.cpp
301         CMemoryFile.cpp
302         CReadFile.cpp
303         CWriteFile.cpp
304         CXMLReader.cpp
305         CXMLWriter.cpp
306         CWADReader.cpp
307         CZipReader.cpp
308         CPakReader.cpp
309         CNPKReader.cpp
310         CTarReader.cpp
311         CMountPointReader.cpp
312         irrXML.cpp
313         CAttributes.cpp
314 )
315
316 add_library(IRROTHEROBJ OBJECT
317         CIrrDeviceSDL.cpp
318         CIrrDeviceLinux.cpp
319         CIrrDeviceConsole.cpp
320         CIrrDeviceStub.cpp
321         CIrrDeviceWin32.cpp
322         CIrrDeviceFB.cpp
323         CLogger.cpp
324         COSOperator.cpp
325         Irrlicht.cpp
326         os.cpp
327         leakHunter.cpp
328         CProfiler.cpp
329         utf8.cpp
330 )
331
332 if(ANDROID)
333         target_sources(IRROTHEROBJ PRIVATE
334                 Android/CIrrDeviceAndroid.cpp
335                 Android/CAndroidAssetReader.cpp
336                 Android/CAndroidAssetFileArchive.cpp
337                 Android/CKeyEventWrapper.cpp
338         )
339 elseif(APPLE)
340         # Build all IRROTHEROBJ sources as objc++, including the .cpp's
341         set_target_properties(IRROTHEROBJ PROPERTIES COMPILE_OPTIONS "-xobjective-c++")
342         target_sources(IRROTHEROBJ PRIVATE
343                 CIrrDeviceOSX.mm
344                 CNSOGLManager.mm
345         )
346 endif()
347
348 add_library(IRRGUIOBJ OBJECT
349         CGUIButton.cpp
350         CGUICheckBox.cpp
351         CGUIComboBox.cpp
352         CGUIContextMenu.cpp
353         CGUIEditBox.cpp
354         CGUIEnvironment.cpp
355         CGUIFileOpenDialog.cpp
356         CGUIFont.cpp
357         CGUIImage.cpp
358         CGUIInOutFader.cpp
359         CGUIListBox.cpp
360         CGUIMenu.cpp
361         CGUIMeshViewer.cpp
362         CGUIMessageBox.cpp
363         CGUIModalScreen.cpp
364         CGUIScrollBar.cpp
365         CGUISpinBox.cpp
366         CGUISkin.cpp
367         CGUIStaticText.cpp
368         CGUITabControl.cpp
369         CGUITable.cpp
370         CGUIToolBar.cpp
371         CGUIWindow.cpp
372         CGUIColorSelectDialog.cpp
373         CDefaultGUIElementFactory.cpp
374         CGUISpriteBank.cpp
375         CGUIImageList.cpp
376         CGUITreeView.cpp
377         CGUIProfiler.cpp
378 )
379
380 # Library
381
382 option(BUILD_SHARED_LIBS "Build shared library" TRUE)
383
384 add_library(IrrlichtMt
385         $<TARGET_OBJECTS:IRRMESHOBJ>
386         $<TARGET_OBJECTS:IRROBJ>
387         $<TARGET_OBJECTS:IRRPARTICLEOBJ>
388         $<TARGET_OBJECTS:IRRANIMOBJ>
389         $<TARGET_OBJECTS:IRRVIDEOOBJ>
390         $<TARGET_OBJECTS:IRRSWRENDEROBJ>
391         $<TARGET_OBJECTS:IRRIOOBJ>
392         $<TARGET_OBJECTS:IRROTHEROBJ>
393         $<TARGET_OBJECTS:IRRGUIOBJ>
394 )
395
396 set_target_properties(IrrlichtMt PROPERTIES
397         VERSION ${PROJECT_VERSION}
398         SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
399 )
400
401 if(WIN32)
402         set_target_properties(IrrlichtMt PROPERTIES PREFIX "") # for DLL name
403 endif()