summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2019-09-22 12:13:42 +0200
committerLuboš Luňák <l.lunak@collabora.com>2019-10-04 08:58:52 +0200
commit08d02b550a1aee0e109334384c260244d450d6a0 (patch)
tree8e38df99a4a1163a6f294381925e11a233662889
parentfd90ad734a931ddfdff4df9bfcf10f12a87b0286 (diff)
add "system" PCH that contains often used system headers such as STL
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 <l.lunak@collabora.com>
-rw-r--r--RepositoryModule_host.mk1
-rwxr-xr-xbin/update_pch.sh6
-rw-r--r--pch/Makefile7
-rw-r--r--pch/Module_pch.mk26
-rw-r--r--pch/README3
-rw-r--r--pch/StaticLibrary_precompiled_system.mk20
-rw-r--r--pch/inc/pch/precompiled_system.cxx12
-rw-r--r--pch/inc/pch/precompiled_system.hxx87
-rw-r--r--pch/system_empty.cxx10
9 files changed, 171 insertions, 1 deletions
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 <algorithm>
+#include <array>
+#include <assert.h>
+#include <atomic>
+#include <boost/algorithm/string.hpp>
+#include <boost/cast.hpp>
+#include <boost/circular_buffer.hpp>
+#include <boost/functional/hash.hpp>
+#include <boost/intrusive_ptr.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/logic/tribool.hpp>
+#include <boost/math/special_functions/sinc.hpp>
+#include <boost/multi_array.hpp>
+#include <boost/multi_index/composite_key.hpp>
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/mem_fun.hpp>
+#include <boost/multi_index/ordered_index.hpp>
+#include <boost/multi_index/random_access_index.hpp>
+#include <boost/operators.hpp>
+#include <boost/optional.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/rational.hpp>
+#include <boost/version.hpp>
+#include <cassert>
+#include <climits>
+#include <cmath>
+#include <cstddef>
+#include <cstdlib>
+#include <cstring>
+#include <deque>
+#include <errno.h>
+#include <exception>
+#include <float.h>
+#include <functional>
+#include <initializer_list>
+#include <iomanip>
+#include <iostream>
+#include <iterator>
+#include <limits>
+#include <limits.h>
+#include <list>
+#include <locale>
+#include <map>
+#include <math.h>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdexcept>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string>
+#include <string.h>
+#include <string_view>
+#include <time.h>
+#include <typeinfo>
+#include <type_traits>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+#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: */