6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Elm19.0をARM 64bit プロセッサでソースからビルドする

Posted at

概要

ElmというHaskellライクな純粋関数型AltJSが話題になってたので、手持ちのRock64というSBC(Single Board Computer)にインストールしようとしてあれこれ苦労した。

  • npm install だと Error: No binaries are available for your platform: linux-arm64と出て異常終了する。
  • ソースからビルドしようと思ってHaskellのビルドツールStackを入れようとするが、そちらもエラー終了する

最終的にはStackとは別にCabalをインストールし、ビルド成功した。

環境

ハードウェア

Rock64。ラズパイっぽいやつ。ギガビットイーサやUSB3.0を乗っけており、RAMも4GBある。
さすがにUSB給電(5V0.5A)では厳しいのか、5V3AのACアダプタが必要になる点はx。そのせいでラズパイ用ケースが完全には適合しない(http://denor.daa.jp/rock64をraspberry-piのケースに入れるには )。

また、ラズパイは64bitのARMプロセッサを載せているが、32bit互換モードで動作している。しかし、Rock64は64bitモードで動いている。
このためOSから見たCPUアーキテクチャがラズパイとは異なり、ラズパイで動くソフトウェアが動かないということがざらにある。
Rock64の情報はラズパイに比べてかなり限られているので、自分で苦労するハメになる。。。

rock64@rock64:/usr/local/bin$ uname -m
aarch64

ちなみにラズパイのアーキについては(https://blog.treedown.net/entry/2016/09/06/010000 )。

OS

Rock64の開発元がいろいろなOSのインストールイメージを公開している(https://github.com/pine64dev/PINE64-Installer/blob/master/README.md )。

PINEインストーラ.PNG

私は使い慣れたUbuntuにした。とりあえずパフォーマンスとかは今のところ気になっていない。
※余談だが上のキャプチャは2018/10/19に撮ったもの。自分がインストールしたとき(6月ごろ)よりUbuntu18.04のイメージが増えて、16.04のイメージが減っている気がする。。。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.5 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.5 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

ビルド・インストール手順

GHCとCabalのインストール

ElmはHaskellで実装されているらしく、ビルドにはHaskellのコンパイラであるGHCとビルドツールCabalが必要になる。
私はまずStackでなんとかしようと頑張ったが、Stack自体のインストールに躓いて精神力を消耗した(そしておそらくStackを入れたとしても解決していなかった)。
GHCとCabalは apt-get installで簡単にインストールできる。

$ sudo apt-get install ghc
$ sudo apt-get install cabal-install

ただし、Ubuntuが最新でない(Bionicではない)ためか、やや古いバージョンが入る(ghc: 7.10.3-7, cabal-install: 1.22.6.0-2)。とりあえずうまく行ったので今回はこれで進める。

ソースのダウンロード

以前はElm-platformというリポジトリをダウンロードしていたと思うのだが、elm/compilerというリポジトリに移ったらしい。

なのでそちらをクローンする。

$ git clone https://github.com/elm/compiler.git
$ ls compiler/
builder  compiler  ContributorAgreement.pdf  docs  elm.cabal  installers  LICENSE  README.md  ui  upgrade-docs

ビルド

compiler/直下にelm.cabalがある。これにビルド設定が書かれているはずなので、compiler/配下に移動して cabal installコマンドを実行する。

$ cd compiler
$ cabal install

正確に測っていないので不明だが、1時間以上はかかる。
寝て待とう。

ビルドが完了すると、新たに compiler/distというディレクトリが生成されている。

$ ls
builder  compiler  ContributorAgreement.pdf  dist  docs  elm.cabal  installers  LICENSE  README.md  ui  upgrade-docs

パスを通す

果たしてこのやり方で本当に正しいのかよくわからないが、実行ファイルのシンボリックリンクをPATHが通ったディレクトリに作成する。環境変数PATHに実行ファイルのパスを通すやり方でもいいと思う。

$ cd /usr/local/bin/
$ sudo ln -s /home/rock64/Elm-Platform/compiler/dist/build/elm/elm elm

実行

$ elm
Hi, thank you for trying out Elm 0.19.0. I hope you like it!

-------------------------------------------------------------------------------
I highly recommend working through <https://guide.elm-lang.org> to get started.
It teaches many important concepts, including how to use `elm` in the terminal.
-------------------------------------------------------------------------------

The most common commands are:

    elm repl
        Open up an interactive programming session. Type in Elm expressions like
        (2 + 2) or (String.length "test") and see if they equal four!

    elm init
        Start an Elm project. It creates a starter elm.json file and provides a
        link explaining what to do from there.

    elm reactor
        Compile code with a click. It opens a file viewer in your browser, and
        when you click on an Elm file, it compiles and you see the result.

There are a bunch of other commands as well though. Here is a full list:

    elm repl    --help
    elm init    --help
    elm reactor --help
    elm make    --help
    elm install --help
    elm bump    --help
    elm diff    --help
    elm publish --help

Adding the --help flag gives a bunch of additional details about each one.

Be sure to ask on the Elm slack if you run into trouble! Folks are friendly and
happy to help out. They hang out there because it is fun, so be kind to get the
best results!

キタ━━━━(゚∀゚)━━━━!!
長かった。。。

所感

そもそもCabalでビルドしろと書いているのにStackを入れようとしていたのが愚かだが、そのあたりのツールの関連を理解していなかったのが問題だったような気がする。
普段パッケージマネージャに頼りきりだとこういう時に知識不足が露呈しますね。
精進せねば。

参考リンク

※本文中に書いたものもまとめておく

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?