基础快照交叉编译

我们有两个例子,freebsd 到 win32-mingw 交叉编译,以及一个 FreeBSD 到 AMD64 linux。假设我们正确设置了以下项目:

  1. 已经编译了交叉 binutils,并安装在 $PREFIX=~/cross。并识别了正确的前缀(在我们的示例中可能类似于 i686-ming32 和 x86-64-linux)

  2. FPC 源文件在 fpc/

  3. FPC 将安装在 /usr/local/lib/fpc/$FPCVERSION 或更深

然后我们执行:

1
2
3
4
  cd ~/fpc
  gmake distclean
  # 下面的都在一行上
  gmake all install OS_TARGET=win32 CROSSBINDIR=~/cross/bin BINUTILSPREFIX=i686-ming32-INSTALL_PREFIX=/usr/local

构建第一个快照(注意没有设置 CPU_TARGET,OS_TARGET 使用 FPC 平台命名(win32),而 BINUTILSPREFIX 使用GNU(因为它是用于 binutils)。另外,BINUTILSPREFIX 以-结束,这是故意的。

同样,对于 x86_64-linux,该行变为:

1
2
3
4
  cd ~/fpc
  gmake distclean
  # 下面的都在一行上
  gmake all install CPU_TARGET=x86_64 OS_TARGET=linux CROSSBINDIR=~/cross/bin BINUTILSPREFIX=x86_64-linux INSTALL_PREFIX=/usr/local

交叉编译没有交叉汇编程序

有时人们不想进行交叉编译,只想测试在目标<x>下的 RTL 编译。如果此目标 <x> 位于相同的体系结构上,则可以尝试使用:

gmake fpc_units OPT='-s'

-s 跳过调用汇编器/链接器,使得 fpc_units make 跳过 RTL 加载的代码。另一个技巧是将 AS=echo 或 AS=gecho 传递给 gmake。请注意,在之前(2.4.x/4.x)中,无需交叉汇编器和链接器,就可以在 Linux/x86 和 FreeBSD/x86 之间进行交叉编译。据我所知,这些操作系统的新版本还没有重新测试过。