summaryrefslogtreecommitdiff
path: root/compilerplugins/Makefile-clang.mk
diff options
context:
space:
mode:
Diffstat (limited to 'compilerplugins/Makefile-clang.mk')
-rw-r--r--compilerplugins/Makefile-clang.mk60
1 files changed, 60 insertions, 0 deletions
diff --git a/compilerplugins/Makefile-clang.mk b/compilerplugins/Makefile-clang.mk
new file mode 100644
index 000000000000..1797e424ddb1
--- /dev/null
+++ b/compilerplugins/Makefile-clang.mk
@@ -0,0 +1,60 @@
+#
+# 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/.
+#
+
+# Make sure variables in this Makefile do not conflict with other variables (e.g. from gbuild).
+
+# The list of source files.
+CLANGSRC=compileplugin.cxx
+
+# You may occassionally want to override some of these
+
+# Compile flags ('make CLANGCXXFLAGS=-g' if you need to debug the plugin)
+CLANGCXXFLAGS=-O2 -Wall -g
+# The prefix where Clang resides, override to where Clang resides if using a source build.
+CLANGDIR=/usr
+# The build directory (different from CLANGDIR if using a Clang out-of-source build)
+CLANGBUILD=/usr
+
+# The uninteresting rest.
+
+# Clang headers require these.
+CLANGDEFS=-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fno-rtti
+# All include locations needed.
+CLANGINCLUDES=-I$(CLANGDIR)/include -I$(CLANGDIR)/tools/clang/include -I$(CLANGBUILD)/include -I$(CLANGBUILD)/tools/clang/include
+
+CLANGINDIR=$(SRCDIR)/compilerplugins/clang
+# Cannot use $(WORKDIR), the plugin should survive even 'make clean', otherwise the rebuilt
+# plugin will cause cache misses with ccache.
+CLANGOUTDIR=$(SRCDIR)/compilerplugins/obj
+
+compilerplugins: $(CLANGOUTDIR) $(CLANGOUTDIR)/compileplugin.so
+
+compilerplugins-clean:
+ rm -rf $(CLANGOUTDIR)
+
+$(CLANGOUTDIR):
+ mkdir -p $(CLANGOUTDIR)
+
+CLANGOBJS=
+
+define clangbuildsrc
+$(3): $(2) $(SRCDIR)/compilerplugins/Makefile-clang.mk
+ $(CXX) $(CLANGCXXFLAGS) $(CLANGDEFS) $(CLANGINCLUDES) $(2) -fPIC -c -o $(3) -MMD -MT $(3) -MP -MF $(CLANGOUTDIR)/$(1).d
+
+-include $(CLANGOUTDIR)/$(1).d
+
+$(CLANGOUTDIR)/compileplugin.so: $(3)
+$(CLANGOUTDIR)/compileplugin.so: CLANGOBJS += $(3)
+endef
+
+$(foreach src, $(CLANGSRC), $(eval $(call clangbuildsrc,$(src),$(CLANGINDIR)/$(src),$(CLANGOUTDIR)/$(src:.cxx=.o))))
+
+$(CLANGOUTDIR)/compileplugin.so: $(CLANGOBJS)
+ $(CXX) -shared $(CLANGOBJS) -o $@
+
+# vim: set noet sw=4 ts=4: