이것은 Libpython과 연결되는 GCC의 플러그인으로 컴파일러 내부에서 임의의 Python 스크립트를 호출 할 수 있습니다. 목표는 Python에 GCC 플러그인을 작성할 수 있도록하는 것입니다.
플러그인은 무료 소프트웨어이며 GPLV3 (또는 이후)에 따라 라이센스가 부여됩니다.
여전히 "실험적인 개념 증명 단계"에 있습니다. 충돌과 추적을 기대합니다 (저는 GCC의 내부를 처음 접했고 일을 잘못 이해했을 것입니다).
이미 추가 컴파일러 오류/경고, 예를 들어 도메인 별 검사 또는 정적 분석을 추가하는 데 이미 사용할 수 있습니다. 이것에 대한 나의 목표 중 하나는 Cpython에 대한 확장을 쓸 때 사람들이 저지르는 일반적인 실수에 대해 GCC를 "가르치는"것이지만, 예를 들어 GCC의 GTK의 참조 카운팅 시맨틱 또는 Linux 커널 잠금 또는 API의 신호 안전성에 대해 가르치는 데 사용될 수 있습니다.
다른 아이디어에는 코드 구조 시각화가 포함됩니다. gcc.CFG 인스턴스가 주어지면 gccutils.render_to_dot(cfg) 및 gccutils.invoke_dot(cfg) GCC의 GIMPLE 내부 표현과 대화식 소스 코드를 보여주는 Control Flow 그래프의 편리한 시각화를 표시하기 위해 GraphViz 및 EOG를 사용합니다.
문서는 다음에서 볼 수 있습니다.
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_script.py other_args
플러그인이 시작될 때 스크립트를 실행하도록하십시오.
플러그인은 sys.path의 끝에 자체 디렉토리에 절대 경로를 자동으로 추가하여 gccutils.py 및 libcpychecker와 같은 지원 모듈을 찾을 수 있습니다.
정확한 API는 여전히 플럭스입니다. 콜백을 등록하여 다른 패스의 소스의 각 함수에 대해 호출되도록 이벤트에 연결할 수 있습니다.
"GCC"모듈 내에서 GCC의 다양한 유형을 파이썬 객체로 노출시킵니다. 실행하여 API를 볼 수 있습니다.
GCC 가져 오기 도움말 (GCC)
스크립트 내에서.
이것은 현재 하나의 세 가지 프로젝트입니다.
gcc-python-* : GCC 용 플러그인. EntryPoint ( init_plugin )는 gcc-python.c 입니다.
libcpychecker 및 cpychecker.py : 플러그인 용으로 작성된 Python Library (및 드라이버 스크립트)는 사람들이 Cpython 확장 코드에서 버그를 찾도록 돕기 위해 새로운 컴파일러 경고를 구축합니다.
cpybuilder : CPYTHON 확장에 대한 C 소스 코드를 프로그래밍 적으로 생성하기위한 편리한 모듈. 이것을 모두 사용하여 GCC 플러그인의 일부를 생성하고 Cpychecker 스크립트의 자체 테스트에서도 사용합니다. (처음에는 전자에 Cython을 사용하려고 시도했지만 "트리"유형 계층을 감싸는 데 더 프로그램적인 제어가 필요했습니다)
코딩 스타일 : Python 및 GCC는 각각 C에 대한 고유 한 코딩 스타일 안내서를 가지고 있습니다. 나는 그것을 선호하는 것처럼 Python 's (pep-7)를 따르기로 선택했습니다 (내 코드는 분명히 장소에서 엉망이지만).
"Docs"디렉토리 내에 API 문서를 찾을 수 있습니다. 스핑크스가 설치된 경우 다음을 사용하여 이러한 문서를 재생할 수 있습니다.
HTML을 만드십시오
docs 디렉토리 내에서. Sphinx는 Fedora/Rhel 박스의 python-sphinx 패키지입니다.
더 자세한 문서는 docs/getting-involved.rst 에서 볼 수 있습니다.
즐기다! David Malcolm <[email protected]>