GHC сейчас находится в состоянии FTBFS, которое вызвано обновлением autoconf до 2.71. Я это дело, вроде бы, починил: https://git.altlinux.org/tasks/326169/. Но при сборке обнаружилась проблема, которая заключается в том, что на ARM'е GHC использует LLVM для компиляции. Причём LLVM он хочет версии 6.0... (как для сборки себя, так и для сборки своих пакетов - т.е. в Requires и BuildRequires). В целом, можно попробовать втупую подменить версию LLVM с 6.0, например, на 15.0, но, мне кажется, что просто так не сработает и понадобится долгая отладка. Эта проблема, по всей видимости, была скрыта от глаз из-за того, что ночная пересборка пакетов происходит только на x86_64 и i586. Теперь необходимо починить текущую версию GHC в Сизифе, заставив работать с последним LLVM, для того, чтобы потом его (GHC) обновить до более новой версии. Чинить необходимо текущую версию, поскольку современный GHC собирается только с помощью GHC. Когда сборка текущей версии (8.6.4) будет исправлена на всех поддерживаемых архитектурах, тогда можно будет обновить его до последней версии, иначе мы рискуем остаться вообще без Haskell на ARM'овых платформах навсегда. Использование внешних бинарных сборок хочется максимально избежать. Берусь за попытку исправить и отладить сборку GHC на aarch64 и armh, поскольку сейчас у пакета нет мейнтейнера: ghc8.6.4 @nobody
Успешно удалось собрать для ARM на следующих версиях LLVM: 11.1, 12.0: https://packages.altlinux.org/en/tasks/326169/ Отладочную сборку провожу локально на Orange Pi 5 8GB. С более новыми версиями GHC не собирается из-за какой-то ошибки связанной с оптимизатором (если его отключить, то собирается). На ARM'ах GHC выглядит очень поломанным. Вот пример сборки простейшей программы: ================================================================================ ghc Main.hs -package ghc -O0 -o llvmver [1 of 1] Compiling Main ( Main.hs, Main.o ) <no location info>: error: Warning: Couldn't figure out LLVM version! Make sure you have installed LLVM 6.0 Linking llvmver ... /usr/bin/ld.gold: error: cannot find -ltinfo /usr/lib64/ghc-8.6.4/ghc-8.6.4/libHSghc-8.6.4.a(Terminal.o):ghc_3.ll:c5K9_info$def: error: undefined reference to 'set_curterm' /usr/lib64/ghc-8.6.4/ghc-8.6.4/libHSghc-8.6.4.a(Terminal.o):ghc_3.ll:c5Kh_info$def: error: undefined reference to 'set_curterm' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3.ll:caww_info$def: error: undefined reference to 'tigetnum' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_4.c:terminfozm0zi4zi1zi2_SystemziConsoleziTerminfoziBase_tigetnum_info: error: undefined reference to 'tigetnum' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3.ll:s9Kp_info$def: error: undefined reference to 'set_curterm' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3.ll:s9Kp_info$def: error: undefined reference to 'setupterm' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3.ll:ccoy_info$def: error: undefined reference to 'set_curterm' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3.ll:ccoG_info$def: error: undefined reference to 'setupterm' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3.ll:ccp3_info$def: error: undefined reference to 'del_curterm' /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3.ll:ccp3_info$def: error: undefined reference to 'del_curterm' collect2: error: ld returned 1 exit status `gcc' failed in phase `Linker'. (Exit code: 1) ================================================================================ Сообщение ================================================================================ no location info>: error: Warning: Couldn't figure out LLVM version! Make sure you have installed LLVM 6.0 ================================================================================ в GHC из задания 326169 уже не появляется (там версия LLVM определяется нормальным способом). А программка, которую я компилировал выше нужна для определения версии LLVM с которой собран GHC. Это нужно по причине того, что при установке llvm12.0 подтягивается также llvm15.0, который сразу становится по-умолчанию, а с ним GHC работать отказывается...
(In reply to Anton Zhukharev from comment #1) > ghc Main.hs -package ghc -O0 -o llvmver > [1 of 1] Compiling Main ( Main.hs, Main.o ) > > <no location info>: error: > Warning: Couldn't figure out LLVM version! > Make sure you have installed LLVM 6.0 > Linking llvmver ... > /usr/bin/ld.gold: error: cannot find -ltinfo > /usr/lib64/ghc-8.6.4/ghc-8.6.4/libHSghc-8.6.4.a(Terminal.o):ghc_3.ll: > c5K9_info$def: error: undefined reference to 'set_curterm' > /usr/lib64/ghc-8.6.4/ghc-8.6.4/libHSghc-8.6.4.a(Terminal.o):ghc_3.ll: > c5Kh_info$def: error: undefined reference to 'set_curterm' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3. > ll:caww_info$def: error: undefined reference to 'tigetnum' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_4. > c:terminfozm0zi4zi1zi2_SystemziConsoleziTerminfoziBase_tigetnum_info: error: > undefined reference to 'tigetnum' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3. > ll:s9Kp_info$def: error: undefined reference to 'set_curterm' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3. > ll:s9Kp_info$def: error: undefined reference to 'setupterm' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3. > ll:ccoy_info$def: error: undefined reference to 'set_curterm' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3. > ll:ccoG_info$def: error: undefined reference to 'setupterm' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3. > ll:ccp3_info$def: error: undefined reference to 'del_curterm' > /usr/lib64/ghc-8.6.4/terminfo-0.4.1.2/libHSterminfo-0.4.1.2.a(Base.o):ghc_3. > ll:ccp3_info$def: error: undefined reference to 'del_curterm' > collect2: error: ld returned 1 exit status > `gcc' failed in phase `Linker'. (Exit code: 1) > ============================================================================= > === Проблема в том, что GHC линкуется с libtinfo.so (который предоставляется devel-пакетом). > Сообщение > ============================================================================= > === > no location info>: error: > Warning: Couldn't figure out LLVM version! > Make sure you have installed LLVM 6.0 > ============================================================================= > === > в GHC из задания 326169 уже не появляется (там версия LLVM определяется > нормальным способом). Это была плохая идея. > А программка, которую я компилировал выше нужна для определения версии LLVM > с которой собран GHC. > Это нужно по причине того, что при установке llvm12.0 подтягивается также > llvm15.0, который сразу становится по-умолчанию, а с ним GHC работать > отказывается... Правится установкой переменной: export ALTWRAP_LLVM_VERSION="12.0"
(In reply to Anton Zhukharev from comment #2) > Проблема в том, что GHC линкуется с libtinfo.so (который предоставляется > devel-пакетом). Это поспешный вывод, но проблема есть. Воспроизведение: ================================================== module Main where import LlvmCodeGen.Base(supportedLlvmVersion) main :: IO () main = let (maj,min) = supportedLlvmVersion in putStrLn $ show maj ++ "." ++ show min ================================================== $ ghc Main.hs -O0 -package ghc -o llvmver
ghc8.6.4 исправлен в Сизифе (думаю, что над версией 8.6.4 работа завершена). Сейчас sin@ работает над обновлением GHC до более новых версий.