option(BUILD_SHARED_LIBS "Build shared library" TRUE)
+option(USE_SDL2 "Use the SDL2 backend" FALSE)
# Compiler flags
add_definitions(-DIRRLICHT_EXPORTS)
-if(NOT BUILD_SHARED_LIBS)
+if(BUILD_SHARED_LIBS)
+ if(WIN32)
+ add_definitions("-DIRRLICHT_API=__declspec(dllexport)")
+ elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
+ add_definitions("-DIRRLICHT_API=__attribute__ ((visibility(\"default\")))")
+ endif()
+else()
add_definitions(-D_IRR_STATIC_LIB_)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
add_compile_options(-Wall -pipe -fno-exceptions -fno-rtti)
+
+ # Enable SSE for floating point math on 32-bit x86 by default
+ # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
+ if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ include(CheckCXXSourceCompiles)
+ check_cxx_source_compiles("#ifndef __i686__\n#error\n#endif\nint main(){}" IS_I686)
+ if(IS_I686)
+ message(STATUS "Detected Intel x86: using SSE instead of x87 FPU")
+ add_compile_options(-mfpmath=sse -msse)
+ endif()
+ endif()
+
elseif(MSVC)
string(APPEND CMAKE_CXX_STANDARD_LIBRARIES " msvcrt.lib") # ???? fuck off
add_compile_options(/GR- /Zl)
+
+ # Enable SSE for floating point math on 32-bit x86 by default
+ # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
+ if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ add_compile_options(/arch:SSE)
+ endif()
+endif()
+
+# 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}")
+
# Required libs
find_package(ZLIB REQUIRED)
find_package(JPEG REQUIRED)
find_package(PNG REQUIRED)
-# 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 ${PROJECT_SOURCE_DIR}/include)
-unset(OGLES1_ENABLED CACHE)
-unset(OGLES2_ENABLED CACHE)
-unset(OGL_ENABLED CACHE)
-unset(XINPUT2_ENABLED CACHE)
-check_symbol_exists(_IRR_COMPILE_WITH_OGLES1_ "IrrCompileConfig.h" OGLES1_ENABLED)
-if(OGLES1_ENABLED)
+if(ENABLE_GLES1)
# only tested on Android, probably works on Linux (is this needed anywhere else?)
find_library(OPENGLES_LIBRARY NAMES GLESv1_CM REQUIRED)
find_library(EGL_LIBRARY NAMES EGL REQUIRED)
message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}")
endif()
-check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
-if(OGLES2_ENABLED)
+if(ENABLE_GLES2)
find_package(OpenGLES2 REQUIRED)
endif()
-check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
-if(OGL_ENABLED)
+if(ENABLE_OPENGL)
set(OpenGL_GL_PREFERENCE "LEGACY")
find_package(OpenGL REQUIRED)
endif()
-check_symbol_exists(_IRR_LINUX_X11_XINPUT2_ "IrrCompileConfig.h" XINPUT2_ENABLED)
-if(XINPUT2_ENABLED)
- find_library(XINPUT_LIBRARY Xi REQUIRED)
+if(USE_SDL2)
+ find_package(SDL2 CONFIG REQUIRED)
+ message(STATUS "Found SDL2: ${SDL2_LIBRARIES}")
endif()
# Platform-specific libs
else()
# Unix probably
find_package(X11 REQUIRED)
+ if(USE_XINPUT2 AND NOT X11_Xi_FOUND)
+ message(FATAL_ERROR "XInput not found")
+ endif()
endif()
set(link_includes
"${ZLIB_INCLUDE_DIR}"
"${JPEG_INCLUDE_DIR}"
"${PNG_INCLUDE_DIR}"
+ "${SDL2_INCLUDE_DIRS}"
${OPENGL_INCLUDE_DIR}
${OPENGLES2_INCLUDE_DIR}
"${ZLIB_LIBRARY}"
"${JPEG_LIBRARY}"
"${PNG_LIBRARY}"
+ "${SDL2_LIBRARIES}"
${OPENGL_LIBRARIES}
${OPENGLES_LIBRARY}
${OPENGLES2_LIBRARIES}
${EGL_LIBRARY}
- ${XINPUT_LIBRARY}
"$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
${COCOA_LIB}
"$<$<PLATFORM_ID:Windows>:gdi32>"
"$<$<PLATFORM_ID:Windows>:winmm>"
${X11_X11_LIB}
- ${X11_Xxf86vm_LIB}
+ ${X11_Xi_LIB}
)
# Source files
CSceneCollisionManager.cpp
CSceneManager.cpp
CMeshCache.cpp
- CDefaultSceneNodeFactory.cpp
)
set(IRRDRVROBJ
CNullDriver.cpp
COpenGLCacheHandler.cpp
COpenGLDriver.cpp
- COpenGLNormalMapRenderer.cpp
- COpenGLParallaxMapRenderer.cpp
COpenGLShaderMaterialRenderer.cpp
COpenGLSLMaterialRenderer.cpp
COpenGLExtensionHandler.cpp
COGLES2ExtensionHandler.cpp
COGLES2FixedPipelineRenderer.cpp
COGLES2MaterialRenderer.cpp
- COGLES2NormalMapRenderer.cpp
- COGLES2ParallaxMapRenderer.cpp
COGLES2Renderer2D.cpp
CWebGL1Driver.cpp
CGLXManager.cpp
CWGLManager.cpp
CEGLManager.cpp
+ CSDLManager.cpp
mt_opengl_loader.cpp
)
)
add_library(IRRVIDEOOBJ OBJECT
- CVideoModeList.cpp
CFPSCounter.cpp
${IRRDRVROBJ}
${IRRIMAGEOBJ}
CReadFile.cpp
CWriteFile.cpp
CZipReader.cpp
- CMountPointReader.cpp
CAttributes.cpp
)
add_library(IRROTHEROBJ OBJECT
CIrrDeviceSDL.cpp
CIrrDeviceLinux.cpp
- CIrrDeviceConsole.cpp
CIrrDeviceStub.cpp
CIrrDeviceWin32.cpp
- CIrrDeviceFB.cpp
CLogger.cpp
COSOperator.cpp
Irrlicht.cpp
os.cpp
- leakHunter.cpp
- CProfiler.cpp
)
if(ANDROID)
)
endif()
+if(USE_X11)
+ target_compile_definitions(IRROTHEROBJ PRIVATE _IRR_COMPILE_WITH_X11_)
+endif()
+
+if(USE_XINPUT2)
+ target_compile_definitions(IRROTHEROBJ PRIVATE _IRR_LINUX_X11_XINPUT2_)
+endif()
+
+if(USE_XCURSOR)
+ target_compile_definitions(IRROTHEROBJ PRIVATE _IRR_LINUX_XCURSOR_)
+endif()
+
add_library(IRRGUIOBJ OBJECT
CGUIButton.cpp
CGUICheckBox.cpp
CGUIComboBox.cpp
- CGUIContextMenu.cpp
CGUIEditBox.cpp
CGUIEnvironment.cpp
CGUIFileOpenDialog.cpp
CGUIFont.cpp
CGUIImage.cpp
- CGUIInOutFader.cpp
CGUIListBox.cpp
- CGUIMenu.cpp
- CGUIMeshViewer.cpp
- CGUIMessageBox.cpp
- CGUIModalScreen.cpp
CGUIScrollBar.cpp
- CGUISpinBox.cpp
CGUISkin.cpp
CGUIStaticText.cpp
CGUITabControl.cpp
- CGUITable.cpp
- CGUIToolBar.cpp
- CGUIWindow.cpp
- CGUIColorSelectDialog.cpp
- CDefaultGUIElementFactory.cpp
CGUISpriteBank.cpp
CGUIImageList.cpp
- CGUITreeView.cpp
- CGUIProfiler.cpp
)
# Library
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_)
+if(WIN32)
+ target_compile_definitions(IrrlichtMt INTERFACE _IRR_WINDOWS_API_)
+endif()
+if(WIN32 AND BUILD_SHARED_LIBS)
+ target_compile_definitions(IrrlichtMt INTERFACE IRRLICHT_API=__declspec(dllimport))
+endif()
+if(APPLE OR ANDROID OR EMSCRIPTEN)
+ target_compile_definitions(IrrlichtMt PUBLIC IRR_MOBILE_PATHS)
endif()
set_target_properties(IrrlichtMt PROPERTIES
VERSION ${PROJECT_VERSION}
- SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
if(WIN32)