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