• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 1.如何独立编译Trace_streamer
2尽管本工具(trace_streamer)是在ohos工具箱中的一员,但你依然可以独立编译此工具。
3
4本工具可以编译linux, mac, windows, WebAssembly版本。
5
6本工具默认编译方式是使用gn
7+ 编译方式
8```
9./build.sh linux/wasm
10```
11如果需要编译WebAssembly版本,您需要在prebuilts/目录下安装emsdk
12```
13git clone https://github.com/juj/emsdk.git --depth=1
14cd emsdk
15git pull
16./emsdk update # this may not work, ignore it
17./emsdk install latest
18./emsdk activate latest
19安装之后,您需要将upstream目录复制到prebuilts/emsdk/emsdk,node复制到prebuilts/emsdk/node
20```
21安装之后,目录结构当如:
22```
23prebuilts/emsdk
24├── prebuilts/emsdk/emsdk
25│   ├── prebuilts/emsdk/emsdk/bin
26│   ├── prebuilts/emsdk/emsdk/emscripten
27│   │   ├── prebuilts/emsdk/emsdk/emscripten/cache
28│   │   ├── prebuilts/emsdk/emsdk/emscripten/cmake
29│   │   ├── prebuilts/emsdk/emsdk/emscripten/docs
30│   │   ├── prebuilts/emsdk/emsdk/emscripten/media
31│   │   ├── prebuilts/emsdk/emsdk/emscripten/node_modules
32│   │   ├── prebuilts/emsdk/emsdk/emscripten/__pycache__
33│   │   ├── prebuilts/emsdk/emsdk/emscripten/src
34│   │   ├── prebuilts/emsdk/emsdk/emscripten/system
35│   │   ├── prebuilts/emsdk/emsdk/emscripten/tests
36│   │   ├── prebuilts/emsdk/emsdk/emscripten/third_party
37│   │   └── prebuilts/emsdk/emsdk/emscripten/tools
38│   ├── prebuilts/emsdk/emsdk/include
39│   │   └── prebuilts/emsdk/emsdk/include/c++
40│   └── prebuilts/emsdk/emsdk/lib
41│       └── prebuilts/emsdk/emsdk/lib/clang
42└── prebuilts/emsdk/node
43    └── prebuilts/emsdk/node/14.18.2_64bit
44        ├── prebuilts/emsdk/node/14.18.2_64bit/bin
45        ├── prebuilts/emsdk/node/14.18.2_64bit/include
46        ├── prebuilts/emsdk/node/14.18.2_64bit/lib
47        └── prebuilts/emsdk/node/14.18.2_64bit/share
48```
49之后调用
50```
51./build.sh wasm进行编译,您需要将sh脚本进行部分修改,因为这个脚本内置了一些库的下载和解析方式
52```
53本工具还支持使用QtCreator来编译。
54
55src/trace_streamer.pro 是工程文件,编译本工具需要依赖Sqlite库和一些基于proto的pb.h文件
56## 2 准备工程
57### 2.1 基于proto文件生成pb文件
58您需要自行下载并编译一个当前系统(linux)可用的proobuf/protoc程序,此全路径为位于out/linux/protoc
59src/protos目录下有一个protogen.sh文件,运行该文件可以在third_party/protogen目录下生成项目需要的pb相关文件
60序列化二进制的解析依赖于基于proto生成的.pb.cc文件。
61在执行protogen.sh脚本之后
62你的目录结构当类似如下结构:
63```
64third_party/protogen/types/plugins/ftrace_data/*.pb.cc
65third_party/sqlite/*.
66third_party/protobuf/*
67```
68### 2.2 获取第三方依赖库
6970https://gitee.com/openharmony/third_party_sqlite
71获取sqlite3目录到代码根目录的third_party目录
7273https://gitee.com/openharmony/third_party_protobuf
74获取protobuf目录到代码根目录的third_party目录
75之后,你的目录当如下所示
76trace_streamer/third_party/protobuf
77trace_streamer/third_party/sqlite
78# 3.(linux和ohos平台)使用gn编译TraceStreamer
79在编译WebAssembly目标时,需要将sqlite3和protobuf里面相关的ohos_xxx_library统一修改为source_set
80## 3.1 准备gn
81在自己的项目中使用gn,必须遵循以下要求:
82在根目录创建.gn文件,该文件用于指定CONFIG.gn文件的位置;
83BUILDCONFIG.gn中指定编译时使用的编译工具链;
84在独立的gn文件中定义编译使用的工具链;
85在项目根目录下创建BUILD.gn文件,指定编译的目标。
86```
87cp prebuilts/gn ./
88```
89不同的操作系统下,你需要获取不同的gn
90## 3.2 执行编译
91./build.sh linux debug
92或./build.sh linux debug
93./build.sh将直接编译linux的release版本
94build.sh wasm 命令将可以编译WebAssembly版本
95特别说明:编译WebAssembly版本需要emSDK支持,你需要将build.sh里面的相关路径做更改,以保证编译时必须的文件是存在的
96# 4 编译Windows版本或Mac版本
97## 4.1 编译依赖文件
98### 4.1.1 编译SqliteLib
99使用QtCreator打开prebuiltsprebuilts/buildprotobuf/sqlite.pro
100### 4.1.2 编译ProtobufLib
101使用QtCreator打开prebuilts/buildprotobuf/protobuf.pro
102编译之后,文件结构当如下所示:
103```
104lib
105├── linux
106│   ├── libdl.so
107│   └── libsqlite.a
108├── linux_debug
109│   ├── libprotobuf.a
110│   └── libsqlite.a
111├── macx
112│   ├── libprotobuf.a
113│   └── libsqlite.a
114├── macx_debug
115│   ├── libprotobuf.a
116│   └── libsqlite.a
117├── windows
118│   ├── libprotobuf.a
119│   └── libsqlite.a
120└── windows_debug
121    ├── libprotobuf.a
122    └── libsqlite.a
123```
124## 4.2 编译TraceStreamer
125之后,使用QtCreator打开src/trace_streamer.pro,选择合适的构建工具,执行 Ctrl + b 即可编译
126
127编译之后的可执行文件位于out目录
128```
129- out
130---- linux (Linux平台下QtCreator或gn生成)
131---- macx (mac平台下QtCreator或gn生成)
132---- windows (windows平台下QtCreator或gn生成)
133```