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