本文描述移植mysql-5.5.54到mips平台的方法。
编译x86版本
mysql会先编译comp_err
、gen_lex_hash
和comp_sql
这三个工具,然后由这三个工具生成的源码和其他源码一起编译出最终文件。而使用mips交叉工具链编译出来的这三个工具是不能在x86主机上运行的,所以要先在主机上编译x86版本的mysql,然后修改mips平台的Makefile,指定使用x86版本的工具生成源码。
x86版本的编译指令是:
$ tar zxf mysql-5.5.54.tar.gz
$ mv mysql-5.5.54 mysql-5.5.54-x86
$ cd mysql-5.5.54-x86
$ cmake . # 不需要指定特殊的编译选项
$ make
定义mips交叉编译环境
新建文件mips.cmake,在里面定义目标平台使用的交叉编译环境和某些mysql特有的变量。
SET(CMAKE_SYSTEM_NAME Linux)
# $ENV{OCTEON_ROOT}表示引用环境变量OCTEON_ROOT
SET(CMAKE_C_COMPILER $ENV{OCTEON_ROOT}/tools/bin/mips64-octeon-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER $ENV{OCTEON_ROOT}/tools/bin/mips64-octeon-linux-gnu-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{OCTEON_ROOT}/opensource $ENV{OCTEON_ROOT}/tools-gcc-4.3/mips64-octeon-linux-gnu/sys-root)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# 下面两个变量是mysql特有的变量,定义的值需要进行测试确认。
# 测试方法可以在CMakeList.txt中找到
SET(STACK_DIRECTION -1)
SET(CMAKE_BUILD_TYPE RelWithDebInfo)
生成mips交叉编译的Makefile
生成mysql的交叉编译Makefile的指令是:
$ tar zxf mysql-5.5.54.tar.gz
$ cd mysql-5.5.54
$ cmake \
-DCMAKE_TOOLCHAIN_FILE=mips.cmake \ # 指定使用mips交叉工具链交叉编译
-DCMAKE_INSTALL_PREFIX=/usr \ # mysql在目标文件系统中的安装路径
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
.
上述的选项中,除了-DCMAKE_TOOLCHAIN_FILE=mips.cmake
以外,其余的变量都是可选的。
下面的4个命令将指定Makefile使用x86版本的comp_err
、gen_lex_hash
和comp_sql
工具生成源代码。
$ sed -i "s/\ comp_err\ /\ ..\/..\/mysql-5.5.54-x86\/extra\/comp_err\ /g" mysql-5.5.54/extra/CMakeFiles/GenError.dir/build.make
$ sed -i "s/\ gen_lex_hash\ /\ ..\/..\/mysql-5.5.54-x86\/sql\/gen_lex_hash\ /g" mysql-5.5.54/sql/CMakeFiles/sql.dir/build.make
$ sed -i "s/\ gen_lex_hash\ /\ ..\/..\/mysql-5.5.54-x86\/sql\/gen_lex_hash\ /g" mysql-5.5.54/sql/CMakeFiles/GenServerSource.dir/build.make
$ sed -i "s/\ comp_sql\ /\ ..\/..\/mysql-5.5.54-x86\/scripts\/comp_sql\ /g" mysql-5.5.54/scripts/CMakeFiles/GenFixPrivs.dir/build.make
编译安装mips版本
mysql的安装路径由目标文件系统在主机上的路径和**mysql在目标文件系统中的路径**2部分组成:
- mysql在目标文件系统中的路径在生成Makefile时由CMAKE_INSTALL_PREFIX
定义;
- 目标文件系统在主机上的路径则需要在安装时由DESTDIR
定义;
使用如下的命令编译并安装mips版本到主机的/path/to/mips/rtfs/usr
目录下:
make
make install DESTDIR=/path/to/mips/rtfs/