From 24305371c7eb7759901913e777f230bb4ce73df1 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sun, 3 Mar 2019 16:40:07 +0100 Subject: [PATCH] Add pgo builds with GCC and LLVM to Makefile --- Makefile | 151 +++++++++++++++++++++++++++++------ configure | 33 ++++++-- profile/128.bin | Bin 0 -> 32768 bytes profile/README.md | 4 + profile/catharsis_theory.bin | Bin 0 -> 4096 bytes 5 files changed, 158 insertions(+), 30 deletions(-) create mode 100644 profile/128.bin create mode 100644 profile/README.md create mode 100644 profile/catharsis_theory.bin diff --git a/Makefile b/Makefile index c3a70ddad..47e1be9bf 100644 --- a/Makefile +++ b/Makefile @@ -49,10 +49,17 @@ ifdef CXXFLAGS else CXXFLAGS:= -O2 -x c++ endif + CXXFLAGS+= -Wall -Wextra -Wno-unused-parameter -Wno-ignored-qualifiers + ifdef HAVE_GCC CXXFLAGS+= -Wno-multichar -Wunused -fno-rtti -Woverloaded-virtual -Wnon-virtual-dtor -std=c++14 endif + +ifdef HAVE_CLANG + CXXFLAGS+= -Wno-multichar -Wunused -fno-rtti -Woverloaded-virtual -Wnon-virtual-dtor -std=c++14 +endif + ifdef CLANG_WARNINGS CXXFLAGS+= -Weverything -Wno-c++17-extensions -Wno-c++98-compat -Wno-c++98-compat-pedantic \ -Wno-double-promotion -Wno-switch-enum -Wno-conversion -Wno-covered-switch-default \ @@ -62,23 +69,60 @@ ifdef CLANG_WARNINGS endif ifdef PROFILE - PROF:= -g -pg -fprofile-arcs -ftest-coverage + PROF:= -pg -fprofile-arcs -ftest-coverage CXXFLAGS+= $(PROF) +endif + +ifdef DEBUG + CXXFLAGS += -g else ifdef HAVE_GCC CXXFLAGS+= -fomit-frame-pointer endif -endif + ifdef HAVE_CLANG + CXXFLAGS+= -fomit-frame-pointer + endif +endif ####################################################################### # Misc stuff - you should never have to edit this # ####################################################################### -EXECUTABLE := stella$(EXEEXT) +EXECUTABLE := stella$(EXEEXT) +EXECUTABLE_PROFILE_GENERATE := stella-pgo-generate$(EXEEXT) +EXECUTABLE_PROFILE_USE := stella-pgo$(EXEEXT) + +PROFILE_DIR = $(CURDIR)/profile +PROFILE_OUT = $(PROFILE_DIR)/out +PROFILE_STAMP = profile.stamp + +CXXFLAGS_PROFILE_GENERATE = $(CXXFLAGS) +CXXFLAGS_PROFILE_USE = $(CXXFLAGS) +LDFLAGS_PROFILE_GENERATE = $(LDFLAGS) +STELLA_PROFILE_GENERATE = $(BINARY_LOADER) ./$(EXECUTABLE_PROFILE_GENERATE) -profile \ + $(PROFILE_DIR)/128.bin:10 \ + $(PROFILE_DIR)/catharsis_theory.bin:60 + +ifdef HAVE_CLANG + CXXFLAGS_PROFILE_GENERATE += -fprofile-generate=$(PROFILE_OUT) + CXXFLAGS_PROFILE_USE += -fprofile-use=$(PROFILE_OUT) + LDFLAGS_PROFILE_GENERATE += -fprofile-generate + STELLA_PROFILE_GENERATE := \ + LLVM_PROFILE_FILE="$(PROFILE_OUT)/default.profraw" $(STELLA_PROFILE_GENERATE) && \ + $(LLVM_PROFDATA) merge -o $(PROFILE_OUT)/default.profdata $(PROFILE_OUT)/default.profraw +endif + +ifdef HAVE_GCC + CXXFLAGS_PROFILE_GENERATE += -fprofile-generate -fprofile-dir=$(PROFILE_OUT) + CXXFLAGS_PROFILE_USE += -fprofile-use -fprofile-dir=$(PROFILE_OUT) + LDFLAGS_PROFILE_GENERATE += -fprofile-generate + LDFLAGS_PROFILE_USE += -fprofile-generate +endif all: $(EXECUTABLE) +pgo: $(EXECUTABLE_PROFILE_USE) ###################################################################### # Various minor settings @@ -119,57 +163,118 @@ CPPFLAGS:= $(DEFINES) $(INCLUDES) DEPDIRS = $(addsuffix /$(DEPDIR),$(MODULE_DIRS)) DEPFILES = +OBJS_PROFILE_GENERATE=$(OBJS:.o=.pgen.o) +OBJS_PROFILE_USE=$(OBJS:.o=.pgo.o) + # The build rule for the Stella executable -$(EXECUTABLE): $(OBJS) +$(EXECUTABLE): $(OBJS) $(LD) $(LDFLAGS) $(PRE_OBJS_FLAGS) $+ $(POST_OBJS_FLAGS) $(LIBS) $(PROF) -o $@ +$(EXECUTABLE_PROFILE_GENERATE): $(OBJS_PROFILE_GENERATE) + $(LD) $(LDFLAGS_PROFILE_GENERATE) $(PRE_OBJS_FLAGS) $+ $(POST_OBJS_FLAGS) $(LIBS) $(PROF) -o $@ + +$(EXECUTABLE_PROFILE_USE): $(OBJS_PROFILE_USE) + $(LD) $(LDFLAGS_PROFILE_USE) $(PRE_OBJS_FLAGS) $+ $(POST_OBJS_FLAGS) $(LIBS) $(PROF) -o $@ + distclean: clean $(RM_REC) $(DEPDIRS) $(RM) build.rules config.h config.mak config.log clean: - $(RM) $(OBJS) $(EXECUTABLE) + -$(RM) -fr \ + $(OBJS) $(OBJS_PROFILE_GENERATE) $(OBJS_PROFILE_USE) \ + $(EXECUTABLE) $(EXECUTABLE_PROFILE_GENERATE) $(EXECUTABLE_PROFILE_USE) \ + $(PROFILE_OUT) $(PROFILE_STAMP) .PHONY: all clean dist distclean .SUFFIXES: .cxx +define create_depdir +$(MKDIR) $(*D)/$(DEPDIR) +endef + +define merge_dep +$(ECHO) "$(*D)/" > $(*D)/$(DEPDIR)/$(*F).d +$(CAT) "$(*D)/$(DEPDIR)/$(*F).d2" >> "$(*D)/$(DEPDIR)/$(*F).d" +$(RM) "$(*D)/$(DEPDIR)/$(*F).d2" +endef ifndef CXX_UPDATE_DEP_FLAG # If you use GCC, disable the above and enable this for intelligent # dependency tracking. CXX_UPDATE_DEP_FLAG = -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d2" -.cxx.o: - $(MKDIR) $(*D)/$(DEPDIR) - $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o - $(ECHO) "$(*D)/" > $(*D)/$(DEPDIR)/$(*F).d - $(CAT) "$(*D)/$(DEPDIR)/$(*F).d2" >> "$(*D)/$(DEPDIR)/$(*F).d" - $(RM) "$(*D)/$(DEPDIR)/$(*F).d2" -.c.o: - $(MKDIR) $(*D)/$(DEPDIR) - $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o - $(ECHO) "$(*D)/" > $(*D)/$(DEPDIR)/$(*F).d - $(CAT) "$(*D)/$(DEPDIR)/$(*F).d2" >> "$(*D)/$(DEPDIR)/$(*F).d" - $(RM) "$(*D)/$(DEPDIR)/$(*F).d2" +%.o: %.cxx + $(create_depdir) + $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $@ + $(merge_dep) + +%.o: %.c + $(create_depdir) + $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $@ + $(merge_dep) + +%.pgen.o: %.cxx + $(create_depdir) + $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_GENERATE) $(CPPFLAGS) -c $(<) -o $@ + $(merge_dep) + +%.pgen.o: %.cxx + $(create_depdir) + $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_GENERATE) $(CPPFLAGS) -c $(<) -o $@ + $(merge_dep) + +%.pgo.o: %.cxx $(PROFILE_STAMP) + $(create_depdir) + $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_USE) $(CPPFLAGS) -c $(<) -o $@ + $(merge_dep) + +%.pgo.o: %.cxx $(PROFILE_STAMP) + $(create_depdir) + $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_USE) $(CPPFLAGS) -c $(<) -o $@ + $(merge_dep) + else # If you even have GCC 3.x, you can use this build rule, which is safer; the above # rule can get you into a bad state if you Ctrl-C at the wrong moment. # Also, with this GCC inserts additional dummy rules for the involved headers, # which ensures a smooth compilation even if said headers become obsolete. -.cxx.o: - $(MKDIR) $(*D)/$(DEPDIR) - $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o +%.o: %.cxx + $(create_depdir) + $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $@ + +%.o: %.c + $(create_depdir) + $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $@ + +%.pgen.o: %.cxx + $(create_depdir) + $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_GENERATE) $(CPPFLAGS) -c $(<) -o $@ + +%.pgen.o: %.c + $(create_depdir) + $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_GENERATE) $(CPPFLAGS) -c $(<) -o $@ + +%.pgo.o: %.cxx $(PROFILE_STAMP) + $(create_depdir) + $(CXX) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_USE) $(CPPFLAGS) -c $(<) -o $@ + +%.pgo.o: %.c $(PROFILE_STAMP) + $(create_depdir) + $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS_PROFILE_USE) $(CPPFLAGS) -c $(<) -o $@ -.c.o: - $(MKDIR) $(*D)/$(DEPDIR) - $(CC) $(CXX_UPDATE_DEP_FLAG) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o endif # Include the dependency tracking files. We add /dev/null at the end # of the list to avoid a warning/error if no .d file exist -include $(wildcard $(addsuffix /*.d,$(DEPDIRS))) /dev/null +$(PROFILE_STAMP): $(EXECUTABLE_PROFILE_GENERATE) + -rm -fr $(PROFILE_OUT) + $(STELLA_PROFILE_GENERATE) + touch $(PROFILE_STAMP) + # check if configure has been run or has been changed since last run config.mak: $(srcdir)/configure @echo "You need to run ./configure before you can run make" diff --git a/configure b/configure index d188ba94a..482bf888b 100755 --- a/configure +++ b/configure @@ -24,6 +24,7 @@ _build_joystick=yes _build_cheats=yes _build_static=no _build_profile=no +_build_debug=no # more defaults _ranlib=ranlib @@ -204,6 +205,8 @@ Optional Features: --disable-static --enable-profile build binary with profiling info [disabled] --disable-profile + --enable-debug build with debugging symbols [disabled] + --disable-debug --force-builtin-libpng force use of built-in libpng library [auto] Optional Libraries: @@ -241,6 +244,8 @@ for ac_option in $@; do --disable-static) _build_static=no ;; --enable-profile) _build_profile=yes ;; --disable-profile) _build_profile=no ;; + --enable-debug) _build_debug=yes ;; + --disable-debug) _build_debug=false ;; --force-builtin-libpng) _libpng=no ;; --with-sdl-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` @@ -404,6 +409,8 @@ if test "$have_clang" = yes; then cxx_version="$cxx_version, bad" cxx_verc_fail=yes fi + + _make_def_CLANG_WARNINGS='CLANG_WARNINGS = 1' else # Need at least version 3.5 if [ $clang_major -ge 4 ] || [ $clang_major -eq 3 -a $clang_minor -ge 5 ]; then @@ -420,9 +427,8 @@ if test "$have_clang" = yes; then fi fi CXXFLAGS="$CXXFLAGS" - _make_def_HAVE_GCC3='HAVE_GCC3 = 1' + _make_def_HAVE_CLANG='HAVE_CLANG = 1' add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' - _make_def_HAVE_GCC='HAVE_GCC = 1' echo "$cxx_version" elif test "$have_gcc" = yes; then @@ -448,7 +454,6 @@ elif test "$have_gcc" = yes; then ;; esac CXXFLAGS="$CXXFLAGS" - _make_def_HAVE_GCC3='HAVE_GCC3 = 1' add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' _make_def_HAVE_GCC='HAVE_GCC = 1' echo "$cxx_version" @@ -670,11 +675,20 @@ fi if test "$_build_profile" = yes ; then echo_n " Profiling enabled" echo + + _build_debug=yes else echo_n " Profiling disabled" echo fi +if test "$_build_debug" = yes ; then + echo_n " Debug symbols enabled" + echo +else + echo_n " Debug symbols disabled" + echo +fi # # Now, add the appropriate defines/libraries/headers @@ -774,6 +788,9 @@ if test "$_build_profile" = no ; then _build_profile= fi +if test "$_build_debug" = no ; then + _build_debug= +fi echo "Creating config.mak" cat > config.mak << EOF @@ -795,6 +812,8 @@ ZIP := $_zip CP := $_cp WINDOWSPATH=$_windowspath STRIP := $_strip +LLVM_PROFDATA := llvm-profdata +BINARY_LOADER := MODULES += $MODULES MODULE_DIRS += $MODULE_DIRS @@ -805,9 +824,10 @@ BINDIR := $_bindir DOCDIR := $_docdir DATADIR := $_datadir PROFILE := $_build_profile +DEBUG := $_build_debug $_make_def_HAVE_GCC -$_make_def_HAVE_GCC3 +$_make_def_HAVE_CLANG $_make_def_CLANG_WARNINGS INCLUDES += $INCLUDES @@ -818,12 +838,11 @@ $_config_mk_data EOF # This should be taken care of elsewhere, but I'm not sure where -rm -f stella-conf* +rm -f stella-conf stella-conf.cxx if test "$_host_os" = darwin; then cat <G4?Fn}V8ib^7hZw5gGOp$;l>L#P(53)%OO=2>i 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 F{{~Zhg-!qf literal 0 HcmV?d00001 diff --git a/profile/README.md b/profile/README.md new file mode 100644 index 000000000..9215d64d9 --- /dev/null +++ b/profile/README.md @@ -0,0 +1,4 @@ +The ROMS that are used for profiling were created by and are by courtesy of + + * Spiceware (`128.bin`) + * Kylearan (Catharsis Theory) diff --git a/profile/catharsis_theory.bin b/profile/catharsis_theory.bin new file mode 100644 index 0000000000000000000000000000000000000000..a7f322ece6260a5ca3d49c364fe58b3d9064b9a5 GIT binary patch literal 4096 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 literal 0 HcmV?d00001