]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/CMakeLists.txt
Restrict X11 options to X11 device
[irrlicht.git] / source / Irrlicht / CMakeLists.txt
index 21e997792f239978308b59c6b99134e12483aada..cfd3bbe146b3a088a04e52d6adb873c61e9597c4 100644 (file)
@@ -1,9 +1,16 @@
 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")
@@ -42,49 +49,209 @@ elseif(MSVC)
        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.
-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)
-unset(SDL_ENABLED CACHE)
-
-# tell cmake about the dependency
-set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_REQUIRED_INCLUDES}/IrrCompileConfig.h)
 
-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()
-if(NOT ANDROID AND NOT APPLE)
-       check_symbol_exists(_IRR_LINUX_X11_XINPUT2_ "IrrCompileConfig.h" XINPUT2_ENABLED)
-       if(XINPUT2_ENABLED)
-               find_library(XINPUT_LIBRARY Xi REQUIRED)
-       endif()
-endif()
-check_symbol_exists(_IRR_COMPILE_WITH_SDL_DEVICE_ "IrrCompileConfig.h" SDL_ENABLED)
-if(SDL_ENABLED)
+if(USE_SDL2)
        find_package(SDL2 CONFIG REQUIRED)
        message(STATUS "Found SDL2: ${SDL2_LIBRARIES}")
 endif()
@@ -102,6 +269,9 @@ elseif(APPLE)
 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
@@ -131,7 +301,6 @@ set(link_libs
        ${OPENGLES_LIBRARY}
        ${OPENGLES2_LIBRARIES}
        ${EGL_LIBRARY}
-       ${XINPUT_LIBRARY}
 
        "$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
        ${COCOA_LIB}
@@ -139,7 +308,7 @@ set(link_libs
        "$<$<PLATFORM_ID:Windows>:gdi32>"
        "$<$<PLATFORM_ID:Windows>:winmm>"
        ${X11_X11_LIB}
-       ${X11_Xxf86vm_LIB}
+       ${X11_Xi_LIB}
 )
 
 # Source files
@@ -167,7 +336,6 @@ add_library(IRROBJ OBJECT
        CSceneCollisionManager.cpp
        CSceneManager.cpp
        CMeshCache.cpp
-       CDefaultSceneNodeFactory.cpp
 )
 
 set(IRRDRVROBJ
@@ -188,6 +356,7 @@ set(IRRDRVROBJ
        CGLXManager.cpp
        CWGLManager.cpp
        CEGLManager.cpp
+       CSDLManager.cpp
        mt_opengl_loader.cpp
 )
 
@@ -203,7 +372,6 @@ set(IRRIMAGEOBJ
 )
 
 add_library(IRRVIDEOOBJ OBJECT
-       CVideoModeList.cpp
        CFPSCounter.cpp
        ${IRRDRVROBJ}
        ${IRRIMAGEOBJ}
@@ -217,23 +385,18 @@ add_library(IRRIOOBJ OBJECT
        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)
@@ -252,36 +415,34 @@ elseif(APPLE)
        )
 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
@@ -310,14 +471,18 @@ target_include_directories(IrrlichtMt
 
 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)