忍者ブログ

なんだか

知らないほうが幸せかもしれない

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

mingw32なrl78-elf-gccのビルド失敗の原因

newlibのビルドが失敗したのはi686-w64-mingw32-gccのversionが4.5.3だったからのようです。

念の為、binutilsから

9.i686-w64-mingw32-binutils(2.23.1)の作成

$ cd /mingw-temp/binutils
$ mkdir mingw32
$ cd mingw32
$ ../binutils-2.23.1/configure --prefix=/usr/local/4.7 --build=i686-pc-cygwin
--host=i686-pc-cygwin --target=i686-w64-mingw32
$ make -j4
$ make install

10.i686-w64-mingw32-gcc(4.7.2)の作成

$ cd /mingw-temp/gcc
$ mkdir mingw32
$ cd mingw32
$ ../gcc-4.7.2/configure --prefix=/usr/local/4.7 --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-w64-mingw32 --with-sysroot=/usr/i686-w64-mingw32/sys-root --disable-multilib --disable-win32-registry --enable-languages=c,c++ --enable-fully-dynamic-string --enable-libgomp --enable-sjlj-exceptions --enable-version-specific-runtime-libs --with-dwarf2 --enable-decimal-float=bid --enable-lto
$ make -j4
$ make install

11.rl78-elf-gccの作成

$ cd /mingw-temp/gcc
$ rm rl78-elf -fr
$ mkdir rl78-elf
$ cd rl78-elf
$ CC=/usr/local/4.7/bin/i686-w64-mingw32-gcc CXX=/usr/local/4.7/bin/i686-w64-mingw32-g++ ../gcc-4.7.2/configure --prefix=/rl78-elf --target=rl78-elf --build=i686-w64-mingw32 --enable-languages=c,c++ --with-newlib --disable-win32-registry
$ make -j4
$ make install

12.newlibの作成

$ cd /mingw-temp/newlib
$ rm rl78-elf -fr
$ mkdir rl78-elf
$ cd rl78-elf 
$ ../newlib-2.0.0/configure --prefix=/rl78-elf --target=rl78-elf
$ make -j4
$ make install

これで、終わり

拍手[0回]

PR

cygwinでmingw32なrl78-elf-gccを作ってみる

0.mingw32なgccを作るときの下準備

mingw64-i686-gcc-core
mingw64-i686-gcc-g++
mingw64-i686-headers
mingw64-i686-pthreds
mingw64-i686-runtime
をcygwinのsetupでインストールする。

$ mount c:/mingw-temp /mingw-temp
$ mkdir /mingw-temp

作業フォルダは/mingw-tempです。
mountを固定したい場合は/etc/fstabに記述する。

1.libiconvの作成
$ cd /mingw-temp
$ mkdir libiconv
$ cd libiconv
$ wget http://www.dnsbalance.ring.gr.jp/archives/GNU/libiconv/libiconv-1.14.tar.gz
$ tar xf libiconv-1.14.tar.gz
$ mkdir mingw32
$ cd mingw32
$ ../libiconv-1.14/configure --prefix=/usr/i686-w64-mingw32/sys-root/mingw --host=i686-w64-mingw32
$ make -j4
$ make install

2.gmpの作成

$ cd /mingw-temp 
$ mkdir gmp
$ cd gmp
$ wget ftp://ftp.gmplib.org/pub/gmp-5.1.0/gmp-5.1.0.tar.bz2
$ tar xjf gmp-5.1.0.tar.bz2
$ mkdir mingw32
$ cd mingw32
$ ../gmp-5.1.0/configure --prefix=/usr/i686-w64-mingw32/sys-root/mingw --host=i686-w64-mingw32 --enable-shared --disable-static
$ make -j4
$ make install

3.mpfrの作成

$ cd /mingw-temp 
$ mkdir mpfr
$ cd mpfr
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.1.tar.xz
$ tar xJf mpfr-3.1.1.tar.xz
$ mkdir mingw32
$ cd mingw32
$  ../mpfr-3.1.1/configure --prefix=/usr/i686-w64-mingw32/sys-root/mingw --host=i686-w64-mingw32 --enable-shared --disable-static CC=i686-w64-mingw32-gcc
$ make -j4
$ make install

3.mpcの作成

$ cd /mingw-temp 
$ mkdir mpc
$ cd mpc
$ wget http://www.multiprecision.org/mpc/download/mpc-1.0.1.tar.gz
$ tar xf mpc-1.0.1.tar.gz
$ mkdir mingw32
$ cd mingw32
$ ../mpc-1.0.1/configure --prefix=/usr/i686-w64-mingw32/sys-root/mingw --host=i686-w64-mingw32 --enable-shared --disable-static  CC=i686-w64-mingw32-gcc
$ make -j4
$ make install

4.binutilsの作成

$ mount c:/rl78-elf /rl78-elf インストール先をmountしておく

mountを固定したい場合は/etc/fstabに記述する。

$ cd /mingw-temp 
$ mkdir binutils
$ cd binutils
$ wget http://www.dnsbalance.ring.gr.jp/archives/GNU/binutils/binutils-2.23.1.tar.bz2
$ tar xjf binutils-2.23.1.tar.bz2
$ mkdir rl78-elf
$ cd rl78-elf
$ ../binutils-2.23.1/configure --prefix=/rl78-elf --target=rl78-elf --host=i686-w64-mingw32
$ make -j4
$ make install

5.PATHの設定と必要なDLLのコピー

$ cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libiconv-2.dll /rl78-elf/bin
$ cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libgmp-10.dll /rl78-elf/bin
$ cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libmpfr-4.dll /rl78-elf/bin
$ cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libmpc-3.dll /rl78-elf/bin
$ export PATH=/rl78-elf/bin:$PATH

6.gccの作成その1

$ cd /mingw-temp 
$ mkdir gcc
$ cd gcc
$ wget http://www.dnsbalance.ring.gr.jp/archives/lang/egcs/releases/gcc-4.7.2/gcc-4.7.2.tar.bz2
$ tar xjf gcc-4.7.2.tar.bz2
$ mkdir rl78-elf
$ cd rl78-elf
$ CC=i686-w64-mingw32-gcc
CXX=i686-w64-mingw32-g++ ../gcc-4.7.2/configure --prefix=/rl78-elf --target=rl78-elf --build=i686-w64-mingw32 --enable-languages=c --disable-build-with-cxx --disable-win32-registry
$ make all-gcc -j4
$ make install-gcc

gcc-4.7.2はnewlibでビルドが失敗します。

$ wget http://www.dnsbalance.ring.gr.jp/archives/lang/egcs/snapshots/4.8-20130120/gcc-4.8-20130120.tar.bz2
$ tar xjf gcc-4.8-20130120.tar.bz2
$ mkdir rl78-elf
$ cd rl78-elf
$ CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ ../gcc-4.8-20130120/configure --prefix=/rl78-elf --target=rl78-elf --build=i686-w64-mingw32 --enable-languages=c --disable-win32-registry
$ make all-gcc -j4
$ make install-gcc

7.newlibの作成

$ cd /mingw-temp 
$ mkdir newlib
$ cd newlib
$ wget newlib-2.0.0.tar.gz
$ tar xf newlib-2.0.0.tar.gz
$ mkdir rl78-elf
$ cd rl78-elf
$ ../newlib-2.0.0/configure --prefix=/rl78-elf --target=rl78-elf
$ make -j4
$ make install

8.gccの作成その2

$ cd /mingw-temp 
$ cd gcc

symlinkはmingwのときは使えないので
$ sed -i "s/ln -s/cp -p/" gcc-4.8-20130120/libgcc/configure
$ sed -i "s/ln -s/cp -p/" gcc-4.8-20130120/libstdc++-v3/configure

$ rm rl78-elf -fr      一度、削除
$ mkdir rl78-elf
$ cd rl78-elf
$ CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ ../gcc-4.8-20130120/configure --prefix=/rl78-elf --target=rl78-elf --build=i686-w64-mingw32 --enable-languages=c,c++ --with-newlib --disable-win32-registry
$ make -j4

gcc-4.8-20130120だとlibstdc++-v3でビルドに失敗します。

symlinkはmingwのときは使えないので
$ sed -i "s/ln -s/cp -p/" gcc-4.7.2/libgcc/configure
$ sed -i "s/ln -s/cp -p/" gcc-4.7.2/libstdc++-v3/configure

$ rm rl78-elf -fr 一度、削除
$ mkdir rl78-elf
$ cd rl78-elf
$ CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ ../gcc-4.7.2/configure --prefix=/rl78-elf --target=rl78-elf --build=i686-w64-mingw32 --enable-languages=c,c++ --with-newlib --disable-win32-registry
$ make -j4
$ make install

ここまで、終わり

$ rl78-elf-gcc -v
組み込み spec を使用しています。
COLLECT_GCC=C:\rl78-elf\bin\rl78-elf-gcc.exe
COLLECT_LTO_WRAPPER=c:/rl78-elf/bin/../libexec/gcc/rl78-elf/4.7.2/lto-wrapper.exe
ターゲット: rl78-elf
configure 設定: ../gcc-4.7.2/configure --prefix=/rl78-elf --target=rl78-elf --build=i686-w64-mingw32 --enable-languages=c,c++ --with-newlib --disable-win32-registry
スレッドモデル: single
gcc バージョン 4.7.2 (GCC)

拍手[0回]

rl78-elf-gccコンパイラ作成手順

基本的にunix系の環境で構築するのを推奨,windows系ならcygwin、msysで
unix系でwindowsで動作可能なコンパイラを作ることもできます。
ただし、その環境を作る作業のほうが難易度高です。

GUIではコンソールの環境で作業します

まずは、binutilsの作成からです。

$ mkdir binutils
作業フォルダの作成
$ cd binutils
そこに移動
$ wget http://www.ring.gr.jp/archives/GNU/binutils/binutils-2.23.1.tar.bz2
本家もしくはミラーサイトよりbinutilsのなるべく最新のものをダウンロード
$ tar xjf binutils-2.23.1.tar.bz2
圧縮ファイルの解凍
$ mkdir build
ビルドフォルダの作成
$ cd build
フォルダに移動
$ ../binutils-2.23.1/configure --prefix=/usr/local -enable-64-bit-bfd --enable-checking=release --target=rl78-elf
configureの実行
$ make -j4
makeの実行(4は4コアの場合)
$ su
スーパーユーザーモードに
# make install
インストール先は/usr/local
# exit
スーパーユーザーモード解除
$ cd ..
$ cd ..
これでbinutilsの作成は終わり

次にgccの作成(最初はライブラリがないため、2回作業が必要)
注 gmp,mpfr,mpcがインストールされていること
$ mkdir gcc
作業フォルダの作成
$ cd gcc
そこに移動
$ wget http://www.ring.gr.jp/archives/lang/egcs/releases/gcc-4.7.2/gcc-4.7.2.tar.bz2
本家もしくはミラーサイトよりなるべく最新のものをダウンロード
$ mkdir build
ビルドフォルダの作成
$ cd build
フォルダに移動
$ tar xjf gcc-4.7.2.tar.bz2
圧縮ファイルの解凍
$ mkdir build
ビルドフォルダの作成
$ cd build
フォルダに移動
$ .../gcc-4.7.2/configure --prefix=/usr/local --enable-checking=release --enable-languages=c --target=rl78-elf
configureの実行
$ make all-gcc all-target-libgcc -j4
Cコンパイラのみを作成
$ su
スーパーユーザーモードに
# make install-gcc install-target-libgcc -j4
インストール先は/usr/local
# exit
スーパーユーザーモード解除
$ cd ..
$ cd ..
初回のgccの作成はここまで
次にnewlibの作成
$ mkdir newlib
作業フォルダの作成
$ cd newlib
そこに移動
ダウンロードと圧縮ファイルの解凍は略
$ mkdir build
$ cd build
$ ../newlib-1.20.0/configure --prefix=/usr/local –target=rl78-elf
configureの実行
$ make -j4
Cコンパイラのみを作成
$ su
スーパーユーザーモードに
# make install -j4
インストール先は/usr/local
# exit
スーパーユーザーモード解除
$ cd ..
$ cd ..
Cコンパイラのみはここまで
最終段階のgccの作成
$ cd gcc
$ rm build -fr
一度、初回作成のフォルダを削除
$ mkdir build
$ cd build
$ .../gcc-4.7.2/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --target=rl78-elf --with-newlib
configureの実行(c++、newlibを追加)
$ make -j4
$ su
# make install -j4
# exit
$ cd ..
$ cd ..
これでコンパイラの作成は終了
$ rl78-elf-gcc -v
組み込み spec を使用しています。
COLLECT_GCC=rl78-elf-gcc
COLLECT_LTO_WRAPPER=/usr/local/rl78/libexec/gcc/rl78-elf/4.7.2/lto-wrapper
ターゲット: rl78-elf
configure 設定: ../gcc-4.7.2/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --target=rl78-elf --with-newlib
スレッドモデル: single
gcc バージョン 4.7.2 (GCC)

と表示されれば終わり


拍手[1回]

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

最新記事

(07/27)
(03/27)
(03/26)
(03/23)
(03/22)
(03/19)
(03/18)
(03/18)
(03/15)
(03/14)
(03/13)
(03/12)
(03/11)
(03/11)
(03/08)
(03/08)
(03/06)
(03/05)
(03/02)
(03/01)
(02/28)
(02/27)
(02/24)
(02/23)
(02/22)

プロフィール

HN:
kenrou
性別:
非公開

バーコード

ブログ内検索

最古記事

(12/15)
(12/16)
(12/17)
(12/18)
(12/19)
(12/20)
(12/21)
(12/22)
(12/23)
(12/24)
(12/25)
(12/26)
(12/27)
(12/28)
(12/29)
(12/30)
(12/31)
(01/01)
(01/02)
(01/21)
(01/22)
(01/23)
(01/24)
(01/24)
(01/28)

P R

忍者アナライズ

コガネモチ

忍者カウンター

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30