-# Makefile: tuned for i386/MMX system only
+# Makefile
-# For FreeBSD, remove -DHAVE_MALLOC_H and add -DSYS_FREEBSD
+# Uncomment the line for your platform
+ARCH=X86
+#ARCH=PPC
-# Uncomment this for Mac OS X
-#SYS_MACOSX=1
+# Uncomment the line for you operating system
+SYS=LINUX
+#SYS=MACOSX
+#SYS=BEOS
+#SYS=FREEBSD
-SRCS_COMMON= core/mc.c core/predict.c core/pixel.c core/macroblock.c \
- core/frame.c core/dct.c core/cpu.c core/cabac.c \
- core/common.c core/mdate.c core/csp.c \
+SRCS_COMMON= common/mc.c common/predict.c common/pixel.c common/macroblock.c \
+ common/frame.c common/dct.c common/cpu.c common/cabac.c \
+ common/common.c common/mdate.c common/csp.c \
encoder/analyse.c encoder/me.c encoder/ratecontrol.c \
encoder/set.c encoder/macroblock.c encoder/cabac.c \
- encoder/cavlc.c encoder/encoder.c encoder/eval.c x264.c
+ encoder/cavlc.c encoder/encoder.c encoder/eval.c
-ifdef SYS_MACOSX
-PFLAGS=-DARCH_PPC -DSYS_MACOSX -faltivec
-SRCS= $(SRCS_COMMON) core/ppc/mc.c core/ppc/pixel.c
+# Compiler, global flags
+CC=gcc
+CFLAGS=-Wall -I. -O4 -funroll-loops -D__X264__ -DARCH_$(ARCH) -DSYS_$(SYS)
+ifdef NDEBUG
+CFLAGS+=-s -DNDEBUG
else
-PFLAGS=-DARCH_X86 -DHAVE_MMXEXT -DHAVE_SSE2 -DHAVE_MALLOC_H
-SRCS= $(SRCS_COMMON) core/i386/mc-c.c core/i386/dct-c.c core/i386/predict.c
-ASMSRC= core/i386/dct.asm core/i386/cpu.asm core/i386/pixel.asm core/i386/mc.asm
+CFLAGS+=-g -DDEBUG
+endif
+SRCS= $(SRCS_COMMON)
+
+# MMX/SSE optims
+ifeq ($(ARCH),X86)
+CFLAGS+=-DHAVE_MMXEXT -DHAVE_SSE2
+SRCS+= common/i386/mc-c.c common/i386/dct-c.c common/i386/predict.c
+ASMSRC= common/i386/dct-a.asm common/i386/cpu-a.asm \
+ common/i386/pixel-a.asm common/i386/mc-a.asm \
+ common/i386/mc-a2.asm common/i386/predict-a.asm
OBJASM= $(ASMSRC:%.asm=%.o)
endif
-CC=gcc
-CFLAGS=-g -Wall -I. -DDEBUG -O4 -funroll-loops -D__X264__ $(PFLAGS)
+# AltiVec optims
+ifeq ($(ARCH),PPC)
+ifeq ($(SYS),MACOSX)
+CFLAGS+=-faltivec
+else
+CFLAGS+=-maltivec -mabi=altivec
+endif
+SRCS+= common/ppc/mc.c common/ppc/pixel.c
+endif
+
+# stdint.h: everyone but BeOS
+ifneq ($(SYS),BEOS)
+CFLAGS+=-DHAVE_STDINT_H
+endif
+
+# malloc.h: everyone but OS X and FreeBSD
+ifneq ($(SYS),MACOSX)
+ifneq ($(SYS),FREEBSD)
+CFLAGS+=-DHAVE_MALLOC_H
+endif
+endif
+
+# Math libraries we have to link to
+ifneq ($(SYS),BEOS)
+MATHLIBS=-lm
+endif
+ifeq ($(SYS),MACOSX)
+MATHLIBS+=-lmx
+endif
AS= nasm
# for linux
ranlib libx264.a
x264: libx264.a x264.o
- $(CC) $(CFLAGS) -o x264 x264.o libx264.a -lm
+ $(CC) $(CFLAGS) -o x264 x264.o libx264.a $(MATHLIBS)
checkasm: testing/checkasm.c libx264.a
- $(CC) $(CFLAGS) -o checkasm $< libx264.a -lm
+ $(CC) $(CFLAGS) -o checkasm $< libx264.a $(MATHLIBS)
%.o: %.asm
$(AS) $(ASFLAGS) -o $@ $<
-.depend: $(SRCS) x264.c
- $(CC) -MM $(CFLAGS) $(SRCS) x264.c 1> .depend
+.depend: $(SRCS) x264.c config.h
+ rm -f .depend
+# Hacky - because gcc 2.9x doesn't have -MT
+ $(foreach SRC, $(SRCS) x264.c, ( echo -n "`dirname $(SRC)`/" && $(CC) $(CFLAGS) $(SRC) -MM -g0 ) 1>> .depend;)
+
+config.h: $(wildcard .svn/entries */.svn/entries */*/.svn/entries)
+ ./version.sh
depend: .depend
ifneq ($(wildcard .depend),)
endif
clean:
- rm -f $(OBJS) $(OBJASM) *.a x264.o .depend x264 TAGS
+ rm -f $(OBJS) $(OBJASM) config.h *.a x264.o .depend x264 TAGS
distclean: clean
+DIR_INSTALL="/usr/local"
+install: x264
+ install x264.h $(DIR_INSTALL)/include/
+ install libx264.a $(DIR_INSTALL)/lib/
+ install x264 $(DIR_INSTALL)/bin/
+
etags: TAGS
TAGS: