怎么使用python 调用 clang的接口生成llvm ir的bitcode文件?

怎么使用python 调用 clang的接口生成llvm ir的bitcode文件?以及怎么讲生成的bitcode文件中的行与源代码的行进行映射?

import subprocess

clang_cmd = ['clang', '-S', '-emit-llvm', 'example.c', '-o', 'example.ll']
subprocess.run(clang_cmd)

llc_cmd = ['llc', 'example.ll', '-o', 'example.bc']
subprocess.run(llc_cmd)

dwarfdump_cmd = ['llvm-dwarfdump', '--debug-line', 'example.bc']
dwarfdump_output = subprocess.check_output(dwarfdump_cmd, universal_newlines=True)

# 解析 dwarfdump 的输出并创建一个行号映射字典
line_mapping = {}
for line in dwarfdump_output.splitlines():
    if 'Line table' in line:
        # 获取文件名和行号
        file_name, _, line_no_str = line.split()[-3:]
        line_no = int(line_no_str)

        # 添加到映射字典
        line_mapping[line_no] = file_name

# 使用行号映射字典将 bitcode 文件中的行映射到源代码行
with open('example.bc', 'rb') as f:
    bc_data = f.read()

bc_lines = bc_data.decode('utf-8').splitlines()
for i, bc_line in enumerate(bc_lines):
    # 获取行号
    line_no_str = bc_line.split(':')[0]
    line_no = int(line_no_str)

    # 查找映射文件名
    if line_no in line_mapping:
        file_name = line_mapping[line_no]

        # 输出源代码行号和 bitcode 行号的对应关系
        print(f'{file_name}:{line_no} -> example.bc:{i+1}')