-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
executable file
·87 lines (74 loc) · 2.57 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
#
# Copyright 2011-2021 NVIDIA Corporation. All rights reserved
#
ifndef OS
OS := $(shell uname)
HOST_ARCH := $(shell uname -m)
endif
CUDA_INSTALL_PATH ?= /usr/local/cuda
NVCC := "$(CUDA_INSTALL_PATH)/bin/nvcc"
INCLUDES := -I"$(CUDA_INSTALL_PATH)/include" -I../../include
TARGET_ARCH ?= $(HOST_ARCH)
TARGET_OS ?= $(shell uname | tr A-Z a-z)
# Set required library paths.
# In the case of cross-compilation, set the libs to the correct ones under /usr/local/cuda/targets/<TARGET_ARCH>-<TARGET_OS>/lib
ifeq ($(OS), Windows_NT)
LIB_PATH ?= ..\..\lib64
else
ifneq ($(TARGET_ARCH), $(HOST_ARCH))
INCLUDES += -I$(CUDA_INSTALL_PATH)/targets/$(HOST_ARCH)-$(shell uname | tr A-Z a-z)/include
INCLUDES += -I$(CUDA_INSTALL_PATH)/targets/$(TARGET_ARCH)-$(TARGET_OS)/include
LIB_PATH ?= $(CUDA_INSTALL_PATH)/targets/$(TARGET_ARCH)-$(TARGET_OS)/lib
TARGET_CUDA_PATH = -L $(LIB_PATH)/stubs
else
EXTRAS_LIB_PATH := ../../lib64
LIB_PATH ?= $(CUDA_INSTALL_PATH)/lib64
endif
endif
ifeq ($(OS),Windows_NT)
export PATH := $(PATH):$(LIB_PATH)
LIBS= -lcuda -L $(LIB_PATH) -lcupti
OBJ = obj
else
ifeq ($(OS), Darwin)
export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(LIB_PATH)
LIBS= -Xlinker -framework -Xlinker cuda -L $(LIB_PATH) -lcupti
else
LIBS :=
ifeq ($(HOST_ARCH), $(TARGET_ARCH))
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(LIB_PATH)
LIBS = -L $(EXTRAS_LIB_PATH)
endif
LIBS += $(TARGET_CUDA_PATH) -lcuda -L $(LIB_PATH) -lcupti
endif
OBJ = o
endif
# Point to the necessary cross-compiler.
NVCCFLAGS :=
ifneq ($(TARGET_ARCH), $(HOST_ARCH))
ifeq ($(TARGET_ARCH), aarch64)
ifeq ($(TARGET_OS), linux)
HOST_COMPILER ?= aarch64-linux-gnu-g++
else ifeq ($(TARGET_OS),qnx)
ifeq ($(QNX_HOST),)
$(error ERROR - QNX_HOST must be passed to the QNX host toolchain)
endif
ifeq ($(QNX_TARGET),)
$(error ERROR - QNX_TARGET must be passed to the QNX target toolchain)
endif
HOST_COMPILER ?= $(QNX_HOST)/usr/bin/q++
NVCCFLAGS := --qpp-config 5.4.0,gcc_ntoaarch64le
endif
endif
ifdef HOST_COMPILER
NVCC_COMPILER := -ccbin $(HOST_COMPILER)
endif
endif
mem: mem.$(OBJ)
$(NVCC) $(NVCC_COMPILER) $(NVCCFLAGS) -o build/$@ build/mem.$(OBJ) $(LIBS) $(INCLUDES)
mem.$(OBJ): mem.cu
$(NVCC) $(NVCC_COMPILER) $(NVCCFLAGS) -c $(INCLUDES) -o build/mem.$(OBJ) $<
run: mem
./build/$<
clean:
rm -f mem mem.$(OBJ) && rm result*