2013-07-20 5 views
10

Я пытаюсь скомпилировать GHC 7.6.3 на малине Pi. 7.4 версия GHC, которая поставляется с Raspbian, не поддерживает ghci. Я намерен упаковать v 7.6.3 и сделать его доступным.Компиляция Haskell на малине Pi

После looong время я получаю эту ошибку на 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 

Любая идея, что происходит не так?

Как я могу получить недостающие промежуточные файлы, которые создаются системой сборки?

+0

Похож на ошибку где-то в цепочке инструментов построения. Возможно, лучше попробовать кросс-компилятор в системе x86. Кросс-компилятор является слабым звеном (очень вероятно, чтобы выявить некоторые ошибки), но, по крайней мере, другие инструменты затем хорошо тестируются. См. Здесь инструкции (крест от x86 Linux до Raspberry Linux, похоже, поддерживается довольно хорошо): http://ghc.haskell.org/trac/ghc/wiki/CrossCompilation –

+1

Debian предоставляет [GHC 7.6.3 на руке] (http : //packages.debian.org/sid/ghc), поэтому вы можете проверить ARM-связанные [исправленные] (http://patch-tracker.debian.org/package/ghc/7.6.3-3), применяемый Debian. –

+0

Спасибо, ребята. На самом деле я попытался временно переключиться на sid-репозиторий для установки ghc, но это закончилось кошмаром зависимостей (он настаивал на обновлении моего libc). Поэтому я решил скомпилировать его сам. –

ответ

0

Вы всегда можете проверить официальную страницу haskell для R-Pi. Надеюсь, это поможет вам больше, чем это мне помогло. Есть некоторые действительно полезные ссылки.

http://www.haskell.org/haskellwiki/Raspberry_Pi

2

Я получил GHC-7.8.3 скомпилирован с Raspberry PI с верховьев источников. Это не очень быстро, но он получает работу:

[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 

Ключевые вещи, чтобы сделать следующее:

  1. Иметь достаточно памяти. Подключите внешний жесткий диск и создайте раздел подкачки 4 гигабайта. Сначала в fdisk выберите тип раздела для подкачки Linux, затем выполните mkswap /dev/sdXX, наконец, сделайте swapon /dev/sdXX, где XX - это идентификатор диска и номер раздела.
  2. Обновите ядро ​​до последней версии с помощью rpi-update, чтобы предотвратить зависания. У меня также был smsc95xx.turbo_mode=N slub_debug=FP, добавленный в конец командной строки ядра в файле /boot/cmdline.txt.
  3. Установите золотой линкер с apt-get install binutils-gold, потому что обычный ld.bfd не сможет создать динамические библиотеки. Проблема в том, что вы не можете использовать gold для соединения всего, но вам нужно связать этап 1 с ld.bfd. Вам необходимо следовать инструкциям in this script (original information from here), за исключением того, что вам нужно использовать ld.bfd для запуска начального вызова ./configure.
  4. Имейте терпение - компиляция займет несколько дней.
+0

Спасибо. Мне удалось построить GHC 7.8.3 на моей древней Rev1 Raspberry Pi, следуя этим инструкциям. Мне пришлось [настроить распределение памяти GPU] (http://raspberrypi.stackexchange.com/a/674) до 16G в качестве дополнительного шага. Потребовалась одна неделя для компиляции, и мне пришлось перезапустить компиляцию пару раз, когда ее убили. – pico