mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
CMake: Add the possibility to pass an arbitrary count of targets to add_cxx_pch.
* A PCH is still generated for every target which was passed to the macro
* Resolves naming conflicts when using the same PCH header from multiple projects
* Ref #15671
(cherry picked from commit a974574d6e)
This commit is contained in:
@@ -11,7 +11,7 @@ FUNCTION(GET_COMMON_PCH_PARAMS PCH_HEADER PCH_FE INCLUDE_PREFIX)
|
||||
SET(INCLUDE_FLAGS ${INCLUDE_FLAGS_LIST} PARENT_SCOPE)
|
||||
ENDFUNCTION(GET_COMMON_PCH_PARAMS)
|
||||
|
||||
FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME INCLUDE_FLAGS IN PCH_SRC OUT)
|
||||
FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME_LIST INCLUDE_FLAGS IN PCH_SRC OUT)
|
||||
IF (CMAKE_BUILD_TYPE)
|
||||
STRING(TOUPPER _${CMAKE_BUILD_TYPE} CURRENT_BUILD_TYPE)
|
||||
ENDIF ()
|
||||
@@ -55,50 +55,69 @@ FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME INCLUDE_FLAGS IN PCH_SRC OUT)
|
||||
DEPENDS ${OUT}
|
||||
)
|
||||
|
||||
ADD_DEPENDENCIES(${TARGET_NAME} generate_${PCH_SRC_N})
|
||||
FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
|
||||
ADD_DEPENDENCIES(${TARGET_NAME} generate_${PCH_SRC_N})
|
||||
ENDFOREACH()
|
||||
|
||||
ENDFUNCTION(GENERATE_CXX_PCH_COMMAND)
|
||||
|
||||
FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME PCH_HEADER PCH_SOURCE)
|
||||
FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
|
||||
GET_COMMON_PCH_PARAMS(${PCH_HEADER} "gch" "-I")
|
||||
GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
|
||||
SET_TARGET_PROPERTIES(
|
||||
${TARGET_NAME} PROPERTIES
|
||||
COMPILE_FLAGS "-include ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_NAME}"
|
||||
)
|
||||
GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
|
||||
|
||||
FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
|
||||
SET_TARGET_PROPERTIES(
|
||||
${TARGET_NAME} PROPERTIES
|
||||
COMPILE_FLAGS "-include ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_NAME}"
|
||||
)
|
||||
ENDFOREACH()
|
||||
ENDFUNCTION(ADD_CXX_PCH_GCC)
|
||||
|
||||
FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME PCH_HEADER PCH_SOURCE)
|
||||
FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
|
||||
GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "-I")
|
||||
GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
|
||||
SET_TARGET_PROPERTIES(
|
||||
${TARGET_NAME} PROPERTIES
|
||||
COMPILE_FLAGS "-include-pch ${PCH_HEADER_OUT}"
|
||||
)
|
||||
GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
|
||||
|
||||
FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
|
||||
SET_TARGET_PROPERTIES(
|
||||
${TARGET_NAME} PROPERTIES
|
||||
COMPILE_FLAGS "-include-pch ${PCH_HEADER_OUT}"
|
||||
)
|
||||
ENDFOREACH()
|
||||
ENDFUNCTION(ADD_CXX_PCH_CLANG)
|
||||
|
||||
FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME PCH_HEADER PCH_SOURCE)
|
||||
FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
|
||||
GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "/I")
|
||||
SET_TARGET_PROPERTIES(
|
||||
${TARGET_NAME} PROPERTIES
|
||||
COMPILE_FLAGS "/FI${PCH_HEADER_NAME} /Yu${PCH_HEADER_NAME}"
|
||||
)
|
||||
|
||||
FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
|
||||
SET_TARGET_PROPERTIES(
|
||||
${TARGET_NAME} PROPERTIES
|
||||
COMPILE_FLAGS "/FI${PCH_HEADER_NAME} /Yu${PCH_HEADER_NAME}"
|
||||
)
|
||||
ENDFOREACH()
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(
|
||||
${PCH_SOURCE} PROPERTIES
|
||||
COMPILE_FLAGS "/Yc${PCH_HEADER_NAME}"
|
||||
)
|
||||
ENDFUNCTION(ADD_CXX_PCH_MSVC)
|
||||
|
||||
FUNCTION(ADD_CXX_PCH TARGET_NAME PCH_HEADER PCH_SOURCE)
|
||||
IF (MSVC)
|
||||
ADD_CXX_PCH_MSVC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
|
||||
ELSEIF ("${CMAKE_GENERATOR}" MATCHES "Xcode")
|
||||
SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
|
||||
FUNCTION(ADD_CXX_PCH_XCODE TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
|
||||
FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
|
||||
SET_TARGET_PROPERTIES("${TARGET_NAME}" PROPERTIES
|
||||
XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES
|
||||
XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/${PCH_HEADER}"
|
||||
)
|
||||
ENDFOREACH()
|
||||
ENDFUNCTION(ADD_CXX_PCH_XCODE)
|
||||
|
||||
FUNCTION(ADD_CXX_PCH TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
|
||||
IF (MSVC)
|
||||
ADD_CXX_PCH_MSVC("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
|
||||
ELSEIF ("${CMAKE_GENERATOR}" MATCHES "Xcode")
|
||||
ADD_CXX_PCH_XCODE("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
|
||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
||||
ADD_CXX_PCH_CLANG(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
|
||||
ADD_CXX_PCH_CLANG("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
|
||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
|
||||
ADD_CXX_PCH_GCC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
|
||||
ADD_CXX_PCH_GCC("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
|
||||
ENDIF ()
|
||||
ENDFUNCTION(ADD_CXX_PCH)
|
||||
|
||||
Reference in New Issue
Block a user