Summary: | GHC: непростой FTBFS | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Anton Zhukharev <ancieg> |
Component: | ghc8.6.4 | Assignee: | Anton Zhukharev <ancieg> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | major | ||
Priority: | P5 | CC: | ancieg, lav |
Version: | unstable | ||
Hardware: | aarch64 | ||
OS: | Linux |
Description
Anton Zhukharev
2023-08-04 09:58:38 MSK
Успешно удалось собрать для 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 до более новых версий. |