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.h或pb.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.exe和ninja.exe。 74在https://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/node。 90安装之后,目录结构当如下: 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脚本进行部分修改,因为这个脚本内置了一些库的下载和解析方式,你可可以在你的编译环境对此脚本做定制修改。