diff --git a/mk/suffix.mk b/mk/suffix.mk
index 60308b31dee878606dd7814ec9dba2a844409c4d..fecfd3aa9d3506dcc5881626dc4a430839201631 100644
--- a/mk/suffix.mk
+++ b/mk/suffix.mk
@@ -143,6 +143,8 @@ endif
 #-----------------------------------------------------------------------------
 # C-related suffix rules
 
+ifeq "$(UseGhcForCc)" ""
+
 %.$(way_)o : %.$(way_)s
 	@$(RM) $@
 	$(AS) $(AS_OPTS) -o $@ $< || ( $(RM) $@ && exit 1 )
@@ -155,21 +157,44 @@ endif
 	@$(RM) $@
 	$(CC) $(CC_OPTS) -c $< -o $@
 
-#%.$(way_)s : %.c
-#	@$(RM) $@
-#	$(CC) $(CC_OPTS) -S $< -o $@
+%.$(way_)s : %.c
+	@$(RM) $@
+	$(CC) $(CC_OPTS) -S $< -o $@
+
+else
 
-%.c : %.flex
+%.$(way_)o : %.$(way_)s
 	@$(RM) $@
-	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
-%.c : %.lex
+	$(HC) $(GHC_CC_OPTS) -c $< -o $@
+
+%.$(way_)o : %.c
 	@$(RM) $@
-	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
+	$(HC) $(GHC_CC_OPTS) -c $< -o $@
+
+%.$(way_)o : %.S
+	@$(RM) $@
+	$(HC) $(GHC_CC_OPTS) -c $< -o $@
+
+%.$(way_)s : %.c
+	@$(RM) $@
+	$(HC) $(GHC_CC_OPTS) -c $< -o $@
+
+endif
 
 # stubs are automatically generated and compiled by GHC
 %_stub.$(way_)o: %.o
 	@:
 
+# -----------------------------------------------------------------------------
+# Flex/lex
+
+%.c : %.flex
+	@$(RM) $@
+	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
+%.c : %.lex
+	@$(RM) $@
+	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
+
 #-----------------------------------------------------------------------------
 # Yacc stuff