LLVM工具 - LLVM lit

Posted by 叉叉敌 on September 22, 2022

main build_parameters lit.cl_arguments, -> 获取用户传进来的arguments,比如-vv,-j等

其中重要的就是test_paths ,就是我们要测试的目标目录

create_params 配置系统默认的lit.cfg配置,比如clang/test/lit.cfg.py

lit_config 刚刚上面的几个都是获取的为了生成这个lit_config,包括site_config_names/config_names/local_config_names等等 对于新目录,添加了是这个几个名字的理论都可以加载被识别到,后缀一定是cfg.py 和cfg

lit.discovery.find_tests_for_inputs 看名字就知道了,是查找指定目录的所有case来执行

getTests 对于给定的目录和相对路径,这个找到test_suite

getTestSuite
这个定义2个search方法,一个是search(),还有一个是search1()

重点说下search1,从上面的lit_config里面找有没有cfg文件,从里到外(子目录到父目录到父父录),没有就继续找

    load_from_path
    把找到之后的参数传到这个函数里面,然后用python的exec(compile(xxx))方法来编译里面的文件,所以cfg文件里面的内容是需要支持python语法和格式的,当成python脚本来写即可。

    并把cfg文件里面的内容转换到cfg_globals这个全局变量里面。

    然后把对应的路径转化为testSuite对象

getTestsInSuite

下面就是一些arguments的处理,并更新tests这个对象

run_tests 检查workers的数量,用于multipeocessing.Pool(xxx),用多进程来解锁GIL 然后调用这个lit.run.Run,返回Run对象,创建一个tmp目录tempfile.mkdtemp(), 关键:调用Run.execute()-> 最后兜兜转转到test.config.test_format.execute()这里执行的。 封装为cmd,

lit.util.executeCommand(xxx) 这个用来执行cmd

解析执行命令:run_list

builder.process_run_line() 执行之后返回对应的值。