aboutsummaryrefslogtreecommitdiff
path: root/mk/precompiled-headers.mk
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-11-06 16:54:18 +0100
committerEelco Dolstra <edolstra@gmail.com>2019-11-07 10:12:35 +0100
commit5ff4d77f5585f9aad068fcc473393095e0640ae4 (patch)
treebd4bc1a09cd1acd8b57ddcb929dce3ef5a6150d1 /mk/precompiled-headers.mk
parent39a2e166dd316cf3bf248cb109dde3a95d753541 (diff)
Precompile headers
This cuts 'make install -j6' on my laptop from 170s to 134s.
Diffstat (limited to 'mk/precompiled-headers.mk')
-rw-r--r--mk/precompiled-headers.mk42
1 files changed, 42 insertions, 0 deletions
diff --git a/mk/precompiled-headers.mk b/mk/precompiled-headers.mk
new file mode 100644
index 000000000..779389b26
--- /dev/null
+++ b/mk/precompiled-headers.mk
@@ -0,0 +1,42 @@
+PRECOMPILE_HEADERS ?= 1
+
+print-var-help += \
+ echo " PRECOMPILE_HEADERS ($(PRECOMPILE_HEADERS)): Whether to use precompiled headers to speed up the build";
+
+GCH = $(buildprefix)precompiled-headers.h.gch
+
+$(GCH): precompiled-headers.h
+ @rm -f $@
+ @mkdir -p "$(dir $@)"
+ $(trace-gen) $(CXX) -x c++-header -o $@ $^ $(GLOBAL_CXXFLAGS)
+
+PCH = $(buildprefix)precompiled-headers.h.pch
+
+$(PCH): precompiled-headers.h
+ @rm -f $@
+ @mkdir -p "$(dir $@)"
+ $(trace-gen) $(CXX) -x c++-header -o $@ $^ $(GLOBAL_CXXFLAGS)
+
+clean-files += $(GCH) $(PCH)
+
+ifeq ($(PRECOMPILE_HEADERS), 1)
+
+ ifeq ($(CXX), g++)
+
+ GLOBAL_CXXFLAGS_PCH += -include $(buildprefix)precompiled-headers.h -Winvalid-pch
+
+ GLOBAL_ORDER_AFTER += $(GCH)
+
+ else ifeq ($(CXX), clang++)
+
+ GLOBAL_CXXFLAGS_PCH += -include-pch $(PCH) -Winvalid-pch
+
+ GLOBAL_ORDER_AFTER += $(PCH)
+
+ else
+
+ $(error Don't know how to precompile headers on $(CXX))
+
+ endif
+
+endif