cmake: fix MSVC PCH support

I'm not sure if the previous implementation ever worked.
This commit is contained in:
Scott Mansell
2022-04-27 18:57:13 +12:00
committed by Admiral H. Curtiss
parent 2348017ee8
commit 0909e00117
5 changed files with 37 additions and 6 deletions

View File

@ -1,6 +1,24 @@
# The PCH that dolphin uses for MSVC is non-standard;
# Instead of having one PCH per module, dolphin has one PCH shared between all modules.
# So we need to implement PCH manually, rather than using the PCH support built into cmake
add_library(pch pch.h pch.cpp)
set(PCH_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set(PCH_NAME ${PCH.pch})
target_compile_options(pch PUBLIC /Ycpch.h /Fp${PCH_DIRECTORY}/${PCH_NAME})
# pch.cpp should be compiled with the /Yc command, which creates the precompiled header
target_compile_options(pch PRIVATE /Yc"pch.h" /Fo$<TARGET_FILE_DIR:pch>)
# /Fp sets the location of the PCH. By forcing it to a fixed location, all modules
# will share this one PCH
target_compile_options(pch PUBLIC /Fp$<TARGET_FILE_DIR:pch>)
# Sharing a PCH breaks pdb files. So we use the /Z7 option to inline the pdb into
# the binary. That also requires us to disable minimal rebuilds.
target_compile_options(pch PUBLIC /Z7 /Gm-)
# targets which include pch need these compile options
# /Yu - Use precompiled header named "pch.h"
# /FI - Force include "pch.h" at top of every source file
target_compile_options(pch INTERFACE /Yu"pch.h" /FI"pch.h")
# fmt/format.h is included in the PCH
target_link_libraries(pch PUBLIC fmt::fmt)

4
Source/PCH/nopch/pch.h Normal file
View File

@ -0,0 +1,4 @@
// dummy include to help with disabling pch for a single file
// cmake doesn't provide a clean way to disable MSVC's force include option
// So we can just point it at an empty file instead.