Haskell 运行ORC JIT llvm hs示例时出现问题
亲爱的斯塔克勒: 我试着在reddit r/haskell中问同样的问题,但遗憾的是我没有得到任何答案。我希望它在这里做得更好 也许答案是,这没有用那么多。如果您有在haskell中使用llvm的经验,但不使用llvm hs,我很想看看您是如何使用它的 我正在尝试运行基本的ORC JIT功能,这让我尝试运行的ORC示例。到目前为止,我在多个方面都不成功(在四个示例中,只有第一个是basic):Haskell 运行ORC JIT llvm hs示例时出现问题,haskell,llvm,nix,nixos,Haskell,Llvm,Nix,Nixos,亲爱的斯塔克勒: 我试着在reddit r/haskell中问同样的问题,但遗憾的是我没有得到任何答案。我希望它在这里做得更好 也许答案是,这没有用那么多。如果您有在haskell中使用llvm的经验,但不使用llvm hs,我很想看看您是如何使用它的 我正在尝试运行基本的ORC JIT功能,这让我尝试运行的ORC示例。到目前为止,我在多个方面都不成功(在四个示例中,只有第一个是basic): 尝试在中使用shell.nix运行示例: $git克隆https://github.com/llvm-
$git克隆https://github.com/llvm-hs/llvm-hs.git
$git克隆https://github.com/llvm-hs/llvm-hs-examples.git
$cd llvm hs
$nix shell shell.nix
$cd../llvm hs示例
$cabal新建
$cabal run兽人
产生:
$cabal run兽人
最新的
; ModuleID='basic'
source_filename=“”
定义i32@add(){
条目:
ret i32 42
}
JITSymbolError“”
渴望的JIT结果:
()
let
ExampleSoferlays=[(self:super:{
llvm config=self.llvm_9;
}) ];
在里面
{#获取最新的haskell.nix并导入其default.nix
haskellNix?导入(builtins.fetchTarball)https://github.com/input-output-hk/haskell.nix/archive/ef6ca0f431fe3830c25cb2d185367245c1cce894.tar.gz") {}
#haskellNix?导入(builtins.fetchTarball)https://github.com/input-output-hk/haskell.nix/archive/c88f9eccc975b21ae1e6a6b8057a712b91e374f2.tar.gz") {}
#haskellNix?导入(builtins.fetchTarball)https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz") {}
#haskell.nix提供对CI使用的nixpkgs引脚的访问,
#因此,在使用这些缓存时,您更有可能获得缓存命中。
#但是你也可以用你自己的,例如“你的”。
,nixpkgsSrc?haskellNix.sources.nixpkgs-2003
#nix提供了一些要传递给nixpkgs的参数,包括
#修补程序以及haskell.nix功能本身作为覆盖。
,nixpkgsArgs?haskellNix.nixpkgsArgs
#导入带有套印的尼克斯包装
,pkgs?(导入nixpkgsSrc(nixpkgsArgs/{overlays=nixpkgsArgs.overlays++examplesOverlays;}))
#,pkgs?导入nixpkgsSrc nixpkgsArgs
}:pkgs.haskell-nix.project{
#“cleanGit”根据git已知的文件清理源目录
src=pkgs.haskell-nix.haskellLib.cleanGit{
name=“示例”;
src=./。;
};
#对于基于“cabal.project”的项目,请指定要使用的GHC版本。
#编译器nix name=“ghc884”#不用于基于“stack.yaml”的项目。
}
在llvm hs示例的目录中运行:
$nix build-A examples.components.exes.orc
美元/结果/箱/orc
; ModuleID='basic'
source_filename=“”
定义i32@add(){
条目:
ret i32 42
}
JITSymbolError“”
渴望的JIT结果:
()
这与之前的输出相同
$llvm配置--版本
9.0.1
$stack构建示例:orc
在快照中未找到提供“llvm config”可执行文件的包,该文件是llvm hs的生成工具依赖项
llvm hs>配置
llvm hs>[1/2]编译Main(/run/user/1000/stack-2e6b46f4d38b8260/llvm-hs-9.0.1/Setup.hs,/run/user/1000/stack-2e6b46f4d38b8260/llvm-hs-9.0.1/.stack-work/dist/x86_64-linux-nix/Cabal-2.4.0.1/Setup/Main.o)
llvm hs>[2/2]编译StackSetupShim(/home/hhefesto/.stack/setup exe src/setup-shim-mPHDZzAJ.hs,/run/user/1000/stack-2e6b46f4d38b8260/llvm-hs-9.0.1/.stack work/dist/x86_64-linux-nix/Cabal-2.4.0.1/setup/setupstackshim.o)
llvm hs>Linking/run/user/1000/stack-2e6b46f4d38b8260/llvm-hs-9.0.1/。stack work/dist/x86_64-linux-nix/Cabal-2.4.0.1/setup/setup。。。
llvm hs>setup:程序'llvm config'版本==9.0.*是必需的,但无法执行
无法找到llvm hs>。
llvm hs>
b) 构建成功的堆栈方法我还尝试了堆栈的nix集成,明确指定llvm配置作为构建输入的一部分:
stack.yaml
#解析器:夜间-2020-01-30
分解器:lts-14.0
包装:
- '.'
额外部门:
-llvm-hs-9.0.1
-llvm-hs-pure-9.0.0
-llvm-hs-pretty-0.9.0.0
旗帜:
llvm hs:
共享llvm:true
尼克斯:
启用:true
shell文件:stackShell.nix
stackShell.nix:
let
ExampleSoferlays=[(self:super:{
llvm config=self.llvm_9;
}) ];
在里面
{haskellNix?导入(builtins.fetchTarball)”https://github.com/input-output-hk/haskell.nix/archive/ef6ca0f431fe3830c25cb2d185367245c1cce894.tar.gz") {}
,nixpkgsSrc?haskellNix.sources.nixpkgs-2003
,nixpkgsArgs?haskellNix.nixpkgsArgs
,pkgs?(导入nixpkgsSrc(nixpkgsArgs/{overlays=nixpkgsArgs.overlays++examplesOverlays;}))
}:
有pkgs;
haskell.lib.buildStackProject{
name=“llvm hs”;
buildInputs=[llvm配置
];
继承ghc;
}
已成功生成,但出现相同错误:
$stack构建示例:orc ghc shell示例
示例>配置(exe)
正在配置示例-1.0.0.0。。。
示例>生成(exe)
预处理示例1.0.0.0的可执行文件“orc”。。
为示例1.0.0.0构建可执行文件“orc”。。
示例>复制/注册
在/home/hhefesto/src/llvm hs examples/.stack work/install/x86_64-linux-nix/2BAB122448A943811DBC5AA23A88B887CE7AEF1939551D21B69D96E3F64BFCBD7/8.6.5/bin中安装可执行orc
在/home/hhefesto/src/llvm hs examples/.stack work/install/x86_64-linux-nix/2BAB122448A943811DBC5AA23A88B887CE7AEF1939551D21B69D96E3F64BFCBD7/8.6.5/bin中安装可执行basic
在/home/hhe中安装可执行arith