- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

手始めに、gba向けの環境を整えてみたいと思います。

注意点 Edit

  • 余計な環境変数は定義しない
    CFLAGS, CXXFLAGS に -march とかつけない

とりあえずコンパイル Edit

http://milky.way-nifty.com/nuzou/2003/12/cygwinarmgbazau.html
を参考にしたら、コンパイルはできたヽ( ´ー`)ノ

動くか試さないと……。

手元のサンプルプログラムでテスト。
コンパイルは通るけど動かない……ダメポ。

今度はこちらを参考に。
http://gba.imou.to/gcc.html
あら、コンパイルに失敗。うむむ。

こうなったらということで、後者のconfigureオプションを使って、前者の方法でビルド。
コンパイル成功!

サンプルも無事動作。

コンパイル手順 Edit

作業ディレクトリを /work/gbagcc/ とする。
また、とりあえずのインストール先を /usr/local/arm-agb-elf/ とする。

  1. binutils-2.15, gcc-3.4.2, newlib-1.12.0 をそれぞれ入手する。
    wget ftp://ftp.gnu.org/pub/gnu/binutils/binutils-2.15.tar.gz
    wget ftp://ftp.gnu.org/pub/gnu/gcc/gcc-3.4.2/gcc-3.4.2.tar.bz2
    wget ftp://sources.redhat.com/pub/newlib/newlib-1.12.0.tar.gz
  2. それぞれを解凍する。
    tar xvfz binutils-2.15.tar.gz
    tar xvfj gcc-3.4.2.tar.bz2
    tar xvfz newlib-1.12.0.tar.gz
  3. http://gba.imou.to/gcc.htmlパッチを当てる。
    wget http://gba.imou.to/dists/patches-devgba/patches-devgba-2004-07-15.tar.bz2
    tar xvfj patches-devgba-2004-07-15.tar.bz2
    patch -p0 < patches-devgba-2004-07-15/binutils-2.15.patch
    cd gcc-3.4.2/
    patch -p1 < ../patches-devgba-2004-07-15/gcc-3.4.1.patch
    cd ../
    patch -p0 < patches-devgba-2004-07-15/newlib-1.12.0.patch
  4. binutils を生成する。
    最初、makeでflexなくてコケたのでcygwinのインストール時にいれとこうね。
    mkdir build; cd build
    mkdir bintuils; cd binutils
    ../../binutils-2.15/configure  --prefix=/usr/local/arm-agb-elf \
                  --target=arm-agb-elf --disable-nls --with-cpu=arm7tdmi \
                  --enable-targets=arm-elf,arm-coff,arm-aout
    make
    make install
  5. PATH を通しておく。
    bashの場合
    export PATH=/usr/local/arm-agb-elf/bin:$PATH
  6. gcc を仮に生成する。
    cd ../; mkdir gcc; cd gcc
    ../../gcc-3.4.2/configure \
      --prefix=/usr/local/arm-agb-elf \
      --enable-languages=c,c++,ada \
      --target=arm-agb-elf \
      --disable-nls --with-cpu=arm7tdmi \
      --enable-targets=arm-elf,arm-coff,arm-aout --with-newlib \
      --enable-multilib --enable-interwork \
      --disable-threads --disable-shared
    make LANGUAGES=c all-gcc
    make LANGUAGES=c install-gcc
  7. newlib を生成する。
    cd ../; mkdir newlib; cd newlib
    ../../newlib-1.12.0/configure \
      --prefix=/usr/local/arm-agb-elf \
      --target=arm-agb-elf
    make
    make install
  8. gcc の残りを生成する。
    cd ../gcc
    make
    make install

でOKなはず。

Cのサンプルを動かしてみる Edit

ためしに

適当なのを動かしてみる Edit

main.c:

typedef unsigned char u8;
typedef unsigned short u16;

int main(void)
{
	u8 x,y;

	u16* ScreenBuffer = (u16 *)0x6000000;
	
	*(u16 *)0x4000000 = 3 | 0x0400;
	
	for(x = 0; x !=240; x++){
		for(y = 0; y !=160; y++){
			ScreenBuffer[x + y * 240] = 30;
		}
	}
	return 0;
}

makefile:

all: main.gba

main.elf: main.c
        arm-agb-elf-gcc -o $@ $<

main.gba:main.elf
        arm-agb-elf-objcopy -O binary $< $@

動いたー!!


  • コンパイル手順の追加 -- TOBY 2004-04-15 (木) 05:41:52
  • binutils-2.15, gcc-3.4.2, patches-devgba-2004-07-15に対応 -- TOBY 2004-11-03 (水) 12:52:31
  • Adaはこけるね・・・だめぽ。 -- TOBY 2005-06-03 19:58:49 (金)


Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2007-05-14 Mon 04:26:04 JST (3782d)