CygwinでのGDCビルド手順

Table of Contents

1 はじめに

GDCはGCCのD言語 フロントエンドです。 最近のCygwinのパッケージにはGDCバイナリが含まれていたりするのですが、 バージョンが少々古いです。その為、最新のGDC&GCCに追従すべく 敢えて最初からビルドする方法を示してます。

2 前準備

コンパイルの為に、予めCygwinをインストールしておく必要があります。 初期インストール時に選択されたパッケージだけでは、コンパイラなどは インストールされません。最低でも gcc, g++, mingw-runtime パッケージ の追加インストールが必要(configureを通すのに他にも要るかも)と思われます。

3 必要なアーカイブ

以下のtar-ballを公式ページやWebミラーなどからダウンロードしてください。

  • gcc-4.0.3.tar.bz2 : GCCのソース一式
  • gdc-0.22-src.tar.bz2 : GDCのソース一式
  • cygwin-src-yyyymmdd.tar.bz2 : Cygwinソース一式

GCCは実際にビルドして特に問題の無かった4.0.3を使用するものとします。

GDCのソースアーカイブは GDC - D Programming Language for GCC のWebサイトよりダウンロードします。今回は0.22を使用してますが、 今後のバージョンアップでも大きく手順が変わる事は無いでしょう。

CygwinのソースアーカイブはMinGW対応のGDCをビルドするのに使用します。 Cygwinスナップショットのページ から ダウンロードするのが良いでしょう。 CygwinターゲットのGDCをビルドするだけであれば、特に用意する必要はありません。

4 Cygwinをターゲットとしたビルド

/usr/local/gdc にインストールするものとしてビルドします。 アーカイブ群は ~/arc の下に、ビルドは ~/gdcbuild の下で行う ものとします。

  1. cd
  2. mkdir gdcbuild
  3. cd gdcbuild
  4. bzip2 -dc ~/arc/gcc-4.0.3.tar.bz2 | tar xvf -
  5. cd gcc-4.0.3/gcc
  6. bzip2 -dc ~/arc/gdc-0.22-src.tar.bz2 | tar xvf -
  7. cd ..
  8. ./gcc/d/setup-gcc.sh
  9. mkdir build_cygwin
  10. cd build_cygwin
  11. ../configure --prefix=/usr/local/gdc --with-gnu-ld --with-gnu-as --enable-threads --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-languages=c,c++,d
  12. make
  13. make install

以上で、/usr/local/gdc/binにパスを通せば、gdcコンパイラが使用できます。

$ gdc -v
Using built-in specs.
Target: i686-pc-cygwin
Configured with: ../configure --prefix=/usr/local/gdc --with-gnu-ld --with-gnu-as --enable-threads --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-languages=c,c++,d
Thread model: posix
gcc version 4.0.3 (gdc 0.22, using dmd 1.004)

configureオプションはCygwin用gdcバイナリと同じにしてみました。 コマンドラインだけを列記しましたが、gdcのREADMEやINSTALLなども 読んでみてください。

5 MinGWをターゲットとしたビルド

「Cygwinをターゲットとしたビルド」の手順「8.」まで実行した所から 始めます。

  1. cd ~/gdcbuild
  2. bzip2 -dc ~/arc/cygwin-src-yyyymmdd.tar.bz2 | tar xvf -
  3. cd gcc-4.0.3
  4. ln -s ../cygwin-snapshot-yyyymmdd-1/winsup .
  5. mkdir /usr/local/gdc/i686-pc-mingw32
  6. mkdir /usr/local/gdc/i686-pc-mingw32/bin
  7. ln -s /usr/bin/ar.exe /usr/local/gdc/i686-pc-mingw32/bin/.
  8. ln -s /usr/bin/as.exe /usr/local/gdc/i686-pc-mingw32/bin/.
  9. ln -s /usr/bin/ld.exe /usr/local/gdc/i686-pc-mingw32/bin/.
  10. ln -s /usr/bin/nm.exe /usr/local/gdc/i686-pc-mingw32/bin/.
  11. ln -s /usr/bin/strip.exe /usr/local/gdc/i686-pc-mingw32/bin/.
  12. ln -s /usr/bin/ranlib.exe /usr/local/gdc/i686-pc-mingw32/bin/.
  13. mkdir /usr/local/gdc/i686-pc-mingw32/include
  14. /bin/cp -pr /usr/include/mingw/* /usr/local/gdc/i686-pc-mingw32/include/.
  15. mkdir /usr/local/gdc/i686-pc-mingw32/lib
  16. /bin/cp -pr /usr/lib/mingw/* /usr/local/gdc/i686-pc-mingw32/lib/.
  17. mkdir /usr/local/gdc/i686-pc-mingw32/sys-include
  18. /bin/cp -pr /usr/include/w32api/* /usr/local/gdc/i686-pc-mingw32/sys-include/.
  19. mkdir build_mingw
  20. cd build_mingw
  21. ../configure --prefix=/usr/local/gdc --target=i686-pc-mingw32 --with-gnu-ld --with-gnu-as --enable-threads --disable-win32-registry --disable-shared --enable-sjlj-exceptions --disable-nls --enable-languages=c,c++,d
  22. make
  23. make install

以上で、-mno-cygwin オプションが使用可能となり、cygwin1.dll非依存の 実行バイナリを生成できます。

$ gdc -mno-cygwin -v
Using built-in specs.
Target: i686-pc-mingw32
Configured with: ../configure --prefix=/usr/local/gdc --with-gnu-ld --with-gnu-as --enable-threads --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-languages=c,c++,d
Thread model: posix
gcc version 4.0.3 (gdc 0.22, using dmd 1.004)

6 その他

gdc-0.22ではgcc-4.1.x対応されているようですが、Cygwinパッケージ版の gcc-3.4.4ではビルドでコンパイルエラーが発生するようです。一度gcc-4.0.3を ビルドして、それを踏み台にgcc-4.1.xをビルドすれば Cygwinターゲットの gdcはビルドできるようですが、MinGWターゲットのgdcはビルド時にコンパイル エラーになるようです。(2007/03/03時点)

実は本家のdmdコンパイラは使用した事がありません。ライブラリやツールの 事が良くわからないから、というのが理由です(^^; GDCを使用するメリットは多数りますが、デメリットも多数存在します。

  • メリット
    1. Cygwin用にビルドされたライブラリが使用できる。
  • デメリット
    1. DMDサイトなどで書かれている例がそのまま使えない場合がある。
    2. DMD最新バージョンへの追従はできない(GDCのリリースは半年に1回のペース)。
    3. なにやら動かなくても 自力解決が求められる。

あれ?デメリットの方が多いなぁ(^^; まぁ、「そこに山があるから」という事で。

7 履歴

  2007/03/03 : 初版
  2007/03/23 : 誤記修正
  2012/03/20 : ページをEmacsのorg-modeを使用して生成してみた。内容は2007/03/23と同じです。

TOP PREV

Author: TANE

Org version 7.8.11 with Emacs version 22