Makefile 5.09 KB
Newer Older
Tim Dettmers's avatar
Tim Dettmers committed
1
2
3
4
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
ROOT_DIR := $(patsubst %/,%,$(dir $(MKFILE_PATH)))

GPP:= /usr/bin/g++
5
6
7
ifeq ($(CUDA_HOME),)
	CUDA_HOME:= $(shell which nvcc | rev | cut -d'/' -f3- | rev)
endif
Tim Dettmers's avatar
Tim Dettmers committed
8
NVCC := $(CUDA_HOME)/bin/nvcc
9

Tim Dettmers's avatar
Tim Dettmers committed
10
11
12
###########################################

CSRC := $(ROOT_DIR)/csrc
Max Ryabinin's avatar
Max Ryabinin committed
13
BUILD_DIR:= $(ROOT_DIR)/build
Tim Dettmers's avatar
Tim Dettmers committed
14
15

FILES_CUDA := $(CSRC)/ops.cu $(CSRC)/kernels.cu
Max Ryabinin's avatar
Max Ryabinin committed
16
FILES_CPP := $(CSRC)/common.cpp $(CSRC)/cpu_ops.cpp $(CSRC)/pythonInterface.c
Tim Dettmers's avatar
Tim Dettmers committed
17
18

INCLUDE :=  -I $(CUDA_HOME)/include -I $(ROOT_DIR)/csrc -I $(CONDA_PREFIX)/include -I $(ROOT_DIR)/dependencies/cub -I $(ROOT_DIR)/include
19
LIB := -L $(CUDA_HOME)/lib64 -lcudart -lcublas -lcublasLt -lcurand -lcusparse -L $(CONDA_PREFIX)/lib
Tim Dettmers's avatar
Tim Dettmers committed
20
21

# NVIDIA NVCC compilation flags
22
23
24
25
26
27
28
29
COMPUTE_CAPABILITY := -gencode arch=compute_35,code=sm_35 # Kepler 
COMPUTE_CAPABILITY += -gencode arch=compute_37,code=sm_37 # Kepler 
COMPUTE_CAPABILITY += -gencode arch=compute_50,code=sm_50 # Maxwell
COMPUTE_CAPABILITY += -gencode arch=compute_52,code=sm_52 # Maxwell
COMPUTE_CAPABILITY += -gencode arch=compute_60,code=sm_60 # Pascal
COMPUTE_CAPABILITY += -gencode arch=compute_61,code=sm_61 # Pascal
COMPUTE_CAPABILITY += -gencode arch=compute_70,code=sm_70 # Volta
COMPUTE_CAPABILITY += -gencode arch=compute_72,code=sm_72 # Volta 
30
COMPUTE_CAPABILITY := -gencode arch=compute_75,code=sm_75 # Volta 
31
32
33
34
35
36

# CUDA 9.2 supports CC 3.0, but CUDA >= 11.0 does not
CC_CUDA92 := -gencode arch=compute_30,code=sm_30

# Later versions of CUDA support the new architectures
CC_CUDA10x := -gencode arch=compute_30,code=sm_30
37
CC_CUDA10x := -gencode arch=compute_75,code=sm_75
38
39
40
41
42
43
44
45
46

CC_CUDA110 := -gencode arch=compute_75,code=sm_75
CC_CUDA110 += -gencode arch=compute_80,code=sm_80

CC_CUDA11x := -gencode arch=compute_75,code=sm_75
CC_CUDA11x += -gencode arch=compute_80,code=sm_80
CC_CUDA11x += -gencode arch=compute_86,code=sm_86

all: $(ROOT_DIR)/dependencies/cub $(BUILD_DIR) env
47
	$(NVCC) $(COMPUTE_CAPABILITY) -Xcompiler '-fPIC' --use_fast_math -Xptxas=-v -dc $(FILES_CUDA) $(INCLUDE) $(LIB) --output-directory $(BUILD_DIR) -D NO_CUBLASLT
Tim Dettmers's avatar
Tim Dettmers committed
48
	$(NVCC) $(COMPUTE_CAPABILITY) -Xcompiler '-fPIC' -dlink $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o -o $(BUILD_DIR)/link.o 
Max Ryabinin's avatar
Max Ryabinin committed
49
	$(GPP) -std=c++14 -DBUILD_CUDA -shared -fPIC $(INCLUDE) $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o $(BUILD_DIR)/link.o $(FILES_CPP) -o ./bitsandbytes/libbitsandbytes.so $(LIB)
Tim Dettmers's avatar
Tim Dettmers committed
50

51
cuda92: $(ROOT_DIR)/dependencies/cub $(BUILD_DIR) env
52
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA92) -Xcompiler '-fPIC' --use_fast_math -Xptxas=-v -dc $(FILES_CUDA) $(INCLUDE) $(LIB) --output-directory $(BUILD_DIR) -D NO_CUBLASLT
53
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA92) -Xcompiler '-fPIC' -dlink $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o -o $(BUILD_DIR)/link.o 
Max Ryabinin's avatar
Max Ryabinin committed
54
	$(GPP) -std=c++14 -DBUILD_CUDA -shared -fPIC $(INCLUDE) $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o $(BUILD_DIR)/link.o $(FILES_CPP) -o ./bitsandbytes/libbitsandbytes.so $(LIB)
Tim Dettmers's avatar
Tim Dettmers committed
55

56
cuda10x: $(ROOT_DIR)/dependencies/cub $(BUILD_DIR) env
57
58
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA10x) -Xcompiler '-fPIC' --use_fast_math -Xptxas=-v -dc $(FILES_CUDA) $(INCLUDE) $(LIB) --output-directory $(BUILD_DIR)
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA10x) -Xcompiler '-fPIC' -dlink $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o -o $(BUILD_DIR)/link.o 
Max Ryabinin's avatar
Max Ryabinin committed
59
	$(GPP) -std=c++14 -DBUILD_CUDA -shared -fPIC $(INCLUDE) $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o $(BUILD_DIR)/link.o $(FILES_CPP) -o ./bitsandbytes/libbitsandbytes.so $(LIB)
Tim Dettmers's avatar
Tim Dettmers committed
60

61
cuda110: $(BUILD_DIR) env
62
63
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA110) -Xcompiler '-fPIC' --use_fast_math -Xptxas=-v -dc $(FILES_CUDA) $(INCLUDE) $(LIB) --output-directory $(BUILD_DIR)
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA110) -Xcompiler '-fPIC' -dlink $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o -o $(BUILD_DIR)/link.o 
Max Ryabinin's avatar
Max Ryabinin committed
64
	$(GPP) -std=c++14 -DBUILD_CUDA -shared -fPIC $(INCLUDE) $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o $(BUILD_DIR)/link.o $(FILES_CPP) -o ./bitsandbytes/libbitsandbytes.so $(LIB)
Tim Dettmers's avatar
Tim Dettmers committed
65

66
67
68
cuda11x: $(BUILD_DIR) env
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA11x) -Xcompiler '-fPIC' --use_fast_math -Xptxas=-v -dc $(FILES_CUDA) $(INCLUDE) $(LIB) --output-directory $(BUILD_DIR)
	$(NVCC) $(COMPUTE_CAPABILITY) $(CC_CUDA11x) -Xcompiler '-fPIC' -dlink $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o -o $(BUILD_DIR)/link.o 
Max Ryabinin's avatar
Max Ryabinin committed
69
70
71
72
	$(GPP) -std=c++14 -DBUILD_CUDA -shared -fPIC $(INCLUDE) $(BUILD_DIR)/ops.o $(BUILD_DIR)/kernels.o $(BUILD_DIR)/link.o $(FILES_CPP) -o ./bitsandbytes/libbitsandbytes.so $(LIB)

cpuonly: $(BUILD_DIR) env
	$(GPP) -std=c++14 -shared -fPIC -I $(ROOT_DIR)/csrc -I $(ROOT_DIR)/include $(FILES_CPP) -o ./bitsandbytes/libbitsandbytes.so
Tim Dettmers's avatar
Tim Dettmers committed
73

74
75
76
77
env:
	@echo "ENVIRONMENT"
	@echo "============================"
	@echo "NVCC path: $(NVCC)"
78
	@echo "GPP path: $(GPP) VERSION: `$(GPP) --version | head -n 1`"
79
80
81
82
83
84
	@echo "CUDA_HOME: $(CUDA_HOME)"
	@echo "CONDA_PREFIX: $(CONDA_PREFIX)"
	@echo "PATH: $(PATH)"
	@echo "LD_LIBRARY_PATH: $(LD_LIBRARY_PATH)"
	@echo "============================"

Tim Dettmers's avatar
Tim Dettmers committed
85
$(BUILD_DIR):
Max Ryabinin's avatar
Max Ryabinin committed
86
	mkdir -p build
Tim Dettmers's avatar
Tim Dettmers committed
87
88
89
90
	mkdir -p dependencies

$(ROOT_DIR)/dependencies/cub:
	git clone https://github.com/NVlabs/cub $(ROOT_DIR)/dependencies/cub
91
	cd dependencies/cub; git checkout 1.11.0
Tim Dettmers's avatar
Tim Dettmers committed
92
93
94
95
96
97

clean:
	rm cuda_build/* ./bitsandbytes/libbitsandbytes.so

cleaneggs:
	rm -rf *.egg*