From 9cc873ecdd57e13feed842d009fbfe660f5fc96b Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 10 Apr 2016 13:08:54 +0200 Subject: [PATCH] - enable use of precompiled headers for MSVC. Thanks to a small CMake script I recently found this could be done non-invasively. Due to the VC++ 2015 headers being rather bloated (the average include size per source is 400-500kb) this provides a noticable compile speedup, although right now this only covers the game code, so there should be more room for improvement. --- precompiled_headers.cmake | 34 ++++++++++++++++++++ src/CMakeLists.txt | 66 ++++++++++++++++++++++----------------- 2 files changed, 71 insertions(+), 29 deletions(-) create mode 100644 precompiled_headers.cmake diff --git a/precompiled_headers.cmake b/precompiled_headers.cmake new file mode 100644 index 0000000000..0130c15339 --- /dev/null +++ b/precompiled_headers.cmake @@ -0,0 +1,34 @@ +# +# Christoph Heindl 2010 +# Precompiled Headers Demo +# http://cheind.wordpress.com +# + +# Instructs the MSVC toolset to use the precompiled header PRECOMPILED_HEADER +# for each source file given in the collection named by SOURCE_VARIABLE_NAME. +function(enable_precompiled_headers PRECOMPILED_HEADER SOURCE_VARIABLE_NAME) + if(MSVC) + set(files ${${SOURCE_VARIABLE_NAME}}) + + # Generate precompiled header translation unit + get_filename_component(pch_basename ${PRECOMPILED_HEADER} NAME_WE) + set(pch_abs ${CMAKE_CURRENT_SOURCE_DIR}/${PRECOMPILED_HEADER}) + set(pch_unity ${CMAKE_CURRENT_BINARY_DIR}/${pch_basename}.cpp) + FILE(WRITE ${pch_unity} "// Precompiled header unity generated by CMake\n") + FILE(APPEND ${pch_unity} "#include <${pch_abs}>\n") + set_source_files_properties(${pch_unity} PROPERTIES COMPILE_FLAGS "/Yc\"${pch_abs}\"") + + # Update properties of source files to use the precompiled header. + # Additionally, force the inclusion of the precompiled header at beginning of each source file. + foreach(source_file ${files} ) + set_source_files_properties( + ${source_file} + PROPERTIES COMPILE_FLAGS + "/Yu\"${pch_abs}\" /FI\"${pch_abs}\"" + ) + endforeach(source_file) + + # Finally, update the source file collection to contain the precompiled header translation unit + set(${SOURCE_VARIABLE_NAME} ${${SOURCE_VARIABLE_NAME}} ${pch_unity} PARENT_SCOPE) + endif(MSVC) +endfunction(enable_precompiled_headers) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6900202492..bbd3a0d80d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required( VERSION 2.8.7 ) +include(../precompiled_headers.cmake) + if( COMMAND cmake_policy ) cmake_policy( SET CMP0003 NEW ) endif() @@ -959,15 +961,8 @@ set( FASTMATH_SOURCES r_data/colormaps.cpp r_data/r_translate.cpp ) -add_executable( zdoom WIN32 MACOSX_BUNDLE - ${HEADER_FILES} - ${NOT_COMPILED_SOURCE_FILES} - __autostart.cpp - ${ASM_SOURCES} - ${SYSTEM_SOURCES} - ${X86_SOURCES} - ${FASTMATH_SOURCES} - x86.cpp + +set (PCH_SOURCES actorptrselect.cpp am_map.cpp b_bot.cpp @@ -1028,7 +1023,6 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE m_misc.cpp m_png.cpp m_random.cpp - m_specialpaths.cpp memarena.cpp md5.cpp name.cpp @@ -1090,7 +1084,6 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE statistics.cpp stats.cpp stringtable.cpp - strnatcmp.c tables.cpp teaminfo.cpp tempfiles.cpp @@ -1105,7 +1098,6 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE w_wad.cpp wi_stuff.cpp zstrformat.cpp - zstring.cpp g_doom/a_doommisc.cpp g_heretic/a_hereticmisc.cpp g_hexen/a_hexenmisc.cpp @@ -1149,22 +1141,6 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE g_shared/sbar_mugshot.cpp g_shared/shared_hud.cpp g_shared/shared_sbar.cpp - math/asin.c - math/atan.c - math/const.c - math/cosh.c - math/exp.c - math/isnan.c - math/log.c - math/log10.c - math/mtherr.c - math/polevl.c - math/sin.c - math/sinh.c - math/sqrt.c - math/tan.c - math/tanh.c - math/fastsin.cpp resourcefiles/ancientzip.cpp resourcefiles/file_7z.cpp resourcefiles/file_grp.cpp @@ -1175,7 +1151,6 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE resourcefiles/file_pak.cpp resourcefiles/file_directory.cpp resourcefiles/resourcefile.cpp - sfmt/SFMT.cpp textures/animations.cpp textures/anim_switches.cpp textures/automaptexture.cpp @@ -1228,6 +1203,39 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE zscript/zcc_compile.cpp zscript/zcc_expr.cpp zscript/zcc_parser.cpp +) +enable_precompiled_headers( g_pch.h PCH_SOURCES ) + +add_executable( zdoom WIN32 MACOSX_BUNDLE + ${HEADER_FILES} + ${NOT_COMPILED_SOURCE_FILES} + __autostart.cpp + ${ASM_SOURCES} + ${SYSTEM_SOURCES} + ${X86_SOURCES} + ${FASTMATH_SOURCES} + ${PCH_SOURCES} + x86.cpp + m_specialpaths.cpp + strnatcmp.c + zstring.cpp + math/asin.c + math/atan.c + math/const.c + math/cosh.c + math/exp.c + math/isnan.c + math/log.c + math/log10.c + math/mtherr.c + math/polevl.c + math/sin.c + math/sinh.c + math/sqrt.c + math/tan.c + math/tanh.c + math/fastsin.cpp + sfmt/SFMT.cpp zzautozend.cpp )