use PCH for clang plugin source too, if enabled
This currently supports only building with Clang on Linux, as I'm lazy to handle the other cases (and Clang should be usually self-built anyway). The main compile time cost is in optimizing the code, but this still saves few seconds per source. Change-Id: Ib6c0fd874820af737ee1257cb5234fb78bc63ad8 Reviewed-on: https://gerrit.libreoffice.org/80810 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
This commit is contained in:
parent
a5496f4441
commit
1c8b2b6da1
3 changed files with 96 additions and 1 deletions
2
compilerplugins/.gitignore
vendored
2
compilerplugins/.gitignore
vendored
|
@ -1,6 +1,8 @@
|
|||
/clang/clang-timestamp
|
||||
/clang/plugin.dll
|
||||
/clang/plugin.so
|
||||
/clang/clang.pch
|
||||
/clang/clang.pch.d
|
||||
/clang/sharedvisitor/*.plugininfo
|
||||
/clang/sharedvisitor/analyzer
|
||||
/clang/sharedvisitor/analyzer.d
|
||||
|
|
|
@ -43,6 +43,10 @@ ifeq ($(OS),WNT)
|
|||
LO_CLANG_SHARED_PLUGINS=
|
||||
endif
|
||||
|
||||
# Whether to use precompiled headers for the sources. This is actually controlled
|
||||
# by gb_ENABLE_PCH like everywhere else, but unsetting this disables PCH.
|
||||
LO_CLANG_USE_PCH=1
|
||||
|
||||
# Whether to use precompiled headers for the analyzer too. Does not apply to compiling sources.
|
||||
LO_CLANG_USE_ANALYZER_PCH=1
|
||||
|
||||
|
@ -100,6 +104,20 @@ CLANGWERROR := -Werror
|
|||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(LO_CLANG_USE_PCH),)
|
||||
# Reset and enable only if actually supported and enabled.
|
||||
LO_CLANG_USE_PCH=
|
||||
ifneq ($(gb_ENABLE_PCH),)
|
||||
ifneq ($(OS),WNT)
|
||||
# Currently only Clang PCH is supported (which should usually be the case, as Clang is usually self-built).
|
||||
ifneq ($(findstring clang,$(COMPILER_PLUGINS_CXX)),)
|
||||
LO_CLANG_USE_PCH=1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
compilerplugins: compilerplugins-build
|
||||
|
||||
ifdef LO_CLANG_SHARED_PLUGINS
|
||||
|
@ -139,6 +157,7 @@ compilerplugins-clean:
|
|||
$(CLANGOBJDIR) \
|
||||
$(CLANGOUTDIR)/clang-timestamp \
|
||||
$(CLANGOUTDIR)/plugin$(CLANG_DL_EXT) \
|
||||
$(CLANGOUTDIR)/clang.pch{,.d} \
|
||||
$(CLANGOUTDIR)/sharedvisitor/*.plugininfo \
|
||||
$(CLANGOUTDIR)/sharedvisitor/clang.pch{,.d} \
|
||||
$(CLANGOUTDIR)/sharedvisitor/sharedvisitor.{cxx,d,o} \
|
||||
|
@ -176,10 +195,12 @@ else
|
|||
|
||||
# clangbuildsrc cxxfile ofile dfile
|
||||
define clangbuildsrc
|
||||
$(2): $(1) $(SRCDIR)/compilerplugins/Makefile-clang.mk $(CLANGOUTDIR)/clang-timestamp
|
||||
$(2): $(1) $(SRCDIR)/compilerplugins/Makefile-clang.mk $(CLANGOUTDIR)/clang-timestamp \
|
||||
$(if $(LO_CLANG_USE_PCH),$(CLANGOUTDIR)/clang.pch)
|
||||
$$(call gb_Output_announce,$(subst $(SRCDIR)/,,$(subst $(BUILDDIR)/,,$(1))),$(true),CXX,3)
|
||||
$(QUIET)$(COMPILER_PLUGINS_CXX) $(CLANGDEFS) $(CLANGCXXFLAGS) $(CLANGWERROR) \
|
||||
$(CLANGINCLUDES) -I$(BUILDDIR)/config_host -I$(CLANGINDIR) $(1) \
|
||||
$(if $(LO_CLANG_USE_PCH),-include-pch $(CLANGOUTDIR)/clang.pch -DPCH_LEVEL=$(gb_ENABLE_PCH)) \
|
||||
-fPIC -c -o $(2) -MMD -MT $(2) -MP -MF $(3)
|
||||
|
||||
-include $(3)
|
||||
|
@ -294,7 +315,25 @@ $(CLANGOUTDIR)/sources-shared.txt:
|
|||
touch $@
|
||||
endif
|
||||
|
||||
ifneq ($(LO_CLANG_USE_PCH),)
|
||||
# the PCH for plugin sources themselves
|
||||
|
||||
ifeq ($(OS),WNT)
|
||||
# TODO
|
||||
else
|
||||
$(CLANGOUTDIR)/clang.pch: $(CLANGINDIR)/precompiled_clang.hxx \
|
||||
$(SRCDIR)/compilerplugins/Makefile-clang.mk $(CLANGOUTDIR)/clang-timestamp
|
||||
$(call gb_Output_announce,$(subst $(BUILDDIR)/,,$@),$(true),PCH,1)
|
||||
$(QUIET)$(COMPILER_PLUGINS_CXX) -x c++-header $(CLANGDEFS) $(CLANGCXXFLAGS) $(CLANGWERROR) \
|
||||
$(CLANGINCLUDES) -I$(BUILDDIR)/config_host -I$(CLANGINDIR) -DPCH_LEVEL=$(gb_ENABLE_PCH) \
|
||||
-fPIC $< -o $@ -MMD -MT $@ -MP -MF $(CLANGOUTDIR)/clang.pch.d
|
||||
endif
|
||||
-include $(CLANGOUTDIR)/clang.pch.d
|
||||
|
||||
endif
|
||||
|
||||
ifdef LO_CLANG_USE_ANALYZER_PCH
|
||||
# the PCH for usage in sharedvisitor/analyzer
|
||||
|
||||
# these are from the invocation in analyzer.cxx
|
||||
LO_CLANG_ANALYZER_PCH_CXXFLAGS := -I$(BUILDDIR)/config_host $(CLANGTOOLDEFS)
|
||||
|
|
54
compilerplugins/clang/precompiled_clang.hxx
Normal file
54
compilerplugins/clang/precompiled_clang.hxx
Normal file
|
@ -0,0 +1,54 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* Based on LLVM/Clang.
|
||||
*
|
||||
* This file is distributed under the University of Illinois Open Source
|
||||
* License. See LICENSE.TXT for details.
|
||||
*
|
||||
*/
|
||||
|
||||
// This file is generated manually. Is it based on the output of
|
||||
// cat *.cxx *.hxx | grep '#include' | grep 'clang/' | sort -u
|
||||
|
||||
#if PCH_LEVEL >= 1
|
||||
#include <clang/AST/ASTConsumer.h>
|
||||
#include <clang/AST/ASTContext.h>
|
||||
#include <clang/AST/Attr.h>
|
||||
#include <clang/AST/Comment.h>
|
||||
#include <clang/AST/CXXInheritance.h>
|
||||
#include <clang/AST/DeclBase.h>
|
||||
#include <clang/AST/DeclCXX.h>
|
||||
#include <clang/AST/Decl.h>
|
||||
#include <clang/AST/DeclTemplate.h>
|
||||
#include <clang/AST/ExprCXX.h>
|
||||
#include <clang/AST/Expr.h>
|
||||
#include <clang/AST/RecursiveASTVisitor.h>
|
||||
#include <clang/AST/StmtVisitor.h>
|
||||
#include <clang/AST/Type.h>
|
||||
#include <clang/Basic/FileManager.h>
|
||||
#include <clang/Basic/OperatorKinds.h>
|
||||
#include <clang/Basic/SourceManager.h>
|
||||
#include <clang/Frontend/CompilerInstance.h>
|
||||
#include <clang/Frontend/FrontendAction.h>
|
||||
#include <clang/Frontend/FrontendActions.h>
|
||||
#include <clang/Frontend/FrontendPluginRegistry.h>
|
||||
#include <clang/Lex/Lexer.h>
|
||||
#include <clang/Lex/PPCallbacks.h>
|
||||
#include <clang/Lex/Preprocessor.h>
|
||||
#include <clang/Rewrite/Core/Rewriter.h>
|
||||
#include <clang/Sema/SemaDiagnostic.h>
|
||||
#include <clang/Sema/Sema.h>
|
||||
#include <clang/Sema/SemaInternal.h>
|
||||
#include <clang/Tooling/CommonOptionsParser.h>
|
||||
#include <clang/Tooling/Refactoring.h>
|
||||
#endif
|
||||
|
||||
#if PCH_LEVEL >= 2
|
||||
// These are included by everything anyway.
|
||||
#include "plugin.hxx"
|
||||
#include "check.hxx"
|
||||
#endif
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
Loading…
Reference in a new issue