表題の通りです.
レポジトリはここ
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/arch/x86/toolchain.mk b/arch/x86/toolchain.mk | |
index dba751e..ac5c005 100644 | |
--- a/arch/x86/toolchain.mk | |
+++ b/arch/x86/toolchain.mk | |
@@ -22,9 +22,10 @@ ARCH_x86_64_TOOLCHAIN_INCLUDED := 1 | |
ifndef ARCH_x86_64_TOOLCHAIN_PREFIX | |
ARCH_x86_64_TOOLCHAIN_PREFIX := x86_64-elf- | |
-FOUNDTOOL=$(shell which $(ARCH_x86_64_TOOLCHAIN_PREFIX)gcc) | |
endif | |
+FOUNDTOOL=$(shell which $(ARCH_x86_64_TOOLCHAIN_PREFIX)gcc) | |
+ | |
ifeq ($(FOUNDTOOL),) | |
$(error cannot find toolchain, please set ARCH_x86_64_TOOLCHAIN_PREFIX or add it to your path) | |
endif | |
diff --git a/engine.mk b/engine.mk | |
index cffbcdd..5d0f3b8 100644 | |
--- a/engine.mk | |
+++ b/engine.mk | |
@@ -91,6 +91,7 @@ GENERATED := $(CONFIGHEADER) | |
# anything added to GLOBAL_DEFINES will be put into $(BUILDDIR)/config.h | |
GLOBAL_DEFINES := LK=1 | |
+GLOBAL_DEFINES += HAVE_MREMAP=0 | |
# Anything added to GLOBAL_SRCDEPS will become a dependency of every source file in the system. | |
# Useful for header files that may be included by one or more source files. |
ひとつめ
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
変数の定義の場所は明かにバグっぽいけど,そもそもここのツールチェインダウンロードしてパス通してってやれば,普通にプレフィクスそのままでビルド通るだろうから気がつかなかったんだろな.