Legends-of-Azeroth-Pandaria-5.4.8
115 строк · 4.3 Кб
1# Copyright (C) 2011-2016 Project SkyFire <http://www.projectskyfire.org/
2# Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
3#
4# This file is free software; as a special exception the author gives
5# unlimited permission to copy and/or distribute it, with or without
6# modifications, as long as this notice is preserved.
7#
8# This program is distributed in the hope that it will be useful, but
9# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
10# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
12FUNCTION(GET_COMMON_PCH_PARAMS PCH_HEADER PCH_FE INCLUDE_PREFIX)
13GET_FILENAME_COMPONENT(PCH_HEADER_N ${PCH_HEADER} NAME)
14GET_DIRECTORY_PROPERTY(TARGET_INCLUDES INCLUDE_DIRECTORIES)
15
16FOREACH(ITEM ${TARGET_INCLUDES})
17LIST(APPEND INCLUDE_FLAGS_LIST "${INCLUDE_PREFIX}\"${ITEM}\" ")
18ENDFOREACH(ITEM)
19
20SET(PCH_HEADER_NAME ${PCH_HEADER_N} PARENT_SCOPE)
21SET(PCH_HEADER_OUT ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_N}.${PCH_FE} PARENT_SCOPE)
22SET(INCLUDE_FLAGS ${INCLUDE_FLAGS_LIST} PARENT_SCOPE)
23ENDFUNCTION(GET_COMMON_PCH_PARAMS)
24
25FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME INCLUDE_FLAGS IN PCH_SRC OUT)
26IF (CMAKE_BUILD_TYPE)
27STRING(TOUPPER _${CMAKE_BUILD_TYPE} CURRENT_BUILD_TYPE)
28ENDIF ()
29
30SET(COMPILE_FLAGS ${CMAKE_CXX_FLAGS${CURRENT_BUILD_TYPE}})
31LIST(APPEND COMPILE_FLAGS ${CMAKE_CXX_FLAGS})
32
33IF ("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
34IF (NOT "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "")
35LIST(APPEND COMPILE_FLAGS "-arch ${CMAKE_OSX_ARCHITECTURES}")
36ENDIF ()
37IF (NOT "${CMAKE_OSX_SYSROOT}" STREQUAL "")
38LIST(APPEND COMPILE_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}")
39ENDIF ()
40IF (NOT "${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "")
41LIST(APPEND COMPILE_FLAGS "-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
42ENDIF ()
43ENDIF ()
44
45GET_DIRECTORY_PROPERTY(TARGET_DEFINITIONS COMPILE_DEFINITIONS)
46FOREACH(ITEM ${TARGET_DEFINITIONS})
47LIST(APPEND DEFINITION_FLAGS "-D${ITEM} ")
48ENDFOREACH(ITEM)
49
50SEPARATE_ARGUMENTS(COMPILE_FLAGS)
51SEPARATE_ARGUMENTS(INCLUDE_FLAGS)
52SEPARATE_ARGUMENTS(DEFINITION_FLAGS)
53
54GET_FILENAME_COMPONENT(PCH_SRC_N ${PCH_SRC} NAME)
55ADD_LIBRARY(${PCH_SRC_N}_dephelp MODULE ${PCH_SRC})
56
57ADD_CUSTOM_COMMAND(
58OUTPUT ${OUT}
59COMMAND ${CMAKE_CXX_COMPILER}
60ARGS ${DEFINITION_FLAGS} ${COMPILE_FLAGS} ${INCLUDE_FLAGS} -x c++-header ${IN} -o ${OUT}
61DEPENDS ${IN} ${PCH_SRC_N}_dephelp
62WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
63)
64
65ADD_CUSTOM_TARGET(generate_${PCH_SRC_N}
66DEPENDS ${OUT}
67)
68
69ADD_DEPENDENCIES(${TARGET_NAME} generate_${PCH_SRC_N})
70ENDFUNCTION(GENERATE_CXX_PCH_COMMAND)
71
72FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME PCH_HEADER PCH_SOURCE)
73GET_COMMON_PCH_PARAMS(${PCH_HEADER} "gch" "-I")
74GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
75SET_TARGET_PROPERTIES(
76${TARGET_NAME} PROPERTIES
77COMPILE_FLAGS "-include ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_NAME}"
78)
79ENDFUNCTION(ADD_CXX_PCH_GCC)
80
81FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME PCH_HEADER PCH_SOURCE)
82GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "-I")
83GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
84SET_TARGET_PROPERTIES(
85${TARGET_NAME} PROPERTIES
86COMPILE_FLAGS "-include-pch ${PCH_HEADER_OUT}"
87)
88ENDFUNCTION(ADD_CXX_PCH_CLANG)
89
90FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME PCH_HEADER PCH_SOURCE)
91GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "/I")
92SET_TARGET_PROPERTIES(
93${TARGET_NAME} PROPERTIES
94COMPILE_FLAGS "/FI${PCH_HEADER_NAME} /Yu${PCH_HEADER_NAME}"
95)
96SET_SOURCE_FILES_PROPERTIES(
97${PCH_SOURCE} PROPERTIES
98COMPILE_FLAGS "/Yc${PCH_HEADER_NAME}"
99)
100ENDFUNCTION(ADD_CXX_PCH_MSVC)
101
102FUNCTION(ADD_CXX_PCH TARGET_NAME PCH_HEADER PCH_SOURCE)
103IF (MSVC)
104ADD_CXX_PCH_MSVC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
105ELSEIF ("${CMAKE_GENERATOR}" MATCHES "Xcode")
106SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
107XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES
108XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/${PCH_HEADER}"
109)
110ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
111ADD_CXX_PCH_CLANG(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
112ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
113ADD_CXX_PCH_GCC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
114ENDIF ()
115ENDFUNCTION(ADD_CXX_PCH)
116