表題の通りです.
レポジトリはここ
https://github.com/littlekernel/lk.git
まずは,
このパッチは2つの変更から為る.
ひとつめ
これだと
しかも,この変数はもし宣言されてない場合は
ふたつめ
加えて,次の修正が必要かもしれない.
以上を修正したところで,次の通りに実行.
(ただしツールチェインのプレフィクスは自分の環境に合わせてください)
P.S.
レポジトリはここ
https://github.com/littlekernel/lk.git
まずは,
$ git clone https://github.com/littlekernel/lk.gitここで次のパッチをあてる.
$ cd lk
このパッチは2つの変更から為る.
ひとつめ
arch/x86/toolchain.mk
の25行目,FOUNDTOOL
が,ifndef ARCH_x86_64_TOOLCHAIN_PREFIX
の中にある.これだと
ARCH_x86_64_TOOLCHAIN_PREFIX
を自分で指定したら必ずビルドに失敗してしまう.しかも,この変数はもし宣言されてない場合は
x86_64-elf-
をプレフィクスにしようとする.大半のPCのLinux環境ではx86_64-pc-linux-gnu-
だろう.
ふたつめ
engine.mk
のGLOBAL_DEFINES
にHAVE_MREMAP=0
を追加する.
Linuxだとこの環境変数はデフォルトで1にされてしまい,external/lib/heap/dlmalloc/dlmalloc.c
でmremap(2)
を使おうとするが,
その実装がこのプロジェクト中に存在しないので,ビルドに失敗する.加えて,次の修正が必要かもしれない.
binutils
の中でも,nm, c++filt, objdump, objcopy, size, ld
のコマンドを使用するが,このlkのビルドシステムはARCH_x86_64_TOOLCHAIN_PREFIX
で指定したツールチェインのプレフィクスがこれらコマンドについてる前提でビルドする.
しかし,x86_64向けのbinutils
にプレフィクスがついたコマンド名のコマンドが入ってない場合も多い.その場合はln
コマンドとか使ってなんとかするしかない.
以上を修正したところで,次の通りに実行.
(ただしツールチェインのプレフィクスは自分の環境に合わせてください)
$ env ARCH_x86_64_TOOLCHAIN_PREFIX=x86_64-pc-linux-gnu- make pc-x86-64-test
これでビルドは完了P.S.
という指摘を貰う.ARMとかMIPSとかだけじゃなくてi386/x86_64もここのツールチェイン使うが正解っぽい.lk開発してる人達、x86_64も多分ここのツールチェイン使ってるんじゃ? https://t.co/FVIpEFl8Qw: https://t.co/1giVduAIdL
— СЮУ1228 (@syuu1228) 2016年8月17日
FOUNDTOOL
変数の定義の場所は明かにバグっぽいけど,そもそもここのツールチェインダウンロードしてパス通してってやれば,普通にプレフィクスそのままでビルド通るだろうから気がつかなかったんだろな.