-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
101 lines (79 loc) · 4.27 KB
/
Makefile
File metadata and controls
101 lines (79 loc) · 4.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# Add directory of `which nvcc` to PATH if not added already
SHELL := /bin/bash
export PATH := /usr/local/cuda/bin:$(PATH)
SRC_DIR=wip
OBJ_DIR=build/obj
RTC_DIR=build/rtc
CUDA_INCLUDES=wip,wip/includes,wip/includes/uint256_t,wip/includes/uint256_t/uint128_t
BUILD_DIR=build
EVM_BENCH_DIR=benchmark_evm
EVM_BENCH_RUNNER_DIR=$(EVM_BENCH_DIR)/runners/gpuevm
KAT_INSTALL_DIR=/usr/local/include
SUPPRESS_WARNINGS=
EXTRA_INCLUDE_LIBS = dep_kat
EXTRA_LD_LIBRARY_PATHS=$(KAT_INSTALL_DIR)
ALL_BUT_MAIN_SOURCES= utils.cpp ingest.cpp printf.cpp math256.cpp keccak-tiny.cpp evm_rtc.cpp evm_defs.cpp
SOURCES= main.cpp interpreter.cpp $(ALL_BUT_MAIN_SOURCES)
TEST_SOURCES= test_math.cpp test_main.cpp printf.cpp
OBJECTS= $(SOURCES:%.cpp=$(OBJ_DIR)/%.o)
ALL_BUT_MAIN_OBJECTS= $(ALL_BUT_MAIN_SOURCES:%.cpp=$(OBJ_DIR)/%.o)
TEST_OBJECTS= $(TEST_SOURCES:%.cpp=$(OBJ_DIR)/%.o)
CPP_STD=c++20
CC_FLAGS=-march=native -Wall -Wextra -Wconversion -Wno-unused-parameter -Wno-conversion -Wno-strict-aliasing -Wno-comment -Wno-unused-function -Wno-sign-conversion -fno-omit-frame-pointer -fsanitize=undefined -fsanitize=bounds-strict -fsanitize=leak
NVCC_DEVICE_ARGS = -I$(CUDA_INCLUDES) $(SUPPRESS_WARNINGS) -Xptxas -v -lineinfo -arch=native --threads 0 -split-compile 14 -maxrregcount 85 -jtd 10 --compiler-options "$(CC_FLAGS)"
# Debug -> define GPUEVM_DEBUG
debug: NVCC_DEVICE_ARGS += -DGPUEVM_DEBUG -g -G -O0
debug: base
release: NVCC_DEVICE_ARGS += -O3 -Xptxas -O3
release: CC_FLAGS += -Ofast
release: base
deps: dep_kat
base: dirs $(OBJECTS) $(HEADERS) $(EXTRA_INCLUDE_LIBS)
LD_LIBRARY_PATH="$$LD_LIBRARY_PATH:$(EXTRA_LD_LIBRARY_PATHS)" nvcc $(NVCC_DEVICE_ARGS) --std $(CPP_STD) $(OBJECTS) -lcuda -lcudart -o $(BUILD_DIR)/gpuevm.out
all: release
evm_bench: all
cp -r $(BUILD_DIR) ./$(EVM_BENCH_RUNNER_DIR)
cd $(EVM_BENCH_DIR) && make run
# ./$(EVM_BENCH_RUNNER_DIR)/$(BUILD_DIR)/gpuevm.out -n $$NUM_RUNNERS -p wip/SnailTracer -r 1
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
nvcc -x cu $(NVCC_DEVICE_ARGS) --std $(CPP_STD) -dc -rdc=true -Iwip $< -o $@
rtc_compile: dirs $(ALL_BUT_MAIN_OBJECTS) $(HEADERS)
nvcc -x cu $(NVCC_DEVICE_ARGS) --std $(CPP_STD) -DGPUEVM_IN_RTC -arch=native -dc -Iwip $(PROGRAM_FILENAME) -o $(RTC_DIR)/$(PROGRAM_NAME).rtc.o
nvcc -cubin -dlink -DGPUEVM_IN_RTC -gencode arch=compute_89,code=sm_89 -dc -Iwip -lcuda -lcudart $(RTC_DIR)/$(PROGRAM_NAME).rtc.o $(ALL_BUT_MAIN_OBJECTS) -o $(RTC_DIR)/$(PROGRAM_NAME).rtc.cubin
rtc_compile_debug: NVCC_DEVICE_ARGS += -DGPUEVM_DEBUG -g -G -O0
rtc_compile_debug: rtc_compile
rtc_compile_release: NVCC_DEVICE_ARGS += -O3 -Xptxas -O3
rtc_compile_release: rtc_compile
profile: release
ncu --replay-mode kernel --call-stack -c 1 --import-source on --source-folders wip -o prof_report_%i.ncu-rep --set full /home/hugo_dev/progs/GPU-EVM/build/gpuevm.out -n 512 -p wip/SnailTracerSimple -r 1 -c 351578bc0000000000000000000000000000000000000000000000000000000000000000
test: NVCC_DEVICE_ARGS += -lgmp -lgmpxx -O3 -Xptxas -O3 #| -DGPUEVM_DEBUG -G -g
test: dirs $(TEST_OBJECTS) dep_kat
LD_LIBRARY_PATH="$$LD_LIBRARY_PATH:$(EXTRA_LD_LIBRARY_PATHS)" nvcc $(NVCC_DEVICE_ARGS) --std=$(CPP_STD) $(TEST_OBJECTS) -o $(BUILD_DIR)/tests.out
dep_kat:
cd wip/includes/cuda-kat && cmake . -B build -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.3/bin/nvcc && cd build && $(MAKE) && $(MAKE) install
setup_python:
python3.10 -m venv evm_venv
source evm_venv/bin/activate && pip install -r requirements.txt
patch -p1 < wip/computation.patch
# Run with 3 arguments: target_sol, trace_type, and calldata_hex in 0x hex format (optional)
make_trace: evm_venv
echo "Creating $(trace_type) (init or run) code trace of $(target_sol).sol with calldata: $(calldata_hex)"
if [ -z "$(target_sol)" ] || [ -z "$(trace_type)" ]; then \
echo "Missing arguments: target_sol and trace_type"; \
exit 1; \
fi
$(eval SOLC_VERSION = $(shell cat $(target_sol).sol | grep "pragma solidity" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+"))
$(eval FILENAME = $(shell basename $(target_sol)))
solc-select install $(SOLC_VERSION)
solc-select use $(SOLC_VERSION)
source evm_venv/bin/activate && python3 wip/ingest_solc.py $(trace_type) $(target_sol).sol $(FILENAME) $(calldata_hex)
clean:
rm -rf $(OBJ_DIR)/*
rm -rf $(BUILD_DIR)/gpuevm.out
clean_rtc:
rm -rf $(RTC_DIR)/*
dirs:
mkdir -p $(OBJ_DIR)
mkdir -p $(BUILD_DIR)
mkdir -p $(RTC_DIR)
.PHONY: dirs all