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)
41 check_symbol_exists(_IRR_COMPILE_WITH_OGLES1_ "IrrCompileConfig.h" OGLES1_ENABLED)
43 # only tested on Android, probably works on Linux (is this needed anywhere else?)
44 find_library(OPENGLES_LIBRARY NAMES GLESv1_CM REQUIRED)
45 find_library(EGL_LIBRARY NAMES EGL REQUIRED)
47 message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}")
49 check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
51 find_package(OpenGLES2 REQUIRED)
53 check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
55 set(OpenGL_GL_PREFERENCE "LEGACY")
56 find_package(OpenGL REQUIRED)
59 # Platform-specific libs
63 add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
65 find_library(COCOA_LIB Cocoa REQUIRED)
66 find_library(IOKIT_LIB IOKit REQUIRED)
68 add_definitions(-DGL_SILENCE_DEPRECATION)
71 find_package(X11 REQUIRED)
75 "${PROJECT_SOURCE_DIR}/include"
76 "${CMAKE_CURRENT_SOURCE_DIR}"
83 ${OPENGLES2_INCLUDE_DIR}
86 "$<$<PLATFORM_ID:Android>:${ANDROID_NDK}/sources/android/native_app_glue>"
97 ${OPENGLES2_LIBRARIES}
100 "$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
103 "$<$<PLATFORM_ID:Windows>:gdi32>"
104 "$<$<PLATFORM_ID:Windows>:winmm>"
112 CB3DMeshFileLoader.cpp
113 COBJMeshFileLoader.cpp
117 add_library(IRRMESHOBJ OBJECT
121 CAnimatedMeshSceneNode.cpp
125 add_library(IRROBJ OBJECT
126 CBillboardSceneNode.cpp
128 CDummyTransformationSceneNode.cpp
131 CSceneCollisionManager.cpp
134 CDefaultSceneNodeFactory.cpp
139 COpenGLCacheHandler.cpp
141 COpenGLNormalMapRenderer.cpp
142 COpenGLParallaxMapRenderer.cpp
143 COpenGLShaderMaterialRenderer.cpp
144 COpenGLSLMaterialRenderer.cpp
145 COpenGLExtensionHandler.cpp
147 COGLESExtensionHandler.cpp
149 COGLES2ExtensionHandler.cpp
150 COGLES2FixedPipelineRenderer.cpp
151 COGLES2MaterialRenderer.cpp
152 COGLES2NormalMapRenderer.cpp
153 COGLES2ParallaxMapRenderer.cpp
154 COGLES2Renderer2D.cpp
172 add_library(IRRVIDEOOBJ OBJECT
179 add_library(IRRIOOBJ OBJECT
187 CMountPointReader.cpp
191 add_library(IRROTHEROBJ OBJECT
194 CIrrDeviceConsole.cpp
208 target_sources(IRROTHEROBJ PRIVATE
209 Android/CIrrDeviceAndroid.cpp
210 Android/CAndroidAssetReader.cpp
211 Android/CAndroidAssetFileArchive.cpp
212 Android/CKeyEventWrapper.cpp
215 # Build all IRROTHEROBJ sources as objc++, including the .cpp's
216 set_target_properties(IRROTHEROBJ PROPERTIES COMPILE_OPTIONS "-xobjective-c++")
217 target_sources(IRROTHEROBJ PRIVATE
223 add_library(IRRGUIOBJ OBJECT
230 CGUIFileOpenDialog.cpp
247 CGUIColorSelectDialog.cpp
248 CDefaultGUIElementFactory.cpp
257 add_library(IrrlichtMt)
259 IRRMESHOBJ IRROBJ IRRVIDEOOBJ
260 IRRIOOBJ IRROTHEROBJ IRRGUIOBJ)
261 # Set include directories for object library compilation
262 target_include_directories(${object_lib} PRIVATE ${link_includes})
263 # Add objects from object library to main library
264 target_sources(IrrlichtMt PRIVATE $<TARGET_OBJECTS:${object_lib}>)
267 # Alias target provides add_submodule compatibility
268 add_library(IrrlichtMt::IrrlichtMt ALIAS IrrlichtMt)
270 target_include_directories(IrrlichtMt
272 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
273 "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
274 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt>"
279 target_link_libraries(IrrlichtMt PRIVATE ${link_libs})
281 # Propagate static library flag to lib users, only needed for Windows
282 if(NOT BUILD_SHARED_LIBS)
283 target_compile_definitions(IrrlichtMt INTERFACE _IRR_STATIC_LIB_)
286 set_target_properties(IrrlichtMt PROPERTIES
287 VERSION ${PROJECT_VERSION}
288 SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
292 set_target_properties(IrrlichtMt PROPERTIES PREFIX "") # for DLL name
295 # Installation of library
297 set(INSTALL_TARGETS IrrlichtMt native_app_glue)
299 set(INSTALL_TARGETS IrrlichtMt)
302 install(TARGETS ${INSTALL_TARGETS}
303 EXPORT IrrlichtMt-export
304 DESTINATION "${CMAKE_INSTALL_LIBDIR}"