• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 如何独立编译TraceStreamer
2尽管TraceStreamer是在ohos工具箱中的一员,但你依然可以独立编译此工具。
3
4TraceStreamer可以编译为linux, mac, windows, WebAssembly版本。
5
6本工具默认编译方式是使用gn。
7## 编译步骤
8### 处理第三方库
9因为需要同时支持pc和WebAssembly环境,TraceStreamer构造了一个独立编译编译的环境,需对第三方库的gn脚本做适当的修改,可按下面的步骤进行。
10third_party相关控件下载链接:https://gitee.com/organizations/openharmony/projects
11在TraceStreamer的src同级目录下创建third_party目录。
12#### sqlite
131.在第三方库中,找到并下载sqlite组件;
142.把下载的文件解压后,文件夹命名为sqlite放入到third_party目录中;
153.使用下面的命令,把sqlite的BUILD.gn修改为TraceStreamer适用的风格。
16```
17patch -p0 third_party/sqlite/BUILD.gn prebuilts/buildsqlite/sqlite3build.gn.patch
18```
19#### protobuf
201.在第三方库中,找到并下载protobuf组件;
212.把下载的文件解压后,文件夹命名为protobuf,放入到third_party目录中;
223.使用下面的命令,把protobuf的BUILD.gn修改为TraceStreamer适用的风格。
23```
24patch -p0 third_party/protobuf/BUILD.gn prebuilts/protobuf/protobufbuild.gn.patch
25```
26#### googletest
271.在第三方库中,找到并下载googletest组件;
282.把googletest文件夹放入third_party目录中;
293.使用下面的命令,把googletest的BUILD.gn修改为TraceStreamer适用的风格。
30```
31patch -p0 third_party/googletest/BUILD.gn prebuilts/buildgoogletest/googletestbuild.gn.patch
32```
334.找到文件\googletest\include\gtest\internal\ gtest-port.h 把286行 #include <sstream>  // NOLINT修改为
34#undef private
35#define private private
36#include <sstream>  // NOLINT
37#undef private
38#define private public
39### nlohmann_json
401.在第三方库中,找到并下载third_party_json库;
412.把下载的文件解压后,文件夹命名为json-master,放入到third_party目录中。
42
43### 开始编译
44#### 预置条件
451.您需要先获取一个可用的protoc可执行文件,或者在linux平台上执行:
46```
47./build.sh protoc
48```
49来生成可用的protoc可执行的程序。
502.生成proto相关文件对应的pb.hpb.cc文件
51可执行如下脚本来完成:
52```
53./src/protos/protogen.sh
54```
55#### 编译linux、mac、windows平台的TraceStreamer
56编译不同平台的程序,你需要在各自的PC环境编译,编译脚本会自行识别平台并编译程序。
57目前wasm版本仅支持在linux或mac平台编译。
58编译不同版本:linux, windows, mac:
59```
60./build.sh
61```
62特别地,如果你需要编译debug版本的应用,只需要输入debug标识即可,否则,默认是release版本的应用。
63```
64./build.sh linux debug
65```
66生成的可执行文件分别位于如下路径:
67```
68out/linux
69out/windows
70out/macx
71out/linux_debug
72```
73___在不同的平台上,均需要gn和ninja的可执行文件来执行gn工程相关的操作,比如,windows上是gn.exeninja.exe74https://gitee.com/su_fu/public_tools/tree/master/gn目录下,您可以获取不同平台下可用的gn和ninja可执行文件,同时,为linux平台下提供了protoc可执行文件。你可以下载并部署在本地的prebuilts目录下。您也可以在linux平台下执行:___
75```
76./build.sh protoc
77```
78___来生成out/linux/protoc可执行文件。___
79#### 编译WebAssembly版本
80如果需要编译WebAssembly版本,您需要在prebuilts/目录下安装emsdk。
81```
82git clone https://github.com/juj/emsdk.git --depth=1
83cd emsdk
84git pull
85./emsdk update # this may not work, ignore it
86./emsdk install latest
87./emsdk activate latest
88```
89安装之后,您需要将upstream目录复制到prebuilts/emsdk/emsdk,node复制到prebuilts/emsdk/node90安装之后,目录结构当如下:
91```
92prebuilts/emsdk
93├── prebuilts/emsdk/emsdk
94│   ├── prebuilts/emsdk/emsdk/bin
95│   ├── prebuilts/emsdk/emsdk/emscripten
96│   │   ├── prebuilts/emsdk/emsdk/emscripten/cache
97│   │   ├── prebuilts/emsdk/emsdk/emscripten/cmake
98│   │   ├── prebuilts/emsdk/emsdk/emscripten/docs
99│   │   ├── prebuilts/emsdk/emsdk/emscripten/media
100│   │   ├── prebuilts/emsdk/emsdk/emscripten/node_modules
101│   │   ├── prebuilts/emsdk/emsdk/emscripten/__pycache__
102│   │   ├── prebuilts/emsdk/emsdk/emscripten/src
103│   │   ├── prebuilts/emsdk/emsdk/emscripten/system
104│   │   ├── prebuilts/emsdk/emsdk/emscripten/tests
105│   │   ├── prebuilts/emsdk/emsdk/emscripten/third_party
106│   │   └── prebuilts/emsdk/emsdk/emscripten/tools
107│   ├── prebuilts/emsdk/emsdk/include
108│   │   └── prebuilts/emsdk/emsdk/include/c++
109│   └── prebuilts/emsdk/emsdk/lib
110│       └── prebuilts/emsdk/emsdk/lib/clang
111└── prebuilts/emsdk/node
112    └── prebuilts/emsdk/node/14.18.2_64bit
113        ├── prebuilts/emsdk/node/14.18.2_64bit/bin
114        ├── prebuilts/emsdk/node/14.18.2_64bit/include
115        ├── prebuilts/emsdk/node/14.18.2_64bit/lib
116        └── prebuilts/emsdk/node/14.18.2_64bit/share
117```
118之后,在TraceStream代码根目录,也就是这个文档的上级目录下执行:
119```
120./build.sh wasm
121```
122您需要将sh脚本进行部分修改,因为这个脚本内置了一些库的下载和解析方式,你可可以在你的编译环境对此脚本做定制修改。