mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 02:04:52 +01:00
CMake: Add inherited include directories and definitions to precompiled headers
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user