irrlicht/source/Irrlicht/CMakeLists.txt

325 lines
7.7 KiB
CMake
Raw Normal View History

option(BUILD_SHARED_LIBS "Build shared library" TRUE)
# Compiler flags
add_definitions(-DIRRLICHT_EXPORTS)
if(NOT BUILD_SHARED_LIBS)
add_definitions(-D_IRR_STATIC_LIB_)
endif()
2021-03-06 21:23:00 +01:00
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-D_DEBUG)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2021-03-06 21:23:00 +01:00
if(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
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()
2021-03-06 21:23:00 +01:00
elseif(MSVC)
2021-03-26 16:48:28 +01:00
string(APPEND CMAKE_CXX_STANDARD_LIBRARIES " msvcrt.lib") # ???? fuck off
2021-03-06 21:23:00 +01:00
2021-03-26 16:48:28 +01:00
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()
2021-03-06 21:23:00 +01:00
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()
2021-03-06 22:14:46 +01:00
# Required libs
2021-03-06 21:23:00 +01:00
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.
2021-03-06 21:23:00 +01:00
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)
2021-03-06 21:23:00 +01:00
# tell cmake about the dependency
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_REQUIRED_INCLUDES}/IrrCompileConfig.h)
2021-03-07 01:08:58 +01:00
check_symbol_exists(_IRR_COMPILE_WITH_OGLES1_ "IrrCompileConfig.h" OGLES1_ENABLED)
if(OGLES1_ENABLED)
# 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()
2021-03-06 21:23:00 +01:00
check_symbol_exists(_IRR_COMPILE_WITH_OGLES2_ "IrrCompileConfig.h" OGLES2_ENABLED)
if(OGLES2_ENABLED)
find_package(OpenGLES2 REQUIRED)
endif()
check_symbol_exists(_IRR_COMPILE_WITH_OPENGL_ "IrrCompileConfig.h" OGL_ENABLED)
if(OGL_ENABLED)
set(OpenGL_GL_PREFERENCE "LEGACY")
find_package(OpenGL REQUIRED)
endif()
if(UNIX AND NOT ANDROID AND NOT APPLE)
check_symbol_exists(_IRR_LINUX_X11_XINPUT2_ "IrrCompileConfig.h" XINPUT2_ENABLED)
endif()
check_symbol_exists(_IRR_COMPILE_WITH_SDL_DEVICE_ "IrrCompileConfig.h" SDL_ENABLED)
if(SDL_ENABLED)
find_package(SDL2 CONFIG REQUIRED)
message(STATUS "Found SDL2: ${SDL2_LIBRARIES}")
endif()
2021-03-06 21:23:00 +01:00
# Platform-specific libs
if(ANDROID)
2021-04-09 21:28:31 +02:00
enable_language(C)
2021-03-07 01:08:58 +01:00
add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
2021-03-06 21:23:00 +01:00
elseif(APPLE)
2021-03-06 22:14:46 +01:00
find_library(COCOA_LIB Cocoa REQUIRED)
find_library(IOKIT_LIB IOKit REQUIRED)
add_definitions(-DGL_SILENCE_DEPRECATION)
2021-03-06 21:23:00 +01:00
else()
# Unix probably
find_package(X11 REQUIRED)
if(XINPUT2_ENABLED AND NOT X11_Xi_FOUND)
message(FATAL_ERROR "XInput not found")
endif()
2021-03-06 21:23:00 +01:00
endif()
add_library(IrrlichtMt)
# alias allows for consistent target name with add_subdirectory
add_library(IrrlichtMt::IrrlichtMt ALIAS IrrlichtMt)
2021-03-06 21:23:00 +01:00
target_sources(IrrlichtMt PRIVATE
# IRRMESHLOADER
2021-03-06 21:23:00 +01:00
CB3DMeshFileLoader.cpp
COBJMeshFileLoader.cpp
CXMeshFileLoader.cpp
2022-10-17 04:17:21 +02:00
CGLTFMeshFileLoader.cpp
2021-03-06 21:23:00 +01:00
#IRRMESH
2021-03-06 21:23:00 +01:00
CSkinnedMesh.cpp
CBoneSceneNode.cpp
CMeshSceneNode.cpp
CAnimatedMeshSceneNode.cpp
#IRR
2021-03-06 21:23:00 +01:00
CBillboardSceneNode.cpp
CCameraSceneNode.cpp
CDummyTransformationSceneNode.cpp
CEmptySceneNode.cpp
CMeshManipulator.cpp
CSceneCollisionManager.cpp
2021-03-06 21:23:00 +01:00
CSceneManager.cpp
CMeshCache.cpp
#IRRDRVR
2021-03-06 21:23:00 +01:00
CNullDriver.cpp
COpenGLCacheHandler.cpp
COpenGLDriver.cpp
COpenGLShaderMaterialRenderer.cpp
COpenGLSLMaterialRenderer.cpp
COpenGLExtensionHandler.cpp
COGLESDriver.cpp
COGLESExtensionHandler.cpp
COGLES2Driver.cpp
COGLES2ExtensionHandler.cpp
COGLES2FixedPipelineRenderer.cpp
COGLES2MaterialRenderer.cpp
COGLES2Renderer2D.cpp
CWebGL1Driver.cpp
CGLXManager.cpp
CWGLManager.cpp
CEGLManager.cpp
CSDLManager.cpp
mt_opengl_loader.cpp
2021-03-06 21:23:00 +01:00
#IRRIMAGE
2021-03-06 21:23:00 +01:00
CColorConverter.cpp
CImage.cpp
CImageLoaderBMP.cpp
CImageLoaderJPG.cpp
CImageLoaderPNG.cpp
2021-09-13 21:21:26 +02:00
CImageLoaderTGA.cpp
2021-03-06 21:23:00 +01:00
CImageWriterJPG.cpp
CImageWriterPNG.cpp
# IRRVIDEO
2021-03-06 21:23:00 +01:00
CFPSCounter.cpp
# IRRI
2021-03-06 21:23:00 +01:00
CFileList.cpp
CFileSystem.cpp
CLimitReadFile.cpp
CMemoryFile.cpp
CReadFile.cpp
CWriteFile.cpp
CZipReader.cpp
CAttributes.cpp
# IRROTHER
2021-03-06 21:23:00 +01:00
CIrrDeviceSDL.cpp
CIrrDeviceLinux.cpp
CIrrDeviceStub.cpp
CIrrDeviceWin32.cpp
CLogger.cpp
COSOperator.cpp
Irrlicht.cpp
os.cpp
# IRRGUI
2021-03-06 21:23:00 +01:00
CGUIButton.cpp
CGUICheckBox.cpp
CGUIComboBox.cpp
CGUIEditBox.cpp
CGUIEnvironment.cpp
CGUIFileOpenDialog.cpp
CGUIFont.cpp
CGUIImage.cpp
CGUIListBox.cpp
CGUIScrollBar.cpp
CGUISkin.cpp
CGUIStaticText.cpp
CGUITabControl.cpp
CGUISpriteBank.cpp
CGUIImageList.cpp
)
if(ANDROID)
target_sources(IrrlichtMt PRIVATE
Android/CIrrDeviceAndroid.cpp
Android/CAndroidAssetReader.cpp
Android/CAndroidAssetFileArchive.cpp
Android/CKeyEventWrapper.cpp
)
elseif(APPLE)
target_sources(IrrlichtMt PRIVATE
CIrrDeviceOSX.mm
CNSOGLManager.mm
)
# build all IRROTHEROBJ sources as objc++, including the .cpp's
set_source_files_properties(
CIrrDeviceSDL.cpp
CIrrDeviceLinux.cpp
CIrrDeviceStub.cpp
CIrrDeviceWin32.cpp
CLogger.cpp
COSOperator.cpp
Irrlicht.cpp
os.cpp
leakHunter.cpp
CProfiler.cpp
CIrrDeviceOSX.mm
CNSOGLManager.mm
PROPERTIES
COMPILE_FLAGS "-xobjective-c++"
)
endif()
2021-03-06 21:23:00 +01:00
# Library
# Propagate static library flag to lib users, only needed for Windows
if(NOT BUILD_SHARED_LIBS)
target_compile_definitions(IrrlichtMt INTERFACE _IRR_STATIC_LIB_)
endif()
target_include_directories(IrrlichtMt
PUBLIC
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt>"
PRIVATE
"${PROJECT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}"
${ZLIB_INCLUDE_DIR}
${JPEG_INCLUDE_DIR}
${PNG_INCLUDE_DIR}
${SDL2_INCLUDE_DIRS}
${OPENGL_INCLUDE_DIR}
${OPENGLES2_INCLUDE_DIR}
${EGL_INCLUDE_DIR}
"$<$<PLATFORM_ID:Android>:${ANDROID_NDK}/sources/android/native_app_glue>"
${X11_INCLUDE_DIR}
)
2022-10-17 01:15:16 +02:00
target_link_libraries(IrrlichtMt
PRIVATE
${ZLIB_LIBRARY}
${JPEG_LIBRARY}
${PNG_LIBRARY}
${SDL2_LIBRARIES}
2022-10-17 01:15:16 +02:00
tinygltf::tinygltf
${OPENGL_LIBRARIES}
${OPENGLES_LIBRARY}
${OPENGLES2_LIBRARIES}
${EGL_LIBRARY}
"$<$<PLATFORM_ID:Android>:native_app_glue -landroid -llog>"
${COCOA_LIB}
${IOKIT_LIB}
"$<$<PLATFORM_ID:Windows>:gdi32>"
"$<$<PLATFORM_ID:Windows>:winmm>"
${X11_X11_LIB}
${X11_Xi_LIB}
)
set_target_properties(IrrlichtMt PROPERTIES
2021-04-13 21:08:16 +02:00
VERSION ${PROJECT_VERSION}
2021-03-06 21:23:00 +01:00
)
2021-03-06 22:14:46 +01:00
if(WIN32)
set_target_properties(IrrlichtMt PROPERTIES PREFIX "") # for DLL name
endif()
2021-04-17 17:30:45 +02:00
2022-10-17 04:48:29 +02:00
add_subdirectory(tests)
# Installation of library
2021-04-17 17:30:45 +02:00
if(ANDROID)
set(INSTALL_TARGETS IrrlichtMt native_app_glue)
2021-04-17 17:30:45 +02:00
else()
2022-10-17 02:02:18 +02:00
set(INSTALL_TARGETS IrrlichtMt)
2021-04-17 17:30:45 +02:00
endif()
install(TARGETS ${INSTALL_TARGETS}
EXPORT IrrlichtMt-export
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)