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
154
155
156
157
158
159
160
161
162
|
include tnet.mk
##### Check that CUDA Toolkit directory was set
ifneq ($(HAVE_CUDA), true)
$(warning %%% WARNING!!!)
$(warning %%% CUDA not found! Incorrect path in CUDA_TK_BASE: $(CUDA_TK_BASE))
$(warning %%% Try setting CUDA_TK_BASE in 'trunk/src/tnet.mk')
$(warning %%% WARNING!!!)
else
#$(warning %%% INFO: Using CUDA from CUDA_TK_BASE: $(CUDA_TK_BASE))
endif
##### Includes
INCLUDE := -IKaldiLib -ITNetLib -ISTKLib
INCLUDE += -ICuBaseLib -ICuTNetLib
INCLUDE += -I$(CUDA_TK_BASE)/include
CXXFLAGS += $(INCLUDE)
##### CPU implementation libs
LDFLAGS := -LTNetLib -lTNetLib
LDFLAGS += -LKaldiLib -lKaldiLib
LDFLAGS += -pthread
##### Link with GotoBLAS
ifeq ($(BITS64), true)
LDFLAGS += -LGotoBLASLib -lgoto2_64 -lgfortran
else
LDFLAGS += -LGotoBLASLib -lgoto2 -lgfortran
endif
LDFLAGS += -Wl,-rpath,$(PWD)/GotoBLASLib
##### CUDA implementation libs
ifeq ($(CUDA), true)
#TNet libs
LDFLAGS_CUDA := -LCuTNetLib -lCuTNet
LDFLAGS_CUDA += -LCuBaseLib -lCuBase
#CUDA toolkit libs
ifeq ($(BITS64), true)
LDFLAGS_CUDA += -L$(CUDA_TK_BASE)/lib64 -Wl,-rpath,$(CUDA_TK_BASE)/lib64
else
LDFLAGS_CUDA += -L$(CUDA_TK_BASE)/lib -Wl,-rpath,$(CUDA_TK_BASE)/lib
endif
LDFLAGS_CUDA += -lcublas -lcudart -lcuda
endif
##############################################################
# Target programs
##############################################################
#CPU tools
BINS := TNet TNorm TFeaCat TSegmenter TJoiner
all : $(BINS)
$(BINS): lib
#GPU tools
CUBINS := TNetCu TNormCu TFeaCatCu TRbmCu TRecurrentCu
ifeq ($(STK), true)
CUBINS += TMpeCu TMmiCu
endif
ifeq ($(CUDA), true)
cubins : $(CUBINS)
##HINT: Link CUDA libs only with CUDA tools!!!##
##(recursive target-specific variable value)##
cubins : LDFLAGS += $(LDFLAGS_CUDA)
##
all : cubins
$(CUBINS): lib culib
endif
##############################################################
# program compliling implicit rule
##############################################################
% : %.o
$(CXX) -o $@ $< $(CXXFLAGS) $(INCLUDE) $(LDFLAGS)
##############################################################
# module compliling implicit rule
##############################################################
%.o : %.cc lib
$(CXX) -o $@ -c $< $(CFLAGS) $(CXXFLAGS) $(INCLUDE)
##############################################################
# STK specific rules
##############################################################
#TMpeCu depends on STK
TMpeCu.o: stklib
TMpeCu: LDFLAGS := -LSTKLib -lSTKLib $(LDFLAGS) $(LDFLAGS_CUDA)
#TMmiCu depends on STK
TMmiCu.o: stklib
TMmiCu: LDFLAGS := -LSTKLib -lSTKLib $(LDFLAGS) $(LDFLAGS_CUDA)
##############################################################
# Source files for CPU/GPU tools
##############################################################
CC_BINS=$(addsuffix .cc, $(BINS))
CC_CUBINS=$(addsuffix .cc, $(CUBINS))
O_BINS=$(addsuffix .o, $(BINS))
O_CUBINS=$(addsuffix .o, $(CUBINS))
$(O_BINS) : $(CC_BINS)
$(O_CUBINS) : $(CC_CUBINS)
$(BINS) : $(O_BINS)
$(CUBINS) : $(O_CUBINS)
##############################################################
.PHONY: lib culib stklib clean doc depend
lib:
@cd KaldiLib && make $(FWDPARAM)
@cd TNetLib && make $(FWDPARAM)
culib:
@cd CuBaseLib && make $(FWDPARAM)
@cd CuTNetLib && make $(FWDPARAM)
stklib:
@cd STKLib && make $(FWDPARAM)
clean:
rm -f *.o $(BINS) $(CUBINS)
@cd STKLib && make clean
@cd KaldiLib && make clean
@cd TNetLib && make clean
@cd CuBaseLib && make clean
@cd CuTNetLib && make clean
doc:
doxygen ../doc/doxyfile_TNet
depend:
$(CXX) -M $(CXXFLAGS) $(CC_BINS) $(INCLUDE) > .depend.mk1
@cd KaldiLib && make depend
@cd TNetLib && make depend
touch .depend.mk{1,2}
cat .depend.mk{1,2} > .depend.mk
rm .depend.mk{1,2}
cudepend:
$(CXX) -M $(CXXFLAGS) $(CC_CUBINS) $(INCLUDE) > .depend.mk2
@cd CuBaseLib && make depend
@cd CuTNetLib && make depend
ifeq ($(HAVE_CUDA), true)
depend: cudepend
endif
ifeq ($(STK), true)
cudepend: stklib
endif
-include .depend.mk
|