Don't bother with the $@.tmp hack in the rule for building libraries,
.DELETE_ON_ERROR (in suffix.mk) should do the job for us.
ifeq "$(ArSupportsInput)" ""
define BUILD_LIB
$(RM) $@ $@.tmp
-(echo $(STUBOBJS) $(EXTRA_OBJS); $(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o') | xargs ar q $@.tmp
-$(RANLIB) $@.tmp
-$(MV) $@.tmp $@
+(echo $(STUBOBJS) $(EXTRA_OBJS); $(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o') | xargs ar q $@
+$(RANLIB) $@
endef
else
define BUILD_LIB
echo $(STUBOBJS) > $@.list
echo $(EXTRA_OBJS) >> $@.list
$(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' >> $@.list
-$(AR) $(AR_OPTS) $@.tmp $(ArSupportsInput) $@.list
+$(AR) $(AR_OPTS) $@ $(ArSupportsInput) $@.list
$(RM) $@.list
-$(RANLIB) $@.tmp
-$(MV) $@.tmp $@
+$(RANLIB) $@
endef
endif