diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/compiler/msvc/settings.cmake | 12 | ||||
-rw-r--r-- | cmake/macros/AutoCollect.cmake | 71 | ||||
-rw-r--r-- | cmake/macros/ConfigureBoost.cmake | 53 | ||||
-rw-r--r-- | cmake/macros/FindPCHSupport.cmake | 40 | ||||
-rw-r--r-- | cmake/macros/FindReadline.cmake | 18 | ||||
-rw-r--r-- | cmake/macros/GroupSources.cmake | 9 | ||||
-rw-r--r-- | cmake/options.cmake | 4 | ||||
-rw-r--r-- | cmake/platform/unix/settings.cmake | 11 | ||||
-rw-r--r-- | cmake/platform/win/settings.cmake | 8 | ||||
-rw-r--r-- | cmake/showoptions.cmake | 23 |
10 files changed, 136 insertions, 113 deletions
diff --git a/cmake/compiler/msvc/settings.cmake b/cmake/compiler/msvc/settings.cmake index be8028da024..8af8033d809 100644 --- a/cmake/compiler/msvc/settings.cmake +++ b/cmake/compiler/msvc/settings.cmake @@ -84,3 +84,15 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500") # 'function' : member function does not override any base class virtual member function # 'virtual_function' : no override available for virtual member function from base 'class'; function is hidden set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /we4263 /we4264") + +# Disable incremental linking in debug builds. +# To prevent linking getting stuck (which might be fixed in a later VS version). +macro(DisableIncrementalLinking variable) + string(REGEX REPLACE "/INCREMENTAL *" "" ${variable} "${${variable}}") + set(${variable} "${${variable}} /INCREMENTAL:NO") +endmacro() + +DisableIncrementalLinking(CMAKE_EXE_LINKER_FLAGS_DEBUG) +DisableIncrementalLinking(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO) +DisableIncrementalLinking(CMAKE_SHARED_LINKER_FLAGS_DEBUG) +DisableIncrementalLinking(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO) diff --git a/cmake/macros/AutoCollect.cmake b/cmake/macros/AutoCollect.cmake new file mode 100644 index 00000000000..cddd3a20290 --- /dev/null +++ b/cmake/macros/AutoCollect.cmake @@ -0,0 +1,71 @@ +# Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# Collects all source files into the given variable, +# which is useful to include all sources in subdirectories. +# Ignores full qualified directories listed in the variadic arguments. +# +# Use it like: +# CollectSourceFiles( +# ${CMAKE_CURRENT_SOURCE_DIR} +# COMMON_PRIVATE_SOURCES +# # Exclude +# ${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders +# ${CMAKE_CURRENT_SOURCE_DIR}/Platform) +# +function(CollectSourceFiles current_dir variable) + list(FIND ARGN "${current_dir}" IS_EXCLUDED) + if(IS_EXCLUDED EQUAL -1) + file(GLOB COLLECTED_SOURCES + ${current_dir}/*.c + ${current_dir}/*.cc + ${current_dir}/*.cpp + ${current_dir}/*.inl + ${current_dir}/*.def + ${current_dir}/*.h + ${current_dir}/*.hh + ${current_dir}/*.hpp) + list(APPEND ${variable} ${COLLECTED_SOURCES}) + + file(GLOB SUB_DIRECTORIES ${current_dir}/*) + foreach(SUB_DIRECTORY ${SUB_DIRECTORIES}) + if (IS_DIRECTORY ${SUB_DIRECTORY}) + CollectSourceFiles("${SUB_DIRECTORY}" "${variable}" "${ARGN}") + endif() + endforeach() + set(${variable} ${${variable}} PARENT_SCOPE) + endif() +endfunction() + +# Collects all subdirectoroies into the given variable, +# which is useful to include all subdirectories. +# Ignores full qualified directories listed in the variadic arguments. +# +# Use it like: +# CollectIncludeDirectories( +# ${CMAKE_CURRENT_SOURCE_DIR} +# COMMON_PUBLIC_INCLUDES +# # Exclude +# ${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders +# ${CMAKE_CURRENT_SOURCE_DIR}/Platform) +# +function(CollectIncludeDirectories current_dir variable) + list(FIND ARGN "${current_dir}" IS_EXCLUDED) + if(IS_EXCLUDED EQUAL -1) + list(APPEND ${variable} ${current_dir}) + file(GLOB SUB_DIRECTORIES ${current_dir}/*) + foreach(SUB_DIRECTORY ${SUB_DIRECTORIES}) + if (IS_DIRECTORY ${SUB_DIRECTORY}) + CollectIncludeDirectories("${SUB_DIRECTORY}" "${variable}" "${ARGN}") + endif() + endforeach() + set(${variable} ${${variable}} PARENT_SCOPE) + endif() +endfunction() diff --git a/cmake/macros/ConfigureBoost.cmake b/cmake/macros/ConfigureBoost.cmake deleted file mode 100644 index b3a71b8a682..00000000000 --- a/cmake/macros/ConfigureBoost.cmake +++ /dev/null @@ -1,53 +0,0 @@ -if(WIN32) - set(BOOST_DEBUG ON) - if(DEFINED ENV{BOOST_ROOT}) - set(BOOST_ROOT $ENV{BOOST_ROOT}) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0) - set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib${PLATFORM}-msvc-12.0) - else() - set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib${PLATFORM}-msvc-14.0) - endif() - else() - message(FATAL_ERROR "No BOOST_ROOT environment variable could be found! Please make sure it is set and the points to your Boost installation.") - endif() - - set(Boost_USE_STATIC_LIBS ON) - set(Boost_USE_MULTITHREADED ON) - set(Boost_USE_STATIC_RUNTIME OFF) - - add_definitions(-D_WIN32_WINNT=0x0601) -endif() - -find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams regex) -add_definitions(-DBOOST_DATE_TIME_NO_LIB) -add_definitions(-DBOOST_REGEX_NO_LIB) -add_definitions(-DBOOST_CHRONO_NO_LIB) - -# Find if Boost was compiled in C++03 mode because it requires -DBOOST_NO_CXX11_SCOPED_ENUMS - -include (CheckCXXSourceCompiles) - -set(CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIR}) -set(CMAKE_REQUIRED_LIBRARIES ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_IOSTREAMS_LIBRARY}) -set(CMAKE_REQUIRED_FLAGS "-std=c++11") -unset(boost_filesystem_copy_links_without_NO_SCOPED_ENUM CACHE) -check_cxx_source_compiles(" - #include <boost/filesystem/path.hpp> - #include <boost/filesystem/operations.hpp> - int main() { boost::filesystem::copy_file(boost::filesystem::path(), boost::filesystem::path()); }" -boost_filesystem_copy_links_without_NO_SCOPED_ENUM) -unset(CMAKE_REQUIRED_INCLUDES CACHE) -unset(CMAKE_REQUIRED_LIBRARIES CACHE) -unset(CMAKE_REQUIRED_FLAGS CACHE) - -if (NOT boost_filesystem_copy_links_without_NO_SCOPED_ENUM) - if (Boost_VERSION LESS 105100) # 1.51 - add_definitions(-DBOOST_NO_SCOPED_ENUMS) - else() - add_definitions(-DBOOST_NO_CXX11_SCOPED_ENUMS) - endif() -endif() - -if(Boost_FOUND) - include_directories(${Boost_INCLUDE_DIRS}) -endif() diff --git a/cmake/macros/FindPCHSupport.cmake b/cmake/macros/FindPCHSupport.cmake index 49d4be904d1..6edc8e92890 100644 --- a/cmake/macros/FindPCHSupport.cmake +++ b/cmake/macros/FindPCHSupport.cmake @@ -1,17 +1,49 @@ -FUNCTION(GET_COMMON_PCH_PARAMS PCH_HEADER PCH_FE INCLUDE_PREFIX) +FUNCTION(GET_COMMON_PCH_PARAMS TARGET_NAME_LIST PCH_HEADER PCH_FE INCLUDE_PREFIX) GET_FILENAME_COMPONENT(PCH_HEADER_N ${PCH_HEADER} NAME) GET_DIRECTORY_PROPERTY(TARGET_INCLUDES INCLUDE_DIRECTORIES) + # Stores the inherited dependency definitions and include directories + # from the given target into the given variables + MACRO(CollectIncludes target inherited_includes inherited_definitions) + # Append the includes and definitions of the current target to the list + get_property(included TARGET ${target} PROPERTY INTERFACE_INCLUDE_DIRECTORIES) + LIST(APPEND "${inherited_includes}" ${included}) + get_property(definitions TARGET ${target} PROPERTY INTERFACE_COMPILE_DEFINITIONS) + FOREACH(def ${definitions}) + LIST(APPEND "${inherited_definitions}" "-D${def}") + ENDFOREACH() + # Add all inherited link targets which weren't included already + get_property(links TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES) + # TODO Maybe catch circular dependencies? + FOREACH(target_link ${links}) + IF(TARGET ${target_link}) + CollectIncludes(${target_link} "${inherited_includes}" "${inherited_definitions}") + ENDIF() + ENDFOREACH() + ENDMACRO() + + FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) + CollectIncludes(${TARGET_NAME} TARGET_INCLUDES TARGET_DEFINITIONS) + ENDFOREACH() + + LIST(REMOVE_DUPLICATES TARGET_INCLUDES) + LIST(REMOVE_DUPLICATES TARGET_DEFINITIONS) + FOREACH(ITEM ${TARGET_INCLUDES}) LIST(APPEND INCLUDE_FLAGS_LIST "${INCLUDE_PREFIX}\"${ITEM}\" ") ENDFOREACH(ITEM) + SET(PCH_INCLUDES ${TARGET_INCLUDES} PARENT_SCOPE) + SET(PCH_DEFINITIONS ${TARGET_DEFINITIONS} PARENT_SCOPE) SET(PCH_HEADER_NAME ${PCH_HEADER_N} PARENT_SCOPE) SET(PCH_HEADER_OUT ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_N}.${PCH_FE} PARENT_SCOPE) SET(INCLUDE_FLAGS ${INCLUDE_FLAGS_LIST} PARENT_SCOPE) ENDFUNCTION(GET_COMMON_PCH_PARAMS) FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME_LIST INCLUDE_FLAGS IN PCH_SRC OUT) + include_directories(${PCH_INCLUDES}) + add_definitions(${PCH_DEFINITIONS}) + IF (CMAKE_BUILD_TYPE) STRING(TOUPPER _${CMAKE_BUILD_TYPE} CURRENT_BUILD_TYPE) ENDIF () @@ -62,7 +94,7 @@ FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME_LIST INCLUDE_FLAGS IN PCH_SRC OUT) ENDFUNCTION(GENERATE_CXX_PCH_COMMAND) FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) - GET_COMMON_PCH_PARAMS(${PCH_HEADER} "gch" "-I") + GET_COMMON_PCH_PARAMS("${TARGET_NAME_LIST}" ${PCH_HEADER} "gch" "-I") GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT}) FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) @@ -74,7 +106,7 @@ FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) ENDFUNCTION(ADD_CXX_PCH_GCC) FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) - GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "-I") + GET_COMMON_PCH_PARAMS("${TARGET_NAME_LIST}" ${PCH_HEADER} "pch" "-I") GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT}) FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) @@ -86,7 +118,7 @@ FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) ENDFUNCTION(ADD_CXX_PCH_CLANG) FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) - GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "/I") + GET_COMMON_PCH_PARAMS("${TARGET_NAME_LIST}" ${PCH_HEADER} "pch" "/I") FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) SET_TARGET_PROPERTIES( diff --git a/cmake/macros/FindReadline.cmake b/cmake/macros/FindReadline.cmake deleted file mode 100644 index 34af35204b5..00000000000 --- a/cmake/macros/FindReadline.cmake +++ /dev/null @@ -1,18 +0,0 @@ -# find Readline (terminal input library) includes and library -# -# READLINE_INCLUDE_DIR - where the directory containing the READLINE headers can be found -# READLINE_LIBRARY - full path to the READLINE library -# READLINE_FOUND - TRUE if READLINE was found - -FIND_PATH(READLINE_INCLUDE_DIR readline/readline.h) -FIND_LIBRARY(READLINE_LIBRARY NAMES readline) - -IF (READLINE_INCLUDE_DIR AND READLINE_LIBRARY) - SET(READLINE_FOUND TRUE) - MESSAGE(STATUS "Found Readline library: ${READLINE_LIBRARY}") - MESSAGE(STATUS "Include dir is: ${READLINE_INCLUDE_DIR}") - INCLUDE_DIRECTORIES(${READLINE_INCLUDE_DIR}) -ELSE (READLINE_INCLUDE_DIR AND READLINE_LIBRARY) - SET(READLINE_FOUND FALSE) - MESSAGE(FATAL_ERROR "** Readline library not found!\n** Your distro may provide a binary for Readline e.g. for ubuntu try apt-get install libreadline5-dev") -ENDIF (READLINE_INCLUDE_DIR AND READLINE_LIBRARY) diff --git a/cmake/macros/GroupSources.cmake b/cmake/macros/GroupSources.cmake index 198d8c3e187..f8e252fe41a 100644 --- a/cmake/macros/GroupSources.cmake +++ b/cmake/macros/GroupSources.cmake @@ -10,7 +10,7 @@ macro(GroupSources dir) # Skip this if WITH_SOURCE_TREE is not set (empty string). - if (NOT ${_WITH_SOURCE_TREE} STREQUAL "") + if (NOT ${WITH_SOURCE_TREE} STREQUAL "") # Include all header and c files file(GLOB_RECURSE elements RELATIVE ${dir} *.h *.hpp *.c *.cpp *.cc) @@ -21,7 +21,7 @@ macro(GroupSources dir) if (NOT ${element_dir} STREQUAL "") # If the file is in a subdirectory use it as source group. - if (${_WITH_SOURCE_TREE} STREQUAL "flat") + if (${WITH_SOURCE_TREE} STREQUAL "flat") # Build flat structure by using only the first subdirectory. string(FIND ${element_dir} "/" delemiter_pos) if (NOT ${delemiter_pos} EQUAL -1) @@ -44,3 +44,8 @@ macro(GroupSources dir) endforeach() endif() endmacro() + +if (WITH_SOURCE_TREE STREQUAL "hierarchical-folders") + # Use folders + set_property(GLOBAL PROPERTY USE_FOLDERS ON) +endif() diff --git a/cmake/options.cmake b/cmake/options.cmake index 19615001307..d49393ed745 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -15,6 +15,6 @@ option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts" option(USE_COREPCH "Use precompiled headers when compiling servers" 1) option(WITH_WARNINGS "Show all warnings during compile" 0) option(WITH_COREDEBUG "Include additional debug-code in core" 0) -set(WITH_SOURCE_TREE "no" CACHE STRING "Build the source tree for IDE's.") -set_property(CACHE WITH_SOURCE_TREE PROPERTY STRINGS no flat hierarchical) +set(WITH_SOURCE_TREE "hierarchical" CACHE STRING "Build the source tree for IDE's.") +set_property(CACHE WITH_SOURCE_TREE PROPERTY STRINGS no flat hierarchical hierarchical-folders) option(WITHOUT_GIT "Disable the GIT testing routines" 0) diff --git a/cmake/platform/unix/settings.cmake b/cmake/platform/unix/settings.cmake index 754ff450fcc..79b426d7e03 100644 --- a/cmake/platform/unix/settings.cmake +++ b/cmake/platform/unix/settings.cmake @@ -1,12 +1,3 @@ -# Package overloads - Linux -if(CMAKE_SYSTEM_NAME MATCHES "Linux") - if (NOT NOJEM) - set(JEMALLOC_LIBRARY "jemalloc") - add_definitions(-DNO_BUFFERPOOL) - message(STATUS "UNIX: Using jemalloc") - endif() -endif() - # set default configuration directory if( NOT CONF_DIR ) set(CONF_DIR ${CMAKE_INSTALL_PREFIX}/etc) @@ -38,7 +29,7 @@ if(CMAKE_C_COMPILER MATCHES "gcc" OR CMAKE_C_COMPILER_ID STREQUAL "GNU") include(${CMAKE_SOURCE_DIR}/cmake/compiler/gcc/settings.cmake) elseif(CMAKE_C_COMPILER MATCHES "icc") include(${CMAKE_SOURCE_DIR}/cmake/compiler/icc/settings.cmake) -elseif(CMAKE_C_COMPILER MATCHES "clang" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") +elseif(CMAKE_C_COMPILER MATCHES "clang" OR CMAKE_C_COMPILER_ID MATCHES "Clang") include(${CMAKE_SOURCE_DIR}/cmake/compiler/clang/settings.cmake) else() add_definitions(-D_BUILD_DIRECTIVE='"${CMAKE_BUILD_TYPE}"') diff --git a/cmake/platform/win/settings.cmake b/cmake/platform/win/settings.cmake index c68d7bc51cc..da66daf0832 100644 --- a/cmake/platform/win/settings.cmake +++ b/cmake/platform/win/settings.cmake @@ -1,7 +1,3 @@ -# Package overloads -set(BZIP2_LIBRARIES "bzip2") -set(ZLIB_LIBRARIES "zlib") - # check the CMake preload parameters (commented out by default) # overload CMAKE_INSTALL_PREFIX if not being set properly @@ -13,6 +9,10 @@ set(ZLIB_LIBRARIES "zlib") # endif() #endif() +if (WIN32) + add_definitions(-D_WIN32_WINNT=0x0601) +endif() + if ( MSVC ) include(${CMAKE_SOURCE_DIR}/cmake/compiler/msvc/settings.cmake) elseif ( MINGW ) diff --git a/cmake/showoptions.cmake b/cmake/showoptions.cmake index 110b2f01a64..537544ba10e 100644 --- a/cmake/showoptions.cmake +++ b/cmake/showoptions.cmake @@ -69,27 +69,10 @@ else() message("* Use coreside debug : No (default)") endif() -if( WITH_SOURCE_TREE STREQUAL "flat" OR WITH_SOURCE_TREE STREQUAL "hierarchical" ) - # TODO: Remove this after Debian 8 is released and set general required version to 2.8.12 - # Debian 7 is shipped with CMake 2.8.9 . But DIRECTORY flag of get_filename_component requires 2.8.12 . - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - message("* Show source tree : Yes - ${WITH_SOURCE_TREE}") - set(_WITH_SOURCE_TREE ${WITH_SOURCE_TREE} CACHE INTERNAL "WITH_SOURCE_TREE support enabled.") - else() - message("* Show source tree : No (default)") - - message("") - message(" *** WITH_SOURCE_TREE - WARNING!") - message(" *** This functionality is ONLY supported on CMake 2.8.12 or higher.") - message(" *** You are running ${CMAKE_VERSION}, which does not have the functions needed") - message(" *** to create a sourcetree - this option is thus forced to disabled!") - message("") - - set(_WITH_SOURCE_TREE "" CACHE INTERNAL "WITH_SOURCE_TREE support disabled.") - endif() +if( NOT WITH_SOURCE_TREE STREQUAL "no" ) + message("* Show source tree : Yes - \"${WITH_SOURCE_TREE}\"") else() - message("* Show source tree : No (default)") - set(_WITH_SOURCE_TREE "" CACHE INTERNAL "WITH_SOURCE_TREE support disabled.") + message("* Show source tree : No") endif() if ( WITHOUT_GIT ) |