diff --git a/mbed-os-to-arduino b/mbed-os-to-arduino index f6654345..897addc5 100755 --- a/mbed-os-to-arduino +++ b/mbed-os-to-arduino @@ -2,17 +2,49 @@ set -ef +platform=${OSTYPE//[0-9.-]*/} + +# Default case for Linux sed +sed_exec="sed" +case "$platform" in + # For macOS, GNU sed + darwin) + sed_exec="gsed" + ;; + *) + + echo "Unknown Operating system $OSTYPE" + exit 1 +esac + +exists() { type -t "$1" > /dev/null 2>&1; } + check_tools () { - echo -n "Checking for prerequisites..." - if not hash jq &>/dev/null ; then + echo "Checking for prerequisites on $platform..." + if ! exists jq; + then echo "Please, install jq." exit 1 fi - if not hash rsync &>/dev/null ; then + if ! exists rsync; + then echo "Please, install rsync." exit 1 fi + + if ! exists tac; + then + echo "Please, install tac." + exit 1 + fi + + if ! exists $sed_exec; + then + echo "Please, install $sed_exec." + exit 1 + fi + echo " done." } @@ -126,7 +158,7 @@ mbed_compile () { generate_defines () { echo -n "Generating defines..." - cut -f2 -d":" < "$BOARDNAME".macros.txt | tr ' ' '\n' | sed 's#\"#\\"#g' | sort > "$ARDUINOVARIANT"/defines.txt + cut -f2 -d":" < "$BOARDNAME".macros.txt | tr ' ' '\n' | $sed_exec 's#\"#\\"#g' | sort > "$ARDUINOVARIANT"/defines.txt echo "-DMBED_NO_GLOBAL_USING_DIRECTIVE=1" >> "$ARDUINOVARIANT"/defines.txt if [ -f "$ARDUINOVARIANT"/variant.cpp ]; then echo '-DUSE_ARDUINO_PINOUT' >> "$ARDUINOVARIANT"/defines.txt @@ -138,14 +170,14 @@ generate_includes () { echo -n "Generating includes..." find ./BUILD/"$BOARDNAME"/GCC_ARM/ -type f -name '.include*' -print0 | xargs -0 cat \ - | tr ' ' '\n' | tr -d '"' | sed -e 's#-I./mbed-os#-iwithprefixbefore/mbed#g' \ - | sed '/^-I./d' | tac \ + | tr ' ' '\n' | tr -d '"' | $sed_exec -e 's#-I./mbed-os#-iwithprefixbefore/mbed#g' \ + | $sed_exec '/^-I./d' | tac \ > "$ARDUINOVARIANT"/includes.txt echo -n " copying to destination... " cut -d'/' -f3- < "$ARDUINOVARIANT"/includes.txt | grep '^targets/TARGET_' \ - | sed -e 's#\(.*\)#+ \1#' -e '$a+ targets/' -e '$a+ *.h' -e '$a- *' \ + | $sed_exec -e 's#\(.*\)#+ \1#' -e '$a+ targets/' -e '$a+ *.h' -e '$a- *' \ | rsync -avvz --include-from=- mbed-os/ "$ARDUINOCOREMBED"/ echo " done." @@ -187,18 +219,21 @@ copy_core_files () { patch_mbed_h () { echo -n "Patching 'mbed.h'..." - if [ x`uname` == xLinux ]; then - sed -i 's?#include "platform/mbed_version.h"?#include "platform/mbed_version.h"\n#include "mbed_config.h"?g' \ - "$ARDUINOCOREMBED"/mbed.h - else - ed "$ARDUINOCOREMBED"/mbed.h >/dev/null <<EOF + case "$platform" in + linux) + $sed_exec -i 's?#include "platform/mbed_version.h"?#include "platform/mbed_version.h"\n#include "mbed_config.h"?g' \ + "$ARDUINOCOREMBED"/mbed.h + ;; + *) + ed "$ARDUINOCOREMBED"/mbed.h >/dev/null <<EOF /#include "platform\/mbed_version.h"/ a #include "mbed_config.h" . wq EOF - fi + ;; + esac echo " done." } @@ -206,7 +241,7 @@ patch_spi_h () { echo -n "Patching SPI headers..." mv "$ARDUINOCOREMBED"/drivers/SPI.h "$ARDUINOCOREMBED"/drivers/SPIMaster.h for header in mbed.h features/nfc/controllers/PN512SPITransportDriver.h components/storage/blockdevice/COMPONENT_SD/SDBlockDevice.h; do - sed -i.bak 's#drivers/SPI\.h#drivers/SPIMaster\.h#g' "$ARDUINOCOREMBED"/$header + $sed_exec -i.bak 's#drivers/SPI\.h#drivers/SPIMaster\.h#g' "$ARDUINOCOREMBED"/$header rm "$ARDUINOCOREMBED"/$header.bak done echo " done." @@ -237,7 +272,7 @@ done shift $(( OPTIND - 1 )) if [ $# -eq 0 ] ; then - echo "Usage: $(basename $0) [-c] [-u] [-r /path/to/local/repo] [-b mbed/remote/branch] [-p /mbed/core/location] [VARIANT1:BOARD1 VARIANT2:BOARD1 VARIANT3:BOARD3 ... ]" + echo "Usage: $(basename "$0") [-c] [-u] [-r /path/to/local/repo] [-b mbed/remote/branch] [-p /mbed/core/location] [VARIANT1:BOARD1 VARIANT2:BOARD1 VARIANT3:BOARD3 ... ]" echo echo " -c clean Mbed application BUILD directory" echo " -u update to latest mbed-os release" @@ -247,7 +282,7 @@ if [ $# -eq 0 ] ; then echo " -p specify local mbed core directory (defaults to PWD)" echo echo "Example:" - echo " $(basename $0) -a ARDUINO_NANO33BLE:ARDUINO_NANO33BLE CHALLENGE_PMC_R2DX:ARDUINO_NANO33BLE" + echo " $(basename "$0") -a ARDUINO_NANO33BLE:ARDUINO_NANO33BLE CHALLENGE_PMC_R2DX:ARDUINO_NANO33BLE" exit 0 fi @@ -311,7 +346,7 @@ patch_mbed_h patch_spi_h echo -echo "[$(basename $0)] MbedOS core generation ended succesfully." +echo "[$(basename "$0")] MbedOS core generation ended succesfully." echo # TODO