diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,60 @@
+PROJECT = libstb
+
+MULTIARCH := $(shell gcc --print-multiarch)
+
+INCLUDEDIR := $(DESTDIR)/usr/include/stb
+LIBDIR := $(DESTDIR)/usr/lib/$(MULTIARCH)
+
+CFLAGS += -fPIC -DSTB_DEFINE
+
+BLACKLIST := \
+ stb_connected_components \
+ stb_easy_font \
+ stb_textedit \
+ stb_tilemap_editor \
+ stb_voxel_render
+
+HEADERS := $(wildcard *.h)
+HEADERS_TOBE_PRECOMPILED := $(filter-out $(BLACKLIST:=.h),$(HEADERS))
+SRCS := $(HEADERS_TOBE_PRECOMPILED:.h=.c)
+OBJS := $(HEADERS_TOBE_PRECOMPILED:.h=.o) stb_vorbis.o
+
+SO_NAME := $(PROJECT).so.0
+REAL_NAME := $(PROJECT).so.0.0
+
+all: $(PROJECT).a $(PROJECT).so
+
+$(PROJECT).a: $(OBJS)
+	$(AR) rcs $@ $^
+
+$(PROJECT).so: $(OBJS)
+	$(CC) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ -lm
+
+%.c: %.h
+	cp $< $@
+
+%.o: %.c
+	$(CC) $(CFLAGS) -D$(shell echo $* | tr a-z A-Z)_IMPLEMENTATION -c $^
+
+clean:
+	rm -f $(PROJECT).a $(PROJECT).so $(OBJS) $(SRCS)
+
+install-shared: $(PROJECT).so
+	install -d $(LIBDIR) || true
+	install -m 0644 $(PROJECT).so $(LIBDIR)/$(REAL_NAME)
+	rm -f $(LIBDIR)/$(SO_NAME)
+	ln -s $(REAL_NAME) $(LIBDIR)/$(SO_NAME)
+	rm -f $(LIBDIR)/$(PROJECT).so
+	ln -s $(SO_NAME) $(LIBDIR)/$(PROJECT).so
+
+install-static: $(PROJECT).a
+	install -d $(LIBDIR) || true
+	install -m 0644 $(PROJECT).a $(LIBDIR)/$(PROJECT).a
+
+install-header: $(HEADERS)
+	install -d $(INCLUDEDIR) || true
+	install -m 0644 $(HEADERS) $(INCLUDEDIR)/
+
+install: install-shared install-static install-header
+
+.PHONY: all clean install install-shared install-static install-header
