diff -urN a/Makefile b/Makefile
--- a/Makefile	1969-12-31 17:00:00.000000000 -0700
+++ b/Makefile	2019-10-14 10:54:47.354841430 -0600
@@ -0,0 +1,363 @@
+
+_ARCH := $(shell uname -m)
+ARCH_I32 := $(shell expr "x$(_ARCH)" : 'xi[346]86.*')
+ARCH_X64 := $(shell expr "x$(_ARCH)" : 'x..._64*')
+
+ifneq ($(ARCH_I32),0)
+ASM_ARCH := elf32
+ARCH_X86_32 := 1
+ARCH_X86_64 := 0
+endif
+ifneq ($(ARCH_X64),0)
+ASM_ARCH := elf64
+ARCH_X86_32 := 0
+ARCH_X86_64 := 1
+endif
+
+BUILD=build
+DESTDIR=/
+PREFIX=usr/local
+LIBDIR=$(PREFIX)/lib
+INCDIR=$(PREFIX)/include
+# make Q="" for verbose
+Q?=@echo == $@; 
+OBJDIR?=$(BUILD)/static
+NASM_BLD=$(OBJDIR)/nasm
+ENTRY_BLD=$(OBJDIR)/entry
+SRC_BLD=$(OBJDIR)/src
+BIT8_BLD=$(OBJDIR)/bits8
+BIT16_BLD=$(OBJDIR)/bits16
+TOOLS_BLD=$(BUILD)/tools
+TESTS_BLD=$(BUILD)/tests
+
+STATIC_LIB=$(BUILD)/src/libdav1d.a
+SHARED_LIB=$(BUILD)/src/libdav1d.so
+DEFS= -DNDEBUG -D_FILE_OFFSET_BITS=64 -D_POSIX_C_SOURCE=200112L
+FUZZ= -DDAV1D_MT_FUZZING
+
+BLD_INCL= $(DEFS) -I. -Isrc -Iinclude/dav1d -Iinclude \
+	-I$(BUILD) -I$(BUILD)/include -I$(BUILD)/include/dav1d
+TOOLS_INCL= $(DEFS) -Itools -I. -I$(BUILD) -I$(BUILD)/tools \
+	-Iinclude -Iinclude/dav1d -I$(BUILD)/include/dav1d \
+	-I$(BUILD)/include -I/usr/include/SDL2
+
+NP?=.NOTPARALLEL:
+$(NP)
+MAKE_P:=$(MAKE) -j NP=""
+
+all: meson_data
+	$(MAKE_P) $(STATIC_LIB) OBJDIR=$(BUILD)/static
+	$(MAKE_P) $(SHARED_LIB) OBJDIR=$(BUILD)/shared
+# req SDL
+#	$(MAKE_P) $(TOOLS) OBJDIR=$(BUILD)/static
+#	$(MAKE_P) $(TESTS) OBJDIR=$(BUILD)/static
+
+CC_DEFS=\
+	-DNDEBUG \
+	-D_FILE_OFFSET_BITS=64 \
+	-D_POSIX_C_SOURCE=200112L \
+
+CC_OPTS=\
+	-pipe \
+	-Wall \
+	-Winvalid-pch \
+	-Wextra \
+	-std=c99 \
+	-O3 \
+	-fvisibility=hidden \
+	-Wundef \
+	-Werror=vla \
+	-Wno-maybe-uninitialized \
+	-Wno-missing-field-initializers \
+	-Wno-unused-parameter \
+	-Werror=missing-prototypes \
+	-fomit-frame-pointer \
+	-ffast-math \
+	-fPIC \
+	-mpreferred-stack-boundary=5 \
+	-MD -MQ $@ -MF $@.d \
+
+SHA_OPTS=\
+	-Wl,--no-undefined \
+	-Wl,--as-needed \
+	-Wl,-O1 \
+	-shared \
+	-fPIC \
+	-Wl,--start-group \
+	-Wl,-soname,libdav1d.so.2 \
+	-Wl,--end-group \
+	-pthread \
+
+CC_CC=$(Q)cc $(CC_OPTS) $(CFLAGS)
+NASM=$(Q)/usr/bin/nasm
+any=$(foreach i,$(2),$(1)/$(i))
+
+# nasm
+NASM_OBJS=$(call any,$(NASM_BLD), \
+	cdef.obj \
+	film_grain.obj \
+	ipred.obj \
+	itx.obj \
+	cdef_sse.obj \
+	ipred_ssse3.obj \
+	loopfilter.obj \
+	looprestoration.obj \
+	mc.obj \
+	itx_ssse3.obj \
+	looprestoration_ssse3.obj \
+	loopfilter_ssse3.obj \
+	mc_ssse3.obj \
+	cpuid.obj \
+	msac.obj )
+
+$(NASM_BLD)/%.obj: src/x86/%.asm
+	$(NASM) -f $(ASM_ARCH) \
+		-I src/ -I $(BUILD)/ -MQ $@ -MF $@.ndep \
+		$< -o $@
+
+# entry
+ENTRY_OBJS=$(call any,$(ENTRY_BLD), \
+	lib.c.o \
+	thread_task.c.o)
+$(ENTRY_BLD)/%.c.o: src/%.c
+	$(CC_CC) -Iinclude -Ibuild/include/dav1d -Isrc/entry $(BLD_INCL) \
+		-mincoming-stack-boundary=4 -o $@ -c $<
+
+# src
+SRC_OBJS=$(call any,$(SRC_BLD), \
+	cdf.o \
+	cpu.o \
+	data.o \
+	decode.o \
+	dequant_tables.o \
+	getbits.o \
+	intra_edge.o \
+	lf_mask.o \
+	log.o \
+	msac.o \
+	obu.o \
+	picture.o \
+	qm.o \
+	ref.o \
+	ref_mvs.o \
+	scan.o \
+	tables.o \
+	warpmv.o \
+	wedge.o \
+	x86/cpu.c.o)
+$(SRC_BLD)/%.o: src/%.c
+	$(CC_CC) $(BLD_INCL) -pthread -o $@ -c $<
+$(SRC_BLD)/x86/%.c.o: src/x86/%.c
+	$(CC_CC) $(BLD_INCL) -o $@ -c $<
+
+# bits
+BITS_OBJS= \
+	cdef_tmpl.o \
+	cdef_apply_tmpl.o \
+	fg_apply_tmpl.o \
+	film_grain_tmpl.o \
+	ipred_tmpl.o \
+	ipred_prepare_tmpl.o \
+	itx_tmpl.o \
+	lf_apply_tmpl.o \
+	loopfilter_tmpl.o \
+	looprestoration_tmpl.o \
+	lr_apply_tmpl.o \
+	mc_tmpl.o \
+	recon_tmpl.o \
+	x86/cdef_init_tmpl.c.o \
+	x86/film_grain_init_tmpl.c.o \
+	x86/ipred_init_tmpl.c.o \
+	x86/itx_init_tmpl.c.o \
+	x86/loopfilter_init_tmpl.c.o \
+	x86/looprestoration_init_tmpl.c.o \
+	x86/mc_init_tmpl.c.o \
+
+BIT8_OBJS=$(call any,$(BIT8_BLD),$(BITS_OBJS))
+$(BIT8_BLD)/x86/%.c.o: src/x86/%.c
+	$(CC_CC) $(BLD_INCL) -DBITDEPTH=8 -o $@ -c $<
+$(BIT8_BLD)/%.o: src/%.c
+	$(CC_CC) $(BLD_INCL) -DBITDEPTH=8 -o $@ -c $<
+
+BIT16_OBJS=$(call any,$(BIT16_BLD),$(BITS_OBJS))
+$(BIT16_BLD)/x86/%.c.o: src/x86/%.c
+	$(CC_CC) $(BLD_INCL) -DBITDEPTH=16 -o $@ -c $<
+$(BIT16_BLD)/%.o: src/%.c
+	$(CC_CC) $(BLD_INCL) -DBITDEPTH=16 -o $@ -c $<
+
+$(BUILD)/config.h:
+	echo  > $@ "#pragma once"
+	echo >> $@ "#define ARCH_AARCH64 0"
+	echo >> $@ "#define ARCH_ARM 0"
+	echo >> $@ "#define ARCH_PPC64LE 0"
+	echo >> $@ "#define ARCH_X86 1"
+	echo >> $@ "#define ARCH_X86_32 $(ARCH_X86_32)"
+	echo >> $@ "#define ARCH_X86_64 $(ARCH_X86_64)"
+	echo >> $@ "#define CONFIG_16BPC 1"
+	echo >> $@ "#define CONFIG_8BPC 1"
+	echo >> $@ "#define CONFIG_LOG 1"
+	echo >> $@ "#define ENDIANNESS_BIG 0"
+	echo >> $@ "#define HAVE_ASM 1"
+	echo >> $@ "#define HAVE_POSIX_MEMALIGN 1"
+	echo >> $@ "#define HAVE_UNISTD_H 1"
+	echo >> $@ "#define STACK_ALIGNMENT 32"
+
+$(BUILD)/config.asm:
+	echo  > $@ "%define ARCH_X86_32 $(ARCH_X86_32)"
+	echo >> $@ "%define ARCH_X86_64 $(ARCH_X86_64)"
+	echo >> $@ "%define PIC 1"
+	echo >> $@ "%define STACK_ALIGNMENT 32"
+
+$(BUILD)/include/vcs_version.h:
+	mkdir -p $(BUILD)/include
+	echo  > $@ "#define DAV1D_VERSION \"0.5.0\""
+
+$(BUILD)/include/dav1d/version.h:
+	mkdir -p $(BUILD)/include/dav1d
+	echo  > $@ "#ifndef DAV1D_VERSION_H"
+	echo >> $@ "#define DAV1D_VERSION_H"
+	echo >> $@ "#define DAV1D_API_VERSION_MAJOR 2"
+	echo >> $@ "#define DAV1D_API_VERSION_MINOR 0"
+	echo >> $@ "#define DAV1D_API_VERSION_PATCH 0"
+	echo >> $@ "#endif /* DAV1D_VERSION_H */"
+
+$(TOOLS_BLD)/cli_config.h:
+	mkdir -p $(TOOLS_BLD)
+	echo  > $@ "#pragma once"
+	echo >> $@ "#define HAVE_CLOCK_GETTIME 1"
+
+.PHONY: meson_data
+meson_data:
+	make meson_dirs OBJDIR=$(BUILD)/static
+	make meson_dirs OBJDIR=$(BUILD)/shared
+	ln -sf ./include/compat/gcc/stdatomic.h .
+
+.PHONY: meson_dirs
+meson_dirs: $(OBJDIR) \
+	$(BUILD)/config.h $(BUILD)/config.asm \
+	$(BUILD)/include/vcs_version.h \
+	$(BUILD)/include/dav1d/version.h \
+	$(TOOLS_BLD)/cli_config.h \
+
+LIB_OBJS=$(ENTRY_OBJS) $(NASM_OBJS) $(SRC_OBJS) $(BIT8_OBJS) $(BIT16_OBJS)
+
+$(STATIC_LIB): DIR?=static
+$(STATIC_LIB): $(LIB_OBJS)
+	rm -f $@
+	gcc-ar csrD $@ $(LIB_OBJS)
+
+$(SHARED_LIB): DIR?=shared
+$(SHARED_LIB): $(LIB_OBJS)
+	rm -f $@
+	cc -o $@ $(LIB_OBJS) $(SHA_OPTS)
+
+# tools
+DAV1D_OBJS=$(call any,$(TOOLS_BLD),\
+	dav1d.o \
+	dav1d_cli_parse.o \
+	input/annexb.o \
+	input/ivf.o \
+	input/input.o \
+	output/md5.o \
+	output/null.o \
+	output/output.o \
+	output/y4m2.o \
+	output/yuv.o)
+
+DAV1DPLAY_OBJS=$(call any,$(TOOLS_BLD),\
+	dav1dplay.o \
+	input/annexb.o \
+	input/ivf.o \
+	input/input.o)
+
+$(TOOLS_BLD)/%.o: tools/%.c
+	$(CC_CC) $(TOOLS_INCL) -o $@ -c $<
+
+DAV1D=$(TOOLS_BLD)/dav1d
+$(DAV1D): $(DAV1D_OBJS)
+	$(CC_CC) -pthread -I$(BUILD) -o $@ $(DAV1D_OBJS) $(STATIC_LIB)
+
+DAV1DPLAY=$(TOOLS_BLD)/dav1dplay
+$(DAV1DPLAY): $(DAV1DPLAY_OBJS)
+	$(CC_CC) -pthread -o $(TOOLS_BLD)/dav1dplay $(DAV1DPLAY_OBJS) $(STATIC_LIB) -lSDL2
+
+TOOLS=$(DAV1D) $(DAV1DPLAY)
+.PHONY:	tools
+tools:	$(TOOLS)
+
+# tests
+TESTS_CHKASM=tests/checkasm
+TESTS_CHKASM_BLD=$(TESTS_BLD)/checkasm
+CHKASM_BIT8=$(TESTS_CHKASM_BLD)/bit8
+CHKASM_BIT16=$(TESTS_CHKASM_BLD)/bit16
+CHKASM_BITS= \
+	cdef.o \
+	ipred.o \
+	itx.o \
+	loopfilter.o \
+	looprestoration.o \
+	mc.o \
+
+CHKASM_BIT8_OBJS=$(call any,$(CHKASM_BIT8),$(CHKASM_BITS))
+CHKASM_BIT16_OBJS=$(call any,$(CHKASM_BIT16),$(CHKASM_BITS))
+
+TESTS_CHKASM_OBJS= \
+	$(TESTS_CHKASM_BLD)/checkasm.o \
+	$(TESTS_CHKASM_BLD)/msac.o \
+	$(CHKASM_BIT8_OBJS) $(CHKASM_BIT16_OBJS) \
+	$(TESTS_CHKASM_BLD)/x86/checkasm.obj \
+
+$(TESTS_CHKASM_BLD)/%.o: $(TESTS_CHKASM)/%.c
+	$(CC_CC) $(BLD_INCL) -o $@ -c $<
+$(CHKASM_BIT8)/%.o: $(TESTS_CHKASM)/%.c
+	$(CC_CC) $(BLD_INCL) -DBITDEPTH=8 -o $@ -c $<
+$(CHKASM_BIT16)/%.o: $(TESTS_CHKASM)/%.c
+	$(CC_CC) $(BLD_INCL) -DBITDEPTH=16 -o $@ -c $<
+$(TESTS_CHKASM_BLD)/x86/%.obj: $(TESTS_CHKASM)/x86/%.asm
+	@$(NASM) -f $(ASM_ARCH) \
+		-I src/ -I $(BUILD)/ -MQ $@ -MF $@.ndep \
+		$< -o $@
+
+CHECKASM=$(TESTS_BLD)/checkasm/checkasm
+$(CHECKASM): $(TESTS_CHKASM_OBJS) $(STATIC_LIB)
+	$(CC_CC) -pthread -o $@ $(TESTS_CHKASM_OBJS) $(STATIC_LIB) -lm
+
+TESTS_FUZZER=tests/libfuzzer
+TESTS_FUZZER_BLD=$(TESTS_BLD)/libfuzzer
+TESTS_FUZZER_OBJS= \
+	$(TESTS_FUZZER_BLD)/main.o \
+	$(TESTS_FUZZER_BLD)/dav1d_fuzzer.o \
+
+$(TESTS_FUZZER_BLD)/%.o: $(TESTS_FUZZER)/%.c
+	$(CC_CC) $(BLD_INCL) -o $@ -c $<
+
+DAV1D_FUZZER=$(TESTS_BLD)/dav1d_fuzzer
+$(DAV1D_FUZZER): $(TESTS_FUZZER_OBJS) $(STATIC_LIB)
+	$(CC_CC) -pthread -o $@ $(TESTS_FUZZER_OBJS) $(STATIC_LIB)
+
+TESTS=$(CHECKASM) $(DAV1D_FUZZER)
+.PHONY:	tests
+tests:	$(TESTS)
+
+$(OBJDIR):
+	mkdir -p $@/include/dav1d \
+		$(BUILD)/src $(BUILD)/include \
+		$(ENTRY_BLD) $(NASM_BLD) \
+		$(SRC_BLD)/x86 $(BIT8_BLD)/x86 $(BIT16_BLD)/x86 \
+		$(TOOLS_BLD) $(TOOLS_BLD)/input $(TOOLS_BLD)/output \
+		$(TESTS_CHKASM_BLD)/bit8 $(TESTS_CHKASM_BLD)/bit16 \
+		$(TESTS_CHKASM_BLD)/x86 $(TESTS_FUZZER_BLD) \
+
+clean:
+	rm -rf $(BUILD)
+
+install:
+	mkdir -p $(DESTDIR)$(LIBDIR)
+	cp -a $(STATIC_LIB) $(DESTDIR)$(LIBDIR)
+	cp -a $(SHARED_LIB) $(DESTDIR)$(LIBDIR)
+	mkdir -p $(DESTDIR)$(INCDIR)
+	cp -a include/dav1d $(DESTDIR)$(INCDIR)
+	rm -f $(DESTDIR)$(INCDIR)/dav1d/meson.build
+	rm -f $(DESTDIR)$(INCDIR)/dav1d/version.h.in
+	cp -a $(BUILD)/include/dav1d/version.h $(DESTDIR)$(INCDIR)/version.h
+
