帮酷LOGO
  • 显示原文与译文双语对照的内容
llvm IR generator for Nim

  • 源代码名称:nlvm
  • 源代码网址:http://www.github.com/arnetheduck/nlvm
  • nlvm源代码文档
  • nlvm源代码下载
  • Git URL:
    git://www.github.com/arnetheduck/nlvm.git
  • Git Clone代码到本地:
    git clone http://www.github.com/arnetheduck/nlvm
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/arnetheduck/nlvm
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • 简介

    是一款基于的用于语言的基于java的编译器。

    从角度来看,它是一个与C 或者JavaScript类似的后端,从视角来看,它是发出红外线的语言前端。

    当我开始这个小项目时,我既不知道llvm也不了解 Nim 。 因这里,我希望感谢 #nim 频道上的友好人员,从来没有看到我的nooby问题。 同样,感谢所有教程编写者,对于提供这样的复杂源代码来源,编程和它的他主题。 呃灵感 !

    问题,补丁,改进建议和审阅欢迎。 找到 Bug 时,也可以自由地修复它们:)

    fork 和享受 !

    Jacek Sieka ( gmail点com上的arnetheduck )

    状态

    NLVM当前可以:

    • 编译许多nim程序,包括自己
    • 通过所有上游测试用例的~90% - 许多失败都可以追溯到标准库和依赖于C 实现细节的编译器

    上游的NLVM相比:

    • 独立- 不需要C 编译器
    • 具有与GDB一起使用的本地调试支持
    • 通常具有更好的编译时间

    在不久的将来,如果( 按特定顺序):

    • 它的Bug 比引用Nim编译器少
    • 跨平台支持更好( 仅适用于目前的linux x86_64 )
    • 有人发现有用
    • 地球生存于人类

    NLVM没有:

    • 理解C,因此,headeremit 和类似的杂注将不会发生
    • 支持所有nim编译器标志和特性- 为缺少的任何有用的东西做文件 Bug
    编译指令

    要做我所做的,你将需要:

    • Linux
    • 一个 C/C++ 编译器( 讽刺的是,我在大多数时候都使用 gcc )

    从克隆开始:

    cd $SRC
    git clone https://github.com/arnetheduck/nlvm.git
    cd nlvm && git submodule update --init

    在生成过程中 nlvm 链接到 libLLVM-x.y.so,构建假定在 ext 下有这样一个共享库。 最简单的方法是使用提供的helper 运行构建 helper,但如果有一个方便的话,也可以以链接它。

    sh./make-llvm.sh

    编译 NLVM ( 这也将生成 nim ):

    make

    用自己进行编译并比较:

    make compare

    运行 nim/nlvm测试套件( 将测试结果写入 Nim/testresults.html ):

    make test
    编译你的代码

    编译时,NLVM将生成一个与项目中的所有代码一起生成的单个 .o 文件,并使用 $(CC) 链接到C 库。

    cd $SRC/nlvm/Nim/examples
    ../../nlvm/nlvm c fizzbuzz

    如果你想看到生成的LLVM IR,请使用 -c 选项:

    cd $SRC/nlvm/Nim/examples
    ../../nlvm/nlvm c -c fizzbuzz
    less fizzbuzz.ll

    然后可以在上面运行LLVM优化器:

    opt -Os fizzbuzz.ll | llvm-dis

    。或者将它的编译为汇编( .s ):

    llc fizzbuzz.ll
    less nlvm.s

    除了 .nim 文件的代码之外,编译器还将在 nlvm-lib/ 中组合找到的兼容性库。

    随机注释
    • 上游是用一个子模块固定的- nlvm很容易依赖于保持更改的内部组件。
    • 标准库喜欢直接导入nlvm头,因为上游nim编译器使用下面的C 编译器- 因此,标准库的大部分都不使用。
    • nlvm应该在任何 x86_64 linux上工作,但不支持其他平台的( 。int大小,调用约定等) - 欢迎使用补丁
    • 如果你在使用llvm的时候断言会在 Release 模式下编译 llvm,那么当你用llvm进行编译时,这是一个方便的折中方法,但是可以通过



    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语