forked from eden-emu/eden
		
	Merge pull request #9300 from ameerj/pch
CMake: Use precompiled headers to improve compile times
This commit is contained in:
		
						commit
						c53a3d3f37
					
				
					 30 changed files with 174 additions and 5 deletions
				
			
		|  | @ -43,6 +43,8 @@ option(YUZU_USE_BUNDLED_OPUS "Compile bundled opus" ON) | |||
| 
 | ||||
| option(YUZU_TESTS "Compile tests" ON) | ||||
| 
 | ||||
| option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) | ||||
| 
 | ||||
| CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile Windows crash dump (Minidump) support" OFF "WIN32" OFF) | ||||
| 
 | ||||
| option(YUZU_USE_BUNDLED_VCPKG "Use vcpkg for yuzu dependencies" "${MSVC}") | ||||
|  | @ -64,6 +66,20 @@ elseif(NOT "$ENV{VCPKG_TOOLCHAIN_FILE}" STREQUAL "") | |||
|     include("$ENV{VCPKG_TOOLCHAIN_FILE}") | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     if (MSVC AND CCACHE) | ||||
|         # buildcache does not properly cache PCH files, leading to compilation errors. | ||||
|         # See https://github.com/mbitsnbites/buildcache/discussions/230 | ||||
|         message(WARNING "buildcache does not properly support Precompiled Headers. Disabling PCH") | ||||
|         set(YUZU_USE_PRECOMPILED_HEADERS OFF) | ||||
|     endif() | ||||
| endif() | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     message(STATUS "Using Precompiled Headers.") | ||||
|     set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON) | ||||
| endif() | ||||
| 
 | ||||
| 
 | ||||
| # Default to a Release build | ||||
| get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) | ||||
| if (NOT IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE) | ||||
|  |  | |||
							
								
								
									
										2
									
								
								externals/dynarmic
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								externals/dynarmic
									
										
									
									
										vendored
									
									
								
							|  | @ -1 +1 @@ | |||
| Subproject commit 07c614f91b0af5335e1f9c0653c2d75e7b5f53bd | ||||
| Subproject commit a5b57bb9cd1500a6e0a3c800b35c1984211dff1d | ||||
|  | @ -82,8 +82,9 @@ if (MSVC) | |||
|         /wd4324 # 'struct_name': structure was padded due to __declspec(align()) | ||||
|     ) | ||||
| 
 | ||||
|     if (USE_CCACHE) | ||||
|     if (USE_CCACHE OR YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     # when caching, we need to use /Z7 to downgrade debug info to use an older but more cachable format | ||||
|     # Precompiled headers are deleted if not using /Z7. See https://github.com/nanoant/CMakePCHCompiler/issues/21 | ||||
|         add_compile_options(/Z7) | ||||
|     else() | ||||
|         add_compile_options(/Zi) | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ add_library(audio_core STATIC | |||
|     out/audio_out.h | ||||
|     out/audio_out_system.cpp | ||||
|     out/audio_out_system.h | ||||
|     precompiled_headers.h | ||||
|     renderer/adsp/adsp.cpp | ||||
|     renderer/adsp/adsp.h | ||||
|     renderer/adsp/audio_renderer.cpp | ||||
|  | @ -233,3 +234,7 @@ if(ENABLE_SDL2) | |||
|     endif() | ||||
|     target_compile_definitions(audio_core PRIVATE HAVE_SDL2) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(audio_core PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/audio_core/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/audio_core/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -37,6 +37,7 @@ add_library(common STATIC | |||
|     cache_management.cpp | ||||
|     cache_management.h | ||||
|     common_funcs.h | ||||
|     common_precompiled_headers.h | ||||
|     common_types.h | ||||
|     concepts.h | ||||
|     div_ceil.h | ||||
|  | @ -95,6 +96,7 @@ add_library(common STATIC | |||
|     param_package.h | ||||
|     parent_of_member.h | ||||
|     point.h | ||||
|     precompiled_headers.h | ||||
|     quaternion.h | ||||
|     reader_writer_queue.h | ||||
|     ring_buffer.h | ||||
|  | @ -183,3 +185,7 @@ else() | |||
|   target_link_libraries(common PRIVATE | ||||
|     $<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(common PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										14
									
								
								src/common/common_precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/common/common_precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <algorithm> | ||||
| #include <array> | ||||
| #include <chrono> | ||||
| #include <memory> | ||||
| 
 | ||||
| #include <fmt/format.h> | ||||
| 
 | ||||
| #include "common/assert.h" | ||||
| #include "common/common_types.h" | ||||
							
								
								
									
										6
									
								
								src/common/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/common/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -141,7 +141,7 @@ static std::wstring CPToUTF16(u32 code_page, const std::string& input) { | |||
|         MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), nullptr, 0); | ||||
| 
 | ||||
|     if (size == 0) { | ||||
|         return L""; | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|     std::wstring output(size, L'\0'); | ||||
|  | @ -158,7 +158,7 @@ std::string UTF16ToUTF8(const std::wstring& input) { | |||
|     const auto size = WideCharToMultiByte(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), | ||||
|                                           nullptr, 0, nullptr, nullptr); | ||||
|     if (size == 0) { | ||||
|         return ""; | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|     std::string output(size, '\0'); | ||||
|  |  | |||
|  | @ -771,6 +771,7 @@ add_library(core STATIC | |||
|     memory.h | ||||
|     perf_stats.cpp | ||||
|     perf_stats.h | ||||
|     precompiled_headers.h | ||||
|     reporter.cpp | ||||
|     reporter.h | ||||
|     telemetry_session.cpp | ||||
|  | @ -825,3 +826,7 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | |||
|     ) | ||||
|     target_link_libraries(core PRIVATE dynarmic) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(core PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										11
									
								
								src/core/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/core/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <boost/container/flat_map.hpp> // used by service.h which is heavily included
 | ||||
| #include <boost/intrusive/rbtree.hpp>   // used by k_auto_object.h which is heavily included
 | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
| 
 | ||||
| #include "core/hle/kernel/k_process.h" | ||||
|  | @ -4,6 +4,7 @@ | |||
| set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) | ||||
| 
 | ||||
| add_executable(yuzu-room | ||||
|     precompiled_headers.h | ||||
|     yuzu_room.cpp | ||||
|     yuzu_room.rc | ||||
| ) | ||||
|  | @ -25,3 +26,7 @@ target_link_libraries(yuzu-room PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads) | |||
| if(UNIX AND NOT APPLE) | ||||
|     install(TARGETS yuzu-room) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(yuzu-room PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/dedicated_room/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/dedicated_room/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -34,6 +34,7 @@ add_library(input_common STATIC | |||
|     input_poller.h | ||||
|     main.cpp | ||||
|     main.h | ||||
|     precompiled_headers.h | ||||
| ) | ||||
| 
 | ||||
| if (MSVC) | ||||
|  | @ -67,3 +68,7 @@ target_link_libraries(input_common PRIVATE usb) | |||
| 
 | ||||
| create_target_directory_groups(input_common) | ||||
| target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost) | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(input_common PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/input_common/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/input_common/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -8,6 +8,7 @@ add_library(network STATIC | |||
|     network.h | ||||
|     packet.cpp | ||||
|     packet.h | ||||
|     precompiled_headers.h | ||||
|     room.cpp | ||||
|     room.h | ||||
|     room_member.cpp | ||||
|  | @ -23,3 +24,7 @@ if (ENABLE_WEB_SERVICE) | |||
|     target_compile_definitions(network PRIVATE -DENABLE_WEB_SERVICE) | ||||
|     target_link_libraries(network PRIVATE web_service) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(network PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/network/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/network/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -231,6 +231,7 @@ add_library(shader_recompiler STATIC | |||
|     ir_opt/texture_pass.cpp | ||||
|     ir_opt/verification_pass.cpp | ||||
|     object_pool.h | ||||
|     precompiled_headers.h | ||||
|     profile.h | ||||
|     program_header.h | ||||
|     runtime_info.h | ||||
|  | @ -260,3 +261,7 @@ else() | |||
| endif() | ||||
| 
 | ||||
| create_target_directory_groups(shader_recompiler) | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(shader_recompiler PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
|  | @ -23,7 +23,6 @@ | |||
| #include "shader_recompiler/frontend/ir/pred.h" | ||||
| #include "shader_recompiler/frontend/ir/reg.h" | ||||
| #include "shader_recompiler/frontend/ir/type.h" | ||||
| #include "shader_recompiler/frontend/ir/value.h" | ||||
| 
 | ||||
| namespace Shader::IR { | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										7
									
								
								src/shader_recompiler/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/shader_recompiler/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
| #include "frontend/maxwell/translate/impl/impl.h" | ||||
|  | @ -11,6 +11,7 @@ add_executable(tests | |||
|     common/unique_function.cpp | ||||
|     core/core_timing.cpp | ||||
|     core/internal_network/network.cpp | ||||
|     precompiled_headers.h | ||||
|     tests.cpp | ||||
|     video_core/buffer_base.cpp | ||||
|     input_common/calibration_configuration_job.cpp | ||||
|  | @ -22,3 +23,7 @@ target_link_libraries(tests PRIVATE common core input_common) | |||
| target_link_libraries(tests PRIVATE ${PLATFORM_LIBRARIES} Catch2::Catch2 Threads::Threads) | ||||
| 
 | ||||
| add_test(NAME tests COMMAND tests) | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(tests PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/tests/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/tests/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -84,6 +84,7 @@ add_library(video_core STATIC | |||
|     gpu_thread.h | ||||
|     memory_manager.cpp | ||||
|     memory_manager.h | ||||
|     precompiled_headers.h | ||||
|     pte_kind.h | ||||
|     query_cache.h | ||||
|     rasterizer_accelerated.cpp | ||||
|  | @ -300,3 +301,7 @@ endif() | |||
| if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | ||||
|     target_link_libraries(video_core PRIVATE dynarmic) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(video_core PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/video_core/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/video_core/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -4,6 +4,7 @@ | |||
| add_library(web_service STATIC | ||||
|     announce_room_json.cpp | ||||
|     announce_room_json.h | ||||
|     precompiled_headers.h | ||||
|     telemetry_json.cpp | ||||
|     telemetry_json.h | ||||
|     verify_login.cpp | ||||
|  | @ -17,3 +18,7 @@ add_library(web_service STATIC | |||
| 
 | ||||
| create_target_directory_groups(web_service) | ||||
| target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib cpp-jwt) | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(web_service PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/web_service/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/web_service/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -186,6 +186,7 @@ add_executable(yuzu | |||
|     multiplayer/state.cpp | ||||
|     multiplayer/state.h | ||||
|     multiplayer/validation.h | ||||
|     precompiled_headers.h | ||||
|     startup_checks.cpp | ||||
|     startup_checks.h | ||||
|     uisettings.cpp | ||||
|  | @ -409,3 +410,7 @@ endif() | |||
| if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | ||||
|     target_link_libraries(yuzu PRIVATE dynarmic) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(yuzu PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/yuzu/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/yuzu/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
|  | @ -24,6 +24,7 @@ add_executable(yuzu-cmd | |||
|     emu_window/emu_window_sdl2_gl.h | ||||
|     emu_window/emu_window_sdl2_vk.cpp | ||||
|     emu_window/emu_window_sdl2_vk.h | ||||
|     precompiled_headers.h | ||||
|     yuzu.cpp | ||||
|     yuzu.rc | ||||
| ) | ||||
|  | @ -55,3 +56,7 @@ if (MSVC) | |||
|     include(CopyYuzuSDLDeps) | ||||
|     copy_yuzu_SDL_deps(yuzu-cmd) | ||||
| endif() | ||||
| 
 | ||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | ||||
|     target_precompile_headers(yuzu-cmd PRIVATE precompiled_headers.h) | ||||
| endif() | ||||
|  |  | |||
							
								
								
									
										6
									
								
								src/yuzu_cmd/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/yuzu_cmd/precompiled_headers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| // SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_precompiled_headers.h" | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 liamwhite
						liamwhite