想要把 Haskell 的软件移植到 CM4 上面,需要在 CM4 上面构建出 haskell 的编译环境。
首先我们下载最新版的 haskell 编译器。
wget https://downloads.haskell.org/~ghc/8.10.4/ghc-8.10.4-aarch64-deb10-linux.tar.xz
我系统安装的是 aarch64 系统,所以也相应的下载 aarch64 的安装包。
tar xvf ghc-8.10.4-aarch64-deb10-linux.tar.xz
cd ghc-8.10.4
./configure
make install
这样子 GHC 就安装完成了。
接下来要安装 cabal-install。
GHC-8.10.4 用的是 Cabal 3.2.1.0 对应的 cabal-install 是 3.2.0.0
wget https://downloads.haskell.org/~cabal/cabal-install-3.2.0.0/cabal-install-3.2.0.0.tar.gz
tar xvf cabal-install-3.2.0.0.tar.gz
cd cabal-install-3.2.0.0
在 GHC-8.10.4 上 cabal-install 是没有办法直接安装的需要对一些依赖看进行修改才能安装成功。我将补丁写好如下:
233c233
< HTTP_VER="4000.3.15"; HTTP_VER_REGEXP="4000\.(2\.([5-9]|1[0-9]|2[0-9])|3\.?)"
---
> HTTP_VER="4000.3.12"; HTTP_VER_REGEXP="4000\.(2\.([5-9]|1[0-9]|2[0-9])|3\.?)"
235c235
< ZLIB_VER="0.6.2.3"; ZLIB_VER_REGEXP="(0\.5\.([3-9]|1[0-9])|0\.6)"
---
> ZLIB_VER="0.6.2"; ZLIB_VER_REGEXP="(0\.5\.([3-9]|1[0-9])|0\.6)"
243c243
< HASHABLE_VER="1.3.1.0"; HASHABLE_VER_REGEXP="1\."
---
> HASHABLE_VER="1.2.7.0"; HASHABLE_VER_REGEXP="1\."
245c245
< ASYNC_VER="2.2.3"; ASYNC_VER_REGEXP="2\."
---
> ASYNC_VER="2.2.1"; ASYNC_VER_REGEXP="2\."
253c253
< RESOLV_VER="0.1.2.0"; RESOLV_VER_REGEXP="0\.1\.[1-9]"
---
> RESOLV_VER="0.1.1.1"; RESOLV_VER_REGEXP="0\.1\.[1-9]"
263c263
< HACKAGE_SECURITY_VER="0.6.0.1"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
---
> HACKAGE_SECURITY_VER="0.6.0.0"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
265c265
< TAR_VER="0.5.1.1"; TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
---
> TAR_VER="0.5.1.0"; TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
269c269
< LUKKO_VER="0.1.1.3"; LUKKO_VER_REGEXP="0\.1\.[1-9]"
---
> LUKKO_VER="0.1.1"; LUKKO_VER_REGEXP="0\.1\.[1-9]"
打完补丁后我们执行,./bootstrap.sh。
在执行的过程中,会出现错误,需要在执行的过程中,安装相关的依赖。
最后安装 stack 构建工具
export PATH=$HOME/.cabal/bin:$PATH
cabal-install stack
CM4 的内存如果小于 8G 的话安装 stack 会内存不足而失败。
我需要给 CM4 添加交换分区
dd if=/dev/zero of=swap bs=1024 count=4096000
mkswap swap
chmod 0600 swap
swapon swap