diff --git a/Makefile b/Makefile index 1d33a57..765f4d4 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,22 @@ CC := gcc CFLAGS := -O3 -march=native -mtune=native -flto -fomit-frame-pointer -DNDEBUG -Wall -Wextra -std=c11 -D_GNU_SOURCE -D_POSIX_C_SOURCE=200809L LDFLAGS := -pthread -lcrypto -lm -flto +PGO_DIR := .pgo -COMMON_OBJS := config.o utils.o json.o rpc.o types.o block_builder.o miner.o mining_loop.o +SHA256_BACKEND_OBJS := sha256/sha256_backend.o +HAS_ARM_CRYPTO := $(shell echo | $(CC) $(CFLAGS) -dM -E - 2>/dev/null | grep -c __ARM_FEATURE_CRYPTO) +ifeq ($(shell uname -m),aarch64) +ifneq ($(HAS_ARM_CRYPTO),0) +SHA256_BACKEND_OBJS += sha256/sha256d80_4way_aarch64.o +endif +endif -.PHONY: all clean +COMMON_OBJS := config.o utils.o json.o rpc.o types.o block_builder.o miner.o mining_loop.o $(SHA256_BACKEND_OBJS) +BENCH_BIN := bench_hash +TEST_SHA_BIN := test_sha256_backend +TEST_MINER_BIN := test_miner_regression + +.PHONY: all clean bench bench-5x test pgo-gen pgo-use pgo-clean all: miner launcher @@ -18,4 +30,39 @@ launcher: launcher.o $(COMMON_OBJS) $(CC) $(CFLAGS) -c $< -o $@ clean: - rm -f *.o miner launcher + rm -f *.o sha256/*.o bench/*.o tests/*.o miner launcher $(BENCH_BIN) $(TEST_SHA_BIN) $(TEST_MINER_BIN) + +bench: $(BENCH_BIN) + +$(BENCH_BIN): bench/bench_hash.o $(SHA256_BACKEND_OBJS) + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +bench-5x: $(BENCH_BIN) + @i=1; while [ $$i -le 5 ]; do \ + echo "Run $$i/5"; \ + ./$(BENCH_BIN) 60; \ + i=$$((i+1)); \ + done + +$(TEST_SHA_BIN): tests/test_sha256_backend.o $(SHA256_BACKEND_OBJS) utils.o + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +$(TEST_MINER_BIN): tests/test_miner_regression.o miner.o $(SHA256_BACKEND_OBJS) utils.o + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +test: $(TEST_SHA_BIN) $(TEST_MINER_BIN) + ./$(TEST_SHA_BIN) + ./$(TEST_MINER_BIN) + +pgo-gen: CFLAGS += -fprofile-generate=$(PGO_DIR) +pgo-gen: LDFLAGS += -fprofile-generate=$(PGO_DIR) +pgo-gen: clean all + @echo "Profilazione build pronta." + @echo "Esegui il tuo workload manualmente, poi lancia: make pgo-use" + +pgo-use: CFLAGS += -fprofile-use=$(PGO_DIR) -fprofile-correction +pgo-use: LDFLAGS += -fprofile-use=$(PGO_DIR) +pgo-use: clean all + +pgo-clean: + rm -rf $(PGO_DIR)