2013-07-20 15 views
10

Sto provando a compilare GHC 7.6.3 sul Raspberry Pi. La versione 7.4 di GHC fornita con Raspbian, non supporta ghci. Intendo confezionare v 7.6.3 e renderlo disponibile.Compilare Haskell sul Raspberry Pi

Dopo un po 'luuungo, ottengo questo errore sul 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 

Qualche idea di cosa sta andando male?

Come posso finire con i file intermedi mancanti, che sono prodotti dal sistema di compilazione?

+0

Sembra un errore da qualche parte nella catena degli strumenti di generazione. Forse meglio provare un cross-compilatore su un sistema x86. Il cross-compilatore è un link debole (molto probabilmente esporre alcuni bug) ma almeno gli altri strumenti sono quindi abbastanza ben testati. Vedi qui per le istruzioni (cross da x86 Linux a Raspberry Linux sembra essere supportato abbastanza bene): http://ghc.haskell.org/trac/ghc/wiki/CrossCompilation –

+1

Debian fornisce [GHC 7.6.3 sul braccio] (http : //packages.debian.org/sid/ghc), quindi potresti voler controllare il file [Patched] relativo a ARM (http://patch-tracker.debian.org/package/ghc/7.6.3-3) applicato da Debian. –

+0

Grazie ragazzi. In realtà ho provato a passare temporaneamente al repository sid per installare ghc, ma questo è finito in un incubo delle dipendenze (ha insistito per aggiornare la mia libc). Così ho deciso di compilarlo da solo. –

risposta

2

ho avuto GHC-7.8.3 compilato con Raspberry Pi da fonti a monte. Non è molto veloce, ma ottiene il lavoro fatto:

[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 

cose principali sono a effettuare le seguenti operazioni:

  1. dispone di memoria sufficiente. Collegare un disco rigido esterno e creare una partizione di swap da 4 gigabyte. Innanzitutto in fdisk selezionare il tipo di partizione da scambiare in Linux, quindi fare mkswap /dev/sdXX, infine fare lo swapon /dev/sdXX, dove XX è la lettera di identificazione del disco e il numero di partizione.
  2. Aggiornare il kernel all'ultima versione con rpi-update per impedire blocchi. Ho anche aggiunto smsc95xx.turbo_mode=N slub_debug=FP alla fine della riga di comando del kernel nel file /boot/cmdline.txt.
  3. Installare il linker oro con apt-get install binutils-gold, perché il normale ld.bfd non riuscirà a creare le librerie dinamiche. Il problema è che non è possibile utilizzare gold per collegare tutto, ma è necessario collegare lo stage 1 con ld.bfd. È necessario seguire le istruzioni in this script (original information from here) con l'eccezione che è necessario utilizzare ld.bfd per eseguire anche la chiamata iniziale ./configure.
  4. Abbi pazienza: la compilazione richiederà giorni.
+0

Grazie. Sono riuscito a costruire GHC 7.8.3 sul mio vecchio Rev1 Raspberry Pi seguendo queste istruzioni. Ho dovuto [regolare l'allocazione della memoria della GPU] (http://raspberrypi.stackexchange.com/a/674) fino a 16G come passo aggiuntivo. Ci sono voluti una settimana per compilare e ho dovuto riavviare la compilazione per un paio di volte mentre veniva uccisa. – pico