Согласно этой публикации SO * компиляция программ на Haskell для C больше не поддерживается (официально). Поэтому я хотел изучить возможность компиляции программ на Haskell для LLVM IR. Я выбрал ту же программу из упомянутого поста:
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
main = print(quicksort([5,2,1,0,8,3]))
и затем попытался скомпилировать его в LLVM IR с:
$ ghc -fllvm main.hs
Тогда я получаю эту ошибку относительно версии LLVM:
<no location info>: error:
Warning: Couldn't figure out LLVM version!
Make sure you have installed LLVM 3.7
ghc: could not execute: opt-3.7
Когда я проверяю свою версию opt, это 3.8.0, которая больше:
$ opt --version
LLVM (http://llvm.org/):
LLVM version 3.8.0
DEBUG build with assertions.
Built Jun 20 2018 (14:59:34).
Default target: x86_64-unknown-linux-gnu
Host CPU: broadwell
Так что происходит? может ли ghc ожидать именно версию 3.7.0 и только это?!
EDIT
После установки llvm 3.7.0 и копирования opt
и llc
для получения суффиксов 3.7:
$ cp opt opt-3.7
$ cp llc llc-3.7
компиляция в llvm идет без ошибок, используя эту строку:
$ ghc -keep-llvm-files main.hs
и создается файл с именем main.ll.