Haskell 运行ORC JIT llvm hs示例时出现问题

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-

亲爱的斯塔克勒:

我试着在reddit r/haskell中问同样的问题,但遗憾的是我没有得到任何答案。我希望它在这里做得更好

也许答案是,这没有用那么多。如果您有在haskell中使用llvm的经验,但不使用llvm hs,我很想看看您是如何使用它的

我正在尝试运行基本的ORC JIT功能,这让我尝试运行的ORC示例。到目前为止,我在多个方面都不成功(在四个示例中,只有第一个是basic):

  • 尝试在中使用shell.nix运行示例:
  • $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结果:
    ()
    
  • 执行default.nix和la haskell.nix并使用nix构建运行
  • llvm hs示例/default.nix:

    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结果:
    ()
    
    这与之前的输出相同

  • 我相信最后(2)种方法使用堆栈进行构建,但也尝试手动使用堆栈:
  • a) 第一个失败的方法:

    在带有llvm config的nix shell中(我使用了llvm hs中的一个和用haskell.nix创建的一个,但结果相同):

    $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