+# Sanity-check version
+
+include(CheckCXXSourceCompiles)
+set(CMAKE_REQUIRED_INCLUDES ${PROJECT_SOURCE_DIR}/include)
+unset(REVISION_SANITY_CHECK CACHE)
+check_cxx_source_compiles("#include <IrrCompileConfig.h>\n\
+#if IRRLICHT_VERSION_MT_REVISION != ${IRRLICHTMT_REVISION}\n\
+#error\n\
+#endif\n\
+int main() {}" REVISION_SANITY_CHECK)
+if(NOT REVISION_SANITY_CHECK)
+ message(FATAL_ERROR "IrrlichtMt revision number mismatches between CMake and headers.")
+endif()
+
+# Platform-independent configuration (hard-coded currently)
+add_definitions(
+ -DIRR_ENABLE_BUILTIN_FONT
+ -D_IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
+ )
+
+# Platform-specific configuration
+
+if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
+ set(SOLARIS TRUE)
+endif()
+if(APPLE AND NOT IOS)
+ set(OSX TRUE)
+endif()
+
+# Device
+
+if(WIN32)
+ add_definitions(-D_IRR_WINDOWS_ -D_IRR_WINDOWS_API_)
+ set(DEVICE "WINDOWS")
+elseif(IOS)
+ add_definitions(-D_IRR_IOS_PLATFORM_ -D_IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_)
+ if(USE_SDL2)
+ message(WARNING "SDL2 backend is not supported on iOS")
+ set(USE_SDL2 FALSE)
+ endif()
+ set(DEVICE "IOS")
+elseif(OSX)
+ add_definitions(-D_IRR_OSX_PLATFORM_)
+ set(DEVICE "OSX")
+elseif(ANDROID)
+ add_definitions(-D_IRR_ANDROID_PLATFORM_ -D_IRR_COMPILE_ANDROID_ASSET_READER_)
+ if(USE_SDL2)
+ message(WARNING "SDL2 backend is not supported on Android")
+ set(USE_SDL2 FALSE)
+ endif()
+ set(DEVICE "Android")
+elseif(EMSCRIPTEN)
+ add_definitions(-D_IRR_EMSCRIPTEN_PLATFORM_ -D_IRR_COMPILE_WITH_EGL_MANAGER_)
+ set(LINUX_PLATFORM TRUE)
+ set(DEVICE "SDL")
+elseif(SOLARIS)
+ add_definitions(-D_IRR_SOLARIS_PLATFORM_ -D_IRR_POSIX_API_)
+ set(DEVICE "X11")
+else()
+ add_definitions(-D_IRR_POSIX_API_)
+ set(LINUX_PLATFORM TRUE)
+ set(DEVICE "X11")
+endif()
+
+if(LINUX_PLATFORM)
+ add_definitions(-D_IRR_LINUX_PLATFORM_)
+endif()
+
+if(USE_SDL2)
+ set(DEVICE "SDL")
+endif()
+
+add_definitions("-D_IRR_COMPILE_WITH_${DEVICE}_DEVICE_")
+
+# X11
+
+if(DEVICE STREQUAL "X11")
+ option(USE_X11 "Use X11" TRUE)
+else()
+ set(USE_X11 FALSE)
+endif()
+
+if(LINUX_PLATFORM AND USE_X11)
+ option(USE_XINPUT2 "Use XInput2" TRUE)
+ option(USE_XCURSOR "Use XCursor" FALSE)
+else()
+ set(USE_XINPUT2 FALSE)
+ set(USE_XCURSOR FALSE)
+endif()
+
+# Joystick
+
+if(NOT (BSD OR SOLARIS OR EMSCRIPTEN))
+ add_definitions(-D_IRR_COMPILE_WITH_JOYSTICK_EVENTS_)
+endif()
+
+# OpenGL
+
+if(IOS OR ANDROID OR EMSCRIPTEN)
+ set(ENABLE_OPENGL FALSE)
+else()
+ option(ENABLE_OPENGL "Enable OpenGL" TRUE)
+endif()
+
+if(EMSCRIPTEN OR OSX)
+ set(ENABLE_GLES1 FALSE)
+else()
+ if(ANDROID OR IOS)
+ set(DEFAULT_GLES1 TRUE)
+ endif()
+ option(ENABLE_GLES1 "Enable OpenGL ES" ${DEFAULT_GLES1})
+endif()
+
+if(OSX)
+ set(ENABLE_GLES2 FALSE)
+ set(ENABLE_WEBGL1 FALSE)
+else()
+ if(ANDROID OR IOS OR EMSCRIPTEN)
+ set(DEFAULT_GLES2 TRUE)
+ endif()
+ if(EMSCRIPTEN)
+ set(DEFAULT_WEBGL1 TRUE)
+ endif()
+ option(ENABLE_GLES2 "Enable OpenGL ES 2+" ${DEFAULT_GLES2})
+ option(ENABLE_WEBGL1 "Enable WebGL (requires GLES2)" ${DEFAULT_WEBGL1})
+ if(ENABLE_WEBGL1)
+ set(ENABLE_GLES2 TRUE)
+ endif()
+endif()
+
+if(ENABLE_OPENGL)
+ add_definitions(-D_IRR_COMPILE_WITH_OPENGL_)
+ if(DEVICE STREQUAL "WINDOWS")
+ add_definitions(-D_IRR_COMPILE_WITH_WGL_MANAGER_ -D_IRR_OPENGL_USE_EXTPOINTER_)
+ elseif(DEVICE STREQUAL "X11")
+ add_definitions(-D_IRR_COMPILE_WITH_GLX_MANAGER_ -D_IRR_OPENGL_USE_EXTPOINTER_)
+ elseif(DEVICE STREQUAL "OSX")
+ add_definitions(-D_IRR_COMPILE_WITH_NSOGL_MANAGER_)
+ elseif(DEVICE STREQUAL "SDL")
+ add_definitions(-D_IRR_OPENGL_USE_EXTPOINTER_)
+ endif()
+endif()
+
+if(ENABLE_GLES1)
+ add_definitions(-D_IRR_COMPILE_WITH_OGLES1_)
+ if(DEVICE MATCHES "^(WINDOWS|X11|ANDROID)$")
+ add_definitions(-D_IRR_COMPILE_WITH_EGL_MANAGER_ -D_IRR_OGLES1_USE_EXTPOINTER_)
+ elseif(DEVICE STREQUAL "IOS")
+ add_definitions(-D_IRR_COMPILE_WITH_EAGL_MANAGER_)
+ endif()
+endif()
+
+if(ENABLE_GLES2)
+ add_definitions(-D_IRR_COMPILE_WITH_OGLES2_)
+ if(DEVICE MATCHES "^(WINDOWS|X11|ANDROID)$" OR EMSCRIPTEN)
+ add_definitions(-D_IRR_COMPILE_WITH_EGL_MANAGER_ -D_IRR_OGLES2_USE_EXTPOINTER_)
+ elseif(DEVICE STREQUAL "IOS")
+ add_definitions(-D_IRR_COMPILE_WITH_EAGL_MANAGER_)
+ endif()
+endif()
+
+if(ENABLE_WEBGL1)
+ add_definitions(-D_IRR_COMPILE_WITH_WEBGL1_)
+endif()
+
+# Misc
+
+include(TestBigEndian)
+TEST_BIG_ENDIAN(BIG_ENDIAN)
+if(BIG_ENDIAN)
+ add_definitions(-D__BIG_ENDIAN__)
+endif()
+
+# Configuration report
+
+message(STATUS "Device: ${DEVICE}")
+message(STATUS "OpenGL: ${ENABLE_OPENGL}")
+message(STATUS "OpenGL ES: ${ENABLE_GLES1}")
+message(STATUS "OpenGL ES 2: ${ENABLE_GLES2}")
+message(STATUS "WebGL: ${ENABLE_WEBGL1}")
+