Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

LLVMのバックエンドを作るための第一歩のビルドエラー #23

Closed
m1goh opened this issue Sep 1, 2022 · 7 comments
Closed

Comments

@m1goh
Copy link

m1goh commented Sep 1, 2022

117ページからのLLVMの改造をしてビルドをするとエラーになります。llvm/lib/Target/MYRISCVX/以下は完成済みのllvm-project
から123ページに載っているファイルだけコピーしました。エラーの内容は一部だけになりますがこのような感じです。

See also "/home/akiyoshi/llvm-myriscvx120/build/CMakeFiles/CMakeOutput.log".
See also "/home/akiyoshi/llvm-myriscvx120/build/CMakeFiles/CMakeError.log".
FAILED: build.ninja
/usr/bin/cmake -S/home/akiyoshi/llvm-myriscvx120/llvm -B/home/akiyoshi/llvm-myriscvx120/build
ninja: error: rebuilding 'build.ninja': subcommand failed
akiyoshi@beetle:~/llvm-myriscvx120/build$ vi CMakeFiles//CMakeError.log
akiyoshi@beetle:~/llvm-myriscvx120/build$ cat CMakeFiles/CMakeError.log
Determining if the include file malloc/malloc.h exists failed with the following output:
Change Dir: /home/akiyoshi/llvm-myriscvx120/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/ninja cmTC_101a0 && [1/2] Building C object CMakeFiles/cmTC_101a0.dir/CheckIncludeFile.c.o
FAILED: CMakeFiles/cmTC_101a0.dir/CheckIncludeFile.c.o
/usr/bin/cc    -o CMakeFiles/cmTC_101a0.dir/CheckIncludeFile.c.o   -c CheckIncludeFile.c
CheckIncludeFile.c:1:10: fatal error: malloc/malloc.h: No such file or directory
    1 | #include <malloc/malloc.h>
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.



Determining if the include file valgrind/valgrind.h exists failed with the following output:
Change Dir: /home/akiyoshi/llvm-myriscvx120/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/ninja cmTC_54599 && [1/2] Building C object CMakeFiles/cmTC_54599.dir/CheckIncludeFile.c.o
FAILED: CMakeFiles/cmTC_54599.dir/CheckIncludeFile.c.o
/usr/bin/cc    -o CMakeFiles/cmTC_54599.dir/CheckIncludeFile.c.o   -c CheckIncludeFile.c
CheckIncludeFile.c:1:10: fatal error: valgrind/valgrind.h: No such file or directory
    1 | #include <valgrind/valgrind.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.

llvm/lib/Target/MYRISCVX/以下は完成済みのllvm-projectからディレクトリをそっくりコピーしてくるとかなり先に進みます。
このような感じです。

akiyoshi@beetle:~/llvm-myriscvx120/build$ ninja
[91/1355] Building CXX object lib/Target/MYRISCVX/MCTarget...keFiles/LLVMMYRISCVXDesc.dir/MYRISCVXELFObjectWriter.cpp.o
FAILED: lib/Target/MYRISCVX/MCTargetDesc/CMakeFiles/LLVMMYRISCVXDesc.dir/MYRISCVXELFObjectWriter.cpp.o
/usr/bin/c++  -DGTEST_HAS_RTTI=0 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Ilib/Target/MYRISCVX/MCTargetDesc -I/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc -I/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX -Ilib/Target/MYRISCVX -Iinclude -I/home/akiyoshi/llvm-myriscvx120/llvm/include -fPIC -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-redundant-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -fvisibility=hidden    -fno-exceptions -fno-rtti -std=c++14 -MD -MT lib/Target/MYRISCVX/MCTargetDesc/CMakeFiles/LLVMMYRISCVXDesc.dir/MYRISCVXELFObjectWriter.cpp.o -MF lib/Target/MYRISCVX/MCTargetDesc/CMakeFiles/LLVMMYRISCVXDesc.dir/MYRISCVXELFObjectWriter.cpp.o.d -o lib/Target/MYRISCVX/MCTargetDesc/CMakeFiles/LLVMMYRISCVXDesc.dir/MYRISCVXELFObjectWriter.cpp.o -c /home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp: In constructor ‘{anonymous}::MYRISCVXELFObjectWriter::MYRISCVXELFObjectWriter(uint8_t, bool)’:
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:37:52: error: ‘EM_MYRISCVX’ is not a member of ‘llvm::ELF’; did you mean ‘EM_RISCV’?
   37 |     : MCELFObjectTargetWriter(Is64Bit, OSABI, ELF::EM_MYRISCVX,
      |                                                    ^~~~~~~~~~~
      |                                                    EM_RISCV
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp: In member function ‘
virtual unsigned int {anonymous}::MYRISCVXELFObjectWriter::getRelocType(llvm::MCContext&, const llvm::MCValue&, const llvm::MCFixup&, bool) const’:
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:49:34: error: ‘R_MYRISCVX_NONE’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_NONE’?
   49 |   unsigned Type = (unsigned)ELF::R_MYRISCVX_NONE;
      |                                  ^~~~~~~~~~~~~~~
      |                                  R_RISCV_NONE
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:56:19: error: ‘R_MYRISCVX_HI20’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_HI20’?
   56 |       return ELF::R_MYRISCVX_HI20;
      |                   ^~~~~~~~~~~~~~~
      |                   R_RISCV_HI20
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:58:19: error: ‘R_MYRISCVX_LO12_I’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_LO12_I’?
   58 |       return ELF::R_MYRISCVX_LO12_I;
      |                   ^~~~~~~~~~~~~~~~~
      |                   R_RISCV_LO12_I
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:61:19: error: ‘R_MYRISCVX_LO12_S’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_LO12_S’?
   61 |       return ELF::R_MYRISCVX_LO12_S;
      |                   ^~~~~~~~~~~~~~~~~
      |                   R_RISCV_LO12_S
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:63:19: error: ‘R_MYRISCVX_PCREL_HI20’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_PCREL_HI20’?
   63 |       return ELF::R_MYRISCVX_PCREL_HI20;
      |                   ^~~~~~~~~~~~~~~~~~~~~
      |                   R_RISCV_PCREL_HI20
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:65:19: error: ‘R_MYRISCVX_PCREL_LO12_I’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_PCREL_LO12_I’?
   65 |       return ELF::R_MYRISCVX_PCREL_LO12_I;
      |                   ^~~~~~~~~~~~~~~~~~~~~~~
      |                   R_RISCV_PCREL_LO12_I
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:67:19: error: ‘R_MYRISCVX_PCREL_LO12_S’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_PCREL_LO12_S’?
   67 |       return ELF::R_MYRISCVX_PCREL_LO12_S;
      |                   ^~~~~~~~~~~~~~~~~~~~~~~
      |                   R_RISCV_PCREL_LO12_S
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:69:19: error: ‘R_MYRISCVX_CALL’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_CALL’?
   69 |       return ELF::R_MYRISCVX_CALL;
      |                   ^~~~~~~~~~~~~~~
      |                   R_RISCV_CALL
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:71:19: error: ‘R_MYRISCVX_BRANCH’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_BRANCH’?
   71 |       return ELF::R_MYRISCVX_BRANCH;
      |                   ^~~~~~~~~~~~~~~~~
      |                   R_RISCV_BRANCH
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:73:19: error: ‘R_MYRISCVX_JAL’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_JAL’?
   73 |       return ELF::R_MYRISCVX_JAL;
      |                   ^~~~~~~~~~~~~~
      |                   R_RISCV_JAL
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:76:19: error: ‘R_MYRISCVX_RELAX’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_RELAX’?
   76 |       return ELF::R_MYRISCVX_RELAX;
      |                   ^~~~~~~~~~~~~~~~
      |                   R_RISCV_RELAX
/home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MCTargetDesc/MYRISCVXELFObjectWriter.cpp:78:19: error: ‘R_MYRISCVX_GOT_HI20’ is not a member of ‘llvm::ELF’; did you mean ‘R_RISCV_GOT_HI20’?
   78 |       return ELF::R_MYRISCVX_GOT_HI20;
      |                   ^~~~~~~~~~~~~~~~~~~
      |                   R_RISCV_GOT_HI20
[108/1354] Building CXX object lib/Target/X86/CMakeFiles/LLVMX86CodeGen.dir/X86ISelLowering.cpp.o
ninja: build stopped: subcommand failed.

どのようにするのがよいでしょうか?教えていただけるありがたいです、よろしくお願いします。

@msyksphinz-self
Copy link
Owner

これは、P.95までのLLVMビルドが成功している前提でエラーが発生しているのでしょうか?
P.95で使用しているllvm-myriscvx120ブランチでのビルドは成功しており、それにいくつか修正を加えるとビルドに失敗した、ということでしょうか?

@m1goh
Copy link
Author

m1goh commented Sep 1, 2022

返信ありがとうございます。P95ページまでのビルドに成功しています。P103までのコンパイルでRISCVアセンブラの生成がうまくいかなかったので
RISCVアセンブリ生成が失敗してしまう
#1 参考にして再ビルドしました。
P117ページからのllvm/CMakeLists.textとllvm/cmake/config-ix.cmakeとllvm/include/llvm/ADT/Triple.hとllvm/lib/Support/Triple.cppにコードを追加しました。
Triple.cppのコードの追加はこちらを参考にしました。LLVMのバックエンドを作るための第一歩の章について #5
よろしくお願いします。

@msyksphinz-self
Copy link
Owner

返信遅くなり申し訳ありません。そうすると、新規追加ファイルの中で問題がありそうです。

申し訳ありませんが本書はソースコードのすべての追加分を記載しているわけではありません(そうすると500Pでは到底収まらなくなってしまいます)。
実際のビルド対象のソースコードについては、以下にCompleteなコードがあります。

https://github.com/msyksphinz-self/llvm-project/tree/llvm-myriscvx120

以下の一覧で、どこまでのソースコードが上記のリポジトリのどのリビジョンに対応しているかをご確認ください。

https://github.com/msyksphinz-self/support_ca_llvm_book/blob/main/book_revision.md

P.123までのビルドを試行するのであれば、上記の一覧をもとに、

P.123「LLVMのバックエンドを作るための第一歩」「LLVMをビルドして確認する」

2467c9de6339
Initial registration of MYRISCVX

までの変更分と、ローカルでの変更分を確認し不足している部分がないかご確認ください。

以上、煩雑で申し訳ありませんが、よろしくお願いいたします。

@m1goh
Copy link
Author

m1goh commented Sep 6, 2022

回答をありがとうございます。
gitは、ほとんどわかりません。インターネットで調べてみました。
教えていただいたハッシュ値を参考にして変更分を追加してみたいと思います。

@m1goh
Copy link
Author

m1goh commented Sep 17, 2022

git show 2467c9de6339として得られた差分を追加して、P.123「LLVMのバックエンドを作るための第一歩」は無事ビルドできました。

今は、P158「ターゲット記述ファイル(tdファイル)の作成」のビルドの準備。変更分のテキストの追加をしています。
git diff 2467c9de6339 3b9c63e2c0dfとして得られた差分を追加しています。差分を印刷してみましたが57ページあります。
やっと半分位の28ページまで終わった所です。この方法でも勉強になっていいとは思いますが、差分の量が多すぎてお手上げになってきました。

Gitはよくわからないのですがgit checkoutなどを使って本の内容を追いかけてLLVMのリポジトリのリビジョンを簡単に得る方法があるような気がします。もし簡単な方法があるようなら教えていただけないでしょうか?よろしくお願いします。

@msyksphinz-self
Copy link
Owner

返信遅れまして申し訳ありません。
おそらく差分を手作業で追いかけるのは不可能かと思います(紙にすべて載せることもあきらめたくらいの量ですので)、
お手持ちの環境において、作業用のリポジトリと、筆者のソースコードリポジトリを分離して管理しており、かつ差分形式(diff / patch)形式で取得できているのであれば、git applyで差分を作業用リポジトリに直接流し込むこともできます。

https://beyondjapan.com/blog/2019/08/git-diff/

@m1goh
Copy link
Author

m1goh commented Oct 2, 2022

返信ありがとうございました。
P.123までとP.158までの差分を作業用のリポジトリに流し込む事ができて、LLVMのビルドもできました。

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants