Help us understand the problem. What is going on with this article?

スーパーファミコンのゲーム開発に向けた、LLVMとClangのインストール(mac)

More than 1 year has passed since last update.

筆者の環境で試しているところ、最後のmakeでエラーが発生し、結構大変そうなので、一旦途中ですが投稿しています。ただ、公式ドキュメントを読んで、日本語化していってるので、途中まででもなにかの参考に慣れればと思います。

追記:WDC65816の既知のエラーで、失敗するようです。GitHubのイシューにも上がってました。

[ 97%] Linking CXX executable ../../bin/llvm-nm
Undefined symbols for architecture x86_64:
  "vtable for llvm::WDC65816InstPrinter", referenced from:
      llvm::WDC65816InstPrinter::WDC65816InstPrinter(llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&) in libLLVMWDC65816Desc.a(WDC65816MCTargetDesc.cpp.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/llvm-nm] Error 1


スーパーファミコンの開発は基本はアセンブラだが、65816向けの機械語を吐き出すコンパイラを使用すれば、Cでも開発ができる。ここではLLVMとClangを使ってスーパーファミコンのゲームを開発するための、環境構築を説明する。
(半分作業メモ的な感じ。)

LLVMはコンパイラを作成するためのフレームワークみたいなもの(?)。LLVM向けの65816コンパイラを入れることで、LLVMを通してスーパーファミコン用ROMを吐き出せるようにする。LLVM自体がスーパーファミコンのために存在するものではないので認識注意。Clangはgccに置き換わるようなもの。

環境はmacOS X。

LLVM、Clangの公式ドキュメント

LLVMとClangのインストール

LLVM ソース取得

SVNとGitの両方が用意されているが、今回はGitを選択した。

クローンする。

$ git clone https://git.llvm.org/git/llvm.git/

クローン成功。

Cloning into 'llvm'...
remote: Counting objects: 1561214, done.
remote: Compressing objects: 100% (424607/424607), done.
remote: Total 1561214 (delta 1298308), reused 1393545 (delta 1131198)
Receiving objects: 100% (1561214/1561214), 299.39 MiB | 6.17 MiB/s, done.
Resolving deltas: 100% (1298308/1298308), done.

Clang ソース取得

クローンする。

$ cd llvm/tools
$ git clone https://git.llvm.org/git/clang.git/

クローン成功。

Cloning into 'clang'...
remote: Counting objects: 696969, done.
remote: Compressing objects: 100% (145005/145005), done.
remote: Total 696969 (delta 590138), reused 651692 (delta 545245)
Receiving objects: 100% (696969/696969), 113.81 MiB | 6.68 MiB/s, done.
Resolving deltas: 100% (590138/590138), done.

その他のソース

compiler-rt、libomp、libcxx及びlibcxxabi、Test Suite Source Codeを使用したい場合は、下記も取得する。コマンドは記載するが、今回の目的では不要と思われるので、取得はしていない。

compiler-rt(required to build the sanitizers)

$ cd llvm/projects
$ git clone https://git.llvm.org/git/compiler-rt.git/

libomp(required for OpenMP support)

$ cd llvm/projects
$ git clone https://git.llvm.org/git/openmp.git/

libcxx and libcxxabi

$ cd llvm/projects
$ git clone https://git.llvm.org/git/libcxx.git/
$ git clone https://git.llvm.org/git/libcxxabi.git/

Test Suite Source Code

$ cd llvm/projects
$ git clone https://git.llvm.org/git/test-suite.git/

WDC65816のソース取得

65816向けにコンパイルするための、本件で目的となるツール。
GitHubリポジトリ

$ cd llvm/lib
$ git clone https://github.com/SNES-SDK/WDC65816.git

LLVMとClangのコンパイル

CMakeを使用する。インストールしていない場合は、インストールする。brewが入っていれば、brew installですぐ使えるはず。
コンパイル結果を出力したいディレクトリに移動しておく。今回は上記でクローンしたllvmディレクトリと横並びでbuildというディレクトリを作成した。

$ mkdir build
$ cd build
$ cmake -G Unix\ Makefiles ../llvm

コンパイルできた。buildディレクトリに出力結果が出ているはず。

LLVMとClangのインストール

上述の作業で、buildディレクトリにLLVMのコンパイル結果が出ているはず。buildディレクトリでmakeすることで、インストールが完了する。

makeには結構時間がかかる(シリアルビルドで40分位?)ので、-jオプションを付けて、並列ビルドにする。劇的ではないがある程度は早くなる。

make -j
make check-all
make install
mediado
私たちメディアドゥは、電子書籍を読者に届けるために「テクノロジー」で「出版社」と「電子書店」を繋ぎ、その先にいる作家と読者を繋げる「電子書籍取次」事業を展開しております。業界最多のコンテンツラインナップとともに最新のテクノロジーを駆使した各種ソリューションを出版社や電子書店に提供し、グローバル且つマルチコンテンツ配信プラットフォームを目指しています。
https://mediado.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away