[commit: ghc] master: Generate dependencies for .cmm files properly (dca18dc)

Ian Lynagh igloo at earth.li
Thu May 9 22:07:19 CEST 2013


Repository : http://darcs.haskell.org/ghc.git/

On branch  : master

https://github.com/ghc/ghc/commit/dca18dc7bc679a2fe2ed82e1b63129056bd58933

>---------------------------------------------------------------

commit dca18dc7bc679a2fe2ed82e1b63129056bd58933
Author: Ian Lynagh <ian at well-typed.com>
Date:   Thu May 9 20:44:08 2013 +0100

    Generate dependencies for .cmm files properly

>---------------------------------------------------------------

 rts/ghc.mk                  |  9 ++++++---
 rules/build-dependencies.mk | 14 ++++++++++----
 rules/c-sources.mk          |  5 +++--
 3 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/rts/ghc.mk b/rts/ghc.mk
index 5164ca4..85f72b4 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -484,9 +484,12 @@ endif
 rts_WAYS_DASHED = $(subst $(space),,$(patsubst %,-%,$(strip $(rts_WAYS))))
 rts_dist_depfile_base = rts/dist/build/.depend$(rts_WAYS_DASHED)
 
-rts_dist_C_SRCS  = $(rts_C_SRCS) $(rts_thr_EXTRA_C_SRCS)
-rts_dist_S_SRCS =  $(rts_S_SRCS)
-rts_dist_C_FILES = $(rts_C_SRCS) $(rts_thr_EXTRA_C_SRCS) $(rts_S_SRCS)
+rts_dist_C_SRCS    = $(rts_C_SRCS) $(rts_thr_EXTRA_C_SRCS)
+rts_dist_S_SRCS    = $(rts_S_SRCS)
+rts_dist_CMM_SRCS  = $(rts_CMM_SRCS)
+rts_dist_C_FILES   = $(rts_dist_C_SRCS)
+rts_dist_S_FILES   = $(rts_dist_S_SRCS)
+rts_dist_CMM_FILES = $(rts_dist_CMM_SRCS)
 
 # Hack: we define every way-related option here, so that we get (hopefully)
 # a superset of the dependencies.  To do this properly, we should generate
diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk
index 9de49aa..02640bf 100644
--- a/rules/build-dependencies.mk
+++ b/rules/build-dependencies.mk
@@ -65,14 +65,14 @@ endif
 # includes files.
 $$($1_$2_depfile_c_asm) : $$(includes_H_CONFIG) $$(includes_H_PLATFORM)
 
-$$($1_$2_depfile_c_asm) : $$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES) | $$$$(dir $$$$@)/.
+$$($1_$2_depfile_c_asm) : $$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES) $$($1_$2_CMM_FILES) | $$$$(dir $$$$@)/.
 	$$(call removeFiles,$$@.tmp)
-ifneq "$$(strip $$($1_$2_C_FILES_DEPS)$$($1_$2_S_FILES))" ""
+ifneq "$$(strip $$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES)) $$($1_$2_CMM_FILES))" ""
 # We ought to actually do this for each way in $$($1_$2_WAYS), but then
 # it takes a long time to make the C deps for the RTS (30 seconds rather
 # than 3), so instead we just pass the list of ways in and let addCFileDeps
 # copy the deps for each way on the assumption that they are the same
-	$$(foreach f,$$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES), \
+	$$(foreach f,$$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES) $$($1_$2_CMM_FILES), \
 	    $$(call addCFileDeps,$1,$2,$$($1_$2_depfile_c_asm),$$f,$$($1_$2_WAYS)))
 	$$(call removeFiles,$$@.bit)
 endif
@@ -135,9 +135,15 @@ endef
 #	 need to do the substitution case-insensitively on Windows. But
 #    the s///i modifier isn't portable, so we set CASE_INSENSITIVE_SED
 #    to "i" on Windows and "" on any other platform.
+
+# We use this not only for .c files, but also for .S and .cmm files.
+# As gcc doesn't know what a .cmm file is, it treats it as a linker
+# input and ignores it. We therefore tell gcc that all files are C
+# files with "-x c" so that it actually processes them all.
+
 define addCFileDeps
 
-	$(CPP) $($1_$2_MKDEPENDC_OPTS) $($1_$2_$(firstword $($1_$2_WAYS))_ALL_CC_OPTS) $($(basename $4)_CC_OPTS) -MM $4 -MF $3.bit
+	$(CPP) $($1_$2_MKDEPENDC_OPTS) $($1_$2_$(firstword $($1_$2_WAYS))_ALL_CC_OPTS) $($(basename $4)_CC_OPTS) -MM -x c $4 -MF $3.bit
 	$(foreach w,$5,sed -e 's|\\|/|g' -e 's| /$$| \\|' -e "1s|\.o|\.$($w_osuf)|" -e "1s|^|$(dir $4)|" -e "1s|$1/|$1/$2/build/|" -e "1s|$2/build/$2/build|$2/build|g" -e "s|$(TOP)/||g$(CASE_INSENSITIVE_SED)" $3.bit >> $3.tmp &&) true
 endef
 
diff --git a/rules/c-sources.mk b/rules/c-sources.mk
index 2f0eb98..309f9a0 100644
--- a/rules/c-sources.mk
+++ b/rules/c-sources.mk
@@ -11,6 +11,7 @@
 # -----------------------------------------------------------------------------
 
 define c-sources  # args: $1 = dir, $2 = distdir
-$1_$2_C_FILES = $$(patsubst %,$1/%,$$($1_$2_C_SRCS))
-$1_$2_S_FILES = $$(patsubst %,$1/%,$$($1_$2_S_SRCS))
+$1_$2_C_FILES   = $$(patsubst %,$1/%,$$($1_$2_C_SRCS))
+$1_$2_S_FILES   = $$(patsubst %,$1/%,$$($1_$2_S_SRCS))
+$1_$2_CMM_FILES = $$(patsubst %,$1/%,$$($1_$2_CMM_SRCS))
 endef





More information about the ghc-commits mailing list