1 ifeq ($(KALDI_FLAVOR), dynamic)
2 ifeq ($(shell uname), Darwin)
3 XLDLIBS := $(LDLIBS)
4 ifdef LIBNAME
5 LIBFILE = lib$(LIBNAME).dylib
6 #LDLIBS += -l$(LIBNAME)
7 endif
8 LDFLAGS += -L$(KALDILIBDIR) -Wl,-rpath -Wl,$(KALDILIBDIR)
9 XDEPENDS = $(foreach dep,$(ADDLIBS), $(dir $(dep))/lib$(notdir $(basename $(dep))).dylib )
10 XLDLIBS += $(foreach dep,$(ADDLIBS), -l$(notdir $(basename $(dep))) )
11 else
12 ifeq ($(shell uname), Linux)
13 ifdef LIBNAME
14 LIBFILE = lib$(LIBNAME).so
15 #LDLIBS += -l$(LIBNAME)
16 endif
17 LDFLAGS += -Wl,-rpath=$(shell readlink -f $(KALDILIBDIR)) -L.
18 LDFLAGS += $(foreach dep,$(ADDLIBS), -L$(dir $(dep)) )
19 XDEPENDS = $(foreach dep,$(ADDLIBS), $(dir $(dep))/lib$(notdir $(basename $(dep))).so )
20 else # Platform not supported
21 $(error Dynamic libraries not supported on this platform. Run configure with --static flag. )
22 endif
23 endif
24 LDLIBS += $(foreach dep,$(ADDLIBS), -l$(notdir $(basename $(dep))) )
25 else
26 ifdef LIBNAME
27 LIBFILE = $(LIBNAME).a
28 endif
29 XDEPENDS = $(ADDLIBS)
30 endif
32 all: $(LIBFILE) $(BINFILES)
34 $(LIBFILE): $(OBJFILES)
35 $(AR) -cru $(LIBNAME).a $(OBJFILES)
36 $(RANLIB) $(LIBNAME).a
37 ifeq ($(KALDI_FLAVOR), dynamic)
38 ifeq ($(shell uname), Darwin)
39 $(CXX) -dynamiclib -o $@ -install_name @rpath/$@ -framework Accelerate $(LDFLAGS) $(XLDLIBS) $(OBJFILES) $(LDLIBS)
40 rm -f $(KALDILIBDIR)/$@; ln -s $(shell pwd)/$@ $(KALDILIBDIR)/$@
41 else
42 ifeq ($(shell uname), Linux)
43 # Building shared library from static (static was compiled with -fPIC)
44 $(CXX) -shared -o $@ -Wl,--no-undefined -Wl,--as-needed -Wl,-soname=$@,--whole-archive $(LIBNAME).a -Wl,--no-whole-archive $(LDFLAGS) $(XDEPENDS) $(LDLIBS)
45 rm -f $(KALDILIBDIR)/$@; ln -s $(shell pwd)/$@ $(KALDILIBDIR)/$@
46 #cp $@ $(KALDILIBDIR)
47 else # Platform not supported
48 $(error Dynamic libraries not supported on this platform. Run configure with --static flag. )
49 endif
50 endif
51 endif
54 $(BINFILES): $(LIBFILE) $(XDEPENDS)
57 # Rule below would expand to, e.g.:
58 # ../base/kaldi-base.a:
59 # make -c ../base kaldi-base.a
60 # -c option to make is same as changing directory.
61 %.a:
62 $(MAKE) -C ${@D} ${@F}
64 %.so:
65 $(MAKE) -C ${@D} ${@F}
67 clean:
68 -rm -f *.o *.a *.so $(TESTFILES) $(BINFILES) $(TESTOUTPUTS) tmp* *.tmp *.testlog
70 $(TESTFILES): $(LIBFILE) $(XDEPENDS)
72 test_compile: $(TESTFILES)
74 test: test_compile
75 @{ result=0; \
76 for x in $(TESTFILES); do \
77 printf "Running $$x ..."; \
78 ./$$x >$$x.testlog 2>1; \
79 if [ $$? -ne 0 ]; then \
80 echo "... FAIL $$x"; \
81 result=1; \
82 else \
83 echo "... SUCCESS"; \
84 rm -f $$x.testlog; \
85 fi; \
86 done; \
87 exit $$result; }
89 .valgrind: $(BINFILES) $(TESTFILES)
92 depend:
93 -$(CXX) -M $(CXXFLAGS) *.cc > .depend.mk
95 # removing automatic making of "depend" as it's quite slow.
96 #.depend.mk: depend
97 -include .depend.mk