diff --git a/.gitignore b/.gitignore index 884b063..74db499 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ *~ test* obj/ -hexview -hexview-pgo +hexview-* profile/ perf.* diff --git a/Makefile b/Makefile index 6fddd1b..1099cb2 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ CXXFLAGS+= -Wall -pedantic --std=gnu++20 $(addprefix -I,$(INCLUDE)) LDFLAGS?= -O3 -flto LDFLAGS+= -lfmt -PROJ = hexview +PROJECT = hexview OBJ = $(addprefix obj/,$(SRC:.cpp=.o)) @@ -24,8 +24,14 @@ PROF_FLAGS = -fprofile-generate ### -.PHONY: all -all: | dirs $(PROJ) +.PHONY: release +release: | dirs $(PROJECT)-release + +.PHONY: debug +debug: | dirs $(PROJECT)-debug + +.PHONY: pgo +pgo: | dirs $(PROJECT)-pgo dirs: @mkdir -p obj/src @@ -37,22 +43,28 @@ obj/%.o: %.cpp profile/%.o: %.cpp $(CXX) -c $< $(_HX_FEAT) $(CXXFLAGS) $(PROF_FLAGS) -o $@ $(LDFLAGS) $(PROF_FLAGS) -$(PROJ): $(OBJ) +$(PROJECT)-release: $(OBJ) $(CXX) $^ $(CXXFLAGS) -o $@ $(LDFLAGS) strip $@ + +$(PROJECT)-debug: CXXFLAGS = -O0 -g -Wall -pedantic --std=gnu++20 $(addprefix -I,$(INCLUDE)) -fno-exceptions -felide-constructors +$(PROJECT)-debug: LDFLAGS = -lfmt +$(PROJECT)-debug: $(OBJ) + $(CXX) $^ $(CXXFLAGS) -o $@ $(LDFLAGS) + pgo-generate: $(PGO_OBJ) $(CXX) $^ $(CXXFLAGS) $(PROF_FLAGS) -o $@ $(LDFLAGS) $(PROF_FLAGS) pgo-profile: pgo-generate for i in {1..$(PGO_ITERATIONS)}; do \ - dd if=/dev/urandom of=/tmp/$(PROJ)-pgo-test bs=1024 count=$(PGO_DATASET_SIZE) >> /dev/null 2>&1; \ + dd if=/dev/urandom of=/tmp/$(PROJECT)-pgo-test bs=1024 count=$(PGO_DATASET_SIZE) >> /dev/null 2>&1; \ printf "\rIteration $$i / $(PGO_ITERATIONS)"; \ - ./pgo-generate /tmp/$(PROJ)-pgo-test > /tmp/$(PROJ)-pgo-output; \ + ./pgo-generate /tmp/$(PROJECT)-pgo-test > /tmp/$(PROJECT)-pgo-output; \ done @echo "" - rm /tmp/$(PROJ)-pgo-test - rm /tmp/$(PROJ)-pgo-output + rm /tmp/$(PROJECT)-pgo-test + rm /tmp/$(PROJECT)-pgo-output rm pgo-generate @@ -61,15 +73,14 @@ pgo-use: LDFLAGS+= -lgcov pgo-use: $(PGO_OBJ) $(CXX) $^ $(CXXFLAGS) $(PROF_FLAGS) -o $@ $(LDFLAGS) $(PROF_FLAGS) -$(PROJ)-pgo: | dirs pgo-profile +$(PROJECT)-pgo: | dirs pgo-profile find ./profile -name \*.o -exec rm {} + $(MAKE) pgo-use mv pgo-use $@ strip $@ clean: - rm -f $(PROJ) - rm -f $(PROJ)-pgo + rm -f $(PROJECT)-{release,debug,pgo} rm -rf obj rm -rf profile rm -f pgo-{test,output,generate}