ClangBuildAnalyzer(-ftime-trace)

Clang 9+ -ftime-trace可以很方便地获取单个文件编译最耗时,但当一个工程中有多个文件需要构建时,如何找最耗时的操作就尤为重要,例如:在整个构建过程中那个文件编译最耗时,那个头文件包含最耗时,那个C++模板实例化最耗时,那个文件以及那个函数代码生成最耗时等。ClangBuildAnalyzer应运而生。

1 编译/安装ClangBuildAnalyzer

首先下载ClangBuildAnalyzer:

git clone https://github.com/aras-p/ClangBuildAnalyzer.git
or
git clone https://gitee.com/wangwenchaonj/ClangBuildAnalyzer.git

编译ClangBuildAnalyzer:

cd ClangBuildAnalyzer
make -f projects/make/Makefile

将ClangBuildAnalyzer添加到系统路径:

cd build
cp ClangBuildAnalyzer /usr/local/bin/
root@ubuntu:/home/~# ClangBuildAnalyzer
USAGE: one of
  ClangBuildAnalyzer --start <artifactsdir>
  ClangBuildAnalyzer --stop <artifactsdir> <filename>
  ClangBuildAnalyzer --analyze <filename>

2 待优化工程参数设置

设置clang编译器:

export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++

设置clang编译器-ftime-trace参数:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftime-trace")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftime-trace")

3 编译

对ClangBuildAnalyzer源码进行编译:

mkdir build
ClangBuildAnalyzer --start ./build
make -f projects/make/Makefile
ClangBuildAnalyzer --stop ./build/ ClangBuildAnalyzer.data
ClangBuildAnalyzer --analyze ClangBuildAnalyzer.data
ls
chmod -R 777 *

4 ClangBuildAnalyzer工程编译时长分析

|-- CMakeLists.txt
|-- ClangBuildAnalyzer.ini
|-- build
|-- license.md
|-- projects
|   |-- make
|   |-- vs2019
|   `-- xcode
|-- readme.md
|-- src
|   |-- Analysis.cpp
|   |-- Analysis.h
|   |-- Arena.cpp
|   |-- Arena.h
|   |-- BuildEvents.cpp
|   |-- BuildEvents.h
|   |-- Colors.cpp
|   |-- Colors.h
|   |-- Utils.cpp
|   |-- Utils.h
|   |-- external
|   `-- main.cpp
`-- tests
    |-- clang11-pid-45
    |-- hlsl2glsl-mac-clang-10.0-dev
    |-- libreoffice-skiahelper-clang-11-dev
    |-- self-win-clang-cl-10.0rc2
    |-- self-win-clang-cl-9.0rc2
    `-- verylong-symbol-name-38

增加-ftime-trace(CMakeLists.txt)参数:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftime-trace")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftime-trace")
rm -rf *
cmake ../

ClangBuildAnalyzer --start ./

make

ClangBuildAnalyzer --stop   ./ ClangBuildAnalyzer-test
ClangBuildAnalyzer --analyze ClangBuildAnalyzer-test
root@ubuntu:/home/wwchao/project/ClangBuildAnalyzer/build# ClangBuildAnalyzer --analyze ClangBuildAnalyzer-test
Analyzing build trace from 'ClangBuildAnalyzer-test'...
**** Time summary:
Compilation (15 times):
  Parsing (frontend):            8.3 s
  Codegen & opts (backend):      3.9 s

**** Files that took longest to parse (compiler frontend):
  1434 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/simdjson/simdjson.cpp.json
  1040 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/BuildEvents.cpp.json
   982 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/Analysis.cpp.json
   882 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/enkiTS/TaskScheduler.cpp.json
   715 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/llvm-Demangle/lib/ItaniumDemangle.cpp.json
   682 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/main.cpp.json
   512 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/llvm-Demangle/lib/MicrosoftDemangle.cpp.json
   478 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/inih/cpp/INIReader.cpp.json
   402 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/llvm-Demangle/lib/MicrosoftDemangleNodes.cpp.json
   374 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/Utils.cpp.json

**** Files that took longest to codegen (compiler backend):
  2578 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/simdjson/simdjson.cpp.json
   386 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/Analysis.cpp.json
   292 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/llvm-Demangle/lib/ItaniumDemangle.cpp.json
   199 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/BuildEvents.cpp.json
    99 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/main.cpp.json
    82 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/llvm-Demangle/lib/MicrosoftDemangle.cpp.json
    57 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/enkiTS/TaskScheduler.cpp.json
    49 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/inih/cpp/INIReader.cpp.json
    39 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/xxHash/xxhash.c.json
    34 ms: /CMakeFiles/ClangBuildAnalyzer.dir/src/external/llvm-Demangle/lib/MicrosoftDemangleNodes.cpp.json

5 参考链接

[1] https://github.com/aras-p/ClangBuildAnalyzer/tree/v1.2.0
[2] https://www.snsystems.com/technology/tech-blog/clang-time-trace-feature
[3] https://aras-p.info/blog/2019/01/16/time-trace-timeline-flame-chart-profiler-for-Clang/
[4] https://firmwaresecurity.com/2019/11/01/clang-build-analyzer-clang-build-analysis-tool/
[5] https://aras-p.info/blog/2019/09/28/Clang-Build-Analyzer/
[6] https://aras-p.info/blog/2019/01/12/Investigating-compile-times-and-Clang-ftime-report/
[7] https://github.com/jlfwong/speedscope

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值