Blame view
src/Makefile
6.42 KB
8dcb6dfcb first commit |
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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# This is the top-level Makefile for Kaldi. # Also see kaldi.mk which supplies options and some rules # used by the Makefiles in the subdirectories. SHELL := /bin/bash SUBDIRS = base matrix util feat cudafeat tree gmm transform \ fstext hmm lm decoder lat kws cudamatrix nnet \ bin fstbin gmmbin fgmmbin featbin cudafeatbin \ nnetbin latbin sgmm2 sgmm2bin nnet2 nnet3 rnnlm chain nnet3bin nnet2bin kwsbin \ ivector ivectorbin online2 online2bin lmbin chainbin rnnlmbin \ cudadecoder cudadecoderbin MEMTESTDIRS = base matrix util feat cudafeat tree gmm transform \ fstext hmm lm decoder lat nnet kws chain \ bin fstbin gmmbin fgmmbin featbin cudafeatbin \ nnetbin latbin sgmm2 nnet2 nnet3 rnnlm nnet2bin nnet3bin sgmm2bin kwsbin \ ivector ivectorbin online2 online2bin lmbin CUDAMEMTESTDIR = cudamatrix SUBDIRS_LIB = $(filter-out %bin, $(SUBDIRS)) KALDI_SONAME ?= libkaldi.so # Optional subdirectories EXT_SUBDIRS = online onlinebin # python-kaldi-decoding EXT_SUBDIRS_LIB = $(filter-out %bin, $(EXT_SUBDIRS)) include kaldi.mk # Reset the default goal, so that the all target will become default .DEFAULT_GOAL := all: $(SUBDIRS) matrix/test -echo Done mklibdir: test -d $(KALDILIBDIR) || mkdir $(KALDILIBDIR) #I don't want to call rm -rf rmlibdir: ifneq ($(KALDILIBDIR), ) -rm $(KALDILIBDIR)/*{.so,.a,.o} -rmdir $(KALDILIBDIR) else @true endif .PHONY: checkversion checkversion: ifeq ($(shell ./configure --version),$(CONFIGURE_VERSION)) @echo "The version of configure script matches kaldi.mk version. Good." else @echo "" @echo "The kaldi.mk file was generated using a different version of configure script. Please rerun the configure again" @test -f ./kaldi.mk && echo "Hint: Previous configure command line: " && head -n 2 ./kaldi.mk | grep configure | sed 's/^# *//g' @echo "" @false endif biglib: $(SUBDIRS_LIB) ifeq ($(KALDI_FLAVOR), dynamic) ifeq ($(shell uname), Darwin) $(CXX) -dynamiclib -o $(KALDILIBDIR)/libkaldi.dylib -install_name @rpath/libkaldi.dylib -framework Accelerate $(LDFLAGS) $(SUBDIRS_LIB:=/*.dylib) else ifeq ($(shell uname), Linux) #$(warning the following command will probably fail, in that case add -fPIC to your CXXFLAGS and remake all) $(CXX) -shared -o $(KALDILIBDIR)/$(KALDI_SONAME) -Wl,-soname=$(KALDI_SONAME),--whole-archive $(SUBDIRS_LIB:=/kaldi-*.a) $(LDLIBS) -Wl,--no-whole-archive else $(error Dynamic libraries not supported on this platform. Run configure with --static flag. ) endif endif endif biglibext: $(EXT_SUBDIRS_LIB) ifeq ($(KALDI_FLAVOR), dynamic) ifeq ($(shell uname), Darwin) $(CXX) -dynamiclib -o $(KALDILIBDIR)/libkaldi_ext.dylib -install_name @rpath/libkaldi_ext.dylib -framework Accelerate $(LDFLAGS) $(EXT_SUBDIRS_LIB:=/*.dylib) else ifeq ($(shell uname), Linux) #$(warning The following command will probably fail, in that case add -fPIC to your CXXFLAGS and remake all.) $(CXX) -shared -o $(KALDILIBDIR)/libkaldi_ext.so -Wl,-soname=libkaldi_ext.so,--whole-archive $(EXT_SUBDIRS_LIB:=/kaldi-*.a) -Wl,--no-whole-archive else $(error Dynamic libraries not supported on this platform. Run configure with --static flag. ) endif endif endif kaldi.mk: @[ -f kaldi.mk ] || { echo "kaldi.mk does not exist; you have to run ./configure"; exit 1; } # Compile optional stuff ext: ext_depend $(SUBDIRS) $(EXT_SUBDIRS) -echo Done check_portaudio: @[ -d ../tools/portaudio ] || ( cd ../tools; ./install_portaudio.sh ) clean: rmlibdir -for x in $(SUBDIRS) $(EXT_SUBDIRS); do $(MAKE) -C $$x clean; done distclean: clean -for x in $(SUBDIRS) $(EXT_SUBDIRS); do $(MAKE) -C $$x distclean; done test: $(addsuffix /test, $(SUBDIRS_LIB)) ext_test: $(addsuffix /test, $(EXT_SUBDIRS_LIB)) # Define an implicit rule, expands to e.g.: # base/test: base # $(MAKE) -C base test %/test: % mklibdir $(MAKE) -C $< test cudavalgrind: -for x in $(CUDAMEMTESTDIR); do $(MAKE) -C $$x valgrind || { echo "valgrind on $$x failed"; exit 1; }; done valgrind: -for x in $(MEMTESTDIRS); do $(MAKE) -C $$x valgrind || { echo "valgrind on $$x failed"; exit 1; }; done base/.depend.mk: $(MAKE) depend depend: $(addsuffix /depend, $(SUBDIRS)) %/depend: $(MAKE) -C $(dir $@) depend ext_depend: check_portaudio -for x in $(EXT_SUBDIRS); do $(MAKE) -C $$x depend; done .PHONY: $(SUBDIRS) $(SUBDIRS) : checkversion kaldi.mk mklibdir $(MAKE) -C $@ .PHONY: $(EXT_SUBDIRS) $(EXT_SUBDIRS) : checkversion kaldi.mk mklibdir ext_depend $(MAKE) -C $@ ### Dependency list ### # this is necessary for correct parallel compilation #1)The tools depend on all the libraries bin fstbin gmmbin fgmmbin sgmm2bin featbin cudafeatbin nnetbin nnet2bin nnet3bin chainbin latbin ivectorbin lmbin kwsbin online2bin rnnlmbin cudadecoderbin: \ base matrix util feat cudafeat tree gmm transform sgmm2 fstext hmm \ lm decoder lat cudamatrix nnet nnet2 nnet3 ivector chain kws online2 rnnlm \ cudadecoder #2)The libraries have inter-dependencies base: base/.depend.mk matrix: base util: base matrix feat: base matrix util gmm transform tree tree: base util matrix gmm: base util matrix tree transform: base util matrix gmm tree sgmm2: base util matrix gmm tree transform hmm fstext: base util matrix tree hmm: base tree matrix util lm: base util matrix fstext decoder: base util matrix gmm hmm tree transform lat fstext lat: base util hmm tree matrix cudamatrix: base util matrix nnet: base util hmm tree matrix cudamatrix nnet2: base util matrix lat gmm hmm tree transform cudamatrix nnet3: base util matrix decoder lat gmm hmm tree transform cudamatrix chain fstext rnnlm: base util matrix cudamatrix nnet3 lm hmm chain: lat hmm tree fstext matrix cudamatrix util base ivector: base util matrix transform tree gmm #3)Dependencies for optional parts of Kaldi onlinebin: base matrix util feat tree gmm transform sgmm2 fstext hmm lm decoder lat cudamatrix nnet nnet2 online # python-kaldi-decoding: base matrix util feat tree gmm transform sgmm2 fstext hmm decoder lat online cudafeat: base matrix util gmm transform tree feat cudamatrix online2 cudafeatbin: base matrix util gmm transform tree feat cudamatrix cudafeat online2 online: decoder gmm transform feat matrix util base lat hmm tree online2: decoder gmm transform feat matrix util base lat hmm tree ivector cudamatrix nnet2 nnet3 chain kws: base util hmm tree matrix lat cudadecoder: cudamatrix cudafeat online2 nnet3 ivector feat fstext lat chain transform cudadecoderbin: cudadecoder cudafeat cudamatrix online2 nnet3 ivector feat fstext lat chain transform |