2016/05/09

Build Haiku with gcc 6.1.0 の巻

gcc6 関係のチケットをようやく出し終わりました。ただし、バイナリを実行するには、チケット以外にあと 2 つ変更が必要です。これらはHaiku のバグではないと思われるので、チケットには出していません。

1. Internal Compiler Error (ICE) 対策
icon-o-matic/transformable/TransformBox.cpp で、Internal Compiler Error が出るので、#Pragma で最適化をオフにします。
--- a/src/apps/icon-o-matic/transformable/TransformBox.cpp
+++ b/src/apps/icon-o-matic/transformable/TransformBox.cpp
@@ -508,6 +508,10 @@ TransformBox::RemoveListener(TransformBoxListener* listener)

 // TODO: why another version?
 // point_line_dist
+#if __GNUC__ == 6
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+#endif
 float
 point_line_dist(BPoint start, BPoint end, BPoint p, float radius)
 {
@@ -521,7 +525,9 @@ point_line_dist(BPoint start, BPoint end, BPoint p, float radius)

     return min_c(point_point_distance(start, p), point_point_distance(end, p));
 }
-
+#if __GNUC__ == 6
+#pragma GCC pop_options
+#endif

 // _DragStateFor
2. 起動時クラッシュ対策
パッチを当て終えると、gcc 6.1.0 でビルドできるようになりますが、OS 起動時に落ちてしまいます。カーネルのフラグに -fno-delete-null-pointer-checks を足すととりあえず実行できるようです。
--- a/build/jam/ArchitectureRules
+++ b/build/jam/ArchitectureRules
@@ -366,6 +366,11 @@ rule KernelArchitectureSetup architecture
         HAIKU_KERNEL_C++FLAGS += -std=gnu++11 ;
     }

+    if $(gccVersion[1]) >= 6 {
+        HAIKU_KERNEL_C++FLAGS += -fno-delete-null-pointer-checks ;
+        HAIKU_KERNEL_CCFLAGS += -fno-delete-null-pointer-checks ;
+    }
+
     HAIKU_KERNEL_PIC_CCFLAGS = -fno-pic ;
     HAIKU_KERNEL_PIC_LINKFLAGS = ;

以上で、gcc 6.1.0 での Haiku ビルド、実行ができると思います。お楽しみください。

In English (short)
Build Haiku with gcc 6.1.0
  •  Apply gcc6 patches in trac.
  •  icon-o-matic/transformable/TransformBox.cpp: fix ICE with #pragma.
  •  Add -fno-delete-null-pointer-checks to kernel to fix crash at startup.

0 件のコメント:

コメントを投稿