-include_directories(
- ${CMAKE_SOURCE_DIR}/include
- ${CMAKE_CURRENT_SOURCE_DIR}
-)
-add_definitions(-DIRRLICHT_EXPORTS=1)
+option(BUILD_SHARED_LIBS "Build shared library" TRUE)
+
+# Compiler flags
+
+add_definitions(-DIRRLICHT_EXPORTS)
+if(NOT BUILD_SHARED_LIBS)
+ add_definitions(-D_IRR_STATIC_LIB_)
+endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-D_DEBUG)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
-
-# Compiler flags
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
find_package(ZLIB REQUIRED)
find_package(JPEG REQUIRED)
find_package(PNG REQUIRED)
-include_directories(${ZLIB_INCLUDE_DIR} ${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR})
-link_libraries(${ZLIB_LIBRARY} ${JPEG_LIBRARY} ${PNG_LIBRARY})
# To configure the features available in this Irrlicht build please edit
# include/IrrCompileConfig.h and re-run CMake from a clean state
include(CheckSymbolExists)
-set(CMAKE_REQUIRED_INCLUDES ${CMAKE_SOURCE_DIR}/include)
+set(CMAKE_REQUIRED_INCLUDES ${PROJECT_SOURCE_DIR}/include)
unset(OGLES1_ENABLED CACHE)
unset(OGLES2_ENABLED CACHE)
unset(OGL_ENABLED CACHE)
find_library(EGL_LIBRARY NAMES EGL REQUIRED)
message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}")
- link_libraries(${OPENGLES_LIBRARY} ${EGL_LIBRARY})
endif()
check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
if(OGLES2_ENABLED)
find_package(OpenGLES2 REQUIRED)
- include_directories(${OPENGLES2_INCLUDE_DIR} ${EGL_INCLUDE_DIR})
- link_libraries(${OPENGLES2_LIBRARIES})
endif()
check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
if(OGL_ENABLED)
set(OpenGL_GL_PREFERENCE "LEGACY")
find_package(OpenGL REQUIRED)
- include_directories(${OPENGL_INCLUDE_DIR})
- link_libraries(${OPENGL_LIBRARIES})
endif()
# Platform-specific libs
if(ANDROID)
enable_language(C)
add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
- include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
- link_libraries(native_app_glue -landroid -llog)
elseif(APPLE)
find_library(COCOA_LIB Cocoa REQUIRED)
find_library(IOKIT_LIB IOKit REQUIRED)
- link_libraries(${COCOA_LIB} ${IOKIT_LIB})
add_definitions(-DGL_SILENCE_DEPRECATION)
-elseif(WIN32)
- link_libraries(gdi32 winmm)
else()
# Unix probably
find_package(X11 REQUIRED)
- include_directories(${X11_INCLUDE_DIR})
- link_libraries(${X11_X11_LIB} ${X11_Xxf86vm_LIB})
endif()
+set(link_includes
+ "${PROJECT_SOURCE_DIR}/include"
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+
+ "${ZLIB_INCLUDE_DIR}"
+ "${JPEG_INCLUDE_DIR}"
+ "${PNG_INCLUDE_DIR}"
+
+ ${OPENGL_INCLUDE_DIR}
+ ${OPENGLES2_INCLUDE_DIR}
+ ${EGL_INCLUDE_DIR}
+
+ "$<$<PLATFORM_ID:Android>:${ANDROID_NDK}/sources/android/native_app_glue>"
+ ${X11_INCLUDE_DIR}
+)
+
+set(link_libs
+ "${ZLIB_LIBRARY}"
+ "${JPEG_LIBRARY}"
+ "${PNG_LIBRARY}"
+
+ ${OPENGL_LIBRARIES}
+ ${OPENGLES_LIBRARY}
+ ${OPENGLES2_LIBRARIES}
+ ${EGL_LIBRARY}
+
+ "$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
+ ${COCOA_LIB}
+ ${IOKIT_LIB}
+ "$<$<PLATFORM_ID:Windows>:gdi32>"
+ "$<$<PLATFORM_ID:Windows>:winmm>"
+ ${X11_X11_LIB}
+ ${X11_Xxf86vm_LIB}
+)
+
# Source files
set(IRRMESHLOADER
- CBSPMeshFileLoader.cpp
- CMD2MeshFileLoader.cpp
- CMD3MeshFileLoader.cpp
- CMS3DMeshFileLoader.cpp
CB3DMeshFileLoader.cpp
- C3DSMeshFileLoader.cpp
- COgreMeshFileLoader.cpp
COBJMeshFileLoader.cpp
- CColladaFileLoader.cpp
- CCSMLoader.cpp
- CDMFLoader.cpp
- CLMTSMeshFileLoader.cpp
- CMY3DMeshFileLoader.cpp
- COCTLoader.cpp
CXMeshFileLoader.cpp
- CIrrMeshFileLoader.cpp
- CSTLMeshFileLoader.cpp
- CLWOMeshFileLoader.cpp
- CPLYMeshFileLoader.cpp
- CSMFMeshFileLoader.cpp
- CMeshTextureLoader.cpp
-)
-
-set(IRRMESHWRITER
- CColladaMeshWriter.cpp
- CIrrMeshWriter.cpp
- CSTLMeshWriter.cpp
- COBJMeshWriter.cpp
- CPLYMeshWriter.cpp
- CB3DMeshWriter.cpp
)
add_library(IRRMESHOBJ OBJECT
CBoneSceneNode.cpp
CMeshSceneNode.cpp
CAnimatedMeshSceneNode.cpp
- CAnimatedMeshMD2.cpp
- CAnimatedMeshMD3.cpp
- CQ3LevelMesh.cpp
- CQuake3ShaderSceneNode.cpp
- CAnimatedMeshHalfLife.cpp
${IRRMESHLOADER}
- ${IRRMESHWRITER}
)
add_library(IRROBJ OBJECT
CCameraSceneNode.cpp
CDummyTransformationSceneNode.cpp
CEmptySceneNode.cpp
- CGeometryCreator.cpp
- CLightSceneNode.cpp
CMeshManipulator.cpp
- CMetaTriangleSelector.cpp
- COctreeSceneNode.cpp
- COctreeTriangleSelector.cpp
CSceneCollisionManager.cpp
CSceneManager.cpp
- CShadowVolumeSceneNode.cpp
- CSkyBoxSceneNode.cpp
- CSkyDomeSceneNode.cpp
- CTerrainSceneNode.cpp
- CTerrainTriangleSelector.cpp
- CVolumeLightSceneNode.cpp
- CCubeSceneNode.cpp
- CSphereSceneNode.cpp
- CTextSceneNode.cpp
- CTriangleBBSelector.cpp
- CTriangleSelector.cpp
- CWaterSurfaceSceneNode.cpp
CMeshCache.cpp
- CDefaultSceneNodeAnimatorFactory.cpp
CDefaultSceneNodeFactory.cpp
- CSceneLoaderIrr.cpp
-)
-
-add_library(IRRPARTICLEOBJ OBJECT
- CParticleAnimatedMeshSceneNodeEmitter.cpp
- CParticleBoxEmitter.cpp
- CParticleCylinderEmitter.cpp
- CParticleMeshEmitter.cpp
- CParticlePointEmitter.cpp
- CParticleRingEmitter.cpp
- CParticleSphereEmitter.cpp
- CParticleAttractionAffector.cpp
- CParticleFadeOutAffector.cpp
- CParticleGravityAffector.cpp
- CParticleRotationAffector.cpp
- CParticleSystemSceneNode.cpp
- CParticleScaleAffector.cpp
-)
-
-add_library(IRRANIMOBJ OBJECT
- CSceneNodeAnimatorCameraFPS.cpp
- CSceneNodeAnimatorCameraMaya.cpp
- CSceneNodeAnimatorCollisionResponse.cpp
- CSceneNodeAnimatorDelete.cpp
- CSceneNodeAnimatorFlyCircle.cpp
- CSceneNodeAnimatorFlyStraight.cpp
- CSceneNodeAnimatorFollowSpline.cpp
- CSceneNodeAnimatorRotation.cpp
- CSceneNodeAnimatorTexture.cpp
)
set(IRRDRVROBJ
COpenGLShaderMaterialRenderer.cpp
COpenGLSLMaterialRenderer.cpp
COpenGLExtensionHandler.cpp
- CD3D9Driver.cpp
- CD3D9HLSLMaterialRenderer.cpp
- CD3D9NormalMapRenderer.cpp
- CD3D9ParallaxMapRenderer.cpp
- CD3D9ShaderMaterialRenderer.cpp
- CD3D9Texture.cpp
COGLESDriver.cpp
COGLESExtensionHandler.cpp
COGLES2Driver.cpp
CGLXManager.cpp
CWGLManager.cpp
CEGLManager.cpp
+ mt_opengl_loader.cpp
)
set(IRRIMAGEOBJ
CColorConverter.cpp
CImage.cpp
CImageLoaderBMP.cpp
- CImageLoaderDDS.cpp
CImageLoaderJPG.cpp
- CImageLoaderPCX.cpp
CImageLoaderPNG.cpp
- CImageLoaderPSD.cpp
- CImageLoaderPVR.cpp
- CImageLoaderTGA.cpp
- CImageLoaderPPM.cpp
- CImageLoaderWAL.cpp
- CImageLoaderRGB.cpp
- CImageWriterBMP.cpp
CImageWriterJPG.cpp
- CImageWriterPCX.cpp
CImageWriterPNG.cpp
- CImageWriterPPM.cpp
- CImageWriterPSD.cpp
- CImageWriterTGA.cpp
)
add_library(IRRVIDEOOBJ OBJECT
${IRRIMAGEOBJ}
)
-add_library(IRRSWRENDEROBJ OBJECT
- CSoftwareDriver.cpp
- CSoftwareTexture.cpp
- CTRFlat.cpp
- CTRFlatWire.cpp
- CTRGouraud.cpp
- CTRGouraudWire.cpp
- CTRNormalMap.cpp
- CTRStencilShadow.cpp
- CTRTextureFlat.cpp
- CTRTextureFlatWire.cpp
- CTRTextureGouraud.cpp
- CTRTextureGouraudAdd.cpp
- CTRTextureGouraudNoZ.cpp
- CTRTextureGouraudWire.cpp
- CZBuffer.cpp
- CTRTextureGouraudVertexAlpha2.cpp
- CTRTextureGouraudNoZ2.cpp
- CTRTextureLightMap2_M2.cpp
- CTRTextureLightMap2_M4.cpp
- CTRTextureLightMap2_M1.cpp
- CSoftwareDriver2.cpp
- CSoftwareTexture2.cpp
- CTRTextureGouraud2.cpp
- CTRGouraud2.cpp
- CTRGouraudAlpha2.cpp
- CTRGouraudAlphaNoZ2.cpp
- CTRTextureDetailMap2.cpp
- CTRTextureGouraudAdd2.cpp
- CTRTextureGouraudAddNoZ2.cpp
- CTRTextureWire2.cpp
- CTRTextureLightMap2_Add.cpp
- CTRTextureLightMapGouraud2_M4.cpp
- IBurningShader.cpp
- CTRTextureBlend.cpp
- CTRTextureGouraudAlpha.cpp
- CTRTextureGouraudAlphaNoZ.cpp
- CDepthBuffer.cpp
- CBurningShader_Raster_Reference.cpp
- CTR_transparent_reflection_2_layer.cpp
- CTRGouraudNoZ2.cpp
- burning_shader_color.cpp
-)
-
add_library(IRRIOOBJ OBJECT
CFileList.cpp
CFileSystem.cpp
CMemoryFile.cpp
CReadFile.cpp
CWriteFile.cpp
- CXMLReader.cpp
- CXMLWriter.cpp
- CWADReader.cpp
CZipReader.cpp
- CPakReader.cpp
- CNPKReader.cpp
- CTarReader.cpp
CMountPointReader.cpp
- irrXML.cpp
CAttributes.cpp
)
# Library
-option(BUILD_SHARED_LIBS "Build shared library" TRUE)
-
-add_library(IrrlichtMt
- $<TARGET_OBJECTS:IRRMESHOBJ>
- $<TARGET_OBJECTS:IRROBJ>
- $<TARGET_OBJECTS:IRRPARTICLEOBJ>
- $<TARGET_OBJECTS:IRRANIMOBJ>
- $<TARGET_OBJECTS:IRRVIDEOOBJ>
- $<TARGET_OBJECTS:IRRSWRENDEROBJ>
- $<TARGET_OBJECTS:IRRIOOBJ>
- $<TARGET_OBJECTS:IRROTHEROBJ>
- $<TARGET_OBJECTS:IRRGUIOBJ>
+add_library(IrrlichtMt)
+foreach(object_lib
+ IRRMESHOBJ IRROBJ IRRVIDEOOBJ
+ IRRIOOBJ IRROTHEROBJ IRRGUIOBJ)
+ # Set include directories for object library compilation
+ target_include_directories(${object_lib} PRIVATE ${link_includes})
+ # Add objects from object library to main library
+ target_sources(IrrlichtMt PRIVATE $<TARGET_OBJECTS:${object_lib}>)
+endforeach()
+
+# Alias target provides add_submodule compatibility
+add_library(IrrlichtMt::IrrlichtMt ALIAS IrrlichtMt)
+
+target_include_directories(IrrlichtMt
+ PUBLIC
+ "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt>"
+ PRIVATE
+ ${link_includes}
)
+target_link_libraries(IrrlichtMt PRIVATE ${link_libs})
+
+# Propagate static library flag to lib users, only needed for Windows
+if(NOT BUILD_SHARED_LIBS)
+ target_compile_definitions(IrrlichtMt INTERFACE _IRR_STATIC_LIB_)
+endif()
+
set_target_properties(IrrlichtMt PROPERTIES
- VERSION ${VERSION}
- SOVERSION ${IRRLICHT_VERSION_MAJOR}.${IRRLICHT_VERSION_MINOR}
+ VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
if(WIN32)
set_target_properties(IrrlichtMt PROPERTIES PREFIX "") # for DLL name
endif()
-# Installation
+# Installation of library
+if(ANDROID)
+ set(INSTALL_TARGETS IrrlichtMt native_app_glue)
+else()
+ set(INSTALL_TARGETS IrrlichtMt)
+endif()
-include(GNUInstallDirs)
-install(TARGETS IrrlichtMt DESTINATION "${CMAKE_INSTALL_LIBDIR}")
-install(DIRECTORY "${CMAKE_SOURCE_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt")
+install(TARGETS ${INSTALL_TARGETS}
+ EXPORT IrrlichtMt-export
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+)