0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mips-gcc492を用意してみる

Last updated at Posted at 2021-04-04

bcmbm-mrubyとadmbm-mrubyのビルドになにかのGPLアーカイブに入っていたgcc4のLinuxのELFをFreeBSDのLinuxエミュレーションで動かしていたのですが、どこにあったものかわからなくなったので、ネイティブで用意する方法を考えてみました。

gcc4は4.9.4が最終バージョンだったようです。

FreeBSD/i386 12Rのpkgにはarm用のgcc4はあるのですがmips用のgcc4はありません。mips-gccは現在6になっています。

自力でgccとbinutilsをビルドする方法もありますが、簡単にできる方法がないか考えてみみました。

調べてみるとpkgのmips-gccは元々492だったようです。このpkgはpowerpc64-gccがマスターになっていて、これのバージョンアップで6になってしまったようです。どういう経緯かわからないですが、powerpc64もmipsもgcc6のpkgが別にあるのでmips-gccは4のままにしておいたほうが良かったような気がします。

mips-gccは元々FreeBSD/mipsのバイナリを作るためにadrianさんが用意されたようです。gcc4の頃のmips-gccはホストもgccだったと思われ、現在はclangになっているので、古いportsをcheckoutしてみましたが、そのままではビルドできませんでした。

現在のportsの構成を見てみると、devel/arm-none-eabi-gcc492をマスターにして作るのが良さそうです。

devel/mips-gcc492を作り以下のMakefileを置きます。

Makefile
PKGNAMEPREFIX=  mips-
GCC_TARGET=    mips
BU_PREFIX=     ${PKGNAMEPREFIX}${OPSYS:tl}
PLIST=  ${.CURDIR}/pkg-plist
BINARY_ALIAS=      sed=${LOCALBASE}/bin/gsed
CONFIGURE_ENV=  ac_cv_path_AR_FOR_TARGET=mips-freebsd-ar ac_cv_path_RANLIB_FOR_TARGET=mips-freebsd-ranlib

MASTERDIR=      ${.CURDIR}/../arm-none-eabi-gcc492

.include "${MASTERDIR}/Makefile"

devel/arm-none-eabi-gcc492/files/に以下を追加します。

patch-gcc_mips.h
--- gcc/config/mips/mips.h.org
+++ gcc/config/mips/mips.h
@@ -2771,7 +2771,7 @@
 
 #undef ASM_OUTPUT_SKIP
 #define ASM_OUTPUT_SKIP(STREAM,SIZE)                                   \
-  fprintf (STREAM, "\t.space\t"HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE))
+  fprintf (STREAM, "\t.space\t" HOST_WIDE_INT_PRINT_UNSIGNED "\n", (SIZE))
 
 /* This is how to output a string.  */
 #undef ASM_OUTPUT_ASCII

mips-binutilsは古いものをビルドしましたがpkgでいけるような気がします。

pkg-plistを調整して、make package-noinstallするとパッケージができ、このファイルをpkgコマンドでインストールできます。

出来上がったmips-gccなどでnewlibがビルドできました。

出来上がったmips-gccはデフォルトでビッグエンディアンなバイナリを出力しますが、-ELオプションをつけるとリトルエンディアンになります。ELなlibgcc.aも作るようにしてみました。

configureで--disable-multilibを指定するとTERGET(mips=big endian)以外のlibgcc.aを作らないのですが、指定しない場合はLittle Endianのlibgcc.aも作ります。

せっかくなのでレビューに入れてみました。 諦めました。

FreeBSD/amd64 13.0Rでもビルドしてみました。問題ありません。

armの方のgcc492はu-bootをビルドするために用意されているようです。

これに入れてあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?