clang-sys

markyang92·2022년 8월 29일
0

yocto

목록 보기
44/53

clang-sys


  • rust documentation (https://docs.rs/) 에 따라 이 crate는 runtime Cargo feature, latest supported version of libclang(e.g., clang_13_0)을 사용한다고 가정하고 있으며, 기본적으로 둘 다 활성화되어 있지 않다.
  • runtime Cargo feature의 사용으로 인해, 이 문서는 런타임에 dinamically loaded libclang을 manage하기위한 추가적인 type, function를 포함한다.
  • Cargo feature의 사용으로 인해, libclang의 최신 버전을 지원한다. 이 문서는 oldest supported version libclang(3.5)의 constantfunction이 사용할 수 없다. 이 문서의 주석으로된 모든 typefunction는 명시된 libclang 버전의 minimum이 필요로한다.

  • Supported version
    • libclang의 타겟 버전, enable a Cargo features such as one of the following:
      • clang_3_5 - requires libclang 3.5 or later
      • clang_3_6 - requires libclang 3.6 or later
      • etc...
      • clang_12_0 - requires libclang 12.0 or later
      • clang_13_0 - requires libclang 13.0 or later
  • 이러한 features를 enable하지 않으면, API는 libclang 3.5로 default 제공된다.

  • Dependencies
    • 기본적으로 이 crate는 libclang을 다이나믹 링크하도록 시도한다.
      • 이 경우, crate는 libclang(libclang.so: shared library)에 Depends
      • libclangstatic 링크 하고 싶다면, Cargo feature에서, staticenable하라.
        • 이 경우, 이 crate는 LLVM, Clang static library를 Depends한다.
      • libclang 링크를 compile time에 원하지 않고 runtime에서 enable하길 원한다면, Cargo feature에서 runtime을 enable하라.
    • 이 라이브러리는 Clang의 한 부분으로서 install되거나 llvm 다운로드 링크에서 다운로드 받아라.

  • versioned dependencies
    • 이 crate는 libclang.so의 versioned instance (e.g., libclang-3.9.so)를 찾는데 지원한다.
      • 이 경우, multiple instace 중에서 고른다. this crate는 higher version을 선호한다.
        • 예를 들어, libclang.so의 인스턴스가 아래와 같이 있다면, 아래 순으로 선호된다.
          1. libclang-4.0.so
          2. libclang-4.so
          3. libclang-3.9.so
          4. libclang-3.so
          5. libclang.so
    • BSD 배포판의 경우, libclang.so의 versioned instance는 libclang.so.*로 패턴 매칭된다.
      • e.g., libclang.so.7.0
    • Linux 배포판에서 runtime기능이 enable되었다면, libclang.so의 versioned instance는 libclang.so.*로 패턴 매칭된다.
      • e.g., libclang.so.1

Environment Variables

  • 다음의 환경 변수는 이 crate가 required library와 executable을 찾기 위해 사용된다.
    • LLVM_CONFIG_PATH(compiletime): llvm-config에 full path를 제공한다.
      • i.e., /usr/local/bin/llvm-config-8.0
    • LIBCLANG_PATH(compiletime): libclangshared library 를 포함하는 디렉토리의 full path to specific libclang shared library
    • LIBCLANG_STATIC_PATH(compiletime): LLVM과 Clang Static Library를 포함하는 디렉토리의 full path
    • CLANG_PATH(runtime): 실행가능한 clang의 path를 제공

Linking

Dynamic

  • libclang shared library는 아래의 디렉토리를 찾는다.
    • 환경변수 LIBCLANG_PATH 디렉토리
    • llvm-config --libdir에 의해 제공되는 bin, lib 디렉토리
    • 환경변수 LD_LIBRARY_PATH 디렉토리
    • target platform의 디렉토리 리스트(e.g., /usr/local/lib on Linux)
    • macOS only: the toolchain directory in the directory provided by xcode-select --print-path
  • Linux에서, executable을 실행하는 것은 dynamically linked to libclang may require you to add a path to libclang.so to the LD_LIBRARY_PATH environment variable. OS X에서도 마찬가지. DYLD_LIBRARY_PATH가 대신 사용되는 것을 제외하곤,

Static

The availability of llvm-config is not optional for static linking. Ensure that an instance of this executable can be found on your system's path or set the LLVM_CONFIG_PATH environment variable. The required LLVM and Clang static libraries will be searched for in the same way as shared libraries are searched for, except the LIBCLANG_STATIC_PATH environment variable is used in place of the LIBCLANG_PATH environment variable.


Runtime

The clang_sys::load function is used to load a libclang shared library for use in the thread in which it is called. The clang_sys::unload function will unload the libclang shared library. clang_sys::load searches for a libclang shared library in the same way one is searched for when linking to libclang dynamically at compiletime.

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글