http://developer.mips.com/tools/compilers/这个网站提供了两个MIPS处理器的编译器:LLVM和Path64,笔者使用的是LLVM。
对于LLVM,网站上提供了两个版本。一个是prebuild的,一个是源代码。笔者实验过发现,前一个版本的程序应该是本机编译器,也就是直接运行在MIPS处理器上的,在x86架构下运行不了。所以为了要构造交叉编译器,需要自己编译源代码。以下是笔者只是介绍编译的过程,其中的名词以后有时间再介绍吧。建议参照官方的指导,以免我打字打错了,呵呵了。
环境:pc一台(x86),ubuntu12.04lts
1.安装必要的支持包。不同的Linux版本需要的包可能不一样,在安装过程中如果出现了错误,很有可能就是缺少了支持包,请自行谷歌。这里推荐一个网站http://stackoverflow.com/,很多问题可以在这里找到答案。我安装的包有:m4, gawk, libncurses5-dev, zlib1g-dev, libglib2.0-dev, g++,flex, bison, gcc-multilib, g++-multilib.
sudo apt-get install m4 gwak libncurses5-dev zlib1g-dev libglib2.0-dev g++ flex bison gcc-multilib g++-multilib
2.下载LLVM。地址是http://wpc.1982.edgecastcdn.net/001982/gnu_tools/Mips_linux_toolchain_clang.tar.bz2。这个包里已经包含了toolchain。
3.在主文件夹下新建一个llvm文件夹。这就是llvm的安装文件夹。
4.解压:
tar vfxj Mips_linux_toolchain_clang.tar.bz2
cd到解压的文件夹。
5.修改文件build-mips-clang.sh的第455行。我在编译的时候这个脚本有点问题,在某一步的时候cd会出错。把第455行的地址在为~/mips_linux_toolchain_clang_src/ble/gcc-4.4.6-final。
6. 按照官方的介绍。可以一次buildall。但是我在编译的过程中发现,buildall的话很容易出错,出错了还不知道在哪一步,一旦出错就得全部重新来。所以建议按照一下的步骤一步一步的来。
./build-mips-linux-gnu.sh --prefix=~/llvm unpack
./build-mips-linux-gnu.sh --prefix=~/llvm buildgmp
./build-mips-linux-gnu.sh --prefix=~/llvm buildmpfr
./build-mips-linux-gnu.sh --prefix=~/llvm buildmpc
./build-mips-linux-gnu.sh --prefix=~/llvm buildbinutils
./build-mips-linux-gnu.sh --prefix=~/llvm buildgcc1
./build-mips-linux-gnu.sh --prefix=~/llvm installheaders
./build-mips-linux-gnu.sh --prefix=~/llvm buildeglibc1
./build-mips-linux-gnu.sh --prefix=~/llvm buildgcc2
./build-mips-linux-gnu.sh --prefix=~/llvm buildeglibc2
./build-mips-linux-gnu.sh --prefix=~/llvm buildgcc3
./build-mips-linux-gnu.sh --prefix=~/llvm buildlibgcc
./build-mips-linux-gnu.sh --prefix=~/llvm buildexpat
./build-mips-linux-gnu.sh --prefix=~/llvm buildgdb
./build-mips-linux-gnu.sh --prefix=~/llvm buildqemu
./build-mips-linux-gnu.sh --prefix=~/llvm check
./build-mips-clang.sh --prefix=~/llvm unpack
./build-mips-clang.sh --prefix=~/llvm buildclang
为了check成功,还需要导入四个环境变量。这个好像只有ubuntu12.04需要。
export LIBRARY_PATH=/usr/lib/i386-linux-gnu/
export C_INCLUDE_PATH=/usr/include/i386-linux-gnu
export CPLUS_INCLUDE_PATH=/usr/include/i386-linux-gnu
export PATH=~/llvm/bin:$PATH
最后check一下
./build-mips-clang.sh --prefix=~/llvm check
完工了。如果哪一步出错,重新运行那一步就行了。
顺便提一下,编译时间很长,我在虚拟机上跑了8个小时,实体机上跑了4个小时,buildeglib2那一步要很长时间,耐心等待哦。