summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@suse.cz>2012-07-02 17:41:26 +0200
committerLuboš Luňák <l.lunak@suse.cz>2012-12-10 14:46:45 +0100
commit24ae46df5ed90c4f563e8acfbf66ce3bb14e6f5d (patch)
tree4fdfa883c107febcc36608bb1487a7ee0a9bb0d3 /solenv
parentac893720de5b0815d57b87ae5f9a08764df08a93 (diff)
PCH support for Clang compiler
Change-Id: I17a9f3c0b16cef7ea4ef3db938337545beef3609
Diffstat (limited to 'solenv')
-rw-r--r--solenv/gbuild/platform/com_GCC_class.mk37
-rw-r--r--solenv/gbuild/platform/com_GCC_defs.mk3
2 files changed, 40 insertions, 0 deletions
diff --git a/solenv/gbuild/platform/com_GCC_class.mk b/solenv/gbuild/platform/com_GCC_class.mk
index 9f2d15ddea5c..563ec835c98a 100644
--- a/solenv/gbuild/platform/com_GCC_class.mk
+++ b/solenv/gbuild/platform/com_GCC_class.mk
@@ -105,6 +105,7 @@ $(call gb_Helper_abbreviate_dirs,\
$(gb_cxx_dep_generation_options) \
-I$(dir $(3)) \
$(INCLUDE) \
+ $(PCHFLAGS) \
$(gb_cxx_dep_copy) \
)
endef
@@ -136,6 +137,42 @@ $(call gb_Helper_abbreviate_dirs,\
-o $(call gb_SrsPartTarget_get_dep_target,$(1)))
endef
+ifeq ($(COM_GCC_IS_CLANG),TRUE)
+# PrecompiledHeader class
+
+gb_PrecompiledHeader_get_enableflags = -include-pch $(call gb_PrecompiledHeader_get_target,$(1))
+
+define gb_PrecompiledHeader__command
+$(call gb_Output_announce,$(2),$(true),PCH,1)
+$(call gb_Helper_abbreviate_dirs,\
+ mkdir -p $(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target,$(2))) && \
+ $(gb_CXX) \
+ -x c++-header \
+ $(4) $(5) \
+ $(gb_COMPILERDEPFLAGS) \
+ $(6) \
+ -c $(patsubst %.cxx,%.hxx,$(3)) \
+ -o$(1)) $(call gb_create_deps,$(call gb_PrecompiledHeader_get_dep_target,$(2)),$(1),$(3))
+endef
+
+# NoexPrecompiledHeader class
+
+gb_NoexPrecompiledHeader_get_enableflags = -include-pch $(call gb_PrecompiledHeader_get_target,$(1))
+
+define gb_NoexPrecompiledHeader__command
+$(call gb_Output_announce,$(2),$(true),PCH,1)
+$(call gb_Helper_abbreviate_dirs,\
+ mkdir -p $(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target,$(2))) && \
+ $(gb_CXX) \
+ -x c++-header \
+ $(4) $(5) \
+ $(gb_COMPILERDEPFLAGS) \
+ $(6) \
+ -c $(patsubst %.cxx,%.hxx,$(3)) \
+ -o$(1)) $(call gb_create_deps,$(call gb_PrecompiledHeader_get_dep_target,$(2)),$(1),$(3))
+endef
+endif
+
# YaccTarget class
ifeq ($(ANCIENT_BISON),YES)
diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk
index 973f47685b92..ad89778e5d41 100644
--- a/solenv/gbuild/platform/com_GCC_defs.mk
+++ b/solenv/gbuild/platform/com_GCC_defs.mk
@@ -124,6 +124,9 @@ gb_LinkTarget_NOEXCEPTIONFLAGS := \
-DEXCEPTIONS_OFF \
-fno-exceptions \
+gb_PrecompiledHeader_EXCEPTIONFLAGS := $(gb_LinkTarget_EXCEPTIONFLAGS)
+
+gb_NoexPrecompiledHeader_NOEXCEPTIONFLAGS := $(gb_LinkTarget_NOEXCEPTIONFLAGS)
# optimization level
gb_COMPILEROPTFLAGS := $(gb_COMPILERDEFAULTOPTFLAGS)