mirror of
https://github.com/git/git
synced 2024-08-28 12:09:19 +00:00
Merge branch 'tt/profile-build-fix' into maint
* tt/profile-build-fix: Makefile: fix syntax for older make Fix build problems related to profile-directed optimization
This commit is contained in:
commit
655c3ed58b
17
INSTALL
17
INSTALL
|
@ -28,16 +28,25 @@ set up install paths (via config.mak.autogen), so you can write instead
|
|||
If you're willing to trade off (much) longer build time for a later
|
||||
faster git you can also do a profile feedback build with
|
||||
|
||||
$ make profile-all
|
||||
# make prefix=... install
|
||||
$ make prefix=/usr PROFILE=BUILD all
|
||||
# make prefix=/usr PROFILE=BUILD install
|
||||
|
||||
This will run the complete test suite as training workload and then
|
||||
rebuild git with the generated profile feedback. This results in a git
|
||||
which is a few percent faster on CPU intensive workloads. This
|
||||
may be a good tradeoff for distribution packagers.
|
||||
|
||||
Note that the profile feedback build stage currently generates
|
||||
a lot of additional compiler warnings.
|
||||
Or if you just want to install a profile-optimized version of git into
|
||||
your home directory, you could run:
|
||||
|
||||
$ make PROFILE=BUILD install
|
||||
|
||||
As a caveat: a profile-optimized build takes a *lot* longer since the
|
||||
git tree must be built twice, and in order for the profiling
|
||||
measurements to work properly, ccache must be disabled and the test
|
||||
suite has to be run using only a single CPU. In addition, the profile
|
||||
feedback build stage currently generates a lot of additional compiler
|
||||
warnings.
|
||||
|
||||
Issues of note:
|
||||
|
||||
|
|
55
Makefile
55
Makefile
|
@ -1771,6 +1771,26 @@ ifdef ASCIIDOC7
|
|||
export ASCIIDOC7
|
||||
endif
|
||||
|
||||
### profile feedback build
|
||||
#
|
||||
|
||||
# Can adjust this to be a global directory if you want to do extended
|
||||
# data gathering
|
||||
PROFILE_DIR := $(CURDIR)
|
||||
|
||||
ifeq ("$(PROFILE)","GEN")
|
||||
CFLAGS += -fprofile-generate=$(PROFILE_DIR) -DNO_NORETURN=1
|
||||
EXTLIBS += -lgcov
|
||||
export CCACHE_DISABLE=t
|
||||
V=1
|
||||
else
|
||||
ifneq ("$(PROFILE)","")
|
||||
CFLAGS += -fprofile-use=$(PROFILE_DIR) -fprofile-correction -DNO_NORETURN=1
|
||||
export CCACHE_DISABLE=t
|
||||
V=1
|
||||
endif
|
||||
endif
|
||||
|
||||
# Shell quote (do not use $(call) to accommodate ancient setups);
|
||||
|
||||
SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
|
||||
|
@ -1827,7 +1847,17 @@ export DIFF TAR INSTALL DESTDIR SHELL_PATH
|
|||
|
||||
SHELL = $(SHELL_PATH)
|
||||
|
||||
all:: shell_compatibility_test $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
|
||||
all:: shell_compatibility_test
|
||||
|
||||
ifeq "$(PROFILE)" "BUILD"
|
||||
ifeq ($(filter all,$(MAKECMDGOALS)),all)
|
||||
all:: profile-clean
|
||||
$(MAKE) PROFILE=GEN all
|
||||
$(MAKE) PROFILE=GEN -j1 test
|
||||
endif
|
||||
endif
|
||||
|
||||
all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
|
||||
ifneq (,$X)
|
||||
$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test -d '$p' -o '$p' -ef '$p$X' || $(RM) '$p';)
|
||||
endif
|
||||
|
@ -2555,7 +2585,11 @@ distclean: clean
|
|||
$(RM) configure
|
||||
$(RM) po/git.pot
|
||||
|
||||
clean:
|
||||
profile-clean:
|
||||
$(RM) $(addsuffix *.gcda,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
|
||||
$(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
|
||||
|
||||
clean: profile-clean
|
||||
$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
|
||||
builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
|
||||
$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
|
||||
|
@ -2585,7 +2619,7 @@ ifndef NO_TCLTK
|
|||
endif
|
||||
$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
|
||||
|
||||
.PHONY: all install clean strip
|
||||
.PHONY: all install profile-clean clean strip
|
||||
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
|
||||
.PHONY: FORCE cscope
|
||||
|
||||
|
@ -2695,18 +2729,3 @@ cover_db: coverage-report
|
|||
cover_db_html: cover_db
|
||||
cover -report html -outputdir cover_db_html cover_db
|
||||
|
||||
### profile feedback build
|
||||
#
|
||||
.PHONY: profile-all profile-clean
|
||||
|
||||
PROFILE_GEN_CFLAGS := $(CFLAGS) -fprofile-generate -DNO_NORETURN=1
|
||||
PROFILE_USE_CFLAGS := $(CFLAGS) -fprofile-use -fprofile-correction -DNO_NORETURN=1
|
||||
|
||||
profile-clean:
|
||||
$(RM) $(addsuffix *.gcda,$(object_dirs))
|
||||
$(RM) $(addsuffix *.gcno,$(object_dirs))
|
||||
|
||||
profile-all: profile-clean
|
||||
$(MAKE) CFLAGS="$(PROFILE_GEN_CFLAGS)" all
|
||||
$(MAKE) CFLAGS="$(PROFILE_GEN_CFLAGS)" -j1 test
|
||||
$(MAKE) CFLAGS="$(PROFILE_USE_CFLAGS)" all
|
||||
|
|
Loading…
Reference in a new issue