diff --git a/.gitignore b/.gitignore index e69de29..3455c88 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,4 @@ +*.swp +*~ + + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d8810d7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required (VERSION 2.8) + +project (cefosr) + +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") + +find_package(OGRE REQUIRED) +find_package(Cef3 REQUIRED) + +set (INCLUDES ${INCLUDES} ${OGRE_INCLUDE_DIRS} ${CEF3_INCLUDE_DIRS} ) +set (LIBS ${LIBS} ${OGRE_LIBRARIES} ${CEF3_LIBRARIES} ) + +include_directories(${INCLUDES}) +add_executable(osr osr.cpp) +target_link_libraries(osr ${LIBS}) + diff --git a/cmake/Modules/FindCef3.cmake b/cmake/Modules/FindCef3.cmake new file mode 100644 index 0000000..5d33f2f --- /dev/null +++ b/cmake/Modules/FindCef3.cmake @@ -0,0 +1,61 @@ +# - Try to find cef3 +# Set CEF3_ROOT for search-hint +# Set CEF3_NO_DEBUG for only optimized cef library +# +# Once done, this will define +# +# CEF3_FOUND +# CEF3_INCLUDE_DIRS +# CEF3_LIBRARIES - link these to use cef3 +# CEF3_LIBRARY_DEBUG - link these to use cef3 debug +# CEF3_LIBRARY_RELEASE - link these to use cef3 release +# CEF3_LIBRARY_WRAPPER_RELEASE - link these to use cef3-wrapper release +# CEF3_LIBRARY_WRAPPER_DEBUG - link these to use cef3-wrapper debug + +# TODO markus: script out dated - cef3 seems to change build system to cmake! + + +IF(NOT EXISTS ${CEF3_ROOT}) + message(WARNING "Could not find cef3 root: ${CEF3_ROOT}") +endif () + +find_path(CEF3_INCLUDE_DIRS NAMES include/cef_version.h PATHS ${CEF3_ROOT} DOC "include path of cef3") + +set (CEF3_INCLUDE_DIRS ${CEF3_INCLUDE_DIRS} ${CEF3_INCLUDE_DIRS}/include ) + +find_library(CEF3_LIBRARY_RELEASE NAMES cef PATHS ${CEF3_ROOT} PATH_SUFFIXES out/Release DOC "libcef release path") +find_library(CEF3_LIBRARY_DEBUG NAMES cef PATHS ${CEF3_ROOT} PATH_SUFFIXES out/Debug DOC "libcef debug path") +set(CEF3_LIBRARY + optimized ${CEF3_LIBRARY_RELEASE} + debug ${CEF3_LIBRARY_DEBUG} +) +find_library(CEF3_LIBRARY_WRAPPER_RELEASE NAMES cef_dll_wrapper PATHS ${CEF3_ROOT} PATH_SUFFIXES out/Release/obj.target DOC "libcef-wrapper release path") +find_library(CEF3_LIBRARY_WRAPPER_DEBUG NAMES cef_dll_wrapper PATHS ${CEF3_ROOT} PATH_SUFFIXES out/Debug/obj.target DOC "libcef-wrapper debug path") +set(CEF3_LIBRARY_WRAPPER + optimized ${CEF3_LIBRARY_WRAPPER_RELEASE} + debug ${CEF3_LIBRARY_WRAPPER_DEBUG} +) + +# find_package(ATK REQUIRED) # already in gtk included +# find_package(Cairo REQUIRED) # already in gtk included +# find_package(GLIB REQUIRED) # already in gtk included +find_package(GTK2 REQUIRED gtk) +# find_package(UDev REQUIRED) +set (CEF3_INCLUDE_DIRS + ${CEF3_INCLUDE_DIRS} +# ${CAIRO_INCLUDE_DIRS} +# ${ATK_INCLUDE_DIRS} +# ${GLIB_INCLUDE_DIRS} + ${GTK2_INCLUDE_DIRS} +) +set (CEF3_LIBRARIES + ${CEF3_LIBRARY} + ${CEF3_LIBRARY_WRAPPER} +# ${UDEV_LIBRARIES} +) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + CEF3 + REQUIRED_VARS CEF3_LIBRARY CEF3_LIBRARY_WRAPPER CEF3_INCLUDE_DIRS +) diff --git a/cmake/Modules/FindOGRE.cmake b/cmake/Modules/FindOGRE.cmake new file mode 100644 index 0000000..a4ca431 --- /dev/null +++ b/cmake/Modules/FindOGRE.cmake @@ -0,0 +1,585 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# - Try to find OGRE +# If you have multiple versions of Ogre installed, use the CMake or +# the environment variable OGRE_HOME to point to the path where the +# desired Ogre version can be found. +# By default this script will look for a dynamic Ogre build. If you +# need to link against static Ogre libraries, set the CMake variable +# OGRE_STATIC to TRUE. +# +# Once done, this will define +# +# OGRE_FOUND - system has OGRE +# OGRE_INCLUDE_DIRS - the OGRE include directories +# OGRE_LIBRARIES - link these to use the OGRE core +# OGRE_BINARY_REL - location of the main Ogre binary (win32 non-static only, release) +# OGRE_BINARY_DBG - location of the main Ogre binaries (win32 non-static only, debug) +# +# Additionally this script searches for the following optional +# parts of the Ogre package: +# Plugin_BSPSceneManager, Plugin_CgProgramManager, +# Plugin_OctreeSceneManager, Plugin_OctreeZone, +# Plugin_ParticleFX, Plugin_PCZSceneManager, +# RenderSystem_GL, RenderSystem_GL3Plus, +# RenderSystem_GLES, RenderSystem_GLES2, +# RenderSystem_Direct3D9, RenderSystem_Direct3D11 +# Paging, Terrain, Volume, Overlay +# +# For each of these components, the following variables are defined: +# +# OGRE_${COMPONENT}_FOUND - ${COMPONENT} is available +# OGRE_${COMPONENT}_INCLUDE_DIRS - additional include directories for ${COMPONENT} +# OGRE_${COMPONENT}_LIBRARIES - link these to use ${COMPONENT} +# OGRE_${COMPONENT}_BINARY_REL - location of the component binary (win32 non-static only, release) +# OGRE_${COMPONENT}_BINARY_DBG - location of the component binary (win32 non-static only, debug) +# +# Finally, the following variables are defined: +# +# OGRE_PLUGIN_DIR_REL - The directory where the release versions of +# the OGRE plugins are located +# OGRE_PLUGIN_DIR_DBG - The directory where the debug versions of +# the OGRE plugins are located +# OGRE_MEDIA_DIR - The directory where the OGRE sample media is +# located, if available + +include(FindPkgMacros) +include(PreprocessorUtils) +findpkg_begin(OGRE) + + +# Get path, convert backslashes as ${ENV_${var}} +getenv_path(OGRE_HOME) +getenv_path(OGRE_SDK) +getenv_path(OGRE_SOURCE) +getenv_path(OGRE_BUILD) +getenv_path(OGRE_DEPENDENCIES_DIR) +getenv_path(PROGRAMFILES) + +# Determine whether to search for a dynamic or static build +if (OGRE_STATIC) + set(OGRE_LIB_SUFFIX "Static") +else () + set(OGRE_LIB_SUFFIX "") +endif () + +if(APPLE AND NOT OGRE_STATIC) + set(OGRE_LIBRARY_NAMES "Ogre${OGRE_LIB_SUFFIX}") +else() + set(OGRE_LIBRARY_NAMES "OgreMain${OGRE_LIB_SUFFIX}") +endif() +get_debug_names(OGRE_LIBRARY_NAMES) + +# construct search paths from environmental hints and +# OS specific guesses +if (WIN32) + set(OGRE_PREFIX_GUESSES + ${ENV_PROGRAMFILES}/OGRE + C:/OgreSDK + ) +elseif (UNIX) + set(OGRE_PREFIX_GUESSES + /opt/ogre + /opt/OGRE + /usr/lib${LIB_SUFFIX}/ogre + /usr/lib${LIB_SUFFIX}/OGRE + /usr/local/lib${LIB_SUFFIX}/ogre + /usr/local/lib${LIB_SUFFIX}/OGRE + $ENV{HOME}/ogre + $ENV{HOME}/OGRE + ) + if (APPLE) + set(OGRE_PREFIX_GUESSES + ${CMAKE_CURRENT_SOURCE_DIR}/lib/macosx + ${OGRE_PREFIX_GUESSES} + ) + endif () +endif () +set(OGRE_PREFIX_PATH + ${OGRE_HOME} ${OGRE_SDK} ${ENV_OGRE_HOME} ${ENV_OGRE_SDK} + ${OGRE_PREFIX_GUESSES} +) +create_search_paths(OGRE) +# If both OGRE_BUILD and OGRE_SOURCE are set, prepare to find Ogre in a build dir +set(OGRE_PREFIX_SOURCE ${OGRE_SOURCE} ${ENV_OGRE_SOURCE}) +set(OGRE_PREFIX_BUILD ${OGRE_BUILD} ${ENV_OGRE_BUILD}) +set(OGRE_PREFIX_DEPENDENCIES_DIR ${OGRE_DEPENDENCIES_DIR} ${ENV_OGRE_DEPENDENCIES_DIR}) +if (OGRE_PREFIX_SOURCE AND OGRE_PREFIX_BUILD) + foreach(dir ${OGRE_PREFIX_SOURCE}) + set(OGRE_INC_SEARCH_PATH ${dir}/OgreMain/include ${dir}/Dependencies/include ${dir}/iOSDependencies/include ${dir}/AndroidDependencies/include ${OGRE_INC_SEARCH_PATH}) + set(OGRE_LIB_SEARCH_PATH ${dir}/lib ${dir}/Dependencies/lib ${dir}/iOSDependencies/lib ${dir}/AndroidDependencies/lib/${ANDROID_ABI} ${OGRE_LIB_SEARCH_PATH}) + set(OGRE_BIN_SEARCH_PATH ${dir}/Samples/Common/bin ${OGRE_BIN_SEARCH_PATH}) + endforeach(dir) + foreach(dir ${OGRE_PREFIX_BUILD}) + set(OGRE_INC_SEARCH_PATH ${dir}/include ${OGRE_INC_SEARCH_PATH}) + if(APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS) + set(OGRE_LIB_SEARCH_PATH ${dir}/lib/macosx ${OGRE_LIB_SEARCH_PATH}) + else() + set(OGRE_LIB_SEARCH_PATH ${dir}/lib ${OGRE_LIB_SEARCH_PATH}) + endif() + + if (OGRE_BUILD_PLATFORM_APPLE_IOS) + set(OGRE_LIB_SEARCH_PATH ${dir}/lib/iphoneos ${dir}/lib/iphonesimulator ${OGRE_LIB_SEARCH_PATH}) + endif() + + set(OGRE_BIN_SEARCH_PATH ${dir}/bin ${OGRE_BIN_SEARCH_PATH}) + set(OGRE_BIN_SEARCH_PATH ${dir}/Samples/Common/bin ${OGRE_BIN_SEARCH_PATH}) + + if(APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS) + set(OGRE_BIN_SEARCH_PATH ${dir}/bin/macosx ${OGRE_BIN_SEARCH_PATH}) + endif() + endforeach(dir) + + if (OGRE_PREFIX_DEPENDENCIES_DIR) + set(OGRE_INC_SEARCH_PATH ${OGRE_PREFIX_DEPENDENCIES_DIR}/include ${OGRE_INC_SEARCH_PATH}) + set(OGRE_LIB_SEARCH_PATH ${OGRE_PREFIX_DEPENDENCIES_DIR}/lib ${OGRE_LIB_SEARCH_PATH}) + set(OGRE_BIN_SEARCH_PATH ${OGRE_PREFIX_DEPENDENCIES_DIR}/bin ${OGRE_BIN_SEARCH_PATH}) + endif() +else() + set(OGRE_PREFIX_SOURCE "NOTFOUND") + set(OGRE_PREFIX_BUILD "NOTFOUND") +endif () + +# redo search if any of the environmental hints changed +set(OGRE_COMPONENTS Paging Terrain Volume Overlay + Plugin_BSPSceneManager Plugin_CgProgramManager Plugin_OctreeSceneManager + Plugin_OctreeZone Plugin_PCZSceneManager Plugin_ParticleFX + RenderSystem_Direct3D11 RenderSystem_Direct3D9 RenderSystem_GL RenderSystem_GL3Plus RenderSystem_GLES RenderSystem_GLES2) +set(OGRE_RESET_VARS + OGRE_CONFIG_INCLUDE_DIR OGRE_INCLUDE_DIR + OGRE_LIBRARY_FWK OGRE_LIBRARY_REL OGRE_LIBRARY_DBG + OGRE_PLUGIN_DIR_DBG OGRE_PLUGIN_DIR_REL OGRE_MEDIA_DIR) +foreach (comp ${OGRE_COMPONENTS}) + set(OGRE_RESET_VARS ${OGRE_RESET_VARS} + OGRE_${comp}_INCLUDE_DIR OGRE_${comp}_LIBRARY_FWK + OGRE_${comp}_LIBRARY_DBG OGRE_${comp}_LIBRARY_REL + ) +endforeach (comp) +set(OGRE_PREFIX_WATCH ${OGRE_PREFIX_PATH} ${OGRE_PREFIX_SOURCE} ${OGRE_PREFIX_BUILD}) +clear_if_changed(OGRE_PREFIX_WATCH ${OGRE_RESET_VARS}) + +if(NOT OGRE_STATIC) + # try to locate Ogre via pkg-config + use_pkgconfig(OGRE_PKGC "OGRE${OGRE_LIB_SUFFIX}") + + # try to find framework on OSX + findpkg_framework(Ogre) +else() + set(OGRE_LIBRARY_FWK "") +endif() + +# locate Ogre include files +find_path(OGRE_CONFIG_INCLUDE_DIR NAMES OgreBuildSettings.h HINTS ${OGRE_INC_SEARCH_PATH} ${OGRE_FRAMEWORK_INCLUDES} ${OGRE_PKGC_INCLUDE_DIRS} PATH_SUFFIXES "OGRE") +find_path(OGRE_INCLUDE_DIR NAMES OgreRoot.h HINTS ${OGRE_CONFIG_INCLUDE_DIR} ${OGRE_INC_SEARCH_PATH} ${OGRE_FRAMEWORK_INCLUDES} ${OGRE_PKGC_INCLUDE_DIRS} PATH_SUFFIXES "OGRE") +set(OGRE_INCOMPATIBLE FALSE) + +if (OGRE_INCLUDE_DIR) + if (NOT OGRE_CONFIG_INCLUDE_DIR) + set(OGRE_CONFIG_INCLUDE_DIR ${OGRE_INCLUDE_DIR}) + endif () + # determine Ogre version + file(READ ${OGRE_INCLUDE_DIR}/OgrePrerequisites.h OGRE_TEMP_VERSION_CONTENT) + get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_MAJOR OGRE_VERSION_MAJOR) + get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_MINOR OGRE_VERSION_MINOR) + get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_PATCH OGRE_VERSION_PATCH) + get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_NAME OGRE_VERSION_NAME) + set(OGRE_VERSION "${OGRE_VERSION_MAJOR}.${OGRE_VERSION_MINOR}.${OGRE_VERSION_PATCH}") + pkg_message(OGRE "Found Ogre ${OGRE_VERSION_NAME} (${OGRE_VERSION})") + + # determine configuration settings + set(OGRE_CONFIG_HEADERS + ${OGRE_CONFIG_INCLUDE_DIR}/OgreBuildSettings.h + ${OGRE_CONFIG_INCLUDE_DIR}/OgreConfig.h + ) + foreach(CFG_FILE ${OGRE_CONFIG_HEADERS}) + if (EXISTS ${CFG_FILE}) + set(OGRE_CONFIG_HEADER ${CFG_FILE}) + break() + endif() + endforeach() + if (OGRE_CONFIG_HEADER) + file(READ ${OGRE_CONFIG_HEADER} OGRE_TEMP_CONFIG_CONTENT) + has_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_STATIC_LIB OGRE_CONFIG_STATIC) + get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_THREAD_SUPPORT OGRE_CONFIG_THREADS) + get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_THREAD_PROVIDER OGRE_CONFIG_THREAD_PROVIDER) + get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_NO_FREEIMAGE OGRE_CONFIG_FREEIMAGE) + if (OGRE_CONFIG_STATIC AND OGRE_STATIC) + elseif (OGRE_CONFIG_STATIC OR OGRE_STATIC) + pkg_message(OGRE "Build type (static, dynamic) does not match the requested one.") + set(OGRE_INCOMPATIBLE TRUE) + endif () + else () + pkg_message(OGRE "Could not determine Ogre build configuration.") + set(OGRE_INCOMPATIBLE TRUE) + endif () +else () + set(OGRE_INCOMPATIBLE FALSE) +endif () + +if (NOT OGRE_SOURCE) # If using ogre sources, use the target names instead of library files to link. + find_library(OGRE_LIBRARY_REL NAMES ${OGRE_LIBRARY_NAMES} HINTS ${OGRE_LIB_SEARCH_PATH} ${OGRE_PKGC_LIBRARY_DIRS} ${OGRE_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel") + find_library(OGRE_LIBRARY_DBG NAMES ${OGRE_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIB_SEARCH_PATH} ${OGRE_PKGC_LIBRARY_DIRS} ${OGRE_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "Debug") +else() + if( NOT OGRE_LIBRARIES OR OGRE_LIBRARIES STREQUAL "" ) + message( FATAL_ERROR "When using Ogre from sources, please specify target names in OGRE_LIBRARIES!" ) + else() + message( "Using Ogre source instead of binary libraries - skipping library files search." ) + endif() +endif() + +make_library_set(OGRE_LIBRARY) + +if (OGRE_INCOMPATIBLE) + set(OGRE_LIBRARY "NOTFOUND") +endif () + +set(OGRE_INCLUDE_DIR ${OGRE_CONFIG_INCLUDE_DIR} ${OGRE_INCLUDE_DIR}) +list(REMOVE_DUPLICATES OGRE_INCLUDE_DIR) +findpkg_finish(OGRE) +add_parent_dir(OGRE_INCLUDE_DIRS OGRE_INCLUDE_DIR) +if (OGRE_SOURCE) + # If working from source rather than SDK, add samples include + set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} "${OGRE_SOURCE}/Samples/Common/include") +endif() + +mark_as_advanced(OGRE_CONFIG_INCLUDE_DIR OGRE_MEDIA_DIR OGRE_PLUGIN_DIR_REL OGRE_PLUGIN_DIR_DBG) + +if (NOT OGRE_FOUND) + return() +endif () + + +# look for required Ogre dependencies in case of static build and/or threading +if (OGRE_STATIC) + set(OGRE_DEPS_FOUND TRUE) + find_package(Cg QUIET) + find_package(DirectX QUIET) + find_package(FreeImage QUIET) + find_package(Freetype QUIET) + find_package(OpenGL QUIET) + find_package(OpenGLES QUIET) + find_package(OpenGLES2 QUIET) + find_package(ZLIB QUIET) + find_package(ZZip QUIET) + if (UNIX AND NOT APPLE AND NOT ANDROID) + find_package(X11 QUIET) + find_library(XAW_LIBRARY NAMES Xaw Xaw7 PATHS ${DEP_LIB_SEARCH_DIR} ${X11_LIB_SEARCH_PATH}) + if (NOT XAW_LIBRARY OR NOT X11_Xt_FOUND) + set(X11_FOUND FALSE) + endif () + endif () + + set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${ZZip_LIBRARIES} ${ZLIB_LIBRARIES} ${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES}) + + if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS AND NOT ANDROID) + set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY} ${X11_Xrandr_LIB} ${Carbon_LIBRARIES} ${Cocoa_LIBRARIES}) + endif() + + if (NOT ZLIB_FOUND OR NOT ZZip_FOUND) + set(OGRE_DEPS_FOUND FALSE) + endif () + if (NOT FreeImage_FOUND AND NOT OGRE_CONFIG_FREEIMAGE) + set(OGRE_DEPS_FOUND FALSE) + endif () + if (NOT FREETYPE_FOUND) + set(OGRE_DEPS_FOUND FALSE) + endif () + if (UNIX AND NOT APPLE AND NOT ANDROID) + if (NOT X11_FOUND) + set(OGRE_DEPS_FOUND FALSE) + endif () + endif () +endif() + if (OGRE_CONFIG_THREADS) + if (OGRE_CONFIG_THREAD_PROVIDER EQUAL 1) + if (OGRE_STATIC) + set(Boost_USE_STATIC_LIBS TRUE) + if(OGRE_BUILD_PLATFORM_APPLE_IOS) + set(Boost_USE_MULTITHREADED OFF) + endif() + endif() + + set(OGRE_BOOST_COMPONENTS thread date_time) + find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET) + if(Boost_FOUND AND Boost_VERSION GREATER 104900) + if(Boost_VERSION GREATER 105300) + set(OGRE_BOOST_COMPONENTS thread date_time system atomic chrono) + else() + set(OGRE_BOOST_COMPONENTS thread date_time system chrono) + endif() + endif() + + find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET) + if (NOT Boost_THREAD_FOUND) + set(OGRE_DEPS_FOUND FALSE) + else () + set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES}) + set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) + endif () + elseif (OGRE_CONFIG_THREAD_PROVIDER EQUAL 2) + find_package(POCO QUIET) + if (NOT POCO_FOUND) + set(OGRE_DEPS_FOUND FALSE) + else () + set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${POCO_LIBRARIES}) + set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} ${POCO_INCLUDE_DIRS}) + endif () + elseif (OGRE_CONFIG_THREAD_PROVIDER EQUAL 3) + find_package(TBB QUIET) + if (NOT TBB_FOUND) + set(OGRE_DEPS_FOUND FALSE) + else () + set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${TBB_LIBRARIES}) + set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} ${TBB_INCLUDE_DIRS}) + endif () + endif () + endif () +if (OGRE_STATIC) + if (NOT OGRE_DEPS_FOUND) + pkg_message(OGRE "Could not find all required dependencies for the Ogre package.") + set(OGRE_FOUND FALSE) + endif () +endif () + +if (NOT OGRE_FOUND) + return() +endif () + + +get_filename_component(OGRE_LIBRARY_DIR_REL "${OGRE_LIBRARY_REL}" PATH) +get_filename_component(OGRE_LIBRARY_DIR_DBG "${OGRE_LIBRARY_DBG}" PATH) +set(OGRE_LIBRARY_DIRS ${OGRE_LIBRARY_DIR_REL} ${OGRE_LIBRARY_DIR_DBG}) + +# find binaries +if (NOT OGRE_STATIC) + if (WIN32) + find_file(OGRE_BINARY_REL NAMES "OgreMain.dll" HINTS ${OGRE_BIN_SEARCH_PATH} + PATH_SUFFIXES "" Release RelWithDebInfo MinSizeRel) + find_file(OGRE_BINARY_DBG NAMES "OgreMain_d.dll" HINTS ${OGRE_BIN_SEARCH_PATH} + PATH_SUFFIXES "" Debug ) + endif() + mark_as_advanced(OGRE_BINARY_REL OGRE_BINARY_DBG) +endif() + + +######################################################### +# Find Ogre components +######################################################### + +set(OGRE_COMPONENT_SEARCH_PATH_REL + ${OGRE_LIBRARY_DIR_REL}/.. + ${OGRE_LIBRARY_DIR_REL}/../.. + ${OGRE_BIN_SEARCH_PATH} +) +set(OGRE_COMPONENT_SEARCH_PATH_DBG + ${OGRE_LIBRARY_DIR_DBG}/.. + ${OGRE_LIBRARY_DIR_DBG}/../.. + ${OGRE_BIN_SEARCH_PATH} +) + +macro(ogre_find_component COMPONENT HEADER) + findpkg_begin(OGRE_${COMPONENT}) + find_path(OGRE_${COMPONENT}_INCLUDE_DIR NAMES ${HEADER} HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE} PATH_SUFFIXES ${COMPONENT} OGRE/${COMPONENT} Components/${COMPONENT}/include) + set(OGRE_${COMPONENT}_LIBRARY_NAMES "Ogre${COMPONENT}${OGRE_LIB_SUFFIX}") + get_debug_names(OGRE_${COMPONENT}_LIBRARY_NAMES) + find_library(OGRE_${COMPONENT}_LIBRARY_REL NAMES ${OGRE_${COMPONENT}_LIBRARY_NAMES} HINTS ${OGRE_LIBRARY_DIR_REL} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel") + find_library(OGRE_${COMPONENT}_LIBRARY_DBG NAMES ${OGRE_${COMPONENT}_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIBRARY_DIR_DBG} PATH_SUFFIXES "" "Debug") + make_library_set(OGRE_${COMPONENT}_LIBRARY) + findpkg_finish(OGRE_${COMPONENT}) + if (OGRE_${COMPONENT}_FOUND) + # find binaries + if (NOT OGRE_STATIC) + if (WIN32) + find_file(OGRE_${COMPONENT}_BINARY_REL NAMES "Ogre${COMPONENT}.dll" HINTS ${OGRE_COMPONENT_SEARCH_PATH_REL} PATH_SUFFIXES "" bin bin/Release bin/RelWithDebInfo bin/MinSizeRel Release) + find_file(OGRE_${COMPONENT}_BINARY_DBG NAMES "Ogre${COMPONENT}_d.dll" HINTS ${OGRE_COMPONENT_SEARCH_PATH_DBG} PATH_SUFFIXES "" bin bin/Debug Debug) + endif() + mark_as_advanced(OGRE_${COMPONENT}_BINARY_REL OGRE_${COMPONENT}_BINARY_DBG) + endif() + endif() +endmacro() + +# look for Paging component +ogre_find_component(Paging OgrePaging.h) +# look for Terrain component +ogre_find_component(Terrain OgreTerrain.h) +# look for Property component +ogre_find_component(Property OgreProperty.h) +# look for RTShaderSystem component +ogre_find_component(RTShaderSystem OgreRTShaderSystem.h) +# look for Volume component +ogre_find_component(Volume OgreVolumePrerequisites.h) +# look for Overlay component +ogre_find_component(Overlay OgreOverlaySystem.h) + +######################################################### +# Find Ogre plugins +######################################################### +macro(ogre_find_plugin PLUGIN HEADER) + # On Unix, the plugins might have no prefix + if (CMAKE_FIND_LIBRARY_PREFIXES) + set(TMP_CMAKE_LIB_PREFIX ${CMAKE_FIND_LIBRARY_PREFIXES}) + set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "") + endif() + + # strip RenderSystem_ or Plugin_ prefix from plugin name + string(REPLACE "RenderSystem_" "" PLUGIN_TEMP ${PLUGIN}) + string(REPLACE "Plugin_" "" PLUGIN_NAME ${PLUGIN_TEMP}) + + # header files for plugins are not usually needed, but find them anyway if they are present + set(OGRE_PLUGIN_PATH_SUFFIXES + PlugIns PlugIns/${PLUGIN_NAME} Plugins Plugins/${PLUGIN_NAME} ${PLUGIN} + RenderSystems RenderSystems/${PLUGIN_NAME} ${ARGN}) + find_path(OGRE_${PLUGIN}_INCLUDE_DIR NAMES ${HEADER} + HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE} + PATH_SUFFIXES ${OGRE_PLUGIN_PATH_SUFFIXES}) + # find link libraries for plugins + set(OGRE_${PLUGIN}_LIBRARY_NAMES "${PLUGIN}${OGRE_LIB_SUFFIX}") + get_debug_names(OGRE_${PLUGIN}_LIBRARY_NAMES) + set(OGRE_${PLUGIN}_LIBRARY_FWK ${OGRE_LIBRARY_FWK}) + find_library(OGRE_${PLUGIN}_LIBRARY_REL NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES} + HINTS "${OGRE_BUILD}/lib" ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE opt Release Release/opt RelWithDebInfo RelWithDebInfo/opt MinSizeRel MinSizeRel/opt) + find_library(OGRE_${PLUGIN}_LIBRARY_DBG NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES_DBG} + HINTS "${OGRE_BUILD}/lib" ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE opt Debug Debug/opt) + make_library_set(OGRE_${PLUGIN}_LIBRARY) + + if (OGRE_${PLUGIN}_LIBRARY OR OGRE_${PLUGIN}_INCLUDE_DIR) + set(OGRE_${PLUGIN}_FOUND TRUE) + if (OGRE_${PLUGIN}_INCLUDE_DIR) + set(OGRE_${PLUGIN}_INCLUDE_DIRS ${OGRE_${PLUGIN}_INCLUDE_DIR}) + endif() + set(OGRE_${PLUGIN}_LIBRARIES ${OGRE_${PLUGIN}_LIBRARY}) + endif () + + mark_as_advanced(OGRE_${PLUGIN}_INCLUDE_DIR OGRE_${PLUGIN}_LIBRARY_REL OGRE_${PLUGIN}_LIBRARY_DBG OGRE_${PLUGIN}_LIBRARY_FWK) + + # look for plugin dirs + if (OGRE_${PLUGIN}_FOUND) + if (NOT OGRE_PLUGIN_DIR_REL OR NOT OGRE_PLUGIN_DIR_DBG) + if (WIN32) + set(OGRE_PLUGIN_SEARCH_PATH_REL + ${OGRE_LIBRARY_DIR_REL}/.. + ${OGRE_LIBRARY_DIR_REL}/../.. + ${OGRE_BIN_SEARCH_PATH} + ) + set(OGRE_PLUGIN_SEARCH_PATH_DBG + ${OGRE_LIBRARY_DIR_DBG}/.. + ${OGRE_LIBRARY_DIR_DBG}/../.. + ${OGRE_BIN_SEARCH_PATH} + ) + find_path(OGRE_PLUGIN_DIR_REL NAMES "${PLUGIN}.dll" HINTS ${OGRE_PLUGIN_SEARCH_PATH_REL} + PATH_SUFFIXES "" bin bin/Release bin/RelWithDebInfo bin/MinSizeRel Release) + find_path(OGRE_PLUGIN_DIR_DBG NAMES "${PLUGIN}_d.dll" HINTS ${OGRE_PLUGIN_SEARCH_PATH_DBG} + PATH_SUFFIXES "" bin bin/Debug Debug) + elseif (UNIX) + get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_REL} PATH) + set(OGRE_PLUGIN_DIR_REL ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (release)" FORCE) + get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_DBG} PATH) + set(OGRE_PLUGIN_DIR_DBG ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (debug)" FORCE) + endif () + endif () + + # find binaries + if (NOT OGRE_STATIC) + if (WIN32) + find_file(OGRE_${PLUGIN}_REL NAMES "${PLUGIN}.dll" HINTS ${OGRE_PLUGIN_DIR_REL}) + find_file(OGRE_${PLUGIN}_DBG NAMES "${PLUGIN}_d.dll" HINTS ${OGRE_PLUGIN_DIR_DBG}) + endif() + mark_as_advanced(OGRE_${PLUGIN}_REL OGRE_${PLUGIN}_DBG) + endif() + + endif () + + if (TMP_CMAKE_LIB_PREFIX) + set(CMAKE_FIND_LIBRARY_PREFIXES ${TMP_CMAKE_LIB_PREFIX}) + endif () +endmacro(ogre_find_plugin) + +ogre_find_plugin(Plugin_PCZSceneManager OgrePCZSceneManager.h PCZ PlugIns/PCZSceneManager/include) +ogre_find_plugin(Plugin_OctreeZone OgreOctreeZone.h PCZ PlugIns/OctreeZone/include) +ogre_find_plugin(Plugin_BSPSceneManager OgreBspSceneManager.h PlugIns/BSPSceneManager/include) +ogre_find_plugin(Plugin_CgProgramManager OgreCgProgram.h PlugIns/CgProgramManager/include) +ogre_find_plugin(Plugin_OctreeSceneManager OgreOctreeSceneManager.h PlugIns/OctreeSceneManager/include) +ogre_find_plugin(Plugin_ParticleFX OgreParticleFXPrerequisites.h PlugIns/ParticleFX/include) +ogre_find_plugin(RenderSystem_GL OgreGLRenderSystem.h RenderSystems/GL/include) +ogre_find_plugin(RenderSystem_GL3Plus OgreGL3PlusRenderSystem.h RenderSystems/GL3Plus/include) +ogre_find_plugin(RenderSystem_GLES OgreGLESRenderSystem.h RenderSystems/GLES/include) +ogre_find_plugin(RenderSystem_GLES2 OgreGLES2RenderSystem.h RenderSystems/GLES2/include) +ogre_find_plugin(RenderSystem_Direct3D9 OgreD3D9RenderSystem.h RenderSystems/Direct3D9/include) +ogre_find_plugin(RenderSystem_Direct3D11 OgreD3D11RenderSystem.h RenderSystems/Direct3D11/include) + +if (OGRE_STATIC) + # check if dependencies for plugins are met + if (NOT DirectX_FOUND) + set(OGRE_RenderSystem_Direct3D9_FOUND FALSE) + endif () + if (NOT DirectX_D3D11_FOUND) + set(OGRE_RenderSystem_Direct3D11_FOUND FALSE) + endif () + if (NOT OPENGL_FOUND) + set(OGRE_RenderSystem_GL_FOUND FALSE) + endif () + if (NOT OPENGL_FOUND) + set(OGRE_RenderSystem_GL3Plus_FOUND FALSE) + endif () + if (NOT OPENGLES_FOUND) + set(OGRE_RenderSystem_GLES_FOUND FALSE) + endif () + if (NOT OPENGLES2_FOUND) + set(OGRE_RenderSystem_GLES2_FOUND FALSE) + endif () + if (NOT Cg_FOUND) + set(OGRE_Plugin_CgProgramManager_FOUND FALSE) + endif () + + set(OGRE_RenderSystem_Direct3D9_LIBRARIES ${OGRE_RenderSystem_Direct3D9_LIBRARIES} + ${DirectX_LIBRARIES} + ) + + set(OGRE_RenderSystem_Direct3D11_LIBRARIES ${OGRE_RenderSystem_Direct3D11_LIBRARIES} + ${DirectX_D3D11_LIBRARIES} + ) + set(OGRE_RenderSystem_GL_LIBRARIES ${OGRE_RenderSystem_GL_LIBRARIES} + ${OPENGL_LIBRARIES} + ) + set(OGRE_RenderSystem_GL3Plus_LIBRARIES ${OGRE_RenderSystem_GL3Plus_LIBRARIES} + ${OPENGL_LIBRARIES} + ) + set(OGRE_RenderSystem_GLES_LIBRARIES ${OGRE_RenderSystem_GLES_LIBRARIES} + ${OPENGLES_LIBRARIES} + ) + set(OGRE_RenderSystem_GLES2_LIBRARIES ${OGRE_RenderSystem_GLES2_LIBRARIES} + ${OPENGLES2_LIBRARIES} + ) + set(OGRE_Plugin_CgProgramManager_LIBRARIES ${OGRE_Plugin_CgProgramManager_LIBRARIES} + ${Cg_LIBRARIES} + ) +endif () + +# look for the media directory +set(OGRE_MEDIA_SEARCH_PATH + ${OGRE_SOURCE} + ${OGRE_LIBRARY_DIR_REL}/.. + ${OGRE_LIBRARY_DIR_DBG}/.. + ${OGRE_LIBRARY_DIR_REL}/../.. + ${OGRE_LIBRARY_DIR_DBG}/../.. + ${OGRE_PREFIX_SOURCE} +) +set(OGRE_MEDIA_SEARCH_SUFFIX + Samples/Media + Media + media + share/OGRE/media + share/OGRE/Media +) + +clear_if_changed(OGRE_PREFIX_WATCH OGRE_MEDIA_DIR) +find_path(OGRE_MEDIA_DIR NAMES packs/cubemapsJS.zip HINTS ${OGRE_MEDIA_SEARCH_PATH} + PATHS ${OGRE_PREFIX_PATH} PATH_SUFFIXES ${OGRE_MEDIA_SEARCH_SUFFIX}) + diff --git a/cmake/Modules/FindPkgMacros.cmake b/cmake/Modules/FindPkgMacros.cmake new file mode 100644 index 0000000..5968623 --- /dev/null +++ b/cmake/Modules/FindPkgMacros.cmake @@ -0,0 +1,163 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +################################################################## +# Provides some common functionality for the FindPackage modules +################################################################## + +# Begin processing of package +macro(findpkg_begin PREFIX) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Looking for ${PREFIX}...") + endif () +endmacro(findpkg_begin) + +# Display a status message unless FIND_QUIETLY is set +macro(pkg_message PREFIX) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS ${ARGN}) + endif () +endmacro(pkg_message) + +# Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes +macro(getenv_path VAR) + set(ENV_${VAR} $ENV{${VAR}}) + # replace won't work if var is blank + if (ENV_${VAR}) + string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) + endif () +endmacro(getenv_path) + +# Construct search paths for includes and libraries from a PREFIX_PATH +macro(create_search_paths PREFIX) + foreach(dir ${${PREFIX}_PREFIX_PATH}) + set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH} + ${dir}/include ${dir}/Include ${dir}/include/${PREFIX} ${dir}/Headers) + set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} + ${dir}/lib ${dir}/Lib ${dir}/lib/${PREFIX} ${dir}/Libs) + set(${PREFIX}_BIN_SEARCH_PATH ${${PREFIX}_BIN_SEARCH_PATH} + ${dir}/bin) + endforeach(dir) + if(ANDROID) + set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} ${OGRE_DEPENDENCIES_DIR}/lib/${ANDROID_ABI}) + endif() + set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH}) +endmacro(create_search_paths) + +# clear cache variables if a certain variable changed +macro(clear_if_changed TESTVAR) + # test against internal check variable + # HACK: Apparently, adding a variable to the cache cleans up the list + # a bit. We need to also remove any empty strings from the list, but + # at the same time ensure that we are actually dealing with a list. + list(APPEND ${TESTVAR} "") + list(REMOVE_ITEM ${TESTVAR} "") + if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}") + message(STATUS "${TESTVAR} changed.") + foreach(var ${ARGN}) + set(${var} "NOTFOUND" CACHE STRING "x" FORCE) + endforeach(var) + endif () + set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE) +endmacro(clear_if_changed) + +# Try to get some hints from pkg-config, if available +macro(use_pkgconfig PREFIX PKGNAME) + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(${PREFIX} ${PKGNAME}) + endif () +endmacro (use_pkgconfig) + +# Couple a set of release AND debug libraries (or frameworks) +macro(make_library_set PREFIX) + if (${PREFIX}_FWK) + set(${PREFIX} ${${PREFIX}_FWK}) + elseif (${PREFIX}_REL AND ${PREFIX}_DBG) + set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG}) + elseif (${PREFIX}_REL) + set(${PREFIX} ${${PREFIX}_REL}) + elseif (${PREFIX}_DBG) + set(${PREFIX} ${${PREFIX}_DBG}) + endif () +endmacro(make_library_set) + +# Generate debug names from given release names +macro(get_debug_names PREFIX) + foreach(i ${${PREFIX}}) + set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i}) + endforeach(i) +endmacro(get_debug_names) + +# Add the parent dir from DIR to VAR +macro(add_parent_dir VAR DIR) + get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE) + set(${VAR} ${${VAR}} ${${DIR}_TEMP}) +endmacro(add_parent_dir) + +# Do the final processing for the package find. +macro(findpkg_finish PREFIX) + # skip if already processed during this run + if (NOT ${PREFIX}_FOUND) + if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) + set(${PREFIX}_FOUND TRUE) + set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) + set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}") + endif () + else () + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Could not locate ${PREFIX}") + endif () + if (${PREFIX}_FIND_REQUIRED) + message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.") + endif () + endif () + + mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK) + endif () +endmacro(findpkg_finish) + + +# Slightly customised framework finder +macro(findpkg_framework fwk) + if(APPLE) + set(${fwk}_FRAMEWORK_PATH + ${${fwk}_FRAMEWORK_SEARCH_PATH} + ${CMAKE_FRAMEWORK_PATH} + ~/Library/Frameworks + /Library/Frameworks + /System/Library/Frameworks + /Network/Library/Frameworks + ${CMAKE_CURRENT_SOURCE_DIR}/lib/macosx/Release + ${CMAKE_CURRENT_SOURCE_DIR}/lib/macosx/Debug + ) + # These could be arrays of paths, add each individually to the search paths + foreach(i ${OGRE_PREFIX_PATH}) + set(${fwk}_FRAMEWORK_PATH ${${fwk}_FRAMEWORK_PATH} ${i}/lib/macosx/Release ${i}/lib/macosx/Debug) + endforeach(i) + + foreach(i ${OGRE_PREFIX_BUILD}) + set(${fwk}_FRAMEWORK_PATH ${${fwk}_FRAMEWORK_PATH} ${i}/lib/macosx/Release ${i}/lib/macosx/Debug) + endforeach(i) + + foreach(dir ${${fwk}_FRAMEWORK_PATH}) + set(fwkpath ${dir}/${fwk}.framework) + if(EXISTS ${fwkpath}) + set(${fwk}_FRAMEWORK_INCLUDES ${${fwk}_FRAMEWORK_INCLUDES} + ${fwkpath}/Headers ${fwkpath}/PrivateHeaders) + set(${fwk}_FRAMEWORK_PATH ${dir}) + if (NOT ${fwk}_LIBRARY_FWK) + set(${fwk}_LIBRARY_FWK "-framework ${fwk}") + endif () + endif(EXISTS ${fwkpath}) + endforeach(dir) + endif(APPLE) +endmacro(findpkg_framework) diff --git a/cmake/Modules/OgreAddTargets.cmake b/cmake/Modules/OgreAddTargets.cmake new file mode 100644 index 0000000..761ac5a --- /dev/null +++ b/cmake/Modules/OgreAddTargets.cmake @@ -0,0 +1,122 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# check the contents of a given source file. If they differ from the +# expected content, or the file does not exist, rewrite it with the +# provided content. +# This function is used in order to update Unity build files only when +# necessary. If we rewrote them unconditionally, it might trigger an +# unnecessary rebuild of the file. +function(check_and_update_file FILENAME CONTENT) + # read current file contents + if (EXISTS ${FILENAME}) + file(READ ${FILENAME} _CUR) + else () + # create empty file + file(WRITE ${FILENAME} "") + set(_CUR "") + endif () + if (NOT _CUR STREQUAL CONTENT) + # rewrite file with new contents + message(STATUS " Updating ${FILENAME}...") + file(WRITE ${FILENAME} ${CONTENT}) + else () + message(STATUS " ${FILENAME} is up to date.") + endif () +endfunction() + + +# generate unity build files for the given target. +# If in the list of source files the key word SEPARATE is specified, then +# any source file after that will be compiled separately. +macro(create_unity_build_files TARGETNAME) + # first step: build the primary and separate lists + set(_PRIMARY "") + set(_EXCLUDES "") + set(_SEP FALSE) + foreach(_FILE ${ARGN}) + if (_FILE STREQUAL "SEPARATE") + set(_SEP TRUE) + else () + if (_SEP) + list(APPEND _EXCLUDES ${_FILE}) + else () + list(APPEND _PRIMARY ${_FILE}) + endif () + endif() + endforeach() + set(_SOURCES ${_PRIMARY} ${_EXCLUDES}) + list(REMOVE_DUPLICATES _SOURCES) + + if (OGRE_UNITY_BUILD) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + # create Unity compilation units + # all source files given will be put into a certain number of + # compilation units. + # if certain source files should be excluded from the unity build + # and built separately, they need to also be named in the SEPARATE + # list. + set(_FILE_NUM 0) + set(_FILE_CNT 0) + set(_FILE_CONTENTS "") + message(STATUS "Creating Unity build files for target ${TARGETNAME}") + foreach(_FILE ${_PRIMARY}) + # test if file is more than just a header + get_filename_component(_EXT ${_FILE} EXT) + list(FIND _EXCLUDES ${_FILE} _EXCLUDED) + if ((_EXT STREQUAL ".cpp") AND (_EXCLUDED EQUAL "-1")) + set(_FILE_CONTENTS "${_FILE_CONTENTS}\#include \"${_FILE}\"\n") + math(EXPR _FILE_CNT "${_FILE_CNT}+1") + if(_FILE_CNT EQUAL OGRE_UNITY_FILES_PER_UNIT) + set(_FILENAME "${OGRE_BINARY_DIR}/${TARGETNAME}/compile_${TARGETNAME}_${_FILE_NUM}.cpp") + check_and_update_file(${_FILENAME} ${_FILE_CONTENTS}) + math(EXPR _FILE_NUM "${_FILE_NUM}+1") + set(_FILE_CNT 0) + set (_FILE_CONTENTS "") + list(APPEND _SOURCES ${_FILENAME}) + endif() + # exclude the original source file from the compilation + set_source_files_properties(${_FILE} PROPERTIES LANGUAGE "" HEADER_FILE_ONLY TRUE) + endif() + endforeach() + # don't forget the last set of files + set(_FILENAME "${OGRE_BINARY_DIR}/${TARGETNAME}/compile_${TARGETNAME}_${_FILE_NUM}.cpp") + check_and_update_file(${_FILENAME} ${_FILE_CONTENTS}) + list(APPEND _SOURCES ${_FILENAME}) + endif () +endmacro() + + +# add a new library target +# usage: ogre_add_library(TARGETNAME LIBTYPE SOURCE_FILES [SEPARATE SOURCE_FILES]) +function(ogre_add_library TARGETNAME LIBTYPE) + create_unity_build_files(${TARGETNAME} ${ARGN}) + add_library(${TARGETNAME} ${LIBTYPE} ${_SOURCES}) +endfunction(ogre_add_library) + + +# add a new executable target +# usage: ogre_add_executable(TARGETNAME [WIN32] [MACOSX_BUNDLE] SOURCE_FILES [SEPARATE SOURCE_FILES]) +function(ogre_add_executable TARGETNAME) + # test if WIN32 or MACOSX_BUNDLE options were provided + set(_WIN32 "") + set(_OSX "") + list(FIND ARGN "WIN32" _W32_IDX) + if (_W32_IDX GREATER "-1") + set(_WIN32 "WIN32") + list(REMOVE_AT ARGN ${_W32_IDX}) + endif () + list(FIND ARGN "MACOSX_BUNDLE" _OSX_IDX) + if (_OSX_IDX GREATER "-1") + set(_OSX "MACOSX_BUNDLE") + list(REMOVE_AT ARGN ${_OSX_IDX}) + endif () + create_unity_build_files(${TARGETNAME} ${ARGN}) + add_executable(${TARGETNAME} ${_WIN32} ${_OSX} ${_SOURCES}) +endfunction() diff --git a/cmake/Modules/OgreConfigTargets.cmake b/cmake/Modules/OgreConfigTargets.cmake new file mode 100644 index 0000000..c6b3b40 --- /dev/null +++ b/cmake/Modules/OgreConfigTargets.cmake @@ -0,0 +1,462 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# Configure settings and install targets +if(APPLE) + macro(set_xcode_property targ xc_prop_name xc_prop_val) + set_property( TARGET ${targ} PROPERTY XCODE_ATTRIBUTE_${xc_prop_name} ${xc_prop_val} ) + endmacro(set_xcode_property) + + set(MIN_IOS_VERSION "6.0") + + if(NOT OGRE_BUILD_PLATFORM_ANDROID AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS) + set(PLATFORM_NAME "macosx") + elseif(OGRE_BUILD_PLATFORM_APPLE_IOS) + set(PLATFORM_NAME "$(PLATFORM_NAME)") + endif() +endif() + +# Default build output paths +if (NOT OGRE_ARCHIVE_OUTPUT) + if(APPLE AND NOT OGRE_BUILD_PLATFORM_ANDROID) + set(OGRE_ARCHIVE_OUTPUT ${OGRE_BINARY_DIR}/lib/${PLATFORM_NAME}) + else() + set(OGRE_ARCHIVE_OUTPUT ${OGRE_BINARY_DIR}/lib) + endif() +endif () +if (NOT OGRE_LIBRARY_OUTPUT) + if(APPLE AND NOT OGRE_BUILD_PLATFORM_ANDROID) + set(OGRE_LIBRARY_OUTPUT ${OGRE_BINARY_DIR}/lib/${PLATFORM_NAME}) + else() + set(OGRE_LIBRARY_OUTPUT ${OGRE_BINARY_DIR}/lib) + endif() +endif () +if (NOT OGRE_RUNTIME_OUTPUT) + set(OGRE_RUNTIME_OUTPUT ${OGRE_BINARY_DIR}/bin) +endif () + +if (WIN32) + set(OGRE_RELEASE_PATH "/Release") + set(OGRE_RELWDBG_PATH "/RelWithDebInfo") + set(OGRE_MINSIZE_PATH "/MinSizeRel") + set(OGRE_DEBUG_PATH "/Debug") + set(OGRE_LIB_RELEASE_PATH "/Release") + set(OGRE_LIB_RELWDBG_PATH "/RelWithDebInfo") + set(OGRE_LIB_MINSIZE_PATH "/MinSizeRel") + set(OGRE_LIB_DEBUG_PATH "/Debug") + set(OGRE_PLUGIN_PATH "/opt") + set(OGRE_SAMPLE_PATH "/opt/samples") +elseif (UNIX) + set(OGRE_RELEASE_PATH "") + set(OGRE_RELWDBG_PATH "") + set(OGRE_MINSIZE_PATH "") + set(OGRE_DEBUG_PATH "/debug") + if (NOT APPLE) + set(OGRE_DEBUG_PATH "") + endif () + set(OGRE_LIB_RELEASE_PATH "") + set(OGRE_LIB_RELWDBG_PATH "") + set(OGRE_LIB_MINSIZE_PATH "") + set(OGRE_LIB_DEBUG_PATH "") + if(APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS) + set(OGRE_RELEASE_PATH "/${PLATFORM_NAME}") + endif() + if(APPLE AND OGRE_BUILD_PLATFORM_APPLE_IOS) + set(OGRE_LIB_RELEASE_PATH "/Release") + endif(APPLE AND OGRE_BUILD_PLATFORM_APPLE_IOS) + if (APPLE) + set(OGRE_PLUGIN_PATH "/") + else() + set(OGRE_PLUGIN_PATH "/OGRE") + endif(APPLE) + set(OGRE_SAMPLE_PATH "/OGRE/Samples") +endif () + +# create vcproj.user file for Visual Studio to set debug working directory +function(ogre_create_vcproj_userfile TARGETNAME) + if (MSVC) + configure_file( + ${OGRE_TEMPLATES_DIR}/VisualStudioUserFile.vcproj.user.in + ${CMAKE_CURRENT_BINARY_DIR}/${TARGETNAME}.vcproj.user + @ONLY + ) + configure_file( + ${OGRE_TEMPLATES_DIR}/VisualStudioUserFile.vcxproj.user.in + ${CMAKE_CURRENT_BINARY_DIR}/${TARGETNAME}.vcxproj.user + @ONLY + ) + endif () +endfunction(ogre_create_vcproj_userfile) + +# install targets according to current build type +function(ogre_install_target TARGETNAME SUFFIX EXPORT) + # Skip all install targets in SDK + if (OGRE_SDK_BUILD) + return() + endif() + + if(EXPORT) + install(TARGETS ${TARGETNAME} #EXPORT Ogre-exports + BUNDLE DESTINATION "bin${OGRE_RELEASE_PATH}" CONFIGURATIONS Release None "" + RUNTIME DESTINATION "bin${OGRE_RELEASE_PATH}" CONFIGURATIONS Release None "" + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}" CONFIGURATIONS Release None "" + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}" CONFIGURATIONS Release None "" + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELEASE_PATH}/Release" CONFIGURATIONS Release None "" + ) + install(TARGETS ${TARGETNAME} #EXPORT Ogre-exports + BUNDLE DESTINATION "bin${OGRE_RELWDBG_PATH}" CONFIGURATIONS RelWithDebInfo + RUNTIME DESTINATION "bin${OGRE_RELWDBG_PATH}" CONFIGURATIONS RelWithDebInfo + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}" CONFIGURATIONS RelWithDebInfo + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}" CONFIGURATIONS RelWithDebInfo + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELWDBG_PATH}/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo + ) + install(TARGETS ${TARGETNAME} #EXPORT Ogre-exports + BUNDLE DESTINATION "bin${OGRE_MINSIZE_PATH}" CONFIGURATIONS MinSizeRel + RUNTIME DESTINATION "bin${OGRE_MINSIZE_PATH}" CONFIGURATIONS MinSizeRel + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_MINSIZE_PATH}${SUFFIX}" CONFIGURATIONS MinSizeRel + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_MINSIZE_PATH}${SUFFIX}" CONFIGURATIONS MinSizeRel + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_MINSIZE_PATH}/MinSizeRel" CONFIGURATIONS MinSizeRel + ) + install(TARGETS ${TARGETNAME} #EXPORT Ogre-exports + BUNDLE DESTINATION "bin${OGRE_DEBUG_PATH}" CONFIGURATIONS Debug + RUNTIME DESTINATION "bin${OGRE_DEBUG_PATH}" CONFIGURATIONS Debug + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}" CONFIGURATIONS Debug + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}" CONFIGURATIONS Debug + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_DEBUG_PATH}/Debug" CONFIGURATIONS Debug + ) + #install(EXPORT Ogre-exports DESTINATION ${OGRE_LIB_DIRECTORY}) + else() + install(TARGETS ${TARGETNAME} + BUNDLE DESTINATION "bin${OGRE_RELEASE_PATH}" CONFIGURATIONS Release None "" + RUNTIME DESTINATION "bin${OGRE_RELEASE_PATH}" CONFIGURATIONS Release None "" + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}" CONFIGURATIONS Release None "" + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}" CONFIGURATIONS Release None "" + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELEASE_PATH}/Release" CONFIGURATIONS Release None "" + ) + install(TARGETS ${TARGETNAME} + BUNDLE DESTINATION "bin${OGRE_RELWDBG_PATH}" CONFIGURATIONS RelWithDebInfo + RUNTIME DESTINATION "bin${OGRE_RELWDBG_PATH}" CONFIGURATIONS RelWithDebInfo + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}" CONFIGURATIONS RelWithDebInfo + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}" CONFIGURATIONS RelWithDebInfo + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELWDBG_PATH}/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo + ) + install(TARGETS ${TARGETNAME} + BUNDLE DESTINATION "bin${OGRE_MINSIZE_PATH}" CONFIGURATIONS MinSizeRel + RUNTIME DESTINATION "bin${OGRE_MINSIZE_PATH}" CONFIGURATIONS MinSizeRel + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_MINSIZE_PATH}${SUFFIX}" CONFIGURATIONS MinSizeRel + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_MINSIZE_PATH}${SUFFIX}" CONFIGURATIONS MinSizeRel + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_MINSIZE_PATH}/MinSizeRel" CONFIGURATIONS MinSizeRel + ) + install(TARGETS ${TARGETNAME} + BUNDLE DESTINATION "bin${OGRE_DEBUG_PATH}" CONFIGURATIONS Debug + RUNTIME DESTINATION "bin${OGRE_DEBUG_PATH}" CONFIGURATIONS Debug + LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}" CONFIGURATIONS Debug + ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}" CONFIGURATIONS Debug + FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_DEBUG_PATH}/Debug" CONFIGURATIONS Debug + ) + endif() + +endfunction(ogre_install_target) + +# setup common target settings +function(ogre_config_common TARGETNAME) + set_target_properties(${TARGETNAME} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${OGRE_ARCHIVE_OUTPUT} + LIBRARY_OUTPUT_DIRECTORY ${OGRE_LIBRARY_OUTPUT} + RUNTIME_OUTPUT_DIRECTORY ${OGRE_RUNTIME_OUTPUT} + ) + if(OGRE_BUILD_PLATFORM_APPLE_IOS) + set_xcode_property( ${TARGETNAME} IPHONEOS_DEPLOYMENT_TARGET ${MIN_IOS_VERSION} ) + set_property( TARGET ${TARGETNAME} PROPERTY XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET[arch=arm64] "7.0" ) + set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_THUMB_SUPPORT "NO") + set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_UNROLL_LOOPS "YES") + set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer") + set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES") + endif(OGRE_BUILD_PLATFORM_APPLE_IOS) + + if(NOT OGRE_STATIC AND (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") + # add GCC visibility flags to shared library build + set_target_properties(${TARGETNAME} PROPERTIES COMPILE_FLAGS "${OGRE_GCC_VISIBILITY_FLAGS}") + set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "${XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN}") + set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN "${XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN}") + #set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN[arch=x86_64] "YES") + endif() + + if(OGRE_BUILD_PLATFORM_WINRT) + # enable WinRT features, support available since CMake 2.8.8 + set_target_properties(${TARGETNAME} PROPERTIES VS_WINRT_EXTENSIONS "YES") + set_target_properties(${TARGETNAME} PROPERTIES COMPILE_FLAGS "/bigobj") + + # WinRT uses precompiled headers by default, that needs to be overriden, but unfortunately CMake can`t do this + #if(NOT ${TARGET_NAME} STREQUAL "OgreMain") + # set_target_properties(${TARGETNAME} PROPERTIES COMPILE_FLAGS "/Y-") + #endif(NOT ${TARGET_NAME} STREQUAL "OgreMain") + endif(OGRE_BUILD_PLATFORM_WINRT) + + ogre_create_vcproj_userfile(${TARGETNAME}) +endfunction(ogre_config_common) + +# setup library build +function(ogre_config_lib LIBNAME EXPORT) + ogre_config_common(${LIBNAME}) + if (OGRE_STATIC) + # add static prefix, if compiling static version + set_target_properties(${LIBNAME} PROPERTIES OUTPUT_NAME ${LIBNAME}Static) + else (OGRE_STATIC) + if (MINGW) + # remove lib prefix from DLL outputs + set_target_properties(${LIBNAME} PROPERTIES PREFIX "") + endif () + endif (OGRE_STATIC) + ogre_install_target(${LIBNAME} "" ${EXPORT}) + + if(OGRE_BUILD_PLATFORM_APPLE_IOS) + set_xcode_property( ${LIBNAME} IPHONEOS_DEPLOYMENT_TARGET ${MIN_IOS_VERSION} ) + set_property( TARGET ${LIBNAME} PROPERTY XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET[arch=arm64] "7.0" ) + endif() + + if (OGRE_INSTALL_PDB) + # install debug pdb files + if (OGRE_STATIC) + install(FILES ${OGRE_BINARY_DIR}/lib${OGRE_LIB_DEBUG_PATH}/${LIBNAME}Static_d.pdb + DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH} + CONFIGURATIONS Debug + ) + install(FILES ${OGRE_BINARY_DIR}/lib${OGRE_LIB_RELWDBG_PATH}/${LIBNAME}Static.pdb + DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH} + CONFIGURATIONS RelWithDebInfo + ) + else () + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_DEBUG_PATH}/${LIBNAME}_d.pdb + DESTINATION bin${OGRE_DEBUG_PATH} + CONFIGURATIONS Debug + ) + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_RELWDBG_PATH}/${LIBNAME}.pdb + DESTINATION bin${OGRE_RELWDBG_PATH} + CONFIGURATIONS RelWithDebInfo + ) + endif () + endif () +endfunction(ogre_config_lib) + +function(ogre_config_component LIBNAME) + ogre_config_lib(${LIBNAME} FALSE) +endfunction(ogre_config_component) + +function(ogre_config_framework LIBNAME) + if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS) + set_target_properties(${LIBNAME} PROPERTIES FRAMEWORK TRUE) + + # Set the INSTALL_PATH so that frameworks can be installed in the application package + set_target_properties(${LIBNAME} + PROPERTIES BUILD_WITH_INSTALL_RPATH 1 + INSTALL_NAME_DIR "@executable_path/../Frameworks" + ) + set_target_properties(${LIBNAME} PROPERTIES PUBLIC_HEADER "${HEADER_FILES} ${PLATFORM_HEADERS}") + set_target_properties(${LIBNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES") + set_target_properties(${LIBNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${OGRE_SOURCE_DIR}/OgreMain/include/OgreStableHeaders.h") + set_target_properties(${LIBNAME} PROPERTIES RESOURCE "${RESOURCE_FILES}") + set_source_files_properties("${RESOURCE_FILES}" PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + + set_target_properties(${LIBNAME} PROPERTIES OUTPUT_NAME ${LIBNAME}) + endif() +endfunction(ogre_config_framework) + +# setup plugin build +function(ogre_config_plugin PLUGINNAME) + ogre_config_common(${PLUGINNAME}) + set_target_properties(${PLUGINNAME} PROPERTIES VERSION ${OGRE_SOVERSION}) + if (OGRE_STATIC) + # add static prefix, if compiling static version + set_target_properties(${PLUGINNAME} PROPERTIES OUTPUT_NAME ${PLUGINNAME}Static) + + if(OGRE_BUILD_PLATFORM_APPLE_IOS) + set_xcode_property( ${PLUGINNAME} IPHONEOS_DEPLOYMENT_TARGET ${MIN_IOS_VERSION} ) + set_property( TARGET ${PLUGINNAME} PROPERTY XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET[arch=arm64] "7.0" ) + set_target_properties(${PLUGINNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_THUMB_SUPPORT "NO") + set_target_properties(${PLUGINNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_UNROLL_LOOPS "YES") + set_target_properties(${PLUGINNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES") + endif(OGRE_BUILD_PLATFORM_APPLE_IOS) + else (OGRE_STATIC) + if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # disable "lib" prefix on Unix + set_target_properties(${PLUGINNAME} PROPERTIES PREFIX "") + endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + endif (OGRE_STATIC) + # export only if static + ogre_install_target(${PLUGINNAME} ${OGRE_PLUGIN_PATH} ${OGRE_STATIC}) + + if (OGRE_INSTALL_PDB) + # install debug pdb files + if (OGRE_STATIC) + install(FILES ${OGRE_BINARY_DIR}/lib${OGRE_LIB_DEBUG_PATH}/${PLUGINNAME}Static_d.pdb + DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}/opt + CONFIGURATIONS Debug + ) + install(FILES ${OGRE_BINARY_DIR}/lib${OGRE_LIB_RELWDBG_PATH}/${PLUGINNAME}Static.pdb + DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}/opt + CONFIGURATIONS RelWithDebInfo + ) + else () + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_DEBUG_PATH}/${PLUGINNAME}_d.pdb + DESTINATION bin${OGRE_DEBUG_PATH} + CONFIGURATIONS Debug + ) + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_RELWDBG_PATH}/${PLUGINNAME}.pdb + DESTINATION bin${OGRE_RELWDBG_PATH} + CONFIGURATIONS RelWithDebInfo + ) + endif () + endif () +endfunction(ogre_config_plugin) + +# setup Ogre sample build +function(ogre_config_sample_common SAMPLENAME) + ogre_config_common(${SAMPLENAME}) + + # set install RPATH for Unix systems + if (UNIX AND OGRE_FULL_RPATH) + set_property(TARGET ${SAMPLENAME} APPEND PROPERTY + INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${OGRE_LIB_DIRECTORY}) + set_property(TARGET ${SAMPLENAME} PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) + endif () + + if (APPLE) + # On OS X, create .app bundle + set_property(TARGET ${SAMPLENAME} PROPERTY MACOSX_BUNDLE TRUE) + if (NOT OGRE_BUILD_PLATFORM_APPLE_IOS) + # Add the path where the Ogre framework was found + if(${OGRE_FRAMEWORK_PATH}) + set_target_properties(${SAMPLENAME} PROPERTIES + COMPILE_FLAGS "-F${OGRE_FRAMEWORK_PATH}" + LINK_FLAGS "-F${OGRE_FRAMEWORK_PATH}" + ) + endif() + else() + set_xcode_property( ${SAMPLENAME} IPHONEOS_DEPLOYMENT_TARGET ${MIN_IOS_VERSION} ) + set_property( TARGET ${SAMPLENAME} PROPERTY XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET[arch=arm64] "7.0" ) + endif() + endif (APPLE) + if (NOT OGRE_STATIC) + if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # disable "lib" prefix on Unix + set_target_properties(${SAMPLENAME} PROPERTIES PREFIX "") + endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + endif() + + if (NOT WIN32) + set_target_properties(${SAMPLENAME} PROPERTIES VERSION ${OGRE_SOVERSION} SOVERSION ${OGRE_SOVERSION}) + endif() + + if (OGRE_INSTALL_SAMPLES) + ogre_install_target(${SAMPLENAME} ${OGRE_SAMPLE_PATH} FALSE) + endif() + +endfunction(ogre_config_sample_common) + +function(ogre_config_sample_exe SAMPLENAME) + ogre_config_sample_common(${SAMPLENAME}) + if (OGRE_INSTALL_PDB AND OGRE_INSTALL_SAMPLES) + # install debug pdb files - no _d on exe + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_DEBUG_PATH}/${SAMPLENAME}.pdb + DESTINATION bin${OGRE_DEBUG_PATH} + CONFIGURATIONS Debug + ) + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_RELWDBG_PATH}/${SAMPLENAME}.pdb + DESTINATION bin${OGRE_RELWDBG_PATH} + CONFIGURATIONS RelWithDebInfo + ) + endif () + + if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS AND OGRE_SDK_BUILD) + # Add the path where the Ogre framework was found + if(NOT ${OGRE_FRAMEWORK_PATH} STREQUAL "") + set_target_properties(${SAMPLENAME} PROPERTIES + COMPILE_FLAGS "-F${OGRE_FRAMEWORK_PATH}" + LINK_FLAGS "-F${OGRE_FRAMEWORK_PATH}" + ) + endif() + endif(APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS AND OGRE_SDK_BUILD) +endfunction(ogre_config_sample_exe) + +function(ogre_config_sample_lib SAMPLENAME) + ogre_config_sample_common(${SAMPLENAME}) + if (OGRE_INSTALL_PDB AND OGRE_INSTALL_SAMPLES) + # install debug pdb files - with a _d on lib + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_DEBUG_PATH}/${SAMPLENAME}_d.pdb + DESTINATION bin${OGRE_DEBUG_PATH} + CONFIGURATIONS Debug + ) + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_RELWDBG_PATH}/${SAMPLENAME}.pdb + DESTINATION bin${OGRE_RELWDBG_PATH} + CONFIGURATIONS RelWithDebInfo + ) + endif () + + if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS AND OGRE_SDK_BUILD) + # Add the path where the Ogre framework was found + if(NOT ${OGRE_FRAMEWORK_PATH} STREQUAL "") + set_target_properties(${SAMPLENAME} PROPERTIES + COMPILE_FLAGS "-F${OGRE_FRAMEWORK_PATH}" + LINK_FLAGS "-F${OGRE_FRAMEWORK_PATH}" + ) + endif() + endif(APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS AND OGRE_SDK_BUILD) + + # Add sample to the list of link targets + # Global property so that we can build this up across entire sample tree + # since vars are local to containing scope of directories / functions + get_property(OGRE_SAMPLES_LIST GLOBAL PROPERTY "OGRE_SAMPLES_LIST") + set_property (GLOBAL PROPERTY "OGRE_SAMPLES_LIST" ${OGRE_SAMPLES_LIST} ${SAMPLENAME}) + +endfunction(ogre_config_sample_lib) + + +# setup Ogre tool build +function(ogre_config_tool TOOLNAME) + ogre_config_common(${TOOLNAME}) + + #set _d debug postfix + if (NOT APPLE) + set_property(TARGET ${TOOLNAME} APPEND PROPERTY DEBUG_POSTFIX "_d") + endif () + + # set install RPATH for Unix systems + if (UNIX AND OGRE_FULL_RPATH) + set_property(TARGET ${TOOLNAME} APPEND PROPERTY + INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${OGRE_LIB_DIRECTORY}) + set_property(TARGET ${TOOLNAME} PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) + endif () + + if (OGRE_INSTALL_TOOLS) + ogre_install_target(${TOOLNAME} "" FALSE) + if (OGRE_INSTALL_PDB) + # install debug pdb files + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_DEBUG_PATH}/${TOOLNAME}_d.pdb + DESTINATION bin${OGRE_DEBUG_PATH} + CONFIGURATIONS Debug + ) + install(FILES ${OGRE_BINARY_DIR}/bin${OGRE_RELWDBG_PATH}/${TOOLNAME}.pdb + DESTINATION bin${OGRE_RELWDBG_PATH} + CONFIGURATIONS RelWithDebInfo + ) + endif () + endif () + +endfunction(ogre_config_tool) + +# Get component include dir (different when referencing SDK) +function(ogre_add_component_include_dir COMPONENTNAME) + if (OGRE_SDK_BUILD) + include_directories("${OGRE_INCLUDE_DIR}/${COMPONENTNAME}") + else() + include_directories("${OGRE_SOURCE_DIR}/Components/${COMPONENTNAME}/include") + endif() +endfunction(ogre_add_component_include_dir) diff --git a/cmake/Modules/OgreFindFrameworks.cmake b/cmake/Modules/OgreFindFrameworks.cmake new file mode 100644 index 0000000..a8052d3 --- /dev/null +++ b/cmake/Modules/OgreFindFrameworks.cmake @@ -0,0 +1,35 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# - helper module to find OSX frameworks +# Adapted from standard CMake version, but added dependencies +# Standard finder does not look in any variable locations such as +# CMAKE_FRAMEWORK_PATH (not sure why not) + +IF(NOT OGRE_FIND_FRAMEWORKS_INCLUDED) + SET(OGRE_FIND_FRAMEWORKS_INCLUDED 1) + MACRO(OGRE_FIND_FRAMEWORKS fwk) + IF(APPLE) + SET(${fwk}_FRAMEWORKS) + SET(OGRE_FRAMEWORK_PATH + ${OGRE_DEPENDENCIES_DIR} + ~/Library/Frameworks + /Library/Frameworks + /System/Library/Frameworks + /Network/Library/Frameworks + ) + FOREACH(dir ${OGRE_FRAMEWORK_PATH}) + SET(fwkpath ${dir}/${fwk}.framework) + IF(EXISTS ${fwkpath}) + SET(${fwk}_FRAMEWORKS ${${fwk}_FRAMEWORKS} ${fwkpath}) + ENDIF(EXISTS ${fwkpath}) + ENDFOREACH(dir) + ENDIF(APPLE) + ENDMACRO(OGRE_FIND_FRAMEWORKS) +ENDIF(NOT OGRE_FIND_FRAMEWORKS_INCLUDED) diff --git a/cmake/Modules/OgreGetVersion.cmake b/cmake/Modules/OgreGetVersion.cmake new file mode 100644 index 0000000..abf839d --- /dev/null +++ b/cmake/Modules/OgreGetVersion.cmake @@ -0,0 +1,23 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +include(PreprocessorUtils) + +macro(ogre_get_version HEADER) + file(READ ${HEADER} TEMP_VAR_CONTENTS) + get_preprocessor_entry(TEMP_VAR_CONTENTS OGRE_VERSION_MAJOR OGRE_VERSION_MAJOR) + get_preprocessor_entry(TEMP_VAR_CONTENTS OGRE_VERSION_MINOR OGRE_VERSION_MINOR) + get_preprocessor_entry(TEMP_VAR_CONTENTS OGRE_VERSION_PATCH OGRE_VERSION_PATCH) + get_preprocessor_entry(TEMP_VAR_CONTENTS OGRE_VERSION_NAME OGRE_VERSION_NAME) + get_preprocessor_entry(TEMP_VAR_CONTENTS OGRE_VERSION_SUFFIX OGRE_VERSION_SUFFIX) + set(OGRE_VERSION "${OGRE_VERSION_MAJOR}.${OGRE_VERSION_MINOR}.${OGRE_VERSION_PATCH}${OGRE_VERSION_SUFFIX}") + set(OGRE_SOVERSION "${OGRE_VERSION_MAJOR}.${OGRE_VERSION_MINOR}.${OGRE_VERSION_PATCH}") + set(OGRE_VERSION_DASH_SEPARATED "${OGRE_VERSION_MAJOR}-${OGRE_VERSION_MINOR}-${OGRE_VERSION_PATCH}${OGRE_VERSION_SUFFIX}") + +endmacro() diff --git a/cmake/Modules/PreprocessorUtils.cmake b/cmake/Modules/PreprocessorUtils.cmake new file mode 100644 index 0000000..38462a9 --- /dev/null +++ b/cmake/Modules/PreprocessorUtils.cmake @@ -0,0 +1,60 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +macro(get_preprocessor_entry CONTENTS KEYWORD VARIABLE) + string(REGEX MATCH + "# *define +${KEYWORD} +((\"([^\n]*)\")|([^ \n]*))" + PREPROC_TEMP_VAR + ${${CONTENTS}} + ) + if (CMAKE_MATCH_3) + set(${VARIABLE} ${CMAKE_MATCH_3}) + else () + set(${VARIABLE} ${CMAKE_MATCH_4}) + endif () +endmacro() + +macro(has_preprocessor_entry CONTENTS KEYWORD VARIABLE) + string(REGEX MATCH + "\n *# *define +(${KEYWORD})" + PREPROC_TEMP_VAR + ${${CONTENTS}} + ) + if (CMAKE_MATCH_1) + set(${VARIABLE} TRUE) + else () + set(${VARIABLE} FALSE) + endif () +endmacro() + +macro(replace_preprocessor_entry VARIABLE KEYWORD NEW_VALUE) + string(REGEX REPLACE + "(// *)?# *define +${KEYWORD} +[^ \n]*" + "#define ${KEYWORD} ${NEW_VALUE}" + ${VARIABLE}_TEMP + ${${VARIABLE}} + ) + set(${VARIABLE} ${${VARIABLE}_TEMP}) +endmacro() + +macro(set_preprocessor_entry VARIABLE KEYWORD ENABLE) + if (${ENABLE}) + set(TMP_REPLACE_STR "#define ${KEYWORD}") + else () + set(TMP_REPLACE_STR "// #define ${KEYWORD}") + endif () + string(REGEX REPLACE + "(// *)?# *define +${KEYWORD} *\n" + ${TMP_REPLACE_STR} + ${VARIABLE}_TEMP + ${${VARIABLE}} + ) + set(${VARIABLE} ${${VARIABLE}_TEMP}) +endmacro() +