コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2019年5月13日 >>> 2019年5月13日
link もっと後

2019年5月13日

GCCを調べる - その1 - ビルド

目次: GCC

最近GCCのコードを書き換えたり、デバッガで追ったり、GCCとお友達になろうとしています。まだ仲良くなれていませんが、入り口に立つまでが色々大変だったのと、間違いなく数カ月後に手順を忘れるので、方法を書き残しておこうと思います。

GCCのコードを書き換えて、結果を反映させるには、何らかの方法でGCCをビルドする必要があります。クロスビルド用ツールチェーンの構築は、昔の日記(2019年4月28日の日記参照)に書いたとおりです。コンパイラを追うだけで、ルートファイルシステムが必要なければ、おそらくcrosstool-NGを使うのが無難です。差分ビルドがうまく行かないので、何か変更した後に再ビルドするのがちょっと面倒ですが、それ以外は簡単で便利です。

私は再ビルドが遅くてイライラしたのと、ビルドの仕組みにも興味があったので、以前の日記(2019年4月29日の日記参照)に書いたとおり、昔作ったクロスコンパイラをビルドするMakefile(GitHubへのリンク)を改造して使っています。ブランチはorigin/develop/separate-makefileです。もうこちらを本線にしても良い気がしてきたな。

オレオレGCCビルド環境

これも使い方を忘れるのでメモしておきます。手動でビルドするのとあまり変わりません。

オレオレGCCビルド環境、ソースコード取得
#### ビルド用ディレクトリ

$ mkdir build_my_toolchain
$ cd build_my_toolchain


#### 環境構築用のリポジトリ

$ git clone https://github.com/katsuster/crosstool-builder
$ cd crosstool-builder
$ git checkout -t origin/develop/separate-makefile
$ cd ../


#### GCCだけリポジトリで取得する(git diffしたいから)

$ git clone https://gcc.gnu.org/git/gcc.git


## GCC-8.3.0を使う、他のバージョンでもある程度ビルドできるはず

$ cd gcc
$ git checkout gcc-8_3_0-release
$ cd ../


#### その他の依存モジュールはtarballを使用する

$ mkdir tmp
$ cd tmp
$ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.19.1.tar.xz
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.31.1.tar.bz2
$ wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.xz

$ wget https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.lz
$ wget https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
$ wget https://ftp.gnu.org/gnu/mpfr/mpfr-4.0.2.tar.xz
$ cd ../


#### ツールチェーンに必要なモジュール

$ tar xf tmp/linux-4.19.1.tar.xz
$ tar xf tmp/binutils-2.31.1.tar.bz2
$ tar xf tmp/glibc-2.28.tar.xz

$ ln -s linux-4.19.1    linux
$ ln -s binutils-2.31.1 binutils
$ ln -s glibc-2.28      glibc


#### GCCに必要なモジュール

$ tar xf tmp/gmp-6.1.2.tar.lz
$ tar xf tmp/mpc-1.1.0.tar.gz
$ tar xf tmp/mpfr-4.0.2.tar.xz

$ cd gcc
$ ln -s ../gmp-6.1.2  gmp
$ ln -s ../mpc-1.1.0  mpc
$ ln -s ../mpfr-4.0.2 mpfr
$ cd ../

自分で書いていて面倒くさいなあと思いました。スクリプトにしたほうが良かったかもしれない。もしbinutilsも変更したりデバッグしたければ、tarballの代わりにリポジトリをチェックアウトしてくると良いです。

オレオレGCCビルド環境、ビルド
$ source crosstool-builder/env.sh

$ cd crosstool-builder

$ make -j4 install

デフォルトではRISC-V 64bit Linux向けのクロスコンパイラをビルドします。env.shを書き換えればAArch64やARM向けもビルド可能です。RISC-V 32bit向けはgcc-static(ベアメタル用コンパイラとして使用可能)までしかビルドできません。以降はglibcのビルドでエラーになりLinux用のクロスコンパイラはビルドできません。

オレオレGCCビルド環境、部分ビルド
$ cd crosstool-builder

$ make -f gcc-static.mk -j4 install

GCCに何か修正を入れてビルドし直すときは、ビルドし直したい *.mkファイルを指定してmake します。

編集者:すずき(2023/09/24 11:46)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2019年5月13日 >>> 2019年5月13日
link もっと後

管理用メニュー

link 記事を新規作成

<2019>
<<<05>>>
---1234
567891011
12131415161718
19202122232425
262728293031-

最近のコメント5件

  • link 24年4月22日
    hdkさん (04/24 08:36)
    「うちのHHFZ4310は15年突破しまし...」
  • link 24年4月22日
    すずきさん (04/24 00:37)
    「ちゃんと数えてないですけど蛍光管が10年...」
  • link 24年4月22日
    hdkさん (04/23 20:52)
    「おお... うちのHHFZ4310より後...」
  • link 20年6月19日
    すずきさん (04/06 22:54)
    「ディレクトリを予め作成しておけば良いです...」
  • link 20年6月19日
    斎藤さん (04/06 16:25)
    「「Preferencesというメニューか...」

最近の記事3件

  • link 24年2月7日
    すずき (04/24 02:52)
    「[複数の音声ファイルのラウドネスを統一したい] PCやデジタル音楽プレーヤーで音楽を聞いていると、曲によって音量の大小が激しく...」
  • link 24年4月22日
    すずき (04/23 20:13)
    「[仕事部屋の照明が壊れた] いきなり仕事部屋のシーリングライトが消えました。蛍光管の寿命にしては去年(2022年10月19日の...」
  • link 24年4月17日
    すずき (04/18 22:44)
    「[VSCodeとMarkdownとPlantUMLのローカルサーバー] 目次: LinuxVSCodeのPlantUML Ex...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 04/24 08:36