+2021-04-22  Tom Tromey  <tom@tromey.com>
+
+       * Make-common.in (stamp-hw): New target.
+       (hw-config.h): Depend on stamp-hw.
+       (mostlyclean): Remove stamp-hw and hw-config.h.
+
 2021-04-22  Tom Tromey  <tom@tromey.com>
 
        * Make-common.in (mostlyclean): Now an alias for clean, not
 
 @GMAKE_TRUE@-include $(patsubst %.o, $(DEPDIR)/%.Po, $(all_object_files))
 
 # FIXME This is one very simple-minded way of generating the file hw-config.h
-hw-config.h: Makefile.in $(srccom)/Make-common.in config.status Makefile
+hw-config.h: stamp-hw ; @true
+stamp-hw: Makefile.in $(srccom)/Make-common.in config.status Makefile
        rm -f tmp-hw.h
        echo "/* generated by Makefile */" > tmp-hw.h
        sim_hw="$(SIM_HW)"; \
        done >> tmp-hw.h
        echo "  NULL," >> tmp-hw.h
        echo "};" >> tmp-hw.h
-       mv tmp-hw.h hw-config.h
+       $(SHELL) $(srcroot)/move-if-change tmp-hw.h hw-config.h
+       @echo stamp > stamp-hw
 
 test-hw-events: $(srccom)/hw-events.c libsim.a
        $(CC) $(ALL_CFLAGS) -DMAIN -o test-hw-events$(EXEEXT) \
 mostlyclean clean: $(SIM_EXTRA_CLEAN)
        rm -f *.[oa] *~ core
        rm -f run$(EXEEXT) libsim.a
+       rm -f hw-config.h stamp-hw
        rm -f gentmap targ-map.c targ-vals.h stamp-tvals
        if [ ! -f Make-common.in ] ; then \
                rm -f $(BUILT_SRC_FROM_COMMON) ; \