2b30f8beb9ae8df17cab5d8493259c781104f173
[x262.git] / Makefile
1 # Makefile
2
3 include config.mak
4
5 SRCS = common/mc.c common/predict.c common/pixel.c common/macroblock.c \
6        common/frame.c common/dct.c common/cpu.c common/cabac.c \
7        common/common.c common/mdate.c common/csp.c common/set.c \
8        common/quant.c \
9        encoder/analyse.c encoder/me.c encoder/ratecontrol.c \
10        encoder/set.c encoder/macroblock.c encoder/cabac.c \
11        encoder/cavlc.c encoder/encoder.c encoder/eval.c
12
13 SRCCLI = x264.c matroska.c muxers.c
14
15 # Visualization sources
16 ifeq ($(VIS),yes)
17 SRCS   += common/visualize.c common/display-x11.c
18 endif
19
20 # MMX/SSE optims
21 ifeq ($(ARCH),X86)
22 SRCS   += common/i386/mc-c.c common/i386/predict-c.c
23 ASMSRC  = common/i386/dct-a.asm common/i386/cpu-a.asm \
24           common/i386/pixel-a.asm common/i386/mc-a.asm \
25           common/i386/mc-a2.asm common/i386/predict-a.asm \
26           common/i386/pixel-sse2.asm common/i386/quant-a.asm \
27           common/i386/deblock-a.asm
28 OBJASM  = $(ASMSRC:%.asm=%.o)
29 ASFLAGS += -Icommon/i386/
30 endif
31
32 # MMX/SSE optims
33 ifeq ($(ARCH),X86_64)
34 SRCS   += common/i386/mc-c.c common/i386/predict-c.c
35 ASMSRC  = common/amd64/dct-a.asm common/amd64/cpu-a.asm \
36           common/amd64/pixel-a.asm common/amd64/mc-a.asm \
37           common/amd64/mc-a2.asm common/amd64/predict-a.asm \
38           common/amd64/pixel-sse2.asm common/amd64/quant-a.asm \
39           common/amd64/deblock-a.asm
40 OBJASM  = $(ASMSRC:%.asm=%.o)
41 ASFLAGS += -Icommon/amd64
42 endif
43
44 # AltiVec optims
45 ifeq ($(ARCH),PPC)
46 SRCS += common/ppc/mc.c common/ppc/pixel.c common/ppc/dct.c \
47         common/ppc/quant.c
48 endif
49
50 # VIS optims
51 ifeq ($(ARCH),UltraSparc)
52 ASMSRC += common/sparc/pixel.asm
53 OBJASM  = $(ASMSRC:%.asm=%.o)
54 endif
55
56 ifneq ($(HAVE_GETOPT_LONG),1)
57 SRCS += extras/getopt.c
58 endif
59
60 OBJS = $(SRCS:%.c=%.o)
61 OBJCLI = $(SRCCLI:%.c=%.o)
62 DEP  = depend
63
64 .PHONY: all default fprofiled clean distclean install install-gtk uninstall dox test testclean
65 all: default
66
67 default: $(DEP) x264$(EXE)
68
69 libx264.a: .depend $(OBJS) $(OBJASM)
70         ar rc libx264.a $(OBJS) $(OBJASM)
71         ranlib libx264.a
72
73 $(SONAME): .depend $(OBJS) $(OBJASM)
74         $(CC) -shared -o $@ $(OBJS) $(OBJASM) -Wl,-soname,$(SONAME) $(LDFLAGS)
75
76 x264$(EXE): $(OBJCLI) libx264.a 
77         $(CC) -o $@ $+ $(LDFLAGS)
78
79 libx264gtk.a: muxers.o libx264.a
80         $(MAKE) -C gtk
81
82 checkasm: tools/checkasm.o libx264.a
83         $(CC) -o $@ $+ $(LDFLAGS)
84
85 common/amd64/*.o: common/amd64/amd64inc.asm
86 common/i386/*.o: common/i386/i386inc.asm
87 %.o: %.asm
88         $(AS) $(ASFLAGS) -o $@ $<
89 # delete local/anonymous symbols, so they don't show up in oprofile
90         -@ strip -x $@
91
92 .depend: config.mak
93         rm -f .depend
94 # Hacky - because gcc 2.9x doesn't have -MT
95         $(foreach SRC, $(SRCS) $(SRCCLI), ( $(ECHON) "`dirname $(SRC)`/" && $(CC) $(CFLAGS) $(SRC) -MM -g0 ) 1>> .depend;)
96
97 config.mak: $(wildcard .svn/entries */.svn/entries */*/.svn/entries)
98         ./configure $(CONFIGURE_ARGS)
99
100 depend: .depend
101 ifneq ($(wildcard .depend),)
102 include .depend
103 endif
104
105 SRC2 = $(SRCS) $(SRCCLI)
106 # These should cover most of the important codepaths
107 OPT0 = --crf 30 -b1 -m1 -r1 --me dia --no-cabac
108 OPT1 = --crf 18 -b2 -m3 -r3 --me hex -8 --cqm jvt --direct spatial
109 OPT2 = --crf 24 -b3 -m7 -r5 --me umh -8 -w -t1 -A all --b-pyramid --b-rdo --mixed-refs --direct auto
110
111 ifeq (,$(VIDS))
112 fprofiled:
113         @echo 'usage: make fprofiled VIDS="infile1 infile2 ..."'
114         @echo 'where infiles are anything that x264 understands,'
115         @echo 'i.e. YUV with resolution in the filename, y4m, or avisynth.'
116 else
117 fprofiled:
118         $(MAKE) clean
119         mv config.mak config.mak2
120         sed -e 's/CFLAGS.*/& -fprofile-generate/; s/LDFLAGS.*/& -fprofile-generate/' config.mak2 > config.mak
121         $(MAKE) x264$(EXE)
122         $(foreach V, $(VIDS), $(foreach I, 0 1 2, ./x264$(EXE) $(OPT$I) $(V) --progress -o $(DEVNULL) ;))
123         rm -f $(SRC2:%.c=%.o)
124         sed -e 's/CFLAGS.*/& -fprofile-use/; s/LDFLAGS.*/& -fprofile-use/' config.mak2 > config.mak
125         $(MAKE)
126         rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno)
127         mv config.mak2 config.mak
128 endif
129
130 clean:
131         rm -f $(OBJS) $(OBJASM) $(OBJCLI) $(SONAME) *.a x264 x264.exe .depend TAGS
132         rm -f checkasm checkasm.exe tools/checkasm.o
133         rm -f tools/avc2avi tools/avc2avi.exe tools/avc2avi.o
134         rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno)
135         - sed -e 's/ *-fprofile-\(generate\|use\)//g' config.mak > config.mak2 && mv config.mak2 config.mak
136         $(MAKE) -C gtk clean
137
138 distclean: clean
139         rm -f config.mak config.h x264.pc
140         rm -rf test/
141         $(MAKE) -C gtk distclean
142
143 install: x264 $(SONAME)
144         install -d $(DESTDIR)$(bindir) $(DESTDIR)$(includedir)
145         install -d $(DESTDIR)$(libdir) $(DESTDIR)$(libdir)/pkgconfig
146         install -m 644 x264.h $(DESTDIR)$(includedir)
147         install -m 644 libx264.a $(DESTDIR)$(libdir)
148         install -m 644 x264.pc $(DESTDIR)$(libdir)/pkgconfig
149         install x264 $(DESTDIR)$(bindir)
150         ranlib $(DESTDIR)$(libdir)/libx264.a
151         $(if $(SONAME), ln -sf $(SONAME) $(DESTDIR)$(libdir)/libx264.so)
152         $(if $(SONAME), install -m 755 $(SONAME) $(DESTDIR)$(libdir))
153
154 install-gtk: libx264gtk.a
155         $(MAKE) -C gtk install
156
157 uninstall:
158         rm -f $(DESTDIR)$(includedir)/x264.h $(DESTDIR)$(libdir)/libx264.a
159         rm -f $(DESTDIR)$(bindir)/x264 $(DESTDIR)$(libdir)/pkgconfig/x264.pc
160         $(if $(SONAME), rm -f $(DESTDIR)$(libdir)/$(SONAME) $(DESTDIR)$(libdir)/libx264.so)
161         $(MAKE) -C gtk uninstall
162
163 etags: TAGS
164
165 TAGS:
166         etags $(SRCS)
167
168 dox:
169         doxygen Doxyfile
170
171 ifeq (,$(VIDS))
172 test:
173         @echo 'usage: make test VIDS="infile1 infile2 ..."'
174         @echo 'where infiles are anything that x264 understands,'
175         @echo 'i.e. YUV with resolution in the filename, y4m, or avisynth.'
176 else
177 test:
178         perl tools/regression-test.pl --version=head,current --options='$(OPT0)' --options='$(OPT1)' --options='$(OPT2)' $(VIDS:%=--input=%)
179 endif
180
181 testclean:
182         rm -f test/*.log test/*.264
183         $(foreach DIR, $(wildcard test/x264-r*/), cd $(DIR) ; make clean ; cd ../.. ;)