From 31cad22758bb6ee1f2bdf8773b4f0c2b8996f7fc Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Tue, 7 Jul 2020 13:24:04 +0100 Subject: [PATCH] Use CMake's builtin functionality for PCHs `glslang_pch()` did manual mangling of the compiler flags to enable pre-compiled headers. I couldn't get this approach to work with the `MachineIndependent` subdirectory, but fortunately CMake has added first-class support for precompiled headers in 3.16, which does work with subdirectories. Moved `glslang_pch()` to the other global function declarations. `glslang_pch()` is a no-op when using CMake earlier than `3.16`. CMake's PCH implementation does not need the `pch.cpp` files, so just remove them. --- BUILD.bazel | 2 -- CMakeLists.txt | 25 +++++++++++---------- glslang/CMakeLists.txt | 2 +- glslang/HLSL/pch.cpp | 35 ------------------------------ glslang/MachineIndependent/pch.cpp | 35 ------------------------------ gtests/CMakeLists.txt | 2 +- gtests/pch.cpp | 35 ------------------------------ 7 files changed, 15 insertions(+), 121 deletions(-) delete mode 100644 glslang/HLSL/pch.cpp delete mode 100644 glslang/MachineIndependent/pch.cpp delete mode 100644 gtests/pch.cpp diff --git a/BUILD.bazel b/BUILD.bazel index 7c976469a..7e5bf8367 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -72,9 +72,7 @@ cc_library( "glslang/MachineIndependent/preprocessor/*.cpp", ], exclude = [ - "glslang/HLSL/pch.cpp", "glslang/HLSL/pch.h", - "glslang/MachineIndependent/pch.cpp", "glslang/MachineIndependent/pch.h", ], ) + [ diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d66e2ba9..5d457bd2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,18 +107,6 @@ if(USE_CCACHE) endif(CCACHE_FOUND) endif() -# Precompiled header macro. Parameters are source file list and filename for pch cpp file. -macro(glslang_pch SRCS PCHCPP) - if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio" AND NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ENABLE_PCH) - set(PCH_NAME "$(IntDir)\\pch.pch") - # make source files use/depend on PCH_NAME - set_source_files_properties(${${SRCS}} PROPERTIES COMPILE_FLAGS "/Yupch.h /FIpch.h /Fp${PCH_NAME} /Zm300" OBJECT_DEPENDS "${PCH_NAME}") - # make PCHCPP file compile and generate PCH_NAME - set_source_files_properties(${PCHCPP} PROPERTIES COMPILE_FLAGS "/Ycpch.h /Fp${PCH_NAME} /Zm300" OBJECT_OUTPUTS "${PCH_NAME}") - list(APPEND ${SRCS} "${PCHCPP}") - endif() -endmacro(glslang_pch) - project(glslang) if(ENABLE_CTEST) @@ -255,6 +243,19 @@ function(glslang_only_export_explicit_symbols target) endif() endfunction() +# glslang_pch() adds precompiled header rules to for the pre-compiled +# header file . As target_precompile_headers() was added in CMake 3.16, +# this is a no-op if called on earlier versions of CMake. +if(NOT CMAKE_VERSION VERSION_LESS "3.16") + function(glslang_pch target pch) + target_precompile_headers(${target} PRIVATE ${pch}) + endfunction() +else() + function(glslang_pch target pch) + endfunction() + message(NOTICE "Your CMake version is ${CMAKE_VERSION}. Update to at least 3.16 to enable precompiled headers to speed up incremental builds") +endif() + if(NOT TARGET SPIRV-Tools-opt) set(ENABLE_OPT OFF) endif() diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt index 9fcf81ca3..9864e4b2b 100644 --- a/glslang/CMakeLists.txt +++ b/glslang/CMakeLists.txt @@ -133,7 +133,7 @@ endif(ENABLE_HLSL) add_library(MachineIndependent STATIC ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS}) set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET MachineIndependent PROPERTY FOLDER glslang) -glslang_pch(SOURCES MachineIndependent/pch.cpp) +glslang_pch(MachineIndependent MachineIndependent/pch.h) target_link_libraries(MachineIndependent PRIVATE OGLCompiler OSDependent GenericCodeGen) diff --git a/glslang/HLSL/pch.cpp b/glslang/HLSL/pch.cpp deleted file mode 100644 index b7a08654a..000000000 --- a/glslang/HLSL/pch.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright (C) 2018 The Khronos Group Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#include "pch.h" diff --git a/glslang/MachineIndependent/pch.cpp b/glslang/MachineIndependent/pch.cpp deleted file mode 100644 index b7a08654a..000000000 --- a/glslang/MachineIndependent/pch.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright (C) 2018 The Khronos Group Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#include "pch.h" diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 34da2cea7..6c48d9c26 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -60,9 +60,9 @@ if(BUILD_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp) endif() - glslang_pch(TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pch.cpp) add_executable(glslangtests ${TEST_SOURCES}) + glslang_pch(glslangtests ${CMAKE_CURRENT_SOURCE_DIR}/pch.h) set_property(TARGET glslangtests PROPERTY FOLDER tests) glslang_set_link_args(glslangtests) if(ENABLE_GLSLANG_INSTALL) diff --git a/gtests/pch.cpp b/gtests/pch.cpp deleted file mode 100644 index b7a08654a..000000000 --- a/gtests/pch.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright (C) 2018 The Khronos Group Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#include "pch.h"