Насколько я знаю, для этого не существует стабильного, официально поддерживаемого API. Clang C API предоставляет информацию уровня интерфейса (уровень исходного кода). Это также делает инструментарий Clang.
У вас есть хорошие варианты. Самый простой способ - просто вызвать интерфейс Clang в качестве подпроцесса clang -cc1 -emit-llvm ...<other options>
. Это приведет к созданию IR-файла LLVM, который вы затем можете прочитать. На практике это довольно распространенная практика в компиляторах - сам драйвер Clang делает это - он вызывает интерфейс и множество других инструментов (таких как компоновщик) в зависимости от конкретной задачи компиляции.
В качестве альтернативы, если вы считаете, что для этого у вас должен быть программный API, вы можете выкопать код интерфейсного Clang (вызов -cc1
, упомянутый выше), чтобы узнать, как он его выполняет, и собрать биты и куски код. Будьте готовы написать огромное количество лесов, потому что эти API не предназначены для использования снаружи.
Чтобы повторить, это - возможно использование внутренних API-интерфейсов, но по этому пути нет простого или рекомендуемого способа.