Makefile 9.18 KB
Newer Older
1
# Makefile
2

3 4
include config.mak

Oka Motofumi's avatar
Oka Motofumi committed
5 6 7 8
vpath %.c $(SRCPATH)
vpath %.h $(SRCPATH)
vpath %.S $(SRCPATH)
vpath %.asm $(SRCPATH)
Henrik Gramner's avatar
Henrik Gramner committed
9
vpath %.rc $(SRCPATH)
Oka Motofumi's avatar
Oka Motofumi committed
10

Steve Borho's avatar
Steve Borho committed
11 12
GENERATED =

13
all: default
Henrik Gramner's avatar
Henrik Gramner committed
14
default:
15

16 17
SRCS = common/mc.c common/predict.c common/pixel.c common/macroblock.c \
       common/frame.c common/dct.c common/cpu.c common/cabac.c \
18
       common/common.c common/osdep.c common/rectangle.c \
19
       common/set.c common/quant.c common/deblock.c common/vlc.c \
20
       common/mvpred.c common/bitstream.c \
21 22
       encoder/analyse.c encoder/me.c encoder/ratecontrol.c \
       encoder/set.c encoder/macroblock.c encoder/cabac.c \
Steven Walters's avatar
Steven Walters committed
23
       encoder/cavlc.c encoder/encoder.c encoder/lookahead.c
Laurent Aimar's avatar
Laurent Aimar committed
24

25 26 27 28 29
SRCCLI = x264.c input/input.c input/timecode.c input/raw.c input/y4m.c \
         output/raw.c output/matroska.c output/matroska_ebml.c \
         output/flv.c output/flv_bytestream.c filters/filters.c \
         filters/video/video.c filters/video/source.c filters/video/internal.c \
         filters/video/resize.c filters/video/cache.c filters/video/fix_vfr_pts.c \
30
         filters/video/select_every.c filters/video/crop.c filters/video/depth.c
31

32
SRCSO =
Henrik Gramner's avatar
Henrik Gramner committed
33 34 35
OBJS =
OBJSO =
OBJCLI =
36

Anton Mitrofanov's avatar
Anton Mitrofanov committed
37 38
OBJCHK = tools/checkasm.o

Diogo Franco's avatar
Diogo Franco committed
39
CONFIG := $(shell cat config.h)
40

41
# GPL-only files
42
ifneq ($(findstring HAVE_GPL 1, $(CONFIG)),)
43 44 45
SRCCLI +=
endif

46
# Optional module sources
47
ifneq ($(findstring HAVE_AVS 1, $(CONFIG)),)
48
SRCCLI += input/avs.c
49 50
endif

51
ifneq ($(findstring HAVE_THREAD 1, $(CONFIG)),)
52
SRCCLI += input/thread.c
53
SRCS   += common/threadpool.c
54 55
endif

56 57 58 59
ifneq ($(findstring HAVE_WIN32THREAD 1, $(CONFIG)),)
SRCS += common/win32thread.c
endif

60
ifneq ($(findstring HAVE_LAVF 1, $(CONFIG)),)
61 62 63
SRCCLI += input/lavf.c
endif

64
ifneq ($(findstring HAVE_FFMS 1, $(CONFIG)),)
65 66 67
SRCCLI += input/ffms.c
endif

68
ifneq ($(findstring HAVE_GPAC 1, $(CONFIG)),)
69 70
SRCCLI += output/mp4.c
endif
Loren Merritt's avatar
Loren Merritt committed
71

Loren Merritt's avatar
Loren Merritt committed
72
# Visualization sources
73
ifneq ($(findstring HAVE_VISUALIZE 1, $(CONFIG)),)
Loren Merritt's avatar
Loren Merritt committed
74 75 76
SRCS   += common/visualize.c common/display-x11.c
endif

77
# MMX/SSE optims
78
ifneq ($(AS),)
79
X86SRC0 = const-a.asm cabac-a.asm dct-a.asm deblock-a.asm mc-a.asm \
80
          mc-a2.asm pixel-a.asm predict-a.asm quant-a.asm \
81
          cpu-a.asm dct-32.asm bitstream-a.asm
82
ifneq ($(findstring HIGH_BIT_DEPTH, $(CONFIG)),)
83 84 85 86
X86SRC0 += sad16-a.asm
else
X86SRC0 += sad-a.asm
endif
87 88 89
X86SRC = $(X86SRC0:%=common/x86/%)

ifeq ($(ARCH),X86)
Loren Merritt's avatar
Loren Merritt committed
90 91
ARCH_X86 = yes
ASMSRC   = $(X86SRC) common/x86/pixel-32.asm
92
ASFLAGS += -DARCH_X86_64=0
93
endif
94

Loren Merritt's avatar
Loren Merritt committed
95
ifeq ($(ARCH),X86_64)
Loren Merritt's avatar
Loren Merritt committed
96
ARCH_X86 = yes
97
ASMSRC   = $(X86SRC:-32.asm=-64.asm) common/x86/trellis-64.asm
98
ASFLAGS += -DARCH_X86_64=1
Loren Merritt's avatar
Loren Merritt committed
99 100 101
endif

ifdef ARCH_X86
Oka Motofumi's avatar
Oka Motofumi committed
102
ASFLAGS += -I$(SRCPATH)/common/x86/
103
SRCS   += common/x86/mc-c.c common/x86/predict-c.c
Loren Merritt's avatar
Loren Merritt committed
104
OBJASM  = $(ASMSRC:%.asm=%.o)
Loren Merritt's avatar
Loren Merritt committed
105
$(OBJASM): common/x86/x86inc.asm common/x86/x86util.asm
Anton Mitrofanov's avatar
Anton Mitrofanov committed
106
OBJCHK += tools/checkasm-a.o
Loren Merritt's avatar
Loren Merritt committed
107
endif
108
endif
Loren Merritt's avatar
Loren Merritt committed
109

110 111
# AltiVec optims
ifeq ($(ARCH),PPC)
112
ifneq ($(AS),)
David Conrad's avatar
David Conrad committed
113 114 115
SRCS += common/ppc/mc.c common/ppc/pixel.c common/ppc/dct.c \
        common/ppc/quant.c common/ppc/deblock.c \
        common/ppc/predict.c
116
endif
117
endif
118

119 120 121
# NEON optims
ifeq ($(ARCH),ARM)
ifneq ($(AS),)
122
ASMSRC += common/arm/cpu-a.S common/arm/pixel-a.S common/arm/mc-a.S \
123 124 125
          common/arm/dct-a.S common/arm/quant-a.S common/arm/deblock-a.S \
          common/arm/predict-a.S
SRCS   += common/arm/mc-c.c common/arm/predict-c.c
126 127 128 129
OBJASM  = $(ASMSRC:%.S=%.o)
endif
endif

130
# VIS optims
Sean McGovern's avatar
Sean McGovern committed
131
ifeq ($(ARCH),UltraSPARC)
132
ifeq ($(findstring HIGH_BIT_DEPTH, $(CONFIG)),)
133 134 135
ASMSRC += common/sparc/pixel.asm
OBJASM  = $(ASMSRC:%.asm=%.o)
endif
136
endif
137

138
ifneq ($(HAVE_GETOPT_LONG),1)
139
SRCCLI += extras/getopt.c
140 141
endif

Steven Walters's avatar
Steven Walters committed
142
ifeq ($(SYS),WINDOWS)
Henrik Gramner's avatar
Henrik Gramner committed
143 144 145 146
OBJCLI += $(if $(RC), x264res.o)
ifneq ($(SONAME),)
SRCSO  += x264dll.c
OBJSO  += $(if $(RC), x264res.dll.o)
147 148 149
endif
endif

Steve Borho's avatar
Steve Borho committed
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
QUOTED_CFLAGS := $(CFLAGS)

ifeq ($(HAVE_OPENCL),yes)
empty:=
space:=$(empty) $(empty)
escaped:=\ $(empty)
open:=(
escopen:=\(
close:=)
escclose:=\)
SAFE_INC_DIR := $(subst $(space),$(escaped),$(OPENCL_INC_DIR))
SAFE_INC_DIR := $(subst $(open),$(escopen),$(SAFE_INC_DIR))
SAFE_INC_DIR := $(subst $(close),$(escclose),$(SAFE_INC_DIR))
SAFE_LIB_DIR := $(subst $(space),$(escaped),$(OPENCL_LIB_DIR))
SAFE_LIB_DIR := $(subst $(open),$(escopen),$(SAFE_LIB_DIR))
SAFE_LIB_DIR := $(subst $(close),$(escclose),$(SAFE_LIB_DIR))
# For normal CFLAGS and LDFLAGS, we must escape spaces with a backslash to
# make gcc happy
CFLAGS += -I$(SAFE_INC_DIR) -DCL_USE_DEPRECATED_OPENCL_1_1_APIS
LDFLAGS += -l$(OPENCL_LIB) -L$(SAFE_LIB_DIR)
# For the CFLAGS used by the .depend rule, we must add quotes because
# the rule does an extra level of shell expansions
QUOTED_CFLAGS += -I"$(OPENCL_INC_DIR)" -DCL_USE_DEPRECATED_OPENCL_1_1_APIS
common/oclobj.h: common/opencl/x264-cl.h $(wildcard $(SRCPATH)/common/opencl/*.cl)
	cat $^ | perl $(SRCPATH)/tools/cltostr.pl x264_opencl_source > $@
GENERATED += common/oclobj.h
SRCS += common/opencl.c encoder/slicetype-cl.c
endif

Henrik Gramner's avatar
Henrik Gramner committed
179 180 181
OBJS   += $(SRCS:%.c=%.o)
OBJCLI += $(SRCCLI:%.c=%.o)
OBJSO  += $(SRCSO:%.c=%.o)
Laurent Aimar's avatar
Laurent Aimar committed
182

Anton Mitrofanov's avatar
Anton Mitrofanov committed
183
.PHONY: all default fprofiled clean distclean install uninstall lib-static lib-shared cli install-lib-dev install-lib-static install-lib-shared install-cli
184

Nikoli's avatar
Nikoli committed
185 186 187
cli: x264$(EXE)
lib-static: $(LIBX264)
lib-shared: $(SONAME)
Laurent Aimar's avatar
Laurent Aimar committed
188

Steve Borho's avatar
Steve Borho committed
189
$(LIBX264): $(GENERATED) .depend $(OBJS) $(OBJASM)
Anton Mitrofanov's avatar
Anton Mitrofanov committed
190
	rm -f $(LIBX264)
Steven Walters's avatar
Steven Walters committed
191 192
	$(AR)$@ $(OBJS) $(OBJASM)
	$(if $(RANLIB), $(RANLIB) $@)
Laurent Aimar's avatar
Laurent Aimar committed
193

Steve Borho's avatar
Steve Borho committed
194
$(SONAME): $(GENERATED) .depend $(OBJS) $(OBJASM) $(OBJSO)
Steven Walters's avatar
Steven Walters committed
195
	$(LD)$@ $(OBJS) $(OBJASM) $(OBJSO) $(SOFLAGS) $(LDFLAGS)
196

Anton Mitrofanov's avatar
Anton Mitrofanov committed
197 198 199 200 201 202
ifneq ($(EXE),)
.PHONY: x264 checkasm
x264: x264$(EXE)
checkasm: checkasm$(EXE)
endif

Steve Borho's avatar
Steve Borho committed
203
x264$(EXE): $(GENERATED) .depend $(OBJCLI) $(CLI_LIBX264)
Nikoli's avatar
Nikoli committed
204
	$(LD)$@ $(OBJCLI) $(CLI_LIBX264) $(LDFLAGSCLI) $(LDFLAGS)
Loren Merritt's avatar
Loren Merritt committed
205

Steve Borho's avatar
Steve Borho committed
206
checkasm$(EXE): $(GENERATED) .depend $(OBJCHK) $(LIBX264)
Anton Mitrofanov's avatar
Anton Mitrofanov committed
207 208 209
	$(LD)$@ $(OBJCHK) $(LIBX264) $(LDFLAGS)

$(OBJS) $(OBJASM) $(OBJSO) $(OBJCLI) $(OBJCHK): .depend
Laurent Aimar's avatar
Laurent Aimar committed
210 211 212

%.o: %.asm
	$(AS) $(ASFLAGS) -o $@ $<
Steven Walters's avatar
Steven Walters committed
213
	-@ $(if $(STRIP), $(STRIP) -x $@) # delete local/anonymous symbols, so they don't show up in oprofile
214 215 216

%.o: %.S
	$(AS) $(ASFLAGS) -o $@ $<
Steven Walters's avatar
Steven Walters committed
217
	-@ $(if $(STRIP), $(STRIP) -x $@) # delete local/anonymous symbols, so they don't show up in oprofile
218

Henrik Gramner's avatar
Henrik Gramner committed
219
%.dll.o: %.rc x264.h
220
	$(RC) $(RCFLAGS)$@ -DDLL $<
Henrik Gramner's avatar
Henrik Gramner committed
221 222

%.o: %.rc x264.h
223
	$(RC) $(RCFLAGS)$@ $<
Henrik Gramner's avatar
Henrik Gramner committed
224

225
.depend: config.mak
226
	@rm -f .depend
Steve Borho's avatar
Steve Borho committed
227
	@$(foreach SRC, $(addprefix $(SRCPATH)/, $(SRCS) $(SRCCLI) $(SRCSO)), $(CC) $(QUOTED_CFLAGS) $(SRC) $(DEPMT) $(SRC:$(SRCPATH)/%.c=%.o) $(DEPMM) 1>> .depend;)
Laurent Aimar's avatar
Laurent Aimar committed
228

229 230
config.mak:
	./configure
231

Laurent Aimar's avatar
Laurent Aimar committed
232 233 234 235 236
depend: .depend
ifneq ($(wildcard .depend),)
include .depend
endif

Loren Merritt's avatar
Loren Merritt committed
237
SRC2 = $(SRCS) $(SRCCLI)
238
# These should cover most of the important codepaths
239
OPT0 = --crf 30 -b1 -m1 -r1 --me dia --no-cabac --direct temporal --ssim --no-weightb
Fiona Glaser's avatar
Fiona Glaser committed
240 241
OPT1 = --crf 16 -b2 -m3 -r3 --me hex --no-8x8dct --direct spatial --no-dct-decimate -t0  --slice-max-mbs 50
OPT2 = --crf 26 -b4 -m5 -r2 --me hex --cqm jvt --nr 100 --psnr --no-mixed-refs --b-adapt 2 --slice-max-size 1500
242
OPT3 = --crf 18 -b3 -m9 -r5 --me umh -t1 -A all --b-pyramid normal --direct auto --no-fast-pskip --no-mbtree
Fiona Glaser's avatar
Fiona Glaser committed
243
OPT4 = --crf 22 -b3 -m7 -r4 --me esa -t2 -A all --psy-rd 1.0:1.0 --slices 4
Fiona Glaser's avatar
Fiona Glaser committed
244
OPT5 = --frames 50 --crf 24 -b3 -m10 -r3 --me tesa -t2
245
OPT6 = --frames 50 -q0 -m9 -r2 --me hex -Aall
246
OPT7 = --frames 50 -q0 -m2 -r1 --me hex --no-cabac
247 248 249 250 251

ifeq (,$(VIDS))
fprofiled:
	@echo 'usage: make fprofiled VIDS="infile1 infile2 ..."'
	@echo 'where infiles are anything that x264 understands,'
Loren Merritt's avatar
Loren Merritt committed
252
	@echo 'i.e. YUV with resolution in the filename, y4m, or avisynth.'
253 254
else
fprofiled:
Loren Merritt's avatar
Loren Merritt committed
255
	$(MAKE) clean
Steven Walters's avatar
Steven Walters committed
256
	$(MAKE) x264$(EXE) CFLAGS="$(CFLAGS) $(PROF_GEN_CC)" LDFLAGS="$(LDFLAGS) $(PROF_GEN_LD)"
257
	$(foreach V, $(VIDS), $(foreach I, 0 1 2 3 4 5 6 7, ./x264$(EXE) $(OPT$I) --threads 1 $(V) -o $(DEVNULL) ;))
258
	rm -f $(SRC2:%.c=%.o)
Steven Walters's avatar
Steven Walters committed
259 260
	$(MAKE) CFLAGS="$(CFLAGS) $(PROF_USE_CC)" LDFLAGS="$(LDFLAGS) $(PROF_USE_LD)"
	rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno) *.dyn pgopti.dpi pgopti.dpi.lock
261 262
endif

Laurent Aimar's avatar
Laurent Aimar committed
263
clean:
Steven Walters's avatar
Steven Walters committed
264
	rm -f $(OBJS) $(OBJASM) $(OBJCLI) $(OBJSO) $(SONAME) *.a *.lib *.exp *.pdb x264 x264.exe .depend TAGS
Steve Borho's avatar
Steve Borho committed
265
	rm -f checkasm checkasm.exe $(OBJCHK) $(GENERATED) x264_lookahead.clbin
Steven Walters's avatar
Steven Walters committed
266
	rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno) *.dyn pgopti.dpi pgopti.dpi.lock
Laurent Aimar's avatar
Laurent Aimar committed
267

Måns Rullgård's avatar
Måns Rullgård committed
268
distclean: clean
Steven Walters's avatar
Steven Walters committed
269
	rm -f config.mak x264_config.h config.h config.log x264.pc x264.def
Laurent Aimar's avatar
Laurent Aimar committed
270

Nikoli's avatar
Nikoli committed
271
install-cli: cli
272
	install -d $(DESTDIR)$(bindir)
Nikoli's avatar
Nikoli committed
273 274 275
	install x264$(EXE) $(DESTDIR)$(bindir)

install-lib-dev:
276 277 278
	install -d $(DESTDIR)$(includedir)
	install -d $(DESTDIR)$(libdir)
	install -d $(DESTDIR)$(libdir)/pkgconfig
Oka Motofumi's avatar
Oka Motofumi committed
279
	install -m 644 $(SRCPATH)/x264.h $(DESTDIR)$(includedir)
280
	install -m 644 x264_config.h $(DESTDIR)$(includedir)
Loren Merritt's avatar
Loren Merritt committed
281
	install -m 644 x264.pc $(DESTDIR)$(libdir)/pkgconfig
Nikoli's avatar
Nikoli committed
282 283 284

install-lib-static: lib-static install-lib-dev
	install -m 644 $(LIBX264) $(DESTDIR)$(libdir)
Steven Walters's avatar
Steven Walters committed
285
	$(if $(RANLIB), $(RANLIB) $(DESTDIR)$(libdir)/$(LIBX264))
Nikoli's avatar
Nikoli committed
286 287

install-lib-shared: lib-shared install-lib-dev
288 289 290 291 292 293 294
ifneq ($(IMPLIBNAME),)
	install -d $(DESTDIR)$(bindir)
	install -m 755 $(SONAME) $(DESTDIR)$(bindir)
	install -m 644 $(IMPLIBNAME) $(DESTDIR)$(libdir)
else ifneq ($(SONAME),)
	ln -f -s $(SONAME) $(DESTDIR)$(libdir)/libx264.$(SOSUFFIX)
	install -m 755 $(SONAME) $(DESTDIR)$(libdir)
Zuxy Meng's avatar
Zuxy Meng committed
295
endif
Loren Merritt's avatar
Loren Merritt committed
296

Loren Merritt's avatar
Loren Merritt committed
297
uninstall:
298
	rm -f $(DESTDIR)$(includedir)/x264.h $(DESTDIR)$(includedir)/x264_config.h $(DESTDIR)$(libdir)/libx264.a
299
	rm -f $(DESTDIR)$(bindir)/x264$(EXE) $(DESTDIR)$(libdir)/pkgconfig/x264.pc
300 301 302 303 304
ifneq ($(IMPLIBNAME),)
	rm -f $(DESTDIR)$(bindir)/$(SONAME) $(DESTDIR)$(libdir)/$(IMPLIBNAME)
else ifneq ($(SONAME),)
	rm -f $(DESTDIR)$(libdir)/$(SONAME) $(DESTDIR)$(libdir)/libx264.$(SOSUFFIX)
endif
Loren Merritt's avatar
Loren Merritt committed
305

Måns Rullgård's avatar
Måns Rullgård committed
306 307 308 309
etags: TAGS

TAGS:
	etags $(SRCS)