1 option(BUILD_SHARED_LIBS "Build shared library" TRUE)
5 add_definitions(-DIRRLICHT_EXPORTS)
6 if(NOT BUILD_SHARED_LIBS)
7 add_definitions(-D_IRR_STATIC_LIB_)
9 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
10 add_definitions(-D_DEBUG)
12 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
13 set(CMAKE_CXX_STANDARD 11)
14 set(CMAKE_CXX_STANDARD_REQUIRED ON)
16 if(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
17 set(CMAKE_CXX_FLAGS_RELEASE "-O3")
18 set(CMAKE_CXX_FLAGS_DEBUG "-g")
20 add_compile_options(-Wall -pipe -fno-exceptions -fno-rtti)
22 string(APPEND CMAKE_CXX_STANDARD_LIBRARIES " msvcrt.lib") # ???? fuck off
24 add_compile_options(/GR- /Zl)
29 find_package(ZLIB REQUIRED)
30 find_package(JPEG REQUIRED)
31 find_package(PNG REQUIRED)
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)
42 check_symbol_exists(_IRR_COMPILE_WITH_OGLES1_ "IrrCompileConfig.h" 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)
48 message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}")
50 check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
52 find_package(OpenGLES2 REQUIRED)
54 check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
56 set(OpenGL_GL_PREFERENCE "LEGACY")
57 find_package(OpenGL REQUIRED)
59 check_symbol_exists(_IRR_LINUX_X11_XINPUT2_ "IrrCompileConfig.h" XINPUT2_ENABLED)
61 find_library(XINPUT_LIBRARY Xi REQUIRED)
64 # Platform-specific libs
68 add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
70 find_library(COCOA_LIB Cocoa REQUIRED)
71 find_library(IOKIT_LIB IOKit REQUIRED)
73 add_definitions(-DGL_SILENCE_DEPRECATION)
76 find_package(X11 REQUIRED)
80 "${PROJECT_SOURCE_DIR}/include"
81 "${CMAKE_CURRENT_SOURCE_DIR}"
88 ${OPENGLES2_INCLUDE_DIR}
91 "$<$<PLATFORM_ID:Android>:${ANDROID_NDK}/sources/android/native_app_glue>"
102 ${OPENGLES2_LIBRARIES}
106 "$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
109 "$<$<PLATFORM_ID:Windows>:gdi32>"
110 "$<$<PLATFORM_ID:Windows>:winmm>"
118 CB3DMeshFileLoader.cpp
119 COBJMeshFileLoader.cpp
123 add_library(IRRMESHOBJ OBJECT
127 CAnimatedMeshSceneNode.cpp
131 add_library(IRROBJ OBJECT
132 CBillboardSceneNode.cpp
134 CDummyTransformationSceneNode.cpp
137 CSceneCollisionManager.cpp
140 CDefaultSceneNodeFactory.cpp
145 COpenGLCacheHandler.cpp
147 COpenGLNormalMapRenderer.cpp
148 COpenGLParallaxMapRenderer.cpp
149 COpenGLShaderMaterialRenderer.cpp
150 COpenGLSLMaterialRenderer.cpp
151 COpenGLExtensionHandler.cpp
153 COGLESExtensionHandler.cpp
155 COGLES2ExtensionHandler.cpp
156 COGLES2FixedPipelineRenderer.cpp
157 COGLES2MaterialRenderer.cpp
158 COGLES2NormalMapRenderer.cpp
159 COGLES2ParallaxMapRenderer.cpp
160 COGLES2Renderer2D.cpp
179 add_library(IRRVIDEOOBJ OBJECT
186 add_library(IRRIOOBJ OBJECT
194 CMountPointReader.cpp
198 add_library(IRROTHEROBJ OBJECT
201 CIrrDeviceConsole.cpp
214 target_sources(IRROTHEROBJ PRIVATE
215 Android/CIrrDeviceAndroid.cpp
216 Android/CAndroidAssetReader.cpp
217 Android/CAndroidAssetFileArchive.cpp
218 Android/CKeyEventWrapper.cpp
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
229 add_library(IRRGUIOBJ OBJECT
236 CGUIFileOpenDialog.cpp
253 CGUIColorSelectDialog.cpp
254 CDefaultGUIElementFactory.cpp
263 add_library(IrrlichtMt)
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}>)
273 # Alias target provides add_submodule compatibility
274 add_library(IrrlichtMt::IrrlichtMt ALIAS IrrlichtMt)
276 target_include_directories(IrrlichtMt
278 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
279 "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
280 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt>"
285 target_link_libraries(IrrlichtMt PRIVATE ${link_libs})
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_)
292 set_target_properties(IrrlichtMt PROPERTIES
293 VERSION ${PROJECT_VERSION}
294 SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
298 set_target_properties(IrrlichtMt PROPERTIES PREFIX "") # for DLL name
301 # Installation of library
303 set(INSTALL_TARGETS IrrlichtMt native_app_glue)
305 set(INSTALL_TARGETS IrrlichtMt)
308 install(TARGETS ${INSTALL_TARGETS}
309 EXPORT IrrlichtMt-export
310 DESTINATION "${CMAKE_INSTALL_LIBDIR}"