2013-07-20 17 views
10

Próbuję skompilować GHC 7.6.3 na Raspberry Pi. Wersja GHC w wersji 7.4, dostarczana z Raspbian, nie obsługuje ghci. Mam zamiar spakować v 7.6.3 i udostępnić.Kompilowanie Haskella na Raspberry Pi

Po dłuuugi czas, mam ten błąd na 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 

Każdy pomysł co jest nie tak?

Jak mogę uzyskać brakujące pliki pośrednie, które są tworzone przez system kompilacji?

+0

Wygląda jak błąd w łańcuchu narzędzi budowania. Być może lepiej spróbuj cross kompilatora w systemie x86. Kompilator krzyżowy jest słabym ogniwem (bardzo prawdopodobne, że ujawni pewne błędy), ale przynajmniej inne narzędzia są wtedy dobrze przetestowane. Zobacz tutaj instrukcje (przejście z x86 na Linuksa do Raspberry Linux wydaje się być dość dobrze obsługiwane): http://ghc.haskell.org/trac/ghc/wiki/CrossCompilation –

+1

Debian dostarcza [GHC 7.6.3 na ramieniu] (http : //packages.debian.org/sid/ghc), więc możesz sprawdzić powiązane z ARM [poprawione] (http://patch-tracker.debian.org/package/ghc/7.6.3-3) zastosowane przez Debiana. –

+0

Dziękuję wam. Właściwie próbowałem tymczasowo przełączyć się do repozytorium sid, aby zainstalować ghc, ale skończyło się to na koszmarze zależności (nalegało na uaktualnienie mojej biblioteki libc). Postanowiłem sam go skompilować. –

Odpowiedz

2

mam GHC-7.8.3 skompilowany z Raspberry Pi od źródła upstream. To nie jest bardzo szybki, ale dostaje zadanie:

[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 

Najważniejsze rzeczy są wykonać następujące czynności:

  1. mieć wystarczająco dużo pamięci. Podłącz zewnętrzny dysk twardy i utwórz 4-gigabajtową partycję wymiany. Najpierw w fdisk wybierz typ partycji, która ma być zamianą Linuksa, a następnie wykonaj mkswap /dev/sdXX, na koniec wykonaj polecenie swapon /dev/sdXX, gdzie XX to litera i numer partycji dysku.
  2. Zaktualizuj jądro do najnowszej wersji za pomocą rpi-update, aby zapobiec zawieszeniu. Dodałem także smsc95xx.turbo_mode=N slub_debug=FP dodany do końca wiersza poleceń jądra w pliku /boot/cmdline.txt.
  3. Zainstaluj złoty linker z apt-get install binutils-gold, ponieważ regularne ld.bfd nie będzie w stanie utworzyć dynamicznych bibliotek. Problem polega na tym, że nie można używać gold do łączenia wszystkich elementów, ale trzeba połączyć etap 1 z ld.bfd. Należy postępować zgodnie z instrukcjami: in this script (original information from here) z tym wyjątkiem, że należy użyć ld.bfd do wykonywania początkowego połączenia ./configure.
  4. Mieć cierpliwość - kompilacja potrwa kilka dni.
+0

Dzięki. Udało mi się zbudować GHC 7.8.3 na moim starożytnym Rev1 Raspberry Pi postępując zgodnie z tymi instrukcjami. Musiałem [dostosować przydział pamięci GPU] (http://raspberrypi.stackexchange.com/a/674) do 16G jako dodatkowy krok. Kompilacja zajęła tydzień i musiałem ponownie uruchomić kompilację kilka razy, ponieważ zostało zabite. – pico