残念ながら、HaikuPorts の patchset ではそのまま動かなかったので、手製の gcc 6.4.0 から作成した差分パッチを gcc 6.3.0 にバックポートし、その後 gcc の差分パッチで、gcc7.1.0、gcc 7.2.0 へとアップデートしました。できた gcc 7.2.0 を buildtools/gcc に配置し (既存のgccツリーは事前に名前を変えておく)、gmp、mpc、mpfr を既存のクロスコンパイラからコピーしました。そのままコンパイラをクロスビルドすると TARGET_USE_JCR_SECTION あたりでエラーが出るので、gcc/config/haiku.h を 7.1.0 patchset から、gcc/defaults.h を gcc7.2.0 からそれぞれ置き換えました。
patch for gcc 7.2.0 (tested x86 32bit only)
クロスコンパイラはできましたが、Haiku ビルドを通すために、さらに以下を修正します。
- Haiku ビルドツリー内の libgcc は gcc 5.4.0 由来のため、__divmoddi4 未定義参照エラーが出ます。対策として、gcc/config/i386/i386.c を変更して、__divmoddi4 を使わないようにします (Haiku公式が gcc7 になるまでの仮対応です)。
--- 52261,52271 ----
#undef TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID
#define TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID ix86_addr_space_zero_address_valid
! /* #undef TARGET_INIT_LIBFUNCS
#define TARGET_INIT_LIBFUNCS ix86_init_libfuncs
#undef TARGET_EXPAND_DIVMOD_LIBFUNC
! #define TARGET_EXPAND_DIVMOD_LIBFUNC ix86_expand_divmod_libfunc */
#undef TARGET_MAX_NOCE_IFCVT_SEQ_COST - -WError を抑えるために、以下のフラグを build/jam/ArchitectureRules に追加します。
@@ -41,6 +41,10 @@ rule ArchitectureSetup architecture
gccBaseFlags += -Wno-array-bounds ;
}
+ if $(gccVersion[1]) >= 7 {
+ gccBaseFlags += -Wno-nonnull-compare -Wno-format-overflow -Wno-format-truncation -Wno-builtin-declaration-mismatch -Wno-int-in-bool-context ;
+ }+ local cpu = $(HAIKU_CPU_$(architecture)) ; - src/libs/iconv/iconv.c の __inline でリンクエラーが出るので、コメントアウトします。
@@ -161,7 +161,7 @@ static const struct alias sysdep_aliases[] = {
#undef S
};
#if defined(__GNUC__) && !defined(DEBUG)
-__inline
+/* __inline */ #endif
const struct alias *
SVN版へのパッチはそのうち…
English (short ver.)
Building Haiku with gcc 7.2.0:
- Patch to gcc 7.2.0, then copy gmp, mpc and mpfr from original Haiku gcc5
- Haiku's libgcc is from gcc 5.4.0, so modify gcc/config/i386/i386.c to suppress using _divmodi
- To suppress -WError, add gccBaseFlags to build/jam/ArchitectureRules.
- Modify /libs/iconv/iconv.c to fix link error.
- Enjoy!
0 件のコメント:
コメントを投稿