身為一個open source 的阿宅,只有新toolchain就會很想試用看看,雖然Code Sourcery 每半年才release 一版,但有時候會需要做交插測試要換來要去。之前在晶心科技工作,在強力的toolchain team支援下,二三天就可以有一版新版,一直都缺少一個有方便的方法可以切換toolchain,想記錄一下用過的方法。
基本的工作環境假設是連到沒有sudo 權限的server(這樣本機看叫叫叫片的時候才不會lag)
方法一:設在 PATH 環境變數
export PATH=$HOME/tool/gnuarm/arm-2010q1/bin:$PATH
優點:這就是最常看到的方法 簡單,直覺,霸王硬上弓
缺點:但如果要在同一個shell下換來換去,你的PATH 就會一次次長大,而且每次都要按tab 補齊buildtype,就是none-eabi-ooxx之類的
方法二:用一個link指向現在要用的toolchain,PATH 一直都一樣
export PATH=$HOME/tool/gnuarm/cur/bin #寫在 bashrc
cd ~/tool/gnuarm/
ln -s arm-2010q1 cur
優點:看起來很厲害
缺點:每次都要砍掉重link,然後command cache 要你重新export PATH 後才有效,超蠢,可是我用了很久,忍耐度超高
方法三:在bashrc 裡寫一個小function alias toolchain
#很像這樣,看個人環境
function nds_setup()
{
if [ ! -z $1 && ! -z $2]; then
alias agcc "$2/bin/arm-$1-gcc;
alias agcc "$2/bin/arm-$1-gcc;
alias agcc "$2/bin/arm-$1-gcc;
alias agcc "$2/bin/arm-$1-gcc;
alias agcc "$2/bin/arm-$1-gcc;
fi
}
$nds_setup linux $HOME/tool/gnuarm/arm-2010q1
優點:感覺還不錯,
缺點:實際使用時,都會忘記buildtype(其實是三不五時就在改,不是說ARM),要ls 一下才知道,然後要打二個參數,累....,另外bash 的subshell 不吃alias,下給CROSS_COMPILE 就會爛掉
方法四:用wrapper 吃環境變數決定要選擇那個toolchain
#!/bin/bash
#arm-gcc
if [ ! -z $ARM_TOOLPATH ]; then
$ARM_TOOLPATH/bin/arm-$ARM_TOOLTYPE-gcc $*
fi
優點:指令固定,subshell 可以吃
缺點:還是要看一下buildtype,另外toolchain 裡含binutil 大概有20隻指令,如果每個都寫一隻,之後要改會死人,還是要設二個參數
方法五:比較厲害的wrapper
用有點像busybox的方式,把所有的命令都link到同一隻script,再由script去分辦要執行的程式是什麼,版本為何
優點:好像還不錯
缺點:不知
#!/bin/bash
#set -x
#I assume
# the wrapper command format is "arm-command",
# the origin toolchain name is "arm-what-ever-you-want-gcc
# the gcc must exist
toolname=`echo ${0##/*/} | cut -d '-' -f 2`;
tooltype=`ls $ARM_TOOLPATH/bin/arm-*-gcc`
if [ -z $ARM_TOOLPATH ]; then
echo '$ARM_TOOLPATH' is not set;
exit 1;
fi
if [ ! -e $tooltype ]; then
echo "Can't find tooltype";
exit 1;
fi
tooltype=${tooltype##*arm-}
tooltype=${tooltype%%-gcc}
realtool="$ARM_TOOLPATH/bin/arm-$tooltype-$toolname";
if [ -z $toolname ]; then
echo "Unknown ARM tool";
exit 1;
fi
if [ ! -x $realtool ]; then
"file is not executable"
exit 1;
fi
$realtool $*
- May 18 Tue 2010 20:12
Fast Switch Among Multi-toolchain
close
全站熱搜
留言列表