diff options
author | Ian Lynagh <ian@well-typed.com> | 2013-05-09 20:44:08 +0100 |
---|---|---|
committer | Ian Lynagh <ian@well-typed.com> | 2013-05-09 20:44:08 +0100 |
commit | dca18dc7bc679a2fe2ed82e1b63129056bd58933 (patch) | |
tree | 6d5a847654b2ae859432c94a4cd2c3583ab40479 /rules | |
parent | ba00c33b8b2116a8f3ee13d28e5b5085ff265d58 (diff) | |
download | haskell-dca18dc7bc679a2fe2ed82e1b63129056bd58933.tar.gz |
Generate dependencies for .cmm files properly
Diffstat (limited to 'rules')
-rw-r--r-- | rules/build-dependencies.mk | 14 | ||||
-rw-r--r-- | rules/c-sources.mk | 5 |
2 files changed, 13 insertions, 6 deletions
diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk index 9de49aa513..02640bf1ab 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 2f0eb9821d..309f9a0e88 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 |