-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
105 lines (84 loc) · 2.96 KB
/
Makefile
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
102
103
104
105
GPU ?= 0
ifneq ($(OS),Windows_NT)
TARGET = miner
CXX = g++
NVCC = nvcc
COMMON_FLAGS = -O3 -DNDEBUG -ffast-math -funroll-loops -fopenmp -pthread -std=c++17 -Iutils
GXX_FLAGS = $(COMMON_FLAGS) -march=native -flto
NVCC_FLAGS = $(COMMON_FLAGS)
ifneq ($(filter 1 CUDA,$(GPU)),)
CXXFLAGS = $(GXX_FLAGS) -DGPU=1
NVCCFLAGS += -DGPU=1
SRCS = miner.cpp kernel.cu
OBJS = miner.o kernel.o
LINKER = $(NVCC)
LDFLAGS =
else ifneq ($(filter 2 OPENCL,$(GPU)),)
CXXFLAGS = $(GXX_FLAGS) -DGPU=2
SRCS = miner.cpp clprog.cpp
OBJS = miner.o clprog.o
LINKER = $(CXX)
LDFLAGS = -pthread -lOpenCL
else
CXXFLAGS = $(GXX_FLAGS) -DGPU=0
SRCS = miner.cpp
OBJS = miner.o
LINKER = $(CXX)
LDFLAGS = -pthread
endif
.PHONY: all clean
all: $(TARGET)
$(TARGET): $(OBJS)
$(LINKER) -o $@ $(OBJS) $(LDFLAGS)
miner.o: miner.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
kernel.o: kernel.cu
$(NVCC) $(NVCCFLAGS) -c $< -o $@
clprog.o: clprog.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f $(TARGET) miner.o kernel.o clprog.o
else
TARGET = miner.exe
CXX = cl
NVCC = nvcc
VS_PATH = C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.38.33130
WINSDK_INCLUDE = C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0
WINSDK_LIB = C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0
GPU_INCLUDE = C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/include
GPU_LIB = C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/lib/x64
COMMON_FLAGS = /O2 /DNDEBUG /EHsc /std:c++17 /I"utils" /I"$(VS_PATH)/include" /I"$(WINSDK_INCLUDE)/ucrt" /wd4819
COMMON_LDFLAGS = /link /LIBPATH:"$(WINSDK_LIB)/um/x64" /LIBPATH:"$(WINSDK_LIB)/ucrt/x64" /LIBPATH:"$(VS_PATH)/lib/x64"
NVCCFLAGS = -ccbin "cl" -I"$(GPU_INCLUDE)" -Xcompiler /wd4819
ifeq ($(GPU),CUDA)
CXXFLAGS = $(COMMON_FLAGS) /I"$(GPU_INCLUDE)" /DGPU=1
LDFLAGS = $(COMMON_LDFLAGS) /LIBPATH:"$(GPU_LIB)" cudart.lib
SRCS = miner.cpp kernel.cu
OBJS = miner.obj kernel.obj
else ifeq ($(GPU),OPENCL)
CXXFLAGS = $(COMMON_FLAGS) /I"$(GPU_INCLUDE)" /DGPU=2
LDFLAGS = $(COMMON_LDFLAGS) /LIBPATH:"$(GPU_LIB)" OpenCL.lib
SRCS = miner.cpp clprog.cpp
OBJS = miner.obj clprog.obj
else
CXXFLAGS = $(COMMON_FLAGS)
LDFLAGS = $(COMMON_LDFLAGS)
SRCS = miner.cpp
OBJS = miner.obj
endif
.PHONY: all clean
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(OBJS) $(LDFLAGS) /OUT:$(TARGET)
miner.obj: miner.cpp
$(CXX) $(CXXFLAGS) /c $< /Fominer.obj
ifeq ($(GPU),CUDA)
kernel.obj: kernel.cu
$(NVCC) $(NVCCFLAGS) -c $< -o kernel.obj
else ifeq ($(GPU),OPENCL)
clprog.obj: clprog.cpp
$(CXX) $(CXXFLAGS) /c $< /Foclprog.obj
endif
clean:
del /Q $(TARGET) $(OBJS)
endif