forked from FlagOpen/FlagCX
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
153 lines (136 loc) · 4.01 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
BUILDDIR ?= $(abspath ./build)
# set to 0 if not provided
USE_NVIDIA ?= 0
USE_ILUVATAR_COREX ?= 0
USE_CAMBRICON ?= 0
USE_GLOO ?= 0
# set to empty if not provided
DEVICE_HOME ?=
CCL_HOME ?=
HOST_CCL_HOME ?=
ifeq ($(strip $(DEVICE_HOME)),)
ifeq ($(USE_NVIDIA), 1)
DEVICE_HOME = /usr/local/cuda
else ifeq ($(USE_ILUVATAR_COREX), 1)
DEVICE_HOME = /usr/local/corex
else ifeq ($(USE_CAMBRICON), 1)
DEVICE_HOME = $(NEUWARE_HOME)
else
DEVICE_HOME = /usr/local/cuda
endif
endif
ifeq ($(strip $(CCL_HOME)),)
ifeq ($(USE_NVIDIA), 1)
CCL_HOME = /usr/local/nccl/build
else ifeq ($(USE_ILUVATAR_COREX), 1)
CCL_HOME = /usr/local/corex
else ifeq ($(USE_CAMBRICON), 1)
CCL_HOME = $(NEUWARE_HOME)
else
CCL_HOME = /usr/local/nccl/build
endif
endif
ifeq ($(strip $(HOST_CCL_HOME)),)
ifeq ($(USE_GLOO), 1)
HOST_CCL_HOME = /usr/local
else
HOST_CCL_HOME =
endif
endif
DEVICE_LIB =
DEVICE_INCLUDE =
DEVICE_LINK =
CCL_LIB =
CCL_INCLUDE =
CCL_LINK =
HOST_CCL_LIB =
HOST_CCL_INCLUDE =
HOST_CCL_LINK =
ADAPTOR_FLAG =
HOST_CCL_ADAPTOR_FLAG =
ifeq ($(USE_NVIDIA), 1)
DEVICE_LIB = $(DEVICE_HOME)/lib64
DEVICE_INCLUDE = $(DEVICE_HOME)/include
DEVICE_LINK = -lcudart -lcuda
CCL_LIB = $(CCL_HOME)/lib
CCL_INCLUDE = $(CCL_HOME)/include
CCL_LINK = -lnccl
ADAPTOR_FLAG = -DUSE_NVIDIA_ADAPTOR
else ifeq ($(USE_ILUVATAR_COREX), 1)
DEVICE_LIB = $(DEVICE_HOME)/lib
DEVICE_INCLUDE = $(DEVICE_HOME)/include
DEVICE_LINK = -lcudart -lcuda
CCL_LIB = $(CCL_HOME)/lib
CCL_INCLUDE = $(CCL_HOME)/include
CCL_LINK = -lnccl
ADAPTOR_FLAG = -DUSE_ILUVATAR_COREX_ADAPTOR
else ifeq ($(USE_CAMBRICON), 1)
DEVICE_LIB = $(DEVICE_HOME)/lib64
DEVICE_INCLUDE = $(DEVICE_HOME)/include
DEVICE_LINK = -lcnrt
CCL_LIB = $(CCL_HOME)/lib64
CCL_INCLUDE = $(CCL_HOME)/include
CCL_LINK = -lcncl
ADAPTOR_FLAG = -DUSE_CAMBRICON_ADAPTOR
else
DEVICE_LIB = $(DEVICE_HOME)/lib64
DEVICE_INCLUDE = $(DEVICE_HOME)/include
DEVICE_LINK = -lcudart -lcuda
CCL_LIB = $(CCL_HOME)/lib
CCL_INCLUDE = $(CCL_HOME)/include
CCL_LINK = -lnccl
ADAPTOR_FLAG = -DUSE_NVIDIA_ADAPTOR
endif
ifeq ($(USE_GLOO), 1)
HOST_CCL_LIB = $(HOST_CCL_HOME)/lib
HOST_CCL_INCLUDE = $(HOST_CCL_HOME)/include
HOST_CCL_LINK = -lgloo
HOST_CCL_ADAPTOR_FLAG = -DUSE_GLOO_ADAPTOR
else
HOST_CCL_LIB = /usr/local/lib
HOST_CCL_INCLUDE = /usr/local/include
HOST_CCL_LINK =
HOST_CCL_ADAPTOR_FLAG =
endif
LIBDIR := $(BUILDDIR)/lib
OBJDIR := $(BUILDDIR)/obj
INCLUDEDIR := \
$(abspath flagcx/include) \
$(abspath flagcx/core) \
$(abspath flagcx/adaptor) \
$(abspath flagcx/service)
LIBSRCFILES:= \
$(wildcard flagcx/*.cc) \
$(wildcard flagcx/core/*.cc) \
$(wildcard flagcx/adaptor/*.cc) \
$(wildcard flagcx/service/*.cc)
LIBOBJ := $(LIBSRCFILES:%.cc=$(OBJDIR)/%.o)
TARGET = libflagcx.so
all: $(LIBDIR)/$(TARGET)
print_var:
@echo "DEVICE_HOME: $(DEVICE_HOME)"
@echo "CCL_HOME: $(CCL_HOME)"
@echo "HOST_CCL_HOME: $(HOST_CCL_HOME)"
@echo "USE_NVIDIA: $(USE_NVIDIA)"
@echo "USE_ILUVATAR_COREX: $(USE_ILUVATAR_COREX)"
@echo "USE_CAMBRICON: $(USE_CAMBRICON)"
@echo "USE_GLOO: $(USE_GLOO)"
@echo "DEVICE_LIB: $(DEVICE_LIB)"
@echo "DEVICE_INCLUDE: $(DEVICE_INCLUDE)"
@echo "CCL_LIB: $(CCL_LIB)"
@echo "CCL_INCLUDE: $(CCL_INCLUDE)"
@echo "HOST_CCL_LIB: $(HOST_CCL_LIB)"
@echo "HOST_CCL_INCLUDE: $(HOST_CCL_INCLUDE)"
@echo "ADAPTOR_FLAG: $(ADAPTOR_FLAG)"
@echo "HOST_CCL_ADAPTOR_FLAG: $(HOST_CCL_ADAPTOR_FLAG)"
$(LIBDIR)/$(TARGET): $(LIBOBJ)
@mkdir -p `dirname $@`
@echo "Linking $@"
@g++ $(LIBOBJ) -o $@ -L$(CCL_LIB) -L$(DEVICE_LIB) -L$(HOST_CCL_LIB) -shared -fvisibility=default -Wl,--no-as-needed -Wl,-rpath,$(LIBDIR) -Wl,-rpath,$(CCL_LIB) -Wl,-rpath,$(HOST_CCL_LIB) -lpthread -lrt -ldl $(CCL_LINK) $(DEVICE_LINK) $(HOST_CCL_LINK) -g
$(OBJDIR)/%.o: %.cc
@mkdir -p `dirname $@`
@echo "Compiling $@"
@g++ $< -o $@ $(foreach dir,$(INCLUDEDIR),-I$(dir)) -I$(CCL_INCLUDE) -I$(DEVICE_INCLUDE) -I$(HOST_CCL_INCLUDE) $(ADAPTOR_FLAG) $(HOST_CCL_ADAPTOR_FLAG) -c -fPIC -fvisibility=default -Wvla -Wno-unused-function -Wno-sign-compare -Wall -MMD -MP -g
-include $(LIBOBJ:.o=.d)
clean:
@rm -rf $(LIBDIR)/$(TARGET) $(OBJDIR)