WindowsでのMingwのDIYビルド

ネットワーク上のmingwアセンブリとその下のGNUユーティリティの多くの説明があります。 また、最初にロシア語で書かれているので、自分のバージョンを書くことも決めました。 次に、最新の安定したソースが使用されます(2011年1月27日現在)。 第三に、 グラファイトループの最適化が追加されます。 4番目では、1つまたは別のソース構成オプションを選択する理由について説明します。 第五に、忘れないでください。


mingwを自分で構築する理由




誰もが自分の集会の理由を見つけることができます。

何が必要ですか?



奇妙なことに、Mingwをビルドするには、Mingw自体が必要です。 同志たちは、必要なパッケージをダウンロードしてインストールするきちんとしたインストールプログラムを試み、作成しました。 公式ウェブサイトにあります。
mingw自体に加えて、インストール中に「C ++ Compiler」と「MinGW Developer ToolKit」を選択します。 C:\ MinGWに入れます。

ソースをダウンロード:

必要に応じて:


忍耐、忍耐、幸運なくしてはいけません!

組立



最速のハードドライブに作業フォルダーC:\ mbuildを作成します。 C:\ mbuild \ distribにすべてのソースを追加します。 C:\ mbuild \ releaseでmingwを成長させます。 ダウンロードしたmsysを実行します...
cd / c / mbuild


小さな発言。 ほとんどの指示では、gmp、mpfr、mpcのソースをフォルダーに入れてgccに保存するように指示しています。これらは自動的に収集されます。 gccをCLooPに固定するため、これは行いません。これはgmpに依存します。 つまり、gcc構成を開始する前にgmpをビルドする必要があります。

GMP


tar -xjf distrib / gmp-5.0.1.tar.bz2 && cd gmp-5.0.1
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --enable-cxx --disable-static --enable-shared CPPFLAGS = '-fexceptions'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log



「-s -O2 -mtune = i686」などの最適化キーCFLAGS、CXXFLAGS、およびLDFLAGSを使用しないことが非常に重要です。このため、pplがgmpを見つけられない場合がありました。

Ppl


tar -xjf ../../distrib/ppl-0.11.tar.bz2 && cd ppl-0.11
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --disable-static --enable-shared --disable-nls --enable-threads --disable-debugging --with-gmp-prefix = / c / mbuild / release --with-cflags = '-s -O2' --with-cxxflags = '-s -O2'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log


設定中に、conftestプログラムが起動しなかったことがウィンドウに表示される場合があります。 パニックにならないでください-これはconfigureスクリプトの結果です。

CLooG / PPL


tar -zxf ../distrib/clog-ppl-0.15.10.tar.gz
cd cloog-ppl-0.15.10
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --disable-static --enable-shared --with-ppl = / c / mbuild / release --with-gmp = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make&> make.my.log

構成スクリプトには不愉快な部分があります。 何らかの理由で、それらは単に存在しません。 make.my.logログは、m4フォルダーが欠落していることを報告します。 私は彼女の不在の理由を理解していません。 ppl-0.11からコピーするだけです。 幸いなことに、必要なスクリプトがあります。
make&> make.my.log
make install&> install.my.log

オプションは、前の説明から明らかです。

MPFR


tar -xjf distrib / mpfr-3.0.0.tar.bz2 && cd mpfr-3.0.0
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --disable-static --enable-shared --enable-thread-safe --with-gmp = / c / mbuild / release CFLAGS = '-s -O2 'CPPFLAGS ='-s -O2 '&> config.my.log
make -j4&> make.my.log
make install&> install.my.log


MPC


tar -xzf distrib / mpc-0.8.2.tar.gz
cd mpc-0.8.2
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --disable-static --enable-shared --with-gmp = / c / mbuild / release --with-mpfr = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log


リビコン


tar -xzf distrib / libiconv-1.13.1.tar.gz && cd libiconv-1.13.1
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --enable-shared --disable-static --disable-nls CFLAGS = '-s -O2 -mno-cygwin' CPPFLAGS = '-s -O2 -mno -cygwin '&> confgi.my.log
make -j4&> make.my.log
make install&> install.my.log

一般に、libiconvはオプションですが、そのサポートを有効にすることが望ましいです(このmingwで他のgnuユーティリティをビルドする場合に非常に便利です)。


Binutils


tar -xjf distrib / binutils-2.21.tar.bz2 && cd binutils-2.21
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --disable-nls --enable-threads --with-gmp = / c / mbuild / release --with-mpc = / c / mbuild / release- with-mpfr = / c / mbuild / release --with-ppl = / c / mbuild / release --disable-ppl-version-check --with-cloog = / c / mbuild / release --disable-cloog-version -check CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log


含む


C:\ mbuild \ distrib \ w32api-3.14-mingw32-src.tar.lzmaをC:\ mbuild \ w32apiに解凍します。 アセンブリ中にmingwrtがそれを見つけることができるのはw32apiです。
tar -xzf distrib / mingwrt-3.18-mingw32-src.tar.gz
cp -r w32api / include / c / mbuid / release
cp -r mingwrt-3.18-mingw32 / include / c / mbuild / release

構成中にすべてのdllを正しく検索するには、PATHにリリースへのパスを追加します
export PATH = $ PATH:/ c / mbuild / release


Gcc


tar -xjf gcc-4.5.2.tar.bz2
cd gcc-4.5.2
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --enable-shared = libstdc ++ --enable-threads --enable-version-specific-runtime-libs --enable-languages = c、c ++ --with- dwarf2 --disable-sjlj-exceptions --disable-win32-registry --disable-werror --disable-nls --disable-multilib --with-gmp = / c / mbuild / release --with-ppl = / c / mbuild / release --disable-ppl-version-check --with-cloog = / c / mbuild / release --disable-cloog-version-check --with-mpfr = / c / mbuild / release --with- mpc = / c / mbuild / release --enable-libgomp --with-libiconv-prefix = / c / mbuild / release --enable-libstdcxx-debug --enable-cxx-flags = '-s -O2'- with-boot-ldflags = '-s'&> config.my.log
make -j4 BOOT_CFLAGS = '-s -O2' BOOT_CPPFLAGS = '-s -O2'&> make.my.log

最も長く最も責任のある部分。 私は完全なソースコードを使用します
gcc、およびlibgompとzlibを含めるように、gcc-coreとgcc-c ++を個別にではなく、
それらはgcc-coreの一部としては行きません。

残念ながら、--enable-libstdcxx-debugキーで接続したバージョンだけでなく、メインのデバッグ情報も収集されます。 gccビルドオプションではこれを克服できませんでした。 したがって、次のオプションを提案します。
cd i686-pc-mingw / libstdc ++-v3
make -j4 CFLAGS = '-s -O2' CXXFLAGS = '-s -O2'&> make.my.log

ここで少しcheしました。 実際には(クロスコンパイラをビルドする場合を含む)、最初にmake all-gccを使用してgccをビルドし、次にランタイムを実行してから、すべてのgccのアセンブリを完了する必要があります。 プロセスは、たとえばここで説明されています 。 しかし、この特定のケースではすべてがそのように機能するため、気にしません。
cd ../../
make install&> install.my.log

残念ながら、プロファイリング(profiledbootstrapの作成)を使用してmingwの下でgccをコンパイルすることはできませんでした-プロセスはエラーで終了しました。 最も一般的なセグメンテーションフォールトコンパイラ。 なんと残念なことでしょう...彼らは、コンパイル速度の増加は〜7%だと言います。

ランタイムとW32API


w32apiは、新しいgccを使用して構築する必要があります。 これを行うには、fstabファイル(デフォルトC:\ MinGW \ msys \ 1.0 \ etc \ fstab)で、C:\ MinGWをC:\ mbuild \ releaseに変更し、新しいmsysを実行します。 このmsysインスタンスは、新しくコンパイルされたgccを使用します。 しかし、まだ依存関係を取り除いていないので、古いmingwのdllを探す場所をmsysに指示する必要があります。
export PATH = $ PATH:/ c / MinGW / bin


W32api


cd ../../w32api
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make&> make.my.log
make install&> install.my.log


ミンウォート


tar -xzf distrib / mingwrt-3.18-mingw32-src.tar.gz && cd mingwrt-3.18-mingw32-src
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make&> make.my.log
make install&> install.my.log


gmpはgccによって作成されていないため、ほとんどの場合libstdc ++。Dllおよびlibgcc_s_dw2-1.dllに依存しています。 最初はネイティブgccで組み立てられ、2番目は古いmingwからコピーする必要があります。 または、新しいgccでgmpを再構築して、依存関係を取り除くことができます。
サイズを小さくするために、不要なフォルダを安全に削除できます。 たとえば、共有/ドキュメント。

ほとんどすべて。 快適な作業のために、makeをビルドする必要があります。

作る


tar -xjf distrib / make-3.82.tar.bz2 && cd make-3.82
./configure --disable-nls --with-libiconv-prefix = '/ mingw' CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make -j4&> make.my.log
cp make.exe /c/mbuild/release/bin/mingw32-make.exe


今すべて。 パパC:\ mbuild \ releaseはきちんとしたmingwを得ました。 パッケージをテイストに追加し、きちんとしたスクリプトでラップして、 nuwen mingwのようなものを取得します。 素敵なビルドを!

追記:ダウンロードしたmingwパッケージには次のものも含まれています。

Source: https://habr.com/ru/post/J112673/


All Articles