From 08d02b550a1aee0e109334384c260244d450d6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Sun, 22 Sep 2019 12:13:42 +0200 Subject: [PATCH] add "system" PCH that contains often used system headers such as STL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The idea is that this PCH will be used as a fallback for linktargets that do not explicitly set their own PCH. Change-Id: If05d3f04893a386e5d991f913e094f49249c8f44 Reviewed-on: https://gerrit.libreoffice.org/79363 Tested-by: Jenkins Reviewed-by: Luboš Luňák --- RepositoryModule_host.mk | 1 + bin/update_pch.sh | 6 +- pch/Makefile | 7 ++ pch/Module_pch.mk | 26 ++++++++ pch/README | 3 + pch/StaticLibrary_precompiled_system.mk | 20 ++++++ pch/inc/pch/precompiled_system.cxx | 12 ++++ pch/inc/pch/precompiled_system.hxx | 87 +++++++++++++++++++++++++ pch/system_empty.cxx | 10 +++ 9 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 pch/Makefile create mode 100644 pch/Module_pch.mk create mode 100644 pch/README create mode 100644 pch/StaticLibrary_precompiled_system.mk create mode 100644 pch/inc/pch/precompiled_system.cxx create mode 100644 pch/inc/pch/precompiled_system.hxx create mode 100644 pch/system_empty.cxx diff --git a/RepositoryModule_host.mk b/RepositoryModule_host.mk index e3ea0d994b3b..80992dfed7e2 100644 --- a/RepositoryModule_host.mk +++ b/RepositoryModule_host.mk @@ -97,6 +97,7 @@ $(eval $(call gb_Module_add_moduledirs,libreoffice,\ oox \ $(call gb_Helper_optional,OPENCL,opencl) \ package \ + pch \ postprocess \ $(call gb_Helper_optional,PYUNO,pyuno) \ $(call gb_Helper_optional,QADEVOOO,qadevOOo) \ diff --git a/bin/update_pch.sh b/bin/update_pch.sh index 2b2df6dc3b46..bc7742ea952e 100755 --- a/bin/update_pch.sh +++ b/bin/update_pch.sh @@ -42,8 +42,12 @@ for x in $headers; do fi else header=$x - echo updating `echo $header | sed -e s%$root/%%` + local update_msg=`echo $header | sed -e s%$root/%%` module=`readlink -f $header | sed -e s%$root/%% -e s%/.*%%` + if [ "$module" = "pch" ]; then + continue # PCH's in pch/inc/pch/ are handled manually + fi + echo updating $update_msg if [ "$module" = "external" ]; then module=external/`readlink -f $header | sed -e s%$root/external/%% -e s%/.*%%` fi diff --git a/pch/Makefile b/pch/Makefile new file mode 100644 index 000000000000..ccb1c85a04da --- /dev/null +++ b/pch/Makefile @@ -0,0 +1,7 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- + +module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) + +include $(module_directory)/../solenv/gbuild/partial_build.mk + +# vim: set noet sw=4 ts=4: diff --git a/pch/Module_pch.mk b/pch/Module_pch.mk new file mode 100644 index 000000000000..85bedb503afa --- /dev/null +++ b/pch/Module_pch.mk @@ -0,0 +1,26 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +$(eval $(call gb_Module_Module,pch)) + +$(eval $(call gb_Module_add_targets,pch,\ + StaticLibrary_precompiled_system \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/pch/README b/pch/README new file mode 100644 index 000000000000..b6c8ca9dd932 --- /dev/null +++ b/pch/README @@ -0,0 +1,3 @@ +The purpose of this directory is to generate global precompiled headers +that can be used by any other gbuild library/executable. +The libraries themselves are not used. diff --git a/pch/StaticLibrary_precompiled_system.mk b/pch/StaticLibrary_precompiled_system.mk new file mode 100644 index 000000000000..9cc9f0b56a1a --- /dev/null +++ b/pch/StaticLibrary_precompiled_system.mk @@ -0,0 +1,20 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_StaticLibrary_StaticLibrary,precompiled_system)) + +$(eval $(call gb_StaticLibrary_set_precompiled_header,precompiled_system,pch/inc/pch/precompiled_system)) + +$(eval $(call gb_StaticLibrary_use_external,precompiled_system,boost_headers)) + +$(eval $(call gb_StaticLibrary_add_exception_objects,precompiled_system,\ + pch/system_empty \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/pch/inc/pch/precompiled_system.cxx b/pch/inc/pch/precompiled_system.cxx new file mode 100644 index 000000000000..ed382aeacfef --- /dev/null +++ b/pch/inc/pch/precompiled_system.cxx @@ -0,0 +1,12 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "precompiled_system.hxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/pch/inc/pch/precompiled_system.hxx b/pch/inc/pch/precompiled_system.hxx new file mode 100644 index 000000000000..8e53109ecbfc --- /dev/null +++ b/pch/inc/pch/precompiled_system.hxx @@ -0,0 +1,87 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +// Unlike other precompiled_* files, this one is (semi-)manually created. +// It is based on the output of +// (for file in */inc/pch/precompiled_*.hxx; do cat "$file" | grep -A 1000 -F "#if PCH_LEVEL >= 1" | grep -B 1000 -F "#endif // PCH_LEVEL >= 1"; done) | grep "#include" | sort -u +// which is then examined and used here. + +#if PCH_LEVEL >= 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif // PCH_LEVEL >= 1 + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/pch/system_empty.cxx b/pch/system_empty.cxx new file mode 100644 index 000000000000..2b7f95335dd7 --- /dev/null +++ b/pch/system_empty.cxx @@ -0,0 +1,10 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */