+# Compiling the cmm files
+
+# ToDo: should we really include Rts.h here? Required for GNU_ATTRIBUTE().
+SRC_HC_OPTS += \
+ -\#include Prelude.h \
+ -\#include Rts.h \
+ -\#include RtsFlags.h \
+ -\#include RtsUtils.h \
+ -\#include StgRun.h \
+ -\#include Schedule.h \
+ -\#include Printer.h \
+ -\#include Sanity.h \
+ -\#include Storage.h \
+ -\#include SchedAPI.h \
+ -\#include Timer.h \
+ -\#include Itimer.h \
+ -\#include ProfHeap.h \
+ -\#include LdvProfile.h \
+ -\#include Profiling.h \
+ -\#include Apply.h
+
+ifeq "$(Windows)" "YES"
+PrimOps_HC_OPTS += -\#include '<windows.h>' -\#include win32/AsyncIO.h
+endif
+
+# Cmm must be compiled via-C for now, because the NCG can't handle loops
+SRC_HC_OPTS += -fvia-C
+
+# We *want* type-checking of hand-written cmm.
+SRC_HC_OPTS += -dcmm-lint
+
+# .cmm files depend on all the .h files, to a first approximation.
+%.$(way_)o : %.cmm $(H_FILES)
+ $(HC_PRE_OPTS)
+ $(HC) $(HC_OPTS) -c $< -o $@
+ $(HC_POST_OPTS)
+
+%.$(way_)hc : %.cmm $(H_FILES)
+ $(HC_PRE_OPTS)
+ $(HC) $(HC_OPTS) -C $< -o $@
+ $(HC_POST_OPTS)
+
+%.$(way_)s : %.cmm $(H_FILES)
+ $(HC_PRE_OPTS)
+ $(HC) $(HC_OPTS) -S $< -o $@
+ $(HC_POST_OPTS)
+
+#-----------------------------------------------------------------------------