diff --git a/cmake/PCHSupport.cmake b/cmake/PCHSupport.cmake index a76aa742..17ebc294 100644 --- a/cmake/PCHSupport.cmake +++ b/cmake/PCHSupport.cmake @@ -18,56 +18,34 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # -# ADD_CXX_PCH +# ADD_CXX_PCH(TARGET_NAME PRECOMPILED_HEADER PRECOMPILED_SOURCE) # # Sets a precompiled header for a given target -# Args: +# # TARGET_NAME - Name of the target. Only valid after add_library or add_executable # PRECOMPILED_HEADER - Header file to precompile # PRECOMPILED_SOURCE - MSVC specific source to do the actual precompilation. Ignored on other platforms +# function(ADD_CXX_PCH TARGET_NAME PRECOMPILED_HEADER PRECOMPILED_SOURCE) - get_filename_component(PRECOMPILED_HEADER_NAME ${PRECOMPILED_HEADER} NAME) if(MSVC) - get_filename_component(PRECOMPILED_HEADER_PATH ${PRECOMPILED_HEADER} DIRECTORY) - target_include_directories(${TARGET_NAME} PRIVATE ${PRECOMPILED_HEADER_PATH}) # fixes occasional IntelliSense glitches - - get_filename_component(PRECOMPILED_HEADER_WE ${PRECOMPILED_HEADER} NAME_WE) - set(PRECOMPILED_BINARY "$(IntDir)/${PRECOMPILED_HEADER_WE}.pch") - - get_target_property(SOURCE_FILES ${TARGET_NAME} SOURCES) - set(SOURCE_FILE_FOUND FALSE) - foreach(SOURCE_FILE ${SOURCE_FILES}) - if(SOURCE_FILE MATCHES \\.\(cc|cxx|cpp\)$) - if(${PRECOMPILED_SOURCE} MATCHES ${SOURCE_FILE}) - # Set source file to generate header - set_source_files_properties( - ${SOURCE_FILE} - PROPERTIES - COMPILE_FLAGS "/Yc\"${PRECOMPILED_HEADER_NAME}\" /Fp\"${PRECOMPILED_BINARY}\"" - OBJECT_OUTPUTS "${PRECOMPILED_BINARY}") - set(SOURCE_FILE_FOUND TRUE) - else() - # Set and automatically include precompiled header - set_source_files_properties( - ${SOURCE_FILE} - PROPERTIES - COMPILE_FLAGS "/Yu\"${PRECOMPILED_HEADER_NAME}\" /Fp\"${PRECOMPILED_BINARY}\" /FI\"${PRECOMPILED_HEADER_NAME}\"" - OBJECT_DEPENDS "${PRECOMPILED_BINARY}") - endif() - endif() - endforeach() - if(NOT SOURCE_FILE_FOUND) - message(FATAL_ERROR "A source file for ${PRECOMPILED_HEADER} was not found. Required for MSVC builds.") - endif(NOT SOURCE_FILE_FOUND) + target_compile_options(${TARGET_NAME} + PRIVATE + /FI${PRECOMPILED_HEADER_NAME} + /Yu${PRECOMPILED_HEADER_NAME} + ) + SET_SOURCE_FILES_PROPERTIES(${PRECOMPILED_SOURCE} + PROPERTIES + COMPILE_FLAGS /Yc${PRECOMPILED_HEADER_NAME} + ) elseif(CMAKE_GENERATOR STREQUAL Xcode) set_target_properties( ${TARGET_NAME} PROPERTIES - XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${PRECOMPILED_HEADER}" - XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES" + XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${PRECOMPILED_HEADER}" + XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES" ) elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CMAKE_COMPILER_IS_GNUCC) @@ -92,7 +70,9 @@ function(ADD_CXX_PCH TARGET_NAME PRECOMPILED_HEADER PRECOMPILED_SOURCE) set(_compile_definitions "$<$:-D$\n>") set(_compile_flags "$<$:$\n>") set(_compile_options "$<$:$\n>") - file(GENERATE OUTPUT "${PCH_FLAGS_FILE}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}\n") + + file(GENERATE OUTPUT ${PCH_FLAGS_FILE} CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}\n") + file(GENERATE OUTPUT ${OUTPUT_DIR}/${PRECOMPILED_HEADER_NAME} CONTENT "") # Gather global compiler options, definitions, etc. string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" CXX_FLAGS) @@ -110,14 +90,10 @@ function(ADD_CXX_PCH TARGET_NAME PRECOMPILED_HEADER PRECOMPILED_SOURCE) add_custom_target(${TARGET_NAME}_${SFX} DEPENDS ${OUTPUT_NAME}) add_dependencies(${TARGET_NAME} ${TARGET_NAME}_${SFX}) - get_target_property(SOURCE_FILES ${TARGET_NAME} SOURCES) - - foreach(SOURCE_FILE ${SOURCE_FILES}) - if(SOURCE_FILE MATCHES \\.\(cc|cxx|cpp\)$) - set_source_files_properties(${SOURCE_FILE} PROPERTIES - COMPILE_FLAGS "-include ${OUTPUT_DIR}/${PRECOMPILED_HEADER_NAME} -Winvalid-pch" - ) - endif() - endforeach() + target_compile_options(${TARGET_NAME} + PRIVATE + -include ${OUTPUT_DIR}/${PRECOMPILED_HEADER_NAME} + -Winvalid-pch + ) endif() endfunction() diff --git a/cmake/SetDefinitions.cmake b/cmake/SetDefinitions.cmake index 5269bc84..ffd05c31 100644 --- a/cmake/SetDefinitions.cmake +++ b/cmake/SetDefinitions.cmake @@ -79,7 +79,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC") /GS- #no buffer security check /GF #string pooling > - + /wd4996 /wd4267 /wd4244 @@ -93,10 +93,20 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC") /wd4127 /wd4100 /wd4389 + /wd4189 + /wd4701 + /wd4706 + /wd4703 + /wd4702 + /wd4302 + /wd4305 + /wd4018 + /wd4840 + /wd4101 ) endif () -# GCC and Clang compiler options +# GCC compiler options if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") set(DEFAULT_COMPILE_OPTS ${DEFAULT_COMPILE_OPTS} $<$: @@ -119,6 +129,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") ) endif () +#Clang compiler options if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") set(DEFAULT_COMPILE_OPTS ${DEFAULT_COMPILE_OPTS} $<$: diff --git a/dep b/dep index ab9e244c..26edd0e9 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit ab9e244cf77a325a05dea816cd287763b418bf23 +Subproject commit 26edd0e965f55a43ab42e314c28452a087828e2c diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index 4d970f9e..04d224cc 100644 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -277,7 +277,6 @@ target_link_libraries(game # Generate precompiled header if(PCH) - add_dependencies(vmap2 game) ADD_CXX_PCH(game ${CMAKE_CURRENT_SOURCE_DIR}/pchdef.h ${CMAKE_CURRENT_SOURCE_DIR}/pchdef.cpp) endif() diff --git a/src/game/pchdef.h b/src/game/pchdef.h index 12348d7a..9a704323 100644 --- a/src/game/pchdef.h +++ b/src/game/pchdef.h @@ -26,6 +26,7 @@ #define GAME_PCH_H #include "Common.h" +#include "Map.h" #include "Log.h" #include "ObjectMgr.h" #include "WorldPacket.h" diff --git a/src/shared/Utilities/Util.h b/src/shared/Utilities/Util.h index 99932a53..e47866f4 100644 --- a/src/shared/Utilities/Util.h +++ b/src/shared/Utilities/Util.h @@ -32,6 +32,7 @@ #include #include #include +#include /** * @brief @@ -555,7 +556,7 @@ inline bool isEastAsianString(const std::wstring &wstr, bool numericOrSpace) */ inline void strToUpper(std::string& str) { - std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) { return std::toupper(c); }); + std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) { return toupper(c); }); } /** @@ -565,7 +566,7 @@ inline void strToUpper(std::string& str) */ inline void strToLower(std::string& str) { - std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) { return std::tolower(c); }); + std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) { return tolower(c); }); } /**