summaryrefslogtreecommitdiff
path: root/src/Makefile
blob: eb071fbab5cc2cd0a1c8b732b96454d48f7e2c6e (plain)
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