Компиляция Haskell на малине Pi

Я пытаюсь собрать GHC 7.6.3 на Малиновой Пи. 7.4 версия GHC, которая поставляется с Raspbian, не поддерживает ghci. Я намерен пакет v 7.6.3 и сделать его доступным.

После 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

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

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

Ответ 1

Я получил GHC-7.8.3, составленный с использованием малины 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

Ключевыми являются следующие действия:

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

Ответ 2

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

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