diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..c9839d64f46a81f0e6e1405448ea22bc531f0a15
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.a binary
diff --git a/Makefile.include b/Makefile.include
index 4a60d6f5027a5b155efd1cdae9a080b79e1d9a52..78285a6ed836a91ec736245793ea07c4f5705f96 100644
--- a/Makefile.include
+++ b/Makefile.include
@@ -54,6 +54,11 @@ include $(RIOTBOARD)/$(BOARD)/Makefile.include
 include $(RIOTCPU)/$(CPU)/Makefile.include
 include $(RIOTBASE)/Makefile.dep
 
+# OSX fails to create empty archives. Provide a wrapper to catch that error.
+ifneq (0, $(shell mkdir -p $(BINDIR); $(AR) -rc $(BINDIR)empty-archive.a 2> /dev/null; echo $$?))
+	AR := $(RIOTBASE)/dist/ar-wrapper $(AR)
+endif
+
 # Test if there where dependencies against a module in DISABLE_MODULE.
 ifneq (, $(filter $(DISABLE_MODULE), $(USEMODULE)))
 $(error "Required modules were disabled using DISABLE_MODULE: $(sort $(filter $(DISABLE_MODULE), $(USEMODULE)))")
diff --git a/dist/ar-wrapper b/dist/ar-wrapper
new file mode 100755
index 0000000000000000000000000000000000000000..a3d17d74c410ffa4f16fafa0d310d2c74c890dff
--- /dev/null
+++ b/dist/ar-wrapper
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# This wrapper takes the arguments: <ar> <operation> <archive> <files...>
+# <ar> can be any ar implementation.
+# <operations>, <archive> and <files...> are the normal arguments to <ar>.
+#
+# OS X's ar implementation has the problem, that it refuses to create empty archives.
+# This wrapper will copy a provided empty .a file to <archive> if it was told to.
+
+# If <operations> contains "r", and there are no <files...> given.
+if [ "${2#*r}" != "$2" ] && [ "$#" -eq 3 ]; then
+    # If <archive> exists, do nothing, otherwise copy an empty archive.
+    [ -e "$3" ] || cp "${0%ar-wrapper}/empty.a" "$3"
+else
+    # Otherwise act like this wrapper was not present.
+    "$@"
+fi
+
+# Return the exit code of the last invocation ("[", "cp", or <ar>).
+exit $?
diff --git a/dist/empty.a b/dist/empty.a
new file mode 100644
index 0000000000000000000000000000000000000000..8b277f0dd5dcdcb9c4b6c0b7a32153664f111266
Binary files /dev/null and b/dist/empty.a differ