diff --git a/rts/ghc.mk b/rts/ghc.mk
index 0102bed44cfe0abe45c77a78fecb71b1e3d29ee5..a14da3bb28c0262b022f14615a92b473edf7310a 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -63,7 +63,6 @@ endif
 rts_AUTO_APPLY_CMM = rts/dist/build/AutoApply.cmm
 
 $(rts_AUTO_APPLY_CMM): $(GENAPPLY_INPLACE)
-	"$(RM)" $(RM_OPTS) $@
 	"$(GENAPPLY_INPLACE)" >$@
 
 rts/dist/build/sm/Evac_thr.c : rts/sm/Evac.c
diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk
index 962f07b3dfcfe83783ecee43ebc6844b14d5e643..2ab503f1b6a33018adf1325f5bfd0a03a906f85b 100644
--- a/rules/build-dependencies.mk
+++ b/rules/build-dependencies.mk
@@ -23,16 +23,16 @@ ifneq "$$($1_$2_NO_BUILD_DEPS)" "YES"
 
 $$($1_$2_depfile) : $$(MKDIRHIER) $$(MKDEPENDC) $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS) $$($1_$2_HC_MK_DEPEND_DEP) $$($1_$2_C_FILES) $$($1_$2_S_FILES)
 	"$$(MKDIRHIER)" $1/$2/build
-	"$$(RM)" $$(RM_OPTS) $$@ $$@.tmp
+	"$$(RM)" $$(RM_OPTS) $$@.tmp
 	touch $$@.tmp
 ifneq "$$($1_$2_C_SRCS)$$($1_$2_S_SRCS)" ""
-	"$$(MKDEPENDC)" -f $$($1_$2_depfile).tmp $$($1_MKDEPENDC_OPTS) $$(foreach way,$$($1_WAYS),-s $$(way)) -- $$($1_$2_v_ALL_CC_OPTS) -- $$($1_$2_C_FILES) $$($1_$2_S_FILES) || ( "$$(RM)" $$(RM_OPTS) $$@; exit 1 )
+	"$$(MKDEPENDC)" -f $$($1_$2_depfile).tmp $$($1_MKDEPENDC_OPTS) $$(foreach way,$$($1_WAYS),-s $$(way)) -- $$($1_$2_v_ALL_CC_OPTS) -- $$($1_$2_C_FILES) $$($1_$2_S_FILES)
 	sed -e "s|$1/\([^ :]*o[ :]\)|$1/$2/build/\1|g" -e "s|$$(TOP)/||" <$$($1_$2_depfile).tmp >$$($1_$2_depfile)
 endif
 ifneq "$$($1_$2_HS_SRCS)" ""
 	"$$($1_$2_HC_MK_DEPEND)" -M $$($1_$2_MKDEPENDHS_FLAGS) \
 	    $$(filter-out -split-objs, $$($1_$2_v_ALL_HC_OPTS)) \
-	    $$($1_$2_HS_SRCS) || ( "$$(RM)" $$(RM_OPTS) $$@; exit 1 )
+	    $$($1_$2_HS_SRCS)
 endif
 	echo "$1_$2_depfile_EXISTS = YES" >> $$@
 ifneq "$$($1_$2_SLASH_MODS)" ""
diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
index 8994b2c2f41eaeff2c2a06655c67dbd02c1f1815..e67d301de6b8b47309fa3e6d92de197f2dc83cc1 100644
--- a/rules/build-package-way.mk
+++ b/rules/build-package-way.mk
@@ -41,7 +41,6 @@ endif
 ifeq "$3" "dyn"
 # Link a dynamic library
 $$($1_$2_$3_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_dyn_C_OBJS) $$($1_$2_dyn_S_OBJS) $$(ALL_RTS_LIBS) $$($1_$2_$3_DEPS_LIBS) $$($1_$2_EXTRA_OBJS)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$($1_$2_HC)" $$($1_$2_dyn_C_OBJS) $$($1_$2_dyn_S_OBJS) $$($1_$2_$3_HS_OBJS) \
          `$$($1_$2_$3_MKSTUBOBJS)` $$($1_$2_EXTRA_OBJS) \
          -shared -dynamic -dynload deploy \
@@ -52,11 +51,11 @@ else
 ifeq "$$($1_$2_SplitObjs)" "YES"
 $$($1_$2_$3_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
 	"$$(RM)" $$(RM_OPTS) $$@
-	(echo $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` $$($1_$2_EXTRA_OBJS); find $$(patsubst %.$$($3_osuf),%_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ || "$$(RM)" $$(RM_OPTS) $$@
+	(echo $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` $$($1_$2_EXTRA_OBJS); find $$(patsubst %.$$($3_osuf),%_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@
 else
 $$($1_$2_$3_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
 	"$$(RM)" $$(RM_OPTS) $$@
-	echo $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_$3_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` $$($1_$2_EXTRA_OBJS) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ || "$$(RM)" $$(RM_OPTS) $$@
+	echo $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_$3_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` $$($1_$2_EXTRA_OBJS) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@
 endif
 endif
 
@@ -77,7 +76,6 @@ ifneq "$4" "0"
 BINDIST_LIBS += $$($1_$2_GHCI_LIB)
 endif
 $$($1_$2_GHCI_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(LD)" -r -o $$@ $$(EXTRA_LD_OPTS) $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` $$($1_$2_EXTRA_OBJS)
 
 $(call all-target,$1_$2,$$($1_$2_GHCI_LIB))
diff --git a/rules/build-perl.mk b/rules/build-perl.mk
index 57406766ca1f020a442ea57cd0ce7f99a25eec7c..982a2b699df39b8b1999f908b3d2091e24e4ed9b 100644
--- a/rules/build-perl.mk
+++ b/rules/build-perl.mk
@@ -39,7 +39,6 @@ ifeq "$(findstring clean,$(MAKECMDGOALS))" ""
 ifneq "$$(BINDIST)" "YES"
 $1/$2/$$($1_$2_PROG).prl: $1/$$($1_PERL_SRC) $$(UNLIT)
 	"$$(MKDIRHIER)" $1/$2
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(UNLIT)" $$(UNLIT_OPTS) $$< $$@
 
 $1/$2/$$($1_$2_PROG): $1/$2/$$($1_$2_PROG).prl
@@ -51,7 +50,6 @@ $1/$2/$$($1_$2_PROG): $1/$2/$$($1_$2_PROG).prl
 
 $$($1_$2_INPLACE): $1/$2/$$($1_$2_PROG)
 	"$$(MKDIRHIER)" $$(dir $$@)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(CP)" $$< $$@
 	$$(EXECUTABLE_FILE) $$@
 endif
diff --git a/rules/c-suffix-rules.mk b/rules/c-suffix-rules.mk
index f3e3ab6ca023da89f7899e904dd4ce5bee7fe4cc..5b4cc6e914e1cb6371830783cb447ecc8c52237b 100644
--- a/rules/c-suffix-rules.mk
+++ b/rules/c-suffix-rules.mk
@@ -21,53 +21,42 @@ define c-suffix-rules
 ifeq "$4 $$(BootingFromHc)" "YES NO"
 
 $1/$2/build/%.$$($3_osuf) : $1/%.c $$(MKDIRHIER) $$($1_$2_HC_DEP)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(MKDIRHIER)" $$(dir $$@)
 	"$$($1_$2_HC)" $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
 
 $1/$2/build/%.$$($3_osuf) : $1/$2/build/%.c $$($1_$2_HC_DEP)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$($1_$2_HC)" $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
 
 $1/$2/build/%.$$($3_osuf) : $1/$2/build/%.$$($3_way_)s $$($1_$2_HC_DEP)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$($1_$2_HC)" $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
 
 $1/$2/build/%.$$($3_osuf) : $1/%.S $$(MKDIRHIER) $$($1_$2_HC_DEP)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(MKDIRHIER)" $$(dir $$@)
 	"$$($1_$2_HC)" $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
 
 $1/$2/build/%.$$($3_way_)s : $1/$2/build/%.c $$($1_$2_HC_DEP)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$($1_$2_HC)" $$($1_$2_$3_GHC_CC_OPTS) -S $$< -o $$@
 
 $1/$2/build/%.$$($3_way_)s : $1/%.c $$($1_$2_HC_DEP)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$($1_$2_HC)" $$($1_$2_$3_GHC_CC_OPTS) -S $$< -o $$@
 
 else
 
 $1/$2/build/%.$$($3_osuf) : $1/%.c $$(MKDIRHIER)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(MKDIRHIER)" $$(dir $$@)
 	"$$(CC)" $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
 
 $1/$2/build/%.$$($3_osuf) : $1/$2/build/%.c
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(CC)" $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
 
 $1/$2/build/%.$$($3_osuf) : $1/$2/build/%.$$($3_way_)s
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(AS)" $$($1_$2_$3_ALL_AS_OPTS) -o $$@ $$<
 
 $1/$2/build/%.$$($3_osuf) : $1/%.S $$(MKDIRHIER)
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(MKDIRHIER)" $$(dir $$@)
 	"$$(CC)" $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
 
 $1/$2/build/%.$$($3_way_)s : $1/$2/build/%.c
-	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(CC)" $$($1_$2_$3_ALL_CC_OPTS) -S $$< -o $$@
 
 endif