cmake: fix MSVC PCH support
I'm not sure if the previous implementation ever worked.
This commit is contained in:
parent
2348017ee8
commit
0909e00117
|
@ -14,6 +14,5 @@ target_include_directories(imgui PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|
||||||
target_link_libraries(imgui
|
target_link_libraries(imgui
|
||||||
PRIVATE
|
PRIVATE
|
||||||
common
|
|
||||||
fmt::fmt
|
fmt::fmt
|
||||||
)
|
)
|
||||||
|
|
|
@ -72,9 +72,8 @@ if (MSVC)
|
||||||
add_compile_options(/external:W0)
|
add_compile_options(/external:W0)
|
||||||
add_compile_options(/external:templates-)
|
add_compile_options(/external:templates-)
|
||||||
|
|
||||||
|
# Compile PCH
|
||||||
add_subdirectory(PCH)
|
add_subdirectory(PCH)
|
||||||
add_definitions(/I${PCH_DIRECTORY})
|
|
||||||
add_definitions(/Yu${PCH_PATH})
|
|
||||||
|
|
||||||
# Don't include timestamps in binaries
|
# Don't include timestamps in binaries
|
||||||
add_link_options(/Brepro)
|
add_link_options(/Brepro)
|
||||||
|
|
|
@ -308,3 +308,14 @@ if(UNIX)
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
target_link_libraries(common PRIVATE "-INCLUDE:enableCompatPatches")
|
target_link_libraries(common PRIVATE "-INCLUDE:enableCompatPatches")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
# Add precompiled header
|
||||||
|
# it will propergate down to everything that depends on common
|
||||||
|
target_link_libraries(common PUBLIC pch)
|
||||||
|
|
||||||
|
# We need to disable PCH for this one file, because it's C and our PCH is C++
|
||||||
|
set_source_files_properties(
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/ImageC.c
|
||||||
|
PROPERTIES COMPILE_FLAGS "/Y- /I${CMAKE_SOURCE_DIR}/Source/PCH/nopch")
|
||||||
|
endif()
|
||||||
|
|
|
@ -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)
|
add_library(pch pch.h pch.cpp)
|
||||||
set(PCH_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
set(PCH_NAME ${PCH.pch})
|
# pch.cpp should be compiled with the /Yc command, which creates the precompiled header
|
||||||
target_compile_options(pch PUBLIC /Ycpch.h /Fp${PCH_DIRECTORY}/${PCH_NAME})
|
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
|
# fmt/format.h is included in the PCH
|
||||||
target_link_libraries(pch PUBLIC fmt::fmt)
|
target_link_libraries(pch PUBLIC fmt::fmt)
|
||||||
|
|
|
@ -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.
|
Loading…
Reference in New Issue