2026-03-30 01:07:23 +02:00
|
|
|
CC := gcc
|
2026-03-30 01:20:59 +02:00
|
|
|
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
|
2026-03-30 09:05:10 +02:00
|
|
|
PGO_DIR := .pgo
|
2026-03-30 01:07:23 +02:00
|
|
|
|
2026-03-30 09:05:10 +02:00
|
|
|
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
|
2026-03-30 01:07:23 +02:00
|
|
|
|
2026-03-30 09:05:10 +02:00
|
|
|
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
|
2026-03-30 01:07:23 +02:00
|
|
|
|
|
|
|
|
all: miner launcher
|
|
|
|
|
|
|
|
|
|
miner: main.o $(COMMON_OBJS)
|
|
|
|
|
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
|
|
|
|
|
|
|
|
launcher: launcher.o $(COMMON_OBJS)
|
|
|
|
|
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
|
|
|
|
|
|
|
|
|
%.o: %.c
|
|
|
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
|
|
clean:
|
2026-03-30 09:05:10 +02:00
|
|
|
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)
|