这是GCC的插件,该插件与Libpython链接在一起,(我希望)允许您从编译器内部调用任意Python脚本。目的是允许您在Python中编写GCC插件。
该插件是免费软件,在GPLV3(或更高版本)下获得许可。
它仍处于“概念验证阶段”;期待崩溃和追溯(我是GCC内部的新手,我可能已经误解了事情)。
已经可以使用它来添加其他编译器错误/警告,例如特定于域的检查或静态分析。我这样做的目标之一是“教”人们在为CPYTHON编写扩展时犯的常见错误,但可以使用EG来教GCC有关GCC的参考语义,或锁定Linux内核的锁定或API中的信号安全。
其他想法包括代码结构的可视化。给定gcc.CFG实例, gccutils.render_to_dot(cfg)和gccutils.invoke_dot(cfg)将使用graphviz和eog绘制控制流程图的方便可视化,显示源代码与GCC的GIMPLE内部表示交叉。
该文档可以看到:
http://gcc-python-plugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-dev或gcc-plugin-devel 。我使用:
制作
构建插件并运行测试
您也可以使用:
做演示
演示新的编译器错误。
开发一直在X86_64上,我不知道它在多大程度上与其他架构兼容。
还没有安装程序。从理论上讲,您应该能够将这些论点添加到GCC调用中:
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_to_script.py ether_args
并在插件启动时运行脚本。
该插件会自动将其自身目录的绝对路径添加到SYS.Path的末尾,以便可以找到支持模块,例如gccutils.pys.pys.py和libcpychecker。
确切的API仍处于不断变化状态;您当前可以通过注册回调来连接事件,例如在不同通过时源中的每个函数来调用每个功能。
在“ GCC”模块中,它将海湾合作委员会的各种类型视为Python对象。您可以通过运行看到API:
进口海湾合作委员会 帮助(GCC)
从脚本中。
目前,这是三个项目:
gcc-python-* :GCC的插件。入口点( init_plugin )在gcc-python.c中。
libcpychecker和cpychecker.py :为插件编写的Python库(和驱动程序脚本),在该插件中,我正在构建新的编译器警告,以帮助人们在Cpython扩展代码中找到错误。
cpybuilder :一个方便的模块,用于编程生成CPython扩展的C源代码。我使用这两者都可以生成GCC插件的一部分,也可以在CPYCHECKER脚本的自我测试中生成一部分。 (我最初试图将Cython用于前者,但包装“树”类型层次结构需要更多的程序控制)
编码样式:Python和GCC各自都有自己的编码样式指南。
您会在“文档”目录中找到API文档,并以重组文本格式编写(实际上是该文件)。如果已安装了狮身人面像,则可以使用以下方式再生这些文档
制作html
在docs目录中。 Sphinx是Fedora/Rhel盒上的python-sphinx包装。
在docs/getting-involved.rst内,可以看到更详细的文档。
享受! David Malcolm <[email protected]>