-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makevars.win
97 lines (65 loc) · 2.59 KB
/
Makevars.win
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
USE_GPU = "FALSE"
CUDA_DIR = "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2"
USE_MPI = "FALSE"
# ------------------------------------------------------------------------------
CXX_STD = CXX14
R_SCMD = ${R_HOME}/bin${R_ARCH_BIN}/Rscript -e
# this is exactly what it looks like
$(shell ${R_SCMD} "cat(paste(sub('@USE_MPI@', '"${USE_MPI}"', sub('@USE_GPU@', '"${USE_GPU}"', readLines('../R/02-features.r.in'))), collapse='\n'), file='../R/02-features.r')")
FML_INCL = $(shell ${R_SCMD} "fmlh:::cppflags()")
FML_CPPFLAGS = $(FML_INCL)/fml/src
FLOAT_INCL = $(shell ${R_SCMD} "float:::cppflags()")
FLOAT_LIBS = $(shell ${R_SCMD} "float:::ldflags()")
R_CPPFLAGS = $(shell ${R_HOME}/bin${R_ARCH_BIN}/R CMD config --cppflags)
NVCC = $(CUDA_DIR)/bin/nvcc
CUDA_CFLAGS = -I"${CUDA_DIR}"/include
ifeq "$(WIN)" "64"
CUDA_LDFLAGS = -L"${CUDA_DIR}"/lib/x64
else
CUDA_LDFLAGS = -L"${CUDA_DIR}"/lib/Win32
endif
ifeq ($(USE_MPI), "TRUE")
MPI_INCLUDE = $(shell ${R_SCMD} "library(pbdMPI);get.conf('MPI_INCLUDE','"${R_ARCH}"','pbdMPI')")
SPMD_CPPFLAGS = -I"$(MPI_INCLUDE)"
SPMD_LDFLAGS = $(shell ${R_SCMD} "library(pbdMPI);get.conf('MPI_LIB','"${R_ARCH}"','pbdMPI')")
SLAP_LDFLAGS = $(shell ${R_SCMD} "library(pbdMPI);get.lib('R_SLAP','"${R_ARCH}"','pbdSLAP')")
endif
# set arch flags
PKG_LIBS_CPU = "${FLOAT_LIBS}" $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS_GPU = $(CUDA_LDFLAGS) -lcudart -lcublas -lcusolver -lcurand -lnvidia-ml
PKG_CPPFLAGS_MPI = $(SPMD_CPPFLAGS)
PKG_CXXFLAGS_MPI = $(SPMD_CPPFLAGS)
PKG_LIBS_MPI = $(SLAP_LDFLAGS) $(SPMD_LDFLAGS)
# flags
PKG_CPPFLAGS = $(FML_CPPFLAGS)
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
# libs and objects
R_OBJS = fmlr-native.o
CPU_OBJS = copy-cpu.o cpumat.o cpuvec.o dimops-cpu.o linalg-cpu.o stats-cpu.o
PKG_LIBS = $(PKG_LIBS_CPU)
ifeq ($(USE_GPU), "TRUE")
PKG_LIBS += $(PKG_LIBS_GPU)
GPU_OBJS = card.o copy-gpu.o dimops-gpu.o gpumat.o gpuvec.o linalg-gpu.o stats-gpu.o
else
PKG_LIBS = $(PKG_LIBS_MPI) $(PKG_LIBS_CPU)
GPU_OBJS = gpu-dummy-bindings.o
endif
ifeq ($(USE_MPI), "TRUE")
PKG_CPPFLAGS += $(PKG_CPPFLAGS_MPI)
PKG_CXXFLAGS += $(PKG_CXXFLAGS_MPI)
PKG_LIBS += $(PKG_LIBS_MPI)
MPI_OBJS = copy-mpi.o dimops-mpi.o grid.o linalg-mpi.o mpimat.o stats-mpi.o
else
MPI_OBJS = mpi-dummy-bindings.o
endif
OBJECTS = $(R_OBJS) $(CPU_OBJS) $(MPI_OBJS) $(GPU_OBJS)
# make
all: $(SHLIB)
ifeq ($(USE_GPU), "TRUE")
%.o: %.cu
$(NVCC) -DGPU -O2 -x cu -c -arch=sm_61 -Xcompiler "-fPIC $(FML_CPPFLAGS) $(FLOAT_INCL) $(R_CPPFLAGS) $(SPMD_CPPFLAGS)" $< -o $@
else
$(SHLIB): $(OBJECTS)
endif
clean:
@rm -rf *.o *.so *.dll $(SHLIB) $(OBJECTS)