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 获取第三方依赖库 69从 70https://gitee.com/openharmony/third_party_sqlite 71获取sqlite3目录到代码根目录的third_party目录 72从 73https://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文件的位置; 83在BUILDCONFIG.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```