Avoid touching source files in profile-build
authorJoost VandeVondele <Joost.VandeVondele@gmail.com>
Sun, 20 Nov 2016 08:56:02 +0000 (09:56 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 20 Nov 2016 09:51:42 +0000 (10:51 +0100)
This refines the profile-build target to avoid 'touch'ing the sources,
keeping meaningful modification dates and avoiding editor warnings like vi's:

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?

Instead of touching sources, the (instrumented) object files are removed,
which has the same effect of rebuilding them in the next step.

As a side effect, this simplifies the Makefile a bit.

No functional change.

src/Makefile

index 935445e..457471a 100644 (file)
@@ -218,15 +218,11 @@ ifeq ($(COMP),clang)
 endif
 
 ifeq ($(comp),icc)
 endif
 
 ifeq ($(comp),icc)
-       profile_prepare = icc-profile-prepare
        profile_make = icc-profile-make
        profile_use = icc-profile-use
        profile_make = icc-profile-make
        profile_use = icc-profile-use
-       profile_clean = icc-profile-clean
 else
 else
-       profile_prepare = gcc-profile-prepare
        profile_make = gcc-profile-make
        profile_use = gcc-profile-use
        profile_make = gcc-profile-make
        profile_use = gcc-profile-use
-       profile_clean = gcc-profile-clean
 endif
 
 ifeq ($(KERNEL),Darwin)
 endif
 
 ifeq ($(KERNEL),Darwin)
@@ -424,30 +420,26 @@ help:
        @echo ""
 
 
        @echo ""
 
 
-.PHONY: build profile-build
-build:
-       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
+.PHONY: help build profile-build strip install clean objclean profileclean help \
+        config-sanity icc-profile-use icc-profile-make gcc-profile-use gcc-profile-make
+
+build: config-sanity
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
 
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
 
-profile-build:
-       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
-       @echo ""
-       @echo "Step 0/4. Preparing for profile build."
-       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_prepare)
+profile-build: config-sanity objclean profileclean
        @echo ""
        @echo ""
-       @echo "Step 1/4. Building executable for benchmark ..."
-       @touch *.cpp *.h syzygy/*.cpp syzygy/*.h
+       @echo "Step 1/4. Building instrumented executable ..."
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_make)
        @echo ""
        @echo "Step 2/4. Running benchmark for pgo-build ..."
        $(PGOBENCH) > /dev/null
        @echo ""
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_make)
        @echo ""
        @echo "Step 2/4. Running benchmark for pgo-build ..."
        $(PGOBENCH) > /dev/null
        @echo ""
-       @echo "Step 3/4. Building final executable ..."
-       @touch *.cpp *.h syzygy/*.cpp syzygy/*.h
+       @echo "Step 3/4. Building optimized executable ..."
+       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) objclean
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_use)
        @echo ""
        @echo "Step 4/4. Deleting profile data ..."
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_use)
        @echo ""
        @echo "Step 4/4. Deleting profile data ..."
-       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_clean)
+       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) profileclean
 
 strip:
        strip $(EXE)
 
 strip:
        strip $(EXE)
@@ -457,8 +449,18 @@ install:
        -cp $(EXE) $(BINDIR)
        -strip $(BINDIR)/$(EXE)
 
        -cp $(EXE) $(BINDIR)
        -strip $(BINDIR)/$(EXE)
 
-clean:
-       $(RM) $(EXE) $(EXE).exe *.o .depend *~ core bench.txt *.gcda ./syzygy/*.o ./syzygy/*.gcda
+#clean all
+clean: objclean profileclean
+       @rm -f .depend *~ core 
+
+# clean binaries and objects
+objclean:
+       @rm -f $(EXE) $(EXE).exe *.o ./syzygy/*.o
+
+# clean auxiliary profiling files
+profileclean:
+       @rm -rf profdir
+       @rm -f bench.txt *.gcda ./syzygy/*.gcda *.gcno ./syzygy/*.gcno
 
 default:
        help
 
 default:
        help
@@ -506,9 +508,6 @@ config-sanity:
 $(EXE): $(OBJS)
        $(CXX) -o $@ $(OBJS) $(LDFLAGS)
 
 $(EXE): $(OBJS)
        $(CXX) -o $@ $(OBJS) $(LDFLAGS)
 
-gcc-profile-prepare:
-       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) gcc-profile-clean
-
 gcc-profile-make:
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
        EXTRACXXFLAGS='-fprofile-generate' \
 gcc-profile-make:
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
        EXTRACXXFLAGS='-fprofile-generate' \
@@ -521,14 +520,8 @@ gcc-profile-use:
        EXTRALDFLAGS='-lgcov' \
        all
 
        EXTRALDFLAGS='-lgcov' \
        all
 
-gcc-profile-clean:
-       @rm -rf *.gcda *.gcno syzygy/*.gcda syzygy/*.gcno bench.txt
-
-icc-profile-prepare:
-       $(MAKE) ARCH=$(ARCH) COMP=$(COMP) icc-profile-clean
-       @mkdir profdir
-
 icc-profile-make:
 icc-profile-make:
+       @mkdir -p profdir
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
        EXTRACXXFLAGS='-prof-gen=srcpos -prof_dir ./profdir' \
        all
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
        EXTRACXXFLAGS='-prof-gen=srcpos -prof_dir ./profdir' \
        all
@@ -538,9 +531,6 @@ icc-profile-use:
        EXTRACXXFLAGS='-prof_use -prof_dir ./profdir' \
        all
 
        EXTRACXXFLAGS='-prof_use -prof_dir ./profdir' \
        all
 
-icc-profile-clean:
-       @rm -rf profdir bench.txt
-
 .depend:
        -@$(CXX) $(DEPENDFLAGS) -MM $(OBJS:.o=.cpp) > $@ 2> /dev/null
 
 .depend:
        -@$(CXX) $(DEPENDFLAGS) -MM $(OBJS:.o=.cpp) > $@ 2> /dev/null