[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