2013-07-20 14 views
10

Ich versuche GHC 7.6.3 auf dem Raspberry Pi zu kompilieren. Die Version 7.4 von GHC, die mit Raspbian ausgeliefert wird, unterstützt ghci nicht. Ich beabsichtige, v 7.6.3 zu packen und verfügbar zu machen.Kompilieren von Haskell auf dem Raspberry Pi

Nach einer looong Zeit, bekomme ich diesen Fehler auf dem Pi:

HC [stage 0] utils/hp2ps/dist/build/Key.o 
HC [stage 0] utils/hp2ps/dist/build/PsFile.o 
HC [stage 0] utils/hp2ps/dist/build/Shade.o 
HC [stage 0] utils/hp2ps/dist/build/Utilities.o 
"inplace/bin/mkdirhier" utils/hp2ps/dist/build/tmp//. 
HC [stage 0] utils/hp2ps/dist/build/tmp/hp2ps 
Warning: -rtsopts and -with-rtsopts have no effect with -no-hs-main. 
Call hs_init_ghc() from your main() function to set these options. 
"cp" -p utils/hp2ps/dist/build/tmp/hp2ps inplace/bin/hp2ps 
cp driver/ghc-usage.txt inplace/lib/ghc-usage.txt 
cp driver/ghci-usage.txt inplace/lib/ghci-usage.txt 
HC [stage 0] utils/genapply/dist/build/GenApply.o 
"inplace/bin/mkdirhier" utils/genapply/dist/build/tmp//. 
HC [stage 0] utils/genapply/dist/build/tmp/genapply 
"cp" -p utils/genapply/dist/build/tmp/genapply inplace/bin/genapply 
HC [stage 1] libraries/ghc-prim/dist-install/build/GHC/Types.o 
Stack dump: 
0. Program arguments: /usr/bin/llc -O3 -relocation-model=static /tmp/ghc467_0/ghc467_0.bc -o /tmp/ghc467_0/ghc467_0.lm_s --enable-tbaa=true 
1. Running pass 'Function Pass Manager' on module '/tmp/ghc467_0/ghc467_0.bc'. 
2. Running pass 'ARM Instruction Selection' on function '@ghczmprim_GHCziTypes_Dzh_info' 
/tmp/ghc467_0/ghc467_0.lm_s: openBinaryFile: does not exist (No such file or directory) 
make[1]: *** [libraries/ghc-prim/dist-install/build/GHC/Types.o] Error 1 
make: *** [all] Error 2 

real 308m59.437s 
user 292m8.320s 
sys  10m18.220s 

Jede Idee, was falsch läuft?

Wie kann ich am Ende mit fehlenden Zwischendateien, die vom Build-System produziert werden?

+0

Sieht aus wie ein Fehler irgendwo in der Build-Tool-Kette. Vielleicht besser einen Cross-Compiler auf einem x86-System versuchen. Der Cross Compiler ist eine schwache Verbindung (sehr wahrscheinlich, einige Fehler zu entlarven), aber zumindest die anderen Werkzeuge sind dann ziemlich gut getestet. Sehen Sie hier für Anweisungen (Kreuz von x86 Linux zu Raspberry Linux scheint ziemlich gut unterstützt werden): http://ghc.haskell.org/trac/ghc/wiki/CrossCompilation –

+1

Debian bietet [GHC 7.6.3 auf Arm] (http : //packages.debian.org/sid/ghc), also sollten Sie sich die ARM-bezogene [Patched] (http://patch-tracker.debian.org/package/ghc/7.6.3-3) ansehen) angewendet von Debian. –

+0

Danke Jungs. Eigentlich habe ich versucht, vorübergehend zum sid-Repository zu wechseln, um ghc zu installieren, aber das endete in einem Albtraum mit Abhängigkeiten (es bestand darauf, meine libc zu aktualisieren). Also habe ich beschlossen, es selbst zu kompilieren. –

Antwort

2

Ich habe GHC-7.8.3 mit Himbeer-PI von stromaufwärts Quellen zusammengestellt. Es ist nicht sehr schnell, aber es wird die Arbeit getan:

[email protected] ~ $ ghci 
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Prelude> 1+1 
2 

Key Dinge sind die folgenden Funktionen ausführen:

  1. haben genügend Speicher vorhanden. Schließen Sie eine externe Festplatte an und erstellen Sie eine 4-GB-Swap-Partition. Zuerst in fdisk wählen Sie den Partitionstyp zu Linux-Swap, dann tun mkswap /dev/sdXX, schließlich tun swapon /dev/sdXX, wobei XX ist die ID der Festplatte ID und Partition Nummer.
  2. Kernel auf die neueste Version mit rpi-update aktualisieren, um zu verhindern, hängt. Ich hatte auch smsc95xx.turbo_mode=N slub_debug=FP am Ende der Kernel-Befehlszeile in /boot/cmdline.txt Datei hinzugefügt.
  3. Installieren Sie Gold-Linker mit apt-get install binutils-gold, da reguläre ld.bfd die dynamischen Bibliotheken nicht erstellen kann. Das Problem ist, dass Sie gold nicht für die Verknüpfung aller verwenden können, aber die Stufe 1 mit ld.bfd verknüpfen müssen. Sie müssen den Anweisungen in this script (original information from here) folgen, mit der Ausnahme, dass Sie ld.bfd für das Ausführen des ersten ./configure Aufrufs auch verwenden müssen.
  4. Haben Sie Geduld - die Zusammenstellung dauert Tage.
+0

Danke. Ich habe es geschafft, GHC 7.8 zu bauen.3 auf meinem alten Rev1 Raspberry Pi nach diesen Anweisungen. Ich musste die GPU-Speicherzuweisung (http://raspberrypi.stackexchange.com/a/674) als zusätzlichen Schritt auf 16 G reduzieren. Es hat eine Woche gedauert, um zu kompilieren und ich musste die Kompilation einige Male neu starten, als es getötet wurde. – pico