Browse Source
Merge pull request #9300 from ameerj/pch
CMake: Use precompiled headers to improve compile times
pull/15/merge
liamwhite
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with
174 additions and
5 deletions
-
CMakeLists.txt
-
externals/dynarmic
-
src/CMakeLists.txt
-
src/audio_core/CMakeLists.txt
-
src/audio_core/precompiled_headers.h
-
src/common/CMakeLists.txt
-
src/common/common_precompiled_headers.h
-
src/common/precompiled_headers.h
-
src/common/string_util.cpp
-
src/core/CMakeLists.txt
-
src/core/precompiled_headers.h
-
src/dedicated_room/CMakeLists.txt
-
src/dedicated_room/precompiled_headers.h
-
src/input_common/CMakeLists.txt
-
src/input_common/precompiled_headers.h
-
src/network/CMakeLists.txt
-
src/network/precompiled_headers.h
-
src/shader_recompiler/CMakeLists.txt
-
src/shader_recompiler/frontend/ir/value.h
-
src/shader_recompiler/precompiled_headers.h
-
src/tests/CMakeLists.txt
-
src/tests/precompiled_headers.h
-
src/video_core/CMakeLists.txt
-
src/video_core/precompiled_headers.h
-
src/web_service/CMakeLists.txt
-
src/web_service/precompiled_headers.h
-
src/yuzu/CMakeLists.txt
-
src/yuzu/precompiled_headers.h
-
src/yuzu_cmd/CMakeLists.txt
-
src/yuzu_cmd/precompiled_headers.h
|
|
|
@ -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) |
|
|
|
|
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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" |
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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 { |
|
|
|
|
|
|
|
|
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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() |
|
|
|
@ -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" |