1#------------------------------------------------------------------- 2# This file is part of the CMake build system for OGRE 3# (Object-oriented Graphics Rendering Engine) 4# For the latest info, see http://www.ogre3d.org/ 5# 6# The contents of this file are placed in the public domain. Feel 7# free to make use of it in any way you like. 8#------------------------------------------------------------------- 9 10####################################################################### 11# This file takes care of configuring Ogre to build with the settings 12# given in CMake. It creates the necessary config.h file and will 13# also prepare package files for pkg-config and CMake. 14####################################################################### 15 16string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER) 17if(${BUILD_TYPE_LOWER} STREQUAL "debug") 18 set(OGRE_DEBUG_MODE 1) 19endif() 20 21if (APPLE_IOS) 22 set(OGRE_SET_BUILD_PLATFORM_APPLE_IOS 1) 23 set(OGRE_STATIC TRUE) 24 set(OGRE_STATIC_LIB TRUE) 25 set(OGRE_CONFIG_ENABLE_PVRTC TRUE) 26endif() 27 28# should we build static libs? 29if (OGRE_STATIC) 30 set(OGRE_LIB_TYPE STATIC) 31else () 32 set(OGRE_LIB_TYPE SHARED) 33endif () 34 35# configure threading options 36set(OGRE_THREAD_PROVIDER 0) 37if (OGRE_CONFIG_THREADS) 38 if (OGRE_CONFIG_THREAD_PROVIDER STREQUAL "boost") 39 set(OGRE_THREAD_PROVIDER 1) 40 include_directories(${Boost_INCLUDE_DIRS}) 41 # On MSVC Boost usually tries to autolink boost libraries. However since 42 # this behaviour is not available on all compilers, we need to find the libraries 43 # ourselves, anyway. Disable auto-linking to avoid mess-ups. 44 add_definitions(-DBOOST_ALL_NO_LIB) 45 if (MINGW AND Boost_USE_STATIC_LIBS) 46 # mingw needs this to link against static thread libraries 47 add_definitions(-DBOOST_THREAD_USE_LIB) 48 endif () 49 set(OGRE_THREAD_LIBRARIES ${Boost_LIBRARIES}) 50 endif () 51 52 if (OGRE_CONFIG_THREAD_PROVIDER STREQUAL "poco") 53 set(OGRE_THREAD_PROVIDER 2) 54 include_directories(${POCO_INCLUDE_DIRS}) 55 set(OGRE_THREAD_LIBRARIES ${POCO_LIBRARIES}) 56 endif () 57 58 if (OGRE_CONFIG_THREAD_PROVIDER STREQUAL "tbb") 59 set(OGRE_THREAD_PROVIDER 3) 60 include_directories(${TBB_INCLUDE_DIRS}) 61 62 set(OGRE_THREAD_LIBRARIES ${TBB_LIBRARIES}) 63 endif () 64 65 if (OGRE_CONFIG_THREAD_PROVIDER STREQUAL "std") 66 set(OGRE_THREAD_PROVIDER 4) 67 endif () 68 69endif() 70 71set(OGRE_ASSERT_MODE 1 CACHE STRING 72 "Enable Ogre asserts and exceptions. Possible values: 73 0 - Standard asserts in debug builds, nothing in release builds. 74 1 - Standard asserts in debug builds, exceptions in release builds. 75 2 - Exceptions in debug builds, exceptions in release builds." 76) 77set_property(CACHE OGRE_ASSERT_MODE PROPERTY STRINGS 0 1 2) 78 79# determine config values depending on build options 80set(OGRE_STATIC_LIB ${OGRE_STATIC}) 81set(OGRE_DOUBLE_PRECISION ${OGRE_CONFIG_DOUBLE}) 82set(OGRE_NODE_INHERIT_TRANSFORM ${OGRE_SET_NODE_INHERIT_TRANSFORM}) 83set(OGRE_SET_ASSERT_MODE ${OGRE_ASSERT_MODE}) 84set(OGRE_SET_THREADS ${OGRE_CONFIG_THREADS}) 85set(OGRE_SET_THREAD_PROVIDER ${OGRE_THREAD_PROVIDER}) 86if (NOT OGRE_CONFIG_ENABLE_MESHLOD) 87 set(OGRE_NO_MESHLOD 1) 88endif() 89if (NOT OGRE_CONFIG_ENABLE_DDS) 90 set(OGRE_NO_DDS_CODEC 1) 91endif() 92if (NOT OGRE_CONFIG_ENABLE_PVRTC) 93 set(OGRE_NO_PVRTC_CODEC 1) 94endif() 95if (NOT OGRE_CONFIG_ENABLE_ETC) 96 set(OGRE_NO_ETC_CODEC 1) 97endif() 98if (NOT OGRE_CONFIG_ENABLE_ASTC) 99 set(OGRE_NO_ASTC_CODEC 1) 100endif() 101if (NOT OGRE_CONFIG_ENABLE_ZIP) 102 set(OGRE_NO_ZIP_ARCHIVE 1) 103endif() 104if (NOT OGRE_CONFIG_ENABLE_VIEWPORT_ORIENTATIONMODE) 105 set(OGRE_NO_VIEWPORT_ORIENTATIONMODE 1) 106endif() 107if (NOT OGRE_CONFIG_ENABLE_GLES2_CG_SUPPORT) 108 set(OGRE_NO_GLES2_CG_SUPPORT 1) 109endif() 110if (NOT OGRE_CONFIG_ENABLE_GLES2_GLSL_OPTIMISER) 111 set(OGRE_NO_GLES2_GLSL_OPTIMISER 1) 112endif() 113if (NOT OGRE_CONFIG_ENABLE_GL_STATE_CACHE_SUPPORT) 114 set(OGRE_NO_GL_STATE_CACHE_SUPPORT 1) 115endif() 116if (NOT OGRE_CONFIG_ENABLE_GLES3_SUPPORT) 117 set(OGRE_NO_GLES3_SUPPORT 1) 118endif() 119if (NOT OGRE_CONFIG_ENABLE_TBB_SCHEDULER) 120 set(OGRE_NO_TBB_SCHEDULER 1) 121endif() 122if (OGRE_TEST_BIG_ENDIAN) 123 set(OGRE_CONFIG_BIG_ENDIAN 1) 124else () 125 set(OGRE_CONFIG_LITTLE_ENDIAN 1) 126endif () 127set(RTSHADER_SYSTEM_BUILD_CORE_SHADERS ${OGRE_BUILD_RTSHADERSYSTEM_CORE_SHADERS}) 128set(RTSHADER_SYSTEM_BUILD_EXT_SHADERS ${OGRE_BUILD_RTSHADERSYSTEM_EXT_SHADERS}) 129if (NOT OGRE_CONFIG_ENABLE_QUAD_BUFFER_STEREO) 130 set(OGRE_NO_QUAD_BUFFER_STEREO 1) 131endif() 132if(SDL2_FOUND OR EMSCRIPTEN) 133 set(OGRE_BITES_HAVE_SDL 1) 134endif() 135 136# generate OgreBuildSettings.h 137configure_file(${OGRE_TEMPLATES_DIR}/OgreBuildSettings.h.in ${PROJECT_BINARY_DIR}/include/OgreBuildSettings.h @ONLY) 138configure_file(${OGRE_TEMPLATES_DIR}/OgreRTShaderConfig.h.in ${PROJECT_BINARY_DIR}/include/OgreRTShaderConfig.h @ONLY) 139configure_file(${OGRE_TEMPLATES_DIR}/OgreGLES2Config.h.in ${PROJECT_BINARY_DIR}/include/OgreGLES2Config.h @ONLY) 140 141set(OGRE_LIB_SUFFIX "") 142 143if (OGRE_STATIC) 144 set(OGRE_LIB_SUFFIX "${OGRE_LIB_SUFFIX}Static") 145endif () 146if (BUILD_TYPE_LOWER STREQUAL "debug" AND WIN32) 147 set(OGRE_LIB_SUFFIX "${OGRE_LIB_SUFFIX}_d") 148endif () 149 150# Create the pkg-config package files on Unix systems 151if (UNIX) 152 set(OGRE_PLUGIN_PREFIX "") 153 set(OGRE_PLUGIN_EXT ".so") 154 set(OGRE_PAGING_ADDITIONAL_PACKAGES "") 155 if (OGRE_STATIC) 156 set(OGRE_PLUGIN_PREFIX "lib") 157 set(OGRE_PLUGIN_EXT ".a") 158 endif () 159 160 set(OGRE_ADDITIONAL_LIBS "") 161 set(OGRE_ADDITIONAL_INCLUDE_DIRS "") 162 if (APPLE AND NOT APPLE_IOS) 163 set(OGRE_ADDITIONAL_INCLUDE_DIRS "-I\${includedir}/OGRE/OSX") 164 endif () 165 set(OGRE_CFLAGS "") 166 set(OGRE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}) 167 if (OGRE_CONFIG_THREADS GREATER 0) 168 set(OGRE_CFLAGS "-pthread") 169 set(OGRE_ADDITIONAL_LIBS "${OGRE_ADDITIONAL_LIBS} -lpthread") 170 endif () 171 if (OGRE_STATIC) 172 if (OGRE_CONFIG_THREADS) 173 set(OGRE_ADDITIONAL_LIBS "${OGRE_ADDITIONAL_LIBS} -lboost-thread-mt") 174 endif () 175 # there is no pkgconfig file for freeimage, so we need to add that lib manually 176 set(OGRE_ADDITIONAL_LIBS "${OGRE_ADDITIONAL_LIBS} -lfreeimage") 177 configure_file(${OGRE_TEMPLATES_DIR}/OGREStatic.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE.pc @ONLY) 178 else () 179 configure_file(${OGRE_TEMPLATES_DIR}/OGRE.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE.pc @ONLY) 180 endif () 181 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 182 183 # configure additional packages 184 185 if (OGRE_BUILD_PLUGIN_PCZ) 186 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-PCZ.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-PCZ.pc @ONLY) 187 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-PCZ.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 188 endif () 189 190 if (OGRE_BUILD_COMPONENT_PAGING) 191 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-Paging.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Paging.pc @ONLY) 192 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Paging.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 193 endif () 194 195 if (OGRE_BUILD_COMPONENT_MESHLODGENERATOR) 196 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-MeshLodGenerator.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-MeshLodGenerator.pc @ONLY) 197 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-MeshLodGenerator.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 198 endif () 199 200 if (OGRE_BUILD_COMPONENT_TERRAIN) 201 if (OGRE_BUILD_COMPONENT_PAGING) 202 set(OGRE_PAGING_ADDITIONAL_PACKAGES ", OGRE-Paging = ${OGRE_VERSION}") 203 endif () 204 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-Terrain.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Terrain.pc @ONLY) 205 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Terrain.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 206 endif () 207 208 if (OGRE_BUILD_COMPONENT_RTSHADERSYSTEM) 209 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-RTShaderSystem.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-RTShaderSystem.pc @ONLY) 210 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-RTShaderSystem.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 211 endif () 212 213 if (OGRE_BUILD_COMPONENT_PROPERTY) 214 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-Property.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Property.pc @ONLY) 215 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Property.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 216 endif () 217 218 if (OGRE_BUILD_COMPONENT_OVERLAY) 219 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-Overlay.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Overlay.pc @ONLY) 220 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Overlay.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 221 endif () 222 223 if (OGRE_BUILD_COMPONENT_VOLUME) 224 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-Volume.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Volume.pc @ONLY) 225 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Volume.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 226 endif () 227 228 if (OGRE_BUILD_COMPONENT_BITES) 229 if (SDL2_FOUND) 230 set(OGRE_BITES_ADDITIONAL_PACKAGES ", sdl2") 231 endif () 232 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-Bites.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Bites.pc @ONLY) 233 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-Bites.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 234 endif () 235 236 if (OGRE_BUILD_COMPONENT_HLMS) 237 configure_file(${OGRE_TEMPLATES_DIR}/OGRE-HLMS.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-HLMS.pc @ONLY) 238 install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/OGRE-HLMS.pc DESTINATION ${OGRE_LIB_DIRECTORY}/pkgconfig) 239 endif () 240endif () 241 242if(OGRE_CONFIG_STATIC_LINK_CRT) 243#We statically link to reduce dependencies 244foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) 245 if(${flag_var} MATCHES "/MD") 246 string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 247 endif(${flag_var} MATCHES "/MD") 248 if(${flag_var} MATCHES "/MDd") 249 string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}") 250 endif(${flag_var} MATCHES "/MDd") 251endforeach(flag_var) 252endif(OGRE_CONFIG_STATIC_LINK_CRT) 253