這是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]>