Skip to content

Instantly share code, notes, and snippets.

@HotelCalifornia
Created September 15, 2020 04:25
Show Gist options
  • Save HotelCalifornia/4a98ab0525df9a645c2faa02db5bec8d to your computer and use it in GitHub Desktop.
Save HotelCalifornia/4a98ab0525df9a645c2faa02db5bec8d to your computer and use it in GitHub Desktop.
add multiple versions of arm-none-eabi toolchain to update-alternatives
#!/usr/bin/env bash
set -e
TOOLCHAIN_FILE="./toolchains.dat"
PRIORITIES_FILE="./priorities.dat"
rm -f $TOOLCHAIN_FILE $PRIORITIES_FILE
TARGET_TRIPLE="arm-none-eabi"
GCC="$TARGET_TRIPLE-gcc"
GXX="$TARGET_TRIPLE-g++"
ADDR2LINE="$TARGET_TRIPLE-addr2line"
AR="$TARGET_TRIPLE-ar"
AS="$TARGET_TRIPLE-as"
CXX="$TARGET_TRIPLE-c++"
CXXFILT="$TARGET_TRIPLE-c++filt"
CPP="$TARGET_TRIPLE-cpp"
ELFEDIT="$TARGET_TRIPLE-elfedit"
GCC_AR="$TARGET_TRIPLE-gcc-ar"
GCC_NM="$TARGET_TRIPLE-gcc-nm"
GCC_RANLIB="$TARGET_TRIPLE-gcc-ranlib"
GCOV="$TARGET_TRIPLE-gcov"
GCOV_DUMP="$TARGET_TRIPLE-gcov-dump"
GCOV_TOOL="$TARGET_TRIPLE-gcov-tool"
GDB="$TARGET_TRIPLE-gdb"
GDB_ADD_INDEX="$TARGET_TRIPLE-gdb-add-index"
GDB_ADD_INDEX_PY="$TARGET_TRIPLE-gdb-add-index-py"
GDB_PY="$TARGET_TRIPLE-gdb-py"
GPROF="$TARGET_TRIPLE-gprof"
LD="$TARGET_TRIPLE-ld"
LD_BFD="$TARGET_TRIPLE-ld.bfd"
LTO_DUMP="$TARGET_TRIPLE-lto-dump"
NM="$TARGET_TRIPLE-nm"
OBJCOPY="$TARGET_TRIPLE-objcopy"
OBJDUMP="$TARGET_TRIPLE-objdump"
RANLIB="$TARGET_TRIPLE-ranlib"
READELF="$TARGET_TRIPLE-readelf"
SIZE="$TARGET_TRIPLE-size"
STRINGS="$TARGET_TRIPLE-strings"
STRIP="$TARGET_TRIPLE-strip"
ls -1 $HOME | grep "gcc-arm-none-eabi-" > $TOOLCHAIN_FILE
awk -F '-' '{ print $5$7 }' $TOOLCHAIN_FILE | sed "s/q//" > $PRIORITIES_FILE
i=0
for toolchain in `cat $TOOLCHAIN_FILE`; do
let "i+=1"
priority=`awk 'BEGIN{ RS = "" ; FS = "\n" }{ print $'"$i"' }' $PRIORITIES_FILE`
echo "adding $toolchain with priority $priority"
sudo update-alternatives \
--install /usr/bin/$GCC $GCC $HOME/$toolchain/bin/$GCC $priority \
--slave /usr/bin/$GXX $GXX $HOME/$toolchain/bin/$GXX \
--slave /usr/bin/$ADDR2LINE $ADDR2LINE $HOME/$toolchain/bin/$ADDR2LINE \
--slave /usr/bin/$AR $AR $HOME/$toolchain/bin/$AR \
--slave /usr/bin/$AS $AS $HOME/$toolchain/bin/$AS \
--slave /usr/bin/$CXX $CXX $HOME/$toolchain/bin/$CXX \
--slave /usr/bin/$CXXFILT $CXXFILT $HOME/$toolchain/bin/$CXXFILT \
--slave /usr/bin/$CPP $CPP $HOME/$toolchain/bin/$CPP \
--slave /usr/bin/$ELFEDIT $ELFEDIT $HOME/$toolchain/bin/$ELFEDIT \
--slave /usr/bin/$GCC_AR $GCC_AR $HOME/$toolchain/bin/$GCC_AR \
--slave /usr/bin/$GCC_NM $GCC_NM $HOME/$toolchain/bin/$GCC_NM \
--slave /usr/bin/$GCC_RANLIB $GCC_RANLIB $HOME/$toolchain/bin/$GCC_RANLIB \
--slave /usr/bin/$GCOV $GCOV $HOME/$toolchain/bin/$GCOV \
--slave /usr/bin/$GCOV_DUMP $GCOV_DUMP $HOME/$toolchain/bin/$GCOV_DUMP \
--slave /usr/bin/$GCOV_TOOL $GCOV_TOOL $HOME/$toolchain/bin/$GCOV_TOOL \
--slave /usr/bin/$GDB $GDB $HOME/$toolchain/bin/$GDB \
--slave /usr/bin/$GDB_ADD_INDEX $GDB_ADD_INDEX $HOME/$toolchain/bin/$GDB_ADD_INDEX \
--slave /usr/bin/$GDB_ADD_INDEX_PY $GDB_ADD_INDEX_PY $HOME/$toolchain/bin/$GDB_ADD_INDEX_PY \
--slave /usr/bin/$GDB_PY $GDB_PY $HOME/$toolchain/bin/$GDB_PY \
--slave /usr/bin/$GPROF $GPROF $HOME/$toolchain/bin/$GPROF \
--slave /usr/bin/$LD $LD $HOME/$toolchain/bin/$LD \
--slave /usr/bin/$LD_BFD $LD_BFD $HOME/$toolchain/bin/$LD_BFD \
--slave /usr/bin/$LTO_DUMP $LTO_DUMP $HOME/$toolchain/bin/$LTO_DUMP \
--slave /usr/bin/$NM $NM $HOME/$toolchain/bin/$NM \
--slave /usr/bin/$OBJCOPY $OBJCOPY $HOME/$toolchain/bin/$OBJCOPY \
--slave /usr/bin/$OBJDUMP $OBJDUMP $HOME/$toolchain/bin/$OBJDUMP \
--slave /usr/bin/$RANLIB $RANLIB $HOME/$toolchain/bin/$RANLIB \
--slave /usr/bin/$READELF $READELF $HOME/$toolchain/bin/$READELF \
--slave /usr/bin/$SIZE $SIZE $HOME/$toolchain/bin/$SIZE \
--slave /usr/bin/$STRINGS $STRINGS $HOME/$toolchain/bin/$STRINGS \
--slave /usr/bin/$STRIP $STRIP $HOME/$toolchain/bin/$STRIP
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment