Files
p2pk-bf/bruteforce/Makefile

206 lines
6.9 KiB
Makefile

# Makefile per Bitcoin P2PK Bruteforce
CC = g++
# Ottimizzazioni aggressive per CPU moderna
# -O3: massima ottimizzazione
# -march=native: usa tutte le istruzioni del processore (AVX2, SSE4.2, etc)
# -mtune=native: ottimizza per il processore specifico
# -flto: Link Time Optimization
# -ffast-math: ottimizzazioni matematiche aggressive (safe per crypto)
# -funroll-loops: srotola loop piccoli
# -finline-functions: inline aggressivo
# -fprefetch-loop-arrays: prefetch automatico
# -faligned-new: supporto per aligned new (C++17)
CFLAGS = -O3 -march=native -mtune=native -flto -ffast-math \
-funroll-loops -finline-functions -fprefetch-loop-arrays \
-faligned-new -pthread -Wall -Wextra -std=c++17
# Librerie necessarie
LIBS = -lsecp256k1 -lgmp
# Target
TARGET = p2pk_bruteforce
SOURCE = p2pk_bruteforce.cpp
# Percorsi libreria
INCLUDE_PATH = -I/usr/local/include -I/usr/include
LIB_PATH = -L/usr/local/lib -L/usr/lib
# ============================================================================
# TARGET PRINCIPALI
# ============================================================================
all: build
# Compilazione standard
build: $(SOURCE)
@echo "========================================="
@echo " Bitcoin P2PK Bruteforce - Compilazione"
@echo "========================================="
@if [ -d "secp256k1" ]; then \
echo "[+] Compilazione con libsecp256k1 locale..."; \
$(CC) $(CFLAGS) \
-I./secp256k1/include \
-L./secp256k1/lib \
-Wl,-rpath,$(shell pwd)/secp256k1/lib \
-o $(TARGET) $(SOURCE) $(LIBS); \
else \
echo "[+] Compilazione con libsecp256k1 di sistema..."; \
$(CC) $(CFLAGS) $(INCLUDE_PATH) $(LIB_PATH) \
-o $(TARGET) $(SOURCE) $(LIBS); \
fi
@echo "[+] Compilazione completata!"
@echo "[+] Eseguibile: ./$(TARGET)"
@echo ""
@echo "OTTIMIZZAZIONI ATTIVE:"
@echo " ✓ Batch EC point addition (256 keys/iteration)"
@echo " ✓ Zero-copy lookup (no serialization)"
@echo " ✓ SIMD-optimized Bloom filter"
@echo " ✓ Cache-aligned memory"
@echo " ✓ CPU prefetching hints"
@echo " ✓ LTO & aggressive inlining"
@echo ""
@echo "PERFORMANCE ATTESE: 800K - 2M keys/sec"
@echo "========================================="
# ============================================================================
# PROFILE-GUIDED OPTIMIZATION (PGO)
# ============================================================================
pgo: pgo-generate pgo-run pgo-use
pgo-generate: $(SOURCE)
@echo "[+] Step 1/3: Compilazione con profile generation..."
@if [ -d "secp256k1" ]; then \
$(CC) $(CFLAGS) -fprofile-generate \
-I./secp256k1/include \
-L./secp256k1/lib \
-Wl,-rpath,$(shell pwd)/secp256k1/lib \
-o $(TARGET)_pgo $(SOURCE) $(LIBS); \
else \
$(CC) $(CFLAGS) -fprofile-generate $(INCLUDE_PATH) $(LIB_PATH) \
-o $(TARGET)_pgo $(SOURCE) $(LIBS); \
fi
@echo "[+] Pronto per eseguire il programma e generare profilo..."
@echo "[!] Esegui: timeout 30s ./$(TARGET)_pgo"
pgo-run:
@echo "[+] Step 2/3: Generazione profilo (30 secondi)..."
@timeout 30s ./$(TARGET)_pgo || true
@echo "[+] Profilo generato!"
pgo-use: $(SOURCE)
@echo "[+] Step 3/3: Ricompilazione con Profile-Guided Optimization..."
@if [ -d "secp256k1" ]; then \
$(CC) $(CFLAGS) -fprofile-use -fprofile-correction \
-I./secp256k1/include \
-L./secp256k1/lib \
-Wl,-rpath,$(shell pwd)/secp256k1/lib \
-o $(TARGET) $(SOURCE) $(LIBS); \
else \
$(CC) $(CFLAGS) -fprofile-use -fprofile-correction $(INCLUDE_PATH) $(LIB_PATH) \
-o $(TARGET) $(SOURCE) $(LIBS); \
fi
@echo "[+] PGO compilazione completata!"
@echo "[+] Eseguibile ottimizzato: ./$(TARGET)"
@echo "[!] Performance attese: +10-20% aggiuntivo"
@rm -f $(TARGET)_pgo
# ============================================================================
# UTILITÀ
# ============================================================================
# Versione debug
debug: $(SOURCE)
@echo "[+] Compilazione DEBUG..."
$(CC) -g -O0 -pthread -Wall -Wextra -std=c++17 \
$(INCLUDE_PATH) $(LIB_PATH) \
-o $(TARGET)_debug $(SOURCE) $(LIBS)
@echo "[+] Eseguibile debug: ./$(TARGET)_debug"
# Analisi assembly generato
asm: $(SOURCE)
@echo "[+] Generazione assembly..."
$(CC) $(CFLAGS) -S -fverbose-asm $(INCLUDE_PATH) \
-o $(TARGET).s $(SOURCE)
@echo "[+] Assembly salvato in: $(TARGET).s"
# Benchmark veloce (10 secondi)
bench: build
@echo "[+] Benchmark rapido (10 secondi)..."
@timeout 10s ./$(TARGET) || true
# Test con valgrind (memory leaks)
valgrind: debug
@echo "[+] Test con Valgrind..."
valgrind --leak-check=full --show-leak-kinds=all \
./$(TARGET)_debug
# Pulizia
clean:
@echo "[+] Pulizia file compilati..."
rm -f $(TARGET) $(TARGET)_debug $(TARGET)_pgo
rm -f *.o *.gcda *.gcno *.s
rm -f progress.csv
@echo "[+] Pulizia completata!"
clean-all: clean
@echo "[+] Pulizia completa..."
rm -rf secp256k1_build secp256k1
@echo "[+] Pulizia completa terminata!"
# ============================================================================
# DIPENDENZE
# ============================================================================
install-deps:
@echo "[+] Installazione dipendenze..."
@echo "[!] Richiede: build-essential, libsecp256k1-dev, libgmp-dev"
@read -p "Continuare? [y/N] " -n 1 -r; \
echo; \
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
sudo apt-get update && \
sudo apt-get install -y build-essential libsecp256k1-dev libgmp-dev \
git autoconf libtool pkg-config; \
echo "[+] Dipendenze installate!"; \
fi
build-secp256k1:
@echo "[+] Compilazione libsecp256k1 ottimizzata..."
@./build_secp256k1.sh
# ============================================================================
# HELP
# ============================================================================
help:
@echo "==================================================="
@echo " Bitcoin P2PK Bruteforce - Makefile"
@echo "==================================================="
@echo ""
@echo "Target disponibili:"
@echo " make - Compila il programma (default)"
@echo " make build - Compila il programma"
@echo " make pgo - Compila con Profile-Guided Optimization"
@echo " make debug - Compila versione debug"
@echo " make asm - Genera assembly per analisi"
@echo " make bench - Benchmark rapido (10s)"
@echo " make valgrind - Test memory leaks"
@echo " make clean - Rimuove file compilati"
@echo " make clean-all - Pulizia completa"
@echo " make install-deps - Installa dipendenze"
@echo " make build-secp256k1 - Compila libsecp256k1 locale"
@echo ""
@echo "Uso consigliato:"
@echo " 1. make # Compila"
@echo " 2. ./$(TARGET) # Esegui bruteforce"
@echo ""
@echo "Per massime performance:"
@echo " make pgo # Compila con PGO (+10-20% speed)"
@echo ""
@echo "==================================================="
.PHONY: all build pgo pgo-generate pgo-run pgo-use debug asm bench \
valgrind clean clean-all install-deps build-secp256k1 help