-add_definitions(-DIRRLICHT_EXPORTS=1)
+option(BUILD_SHARED_LIBS "Build shared library" TRUE)
+option(USE_SDL2 "Use the SDL2 backend" FALSE)
+
+# Compiler flags
+
+add_definitions(-DIRRLICHT_EXPORTS)
+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")
add_definitions(-D_DEBUG)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
-
-# Compiler flags
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
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()
+
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 ${CMAKE_SOURCE_DIR}/include)
-unset(OGLES1_ENABLED CACHE)
-unset(OGLES2_ENABLED CACHE)
-unset(OGL_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()
+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}
"$<$<PLATFORM_ID:Windows>:gdi32>"
"$<$<PLATFORM_ID:Windows>:winmm>"
${X11_X11_LIB}
- ${X11_Xxf86vm_LIB}
+ ${X11_Xi_LIB}
)
# Source files
set(IRRMESHLOADER
- CBSPMeshFileLoader.cpp
- CMD2MeshFileLoader.cpp
- CMD3MeshFileLoader.cpp
- CMS3DMeshFileLoader.cpp
CB3DMeshFileLoader.cpp
- C3DSMeshFileLoader.cpp
- COgreMeshFileLoader.cpp
COBJMeshFileLoader.cpp
- CColladaFileLoader.cpp
- CCSMLoader.cpp
- CDMFLoader.cpp
- CLMTSMeshFileLoader.cpp
- CMY3DMeshFileLoader.cpp
- COCTLoader.cpp
CXMeshFileLoader.cpp
- CIrrMeshFileLoader.cpp
- CSTLMeshFileLoader.cpp
- CLWOMeshFileLoader.cpp
- CPLYMeshFileLoader.cpp
- CSMFMeshFileLoader.cpp
- CMeshTextureLoader.cpp
-)
-
-set(IRRMESHWRITER
- CColladaMeshWriter.cpp
- CIrrMeshWriter.cpp
- CSTLMeshWriter.cpp
- COBJMeshWriter.cpp
- CPLYMeshWriter.cpp
- CB3DMeshWriter.cpp
)
add_library(IRRMESHOBJ OBJECT
CBoneSceneNode.cpp
CMeshSceneNode.cpp
CAnimatedMeshSceneNode.cpp
- CAnimatedMeshMD2.cpp
- CAnimatedMeshMD3.cpp
- CQ3LevelMesh.cpp
- CQuake3ShaderSceneNode.cpp
- CAnimatedMeshHalfLife.cpp
${IRRMESHLOADER}
- ${IRRMESHWRITER}
)
add_library(IRROBJ OBJECT
CCameraSceneNode.cpp
CDummyTransformationSceneNode.cpp
CEmptySceneNode.cpp
- CGeometryCreator.cpp
- CLightSceneNode.cpp
CMeshManipulator.cpp
- CMetaTriangleSelector.cpp
- COctreeSceneNode.cpp
- COctreeTriangleSelector.cpp
CSceneCollisionManager.cpp
CSceneManager.cpp
- CShadowVolumeSceneNode.cpp
- CSkyBoxSceneNode.cpp
- CSkyDomeSceneNode.cpp
- CTerrainSceneNode.cpp
- CTerrainTriangleSelector.cpp
- CVolumeLightSceneNode.cpp
- CCubeSceneNode.cpp
- CSphereSceneNode.cpp
- CTextSceneNode.cpp
- CTriangleBBSelector.cpp
- CTriangleSelector.cpp
- CWaterSurfaceSceneNode.cpp
CMeshCache.cpp
- CDefaultSceneNodeAnimatorFactory.cpp
- CDefaultSceneNodeFactory.cpp
- CSceneLoaderIrr.cpp
-)
-
-add_library(IRRPARTICLEOBJ OBJECT
- CParticleAnimatedMeshSceneNodeEmitter.cpp
- CParticleBoxEmitter.cpp
- CParticleCylinderEmitter.cpp
- CParticleMeshEmitter.cpp
- CParticlePointEmitter.cpp
- CParticleRingEmitter.cpp
- CParticleSphereEmitter.cpp
- CParticleAttractionAffector.cpp
- CParticleFadeOutAffector.cpp
- CParticleGravityAffector.cpp
- CParticleRotationAffector.cpp
- CParticleSystemSceneNode.cpp
- CParticleScaleAffector.cpp
-)
-
-add_library(IRRANIMOBJ OBJECT
- CSceneNodeAnimatorCameraFPS.cpp
- CSceneNodeAnimatorCameraMaya.cpp
- CSceneNodeAnimatorCollisionResponse.cpp
- CSceneNodeAnimatorDelete.cpp
- CSceneNodeAnimatorFlyCircle.cpp
- CSceneNodeAnimatorFlyStraight.cpp
- CSceneNodeAnimatorFollowSpline.cpp
- CSceneNodeAnimatorRotation.cpp
- CSceneNodeAnimatorTexture.cpp
)
set(IRRDRVROBJ
CNullDriver.cpp
COpenGLCacheHandler.cpp
COpenGLDriver.cpp
- COpenGLNormalMapRenderer.cpp
- COpenGLParallaxMapRenderer.cpp
COpenGLShaderMaterialRenderer.cpp
COpenGLSLMaterialRenderer.cpp
COpenGLExtensionHandler.cpp
- CD3D9Driver.cpp
- CD3D9HLSLMaterialRenderer.cpp
- CD3D9NormalMapRenderer.cpp
- CD3D9ParallaxMapRenderer.cpp
- CD3D9ShaderMaterialRenderer.cpp
- CD3D9Texture.cpp
COGLESDriver.cpp
COGLESExtensionHandler.cpp
COGLES2Driver.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
)
set(IRRIMAGEOBJ
CColorConverter.cpp
CImage.cpp
CImageLoaderBMP.cpp
- CImageLoaderDDS.cpp
CImageLoaderJPG.cpp
- CImageLoaderPCX.cpp
CImageLoaderPNG.cpp
- CImageLoaderPSD.cpp
- CImageLoaderPVR.cpp
CImageLoaderTGA.cpp
- CImageLoaderPPM.cpp
- CImageLoaderWAL.cpp
- CImageLoaderRGB.cpp
- CImageWriterBMP.cpp
CImageWriterJPG.cpp
- CImageWriterPCX.cpp
CImageWriterPNG.cpp
- CImageWriterPPM.cpp
- CImageWriterPSD.cpp
- CImageWriterTGA.cpp
)
add_library(IRRVIDEOOBJ OBJECT
- CVideoModeList.cpp
CFPSCounter.cpp
${IRRDRVROBJ}
${IRRIMAGEOBJ}
)
-add_library(IRRSWRENDEROBJ OBJECT
- CSoftwareDriver.cpp
- CSoftwareTexture.cpp
- CTRFlat.cpp
- CTRFlatWire.cpp
- CTRGouraud.cpp
- CTRGouraudWire.cpp
- CTRNormalMap.cpp
- CTRStencilShadow.cpp
- CTRTextureFlat.cpp
- CTRTextureFlatWire.cpp
- CTRTextureGouraud.cpp
- CTRTextureGouraudAdd.cpp
- CTRTextureGouraudNoZ.cpp
- CTRTextureGouraudWire.cpp
- CZBuffer.cpp
- CTRTextureGouraudVertexAlpha2.cpp
- CTRTextureGouraudNoZ2.cpp
- CTRTextureLightMap2_M2.cpp
- CTRTextureLightMap2_M4.cpp
- CTRTextureLightMap2_M1.cpp
- CSoftwareDriver2.cpp
- CSoftwareTexture2.cpp
- CTRTextureGouraud2.cpp
- CTRGouraud2.cpp
- CTRGouraudAlpha2.cpp
- CTRGouraudAlphaNoZ2.cpp
- CTRTextureDetailMap2.cpp
- CTRTextureGouraudAdd2.cpp
- CTRTextureGouraudAddNoZ2.cpp
- CTRTextureWire2.cpp
- CTRTextureLightMap2_Add.cpp
- CTRTextureLightMapGouraud2_M4.cpp
- IBurningShader.cpp
- CTRTextureBlend.cpp
- CTRTextureGouraudAlpha.cpp
- CTRTextureGouraudAlphaNoZ.cpp
- CDepthBuffer.cpp
- CBurningShader_Raster_Reference.cpp
- CTR_transparent_reflection_2_layer.cpp
- CTRGouraudNoZ2.cpp
- burning_shader_color.cpp
-)
-
add_library(IRRIOOBJ OBJECT
CFileList.cpp
CFileSystem.cpp
CMemoryFile.cpp
CReadFile.cpp
CWriteFile.cpp
- CXMLReader.cpp
- CXMLWriter.cpp
- CWADReader.cpp
CZipReader.cpp
- CPakReader.cpp
- CNPKReader.cpp
- CTarReader.cpp
- CMountPointReader.cpp
- irrXML.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
- utf8.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
-option(BUILD_SHARED_LIBS "Build shared library" TRUE)
-
add_library(IrrlichtMt)
foreach(object_lib
- IRRMESHOBJ IRROBJ IRRPARTICLEOBJ IRRANIMOBJ IRRVIDEOOBJ IRRSWRENDEROBJ
+ IRRMESHOBJ IRROBJ IRRVIDEOOBJ
IRRIOOBJ IRROTHEROBJ IRRGUIOBJ)
# Set include directories for object library compilation
target_include_directories(${object_lib} PRIVATE ${link_includes})
target_link_libraries(IrrlichtMt PRIVATE ${link_libs})
+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)