1#################################################################################### 2# # 3# Copyright (c) 2014 - 2018 Axel Menzel <info@rttr.org> # 4# # 5# This file is part of RTTR (Run Time Type Reflection) # 6# License: MIT License # 7# # 8# Permission is hereby granted, free of charge, to any person obtaining # 9# a copy of this software and associated documentation files (the "Software"), # 10# to deal in the Software without restriction, including without limitation # 11# the rights to use, copy, modify, merge, publish, distribute, sublicense, # 12# and/or sell copies of the Software, and to permit persons to whom the # 13# Software is furnished to do so, subject to the following conditions: # 14# # 15# The above copyright notice and this permission notice shall be included in # 16# all copies or substantial portions of the Software. # 17# # 18# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # 19# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # 20# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # 21# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # 22# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # 23# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # 24# SOFTWARE. # 25# # 26#################################################################################### 27 28# setup version numbers 29set(RTTR_VERSION_MAJOR 0) 30set(RTTR_VERSION_MINOR 9) 31set(RTTR_VERSION_PATCH 7) 32set(RTTR_VERSION ${RTTR_VERSION_MAJOR}.${RTTR_VERSION_MINOR}.${RTTR_VERSION_PATCH}) 33set(RTTR_VERSION_STR "${RTTR_VERSION_MAJOR}.${RTTR_VERSION_MINOR}.${RTTR_VERSION_PATCH}") 34math(EXPR RTTR_VERSION_CALC "${RTTR_VERSION_MAJOR}*1000 + ${RTTR_VERSION_MINOR}*100 + ${RTTR_VERSION_PATCH}") 35set(RTTR_PRODUCT_NAME "RTTR") 36message("Project version: ${RTTR_VERSION_STR}") 37 38# files 39set(README_FILE "${CMAKE_SOURCE_DIR}/README.md") 40set(LICENSE_FILE "${CMAKE_SOURCE_DIR}/LICENSE.txt") 41 42# dirs where the binaries should be placed, installed 43set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") 44set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") 45set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") 46set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") 47 48# here we specify the installation directory 49if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 50 set(CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}/install" CACHE PATH "RTTR install prefix" FORCE) 51endif() 52 53# in order to group in visual studio the targets into solution filters 54set_property(GLOBAL PROPERTY USE_FOLDERS ON) 55 56#3rd part dependencies dirs 57set(RTTR_3RD_PARTY_DIR "${CMAKE_SOURCE_DIR}/3rd_party") 58 59getNameOfDir(CMAKE_LIBRARY_OUTPUT_DIRECTORY RTTR_TARGET_BIN_DIR) 60is_vs_based_build(VS_BUILD) 61 62# set all install directories for the targets 63if(UNIX) 64 include(GNUInstallDirs) 65 set(RTTR_RUNTIME_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") 66 set(RTTR_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") 67 set(RTTR_ARCHIVE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") 68 set(RTTR_FRAMEWORK_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") 69 70 set(RTTR_INSTALL_FULL_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}") 71 72 set(RTTR_CMAKE_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/rttr/cmake") 73 set(RTTR_ADDITIONAL_FILES_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/rttr") 74 75elseif(WIN32) 76 set(RTTR_RUNTIME_INSTALL_DIR "bin") 77 set(RTTR_LIBRARY_INSTALL_DIR "bin") 78 set(RTTR_ARCHIVE_INSTALL_DIR "lib") 79 set(RTTR_FRAMEWORK_INSTALL_DIR "bin") 80 81 set(RTTR_CMAKE_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/cmake") 82 set(RTTR_ADDITIONAL_FILES_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}") 83else() 84 message(FATAL_ERROR "Could not set install folders for this platform!") 85endif() 86 87# to avoid a setting a global debug flag automatically for all targets 88# we use an own variable 89set(RTTR_DEBUG_POSTFIX "_d") 90 91# set the rpath for executables 92set(CMAKE_SKIP_BUILD_RPATH OFF) # use, i.e. don't skip the full RPATH for the build tree 93set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF) # when building, don't use the install RPATH already (but later on when installing) 94set(CMAKE_INSTALL_RPATH_USE_LINK_PATH OFF) # NO automatic rpath for INSTALL 95if(APPLE) 96 set(MACOSX_RPATH ON CACHE STRING "Set this to off if you dont want @rpath in install names") # uses a install name @rpath/... for libraries 97 set(RTTR_EXECUTABLE_INSTALL_RPATH "${RTTR_INSTALL_FULL_LIBDIR};@executable_path") 98 # the executable is relocatable, since the library builds with and install name "@rpath/librttr_core.0.9.6.dylib" 99 # the executable links 100elseif(UNIX) 101 set(RTTR_EXECUTABLE_INSTALL_RPATH "${RTTR_INSTALL_FULL_LIBDIR};$ORIGIN") 102elseif(WIN32) 103 # no such thing as rpath exists 104 set(RTTR_EXECUTABLE_INSTALL_RPATH ${RTTR_INSTALL_BINDIR}) # default, has no effect 105endif() 106 107# detect architecture 108if (CMAKE_SIZEOF_VOID_P EQUAL 8) 109 set(RTTR_NATIVE_ARCH 64) 110 message(STATUS "Architecture: x64") 111else() 112 set(RTTR_NATIVE_ARCH 32) 113 message(STATUS "Architecture: x86") 114endif() 115 116# use standard c++ insteaf of extented (-std=c++17 vs. std=gnu++17) 117set(CMAKE_CXX_EXTENSIONS OFF) 118 119enable_rtti(BUILD_WITH_RTTI) 120 121get_latest_supported_cxx(CXX_STANDARD) 122set(MAX_CXX_STANDARD ${CXX_STANDARD}) 123 124message(STATUS "using C++: ${MAX_CXX_STANDARD}") 125 126# RelWithDepInfo should have the same option like the Release build 127# but of course with Debug informations 128if(MSVC) 129 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE}") 130 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Zi /DEBUG") 131elseif(CMAKE_COMPILER_IS_GNUCXX ) 132 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE}") 133 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g") 134elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") 135 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE}") 136 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g") 137else() 138 message(WARNING "Please adjust CMAKE_CXX_FLAGS_RELWITHDEBINFO flags for this compiler!") 139endif() 140 141if(MSVC) 142 # we have to remove the default warning level, 143 # otherwise we get ugly compiler warnings, because of later replacing 144 # option /W3 with /W4 (which will be later added) 145 replace_compiler_option("/W3" " ") 146 if (BUILD_WITH_STATIC_RUNTIME_LIBS) 147 replace_compiler_option("/MD" " ") 148 replace_compiler_option("/MDd" " ") 149 endif() 150 151elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 152 if(MINGW) 153 set(GNU_STATIC_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") 154 else() 155 set(GNU_STATIC_LINKER_FLAGS "-static-libgcc -static-libstdc++") 156 endif() 157elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") 158 set(CLANG_STATIC_LINKER_FLAGS "-stdlib=libc++ -static-libstdc++") 159endif() 160 161include(CMakePackageConfigHelpers) 162write_basic_package_version_file( 163 "${CMAKE_CURRENT_BINARY_DIR}/CMake/rttr-config-version.cmake" 164 VERSION ${RTTR_VERSION_STR} 165 COMPATIBILITY AnyNewerVersion 166) 167 168if (BUILD_INSTALLER) 169 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/CMake/rttr-config-version.cmake" 170 DESTINATION ${RTTR_CMAKE_CONFIG_INSTALL_DIR} 171 COMPONENT Devel) 172 173 install(FILES "${LICENSE_FILE}" "${README_FILE}" 174 DESTINATION ${RTTR_ADDITIONAL_FILES_INSTALL_DIR}) 175endif() 176