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 # Enable SSE for floating point math on 32-bit x86 by default
23 # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
24 if(CMAKE_SIZEOF_VOID_P EQUAL 4)
25 include(CheckCXXSourceCompiles)
26 check_cxx_source_compiles("#ifndef __i686__\n#error\n#endif\nint main(){}" IS_I686)
28 message(STATUS "Detected Intel x86: using SSE instead of x87 FPU")
29 add_compile_options(-mfpmath=sse -msse)
34 string(APPEND CMAKE_CXX_STANDARD_LIBRARIES " msvcrt.lib") # ???? fuck off
36 add_compile_options(/GR- /Zl)
38 # Enable SSE for floating point math on 32-bit x86 by default
39 # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
40 if(CMAKE_SIZEOF_VOID_P EQUAL 4)
41 add_compile_options(/arch:SSE)
47 find_package(ZLIB REQUIRED)
48 find_package(JPEG REQUIRED)
49 find_package(PNG REQUIRED)
51 # To configure the features available in this Irrlicht build please edit
52 # include/IrrCompileConfig.h and re-run CMake from a clean state
53 include(CheckSymbolExists)
54 set(CMAKE_REQUIRED_INCLUDES ${PROJECT_SOURCE_DIR}/include)
55 unset(OGLES1_ENABLED CACHE)
56 unset(OGLES2_ENABLED CACHE)
57 unset(OGL_ENABLED CACHE)
58 unset(XINPUT2_ENABLED CACHE)
59 unset(SDL_ENABLED CACHE)
61 check_symbol_exists(_IRR_COMPILE_WITH_OGLES1_ "IrrCompileConfig.h" OGLES1_ENABLED)
63 # only tested on Android, probably works on Linux (is this needed anywhere else?)
64 find_library(OPENGLES_LIBRARY NAMES GLESv1_CM REQUIRED)
65 find_library(EGL_LIBRARY NAMES EGL REQUIRED)
67 message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}")
69 check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
71 find_package(OpenGLES2 REQUIRED)
73 check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
75 set(OpenGL_GL_PREFERENCE "LEGACY")
76 find_package(OpenGL REQUIRED)
78 check_symbol_exists(_IRR_LINUX_X11_XINPUT2_ "IrrCompileConfig.h" XINPUT2_ENABLED)
80 find_library(XINPUT_LIBRARY Xi REQUIRED)
83 check_symbol_exists(_IRR_COMPILE_WITH_SDL_DEVICE_ "IrrCompileConfig.h" SDL_ENABLED)
85 find_package(SDL2 CONFIG REQUIRED)
86 message(STATUS "Found SDL2: ${SDL2_LIBRARIES}")
89 # Platform-specific libs
93 add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
95 find_library(COCOA_LIB Cocoa REQUIRED)
96 find_library(IOKIT_LIB IOKit REQUIRED)
98 add_definitions(-DGL_SILENCE_DEPRECATION)
101 find_package(X11 REQUIRED)
105 "${PROJECT_SOURCE_DIR}/include"
106 "${CMAKE_CURRENT_SOURCE_DIR}"
108 "${ZLIB_INCLUDE_DIR}"
109 "${JPEG_INCLUDE_DIR}"
111 "${SDL2_INCLUDE_DIRS}"
113 ${OPENGL_INCLUDE_DIR}
114 ${OPENGLES2_INCLUDE_DIR}
117 "$<$<PLATFORM_ID:Android>:${ANDROID_NDK}/sources/android/native_app_glue>"
129 ${OPENGLES2_LIBRARIES}
133 "$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
136 "$<$<PLATFORM_ID:Windows>:gdi32>"
137 "$<$<PLATFORM_ID:Windows>:winmm>"
145 CB3DMeshFileLoader.cpp
146 COBJMeshFileLoader.cpp
150 add_library(IRRMESHOBJ OBJECT
154 CAnimatedMeshSceneNode.cpp
158 add_library(IRROBJ OBJECT
159 CBillboardSceneNode.cpp
161 CDummyTransformationSceneNode.cpp
164 CSceneCollisionManager.cpp
167 CDefaultSceneNodeFactory.cpp
172 COpenGLCacheHandler.cpp
174 COpenGLShaderMaterialRenderer.cpp
175 COpenGLSLMaterialRenderer.cpp
176 COpenGLExtensionHandler.cpp
178 COGLESExtensionHandler.cpp
180 COGLES2ExtensionHandler.cpp
181 COGLES2FixedPipelineRenderer.cpp
182 COGLES2MaterialRenderer.cpp
183 COGLES2Renderer2D.cpp
202 add_library(IRRVIDEOOBJ OBJECT
209 add_library(IRRIOOBJ OBJECT
217 CMountPointReader.cpp
221 add_library(IRROTHEROBJ OBJECT
224 CIrrDeviceConsole.cpp
237 target_sources(IRROTHEROBJ PRIVATE
238 Android/CIrrDeviceAndroid.cpp
239 Android/CAndroidAssetReader.cpp
240 Android/CAndroidAssetFileArchive.cpp
241 Android/CKeyEventWrapper.cpp
244 # Build all IRROTHEROBJ sources as objc++, including the .cpp's
245 set_target_properties(IRROTHEROBJ PROPERTIES COMPILE_OPTIONS "-xobjective-c++")
246 target_sources(IRROTHEROBJ PRIVATE
252 add_library(IRRGUIOBJ OBJECT
259 CGUIFileOpenDialog.cpp
276 CGUIColorSelectDialog.cpp
277 CDefaultGUIElementFactory.cpp
286 add_library(IrrlichtMt)
288 IRRMESHOBJ IRROBJ IRRVIDEOOBJ
289 IRRIOOBJ IRROTHEROBJ IRRGUIOBJ)
290 # Set include directories for object library compilation
291 target_include_directories(${object_lib} PRIVATE ${link_includes})
292 # Add objects from object library to main library
293 target_sources(IrrlichtMt PRIVATE $<TARGET_OBJECTS:${object_lib}>)
296 # Alias target provides add_submodule compatibility
297 add_library(IrrlichtMt::IrrlichtMt ALIAS IrrlichtMt)
299 target_include_directories(IrrlichtMt
301 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
302 "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
303 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt>"
308 target_link_libraries(IrrlichtMt PRIVATE ${link_libs})
310 # Propagate static library flag to lib users, only needed for Windows
311 if(NOT BUILD_SHARED_LIBS)
312 target_compile_definitions(IrrlichtMt INTERFACE _IRR_STATIC_LIB_)
315 set_target_properties(IrrlichtMt PROPERTIES
316 VERSION ${PROJECT_VERSION}
317 SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
321 set_target_properties(IrrlichtMt PROPERTIES PREFIX "") # for DLL name
324 # Installation of library
326 set(INSTALL_TARGETS IrrlichtMt native_app_glue)
328 set(INSTALL_TARGETS IrrlichtMt)
331 install(TARGETS ${INSTALL_TARGETS}
332 EXPORT IrrlichtMt-export
333 DESTINATION "${CMAKE_INSTALL_LIBDIR}"