diff --git a/meta-oe/recipes-devtools/perfetto/files/0001-Remove-check_build_deps-build-steps.patch b/meta-oe/recipes-devtools/perfetto/files/0001-Remove-check_build_deps-build-steps.patch new file mode 100644 index 00000000000..b702b55fd36 --- /dev/null +++ b/meta-oe/recipes-devtools/perfetto/files/0001-Remove-check_build_deps-build-steps.patch @@ -0,0 +1,48 @@ +From ec414dc44702c71db3d57d69b27a388bc3426cad Mon Sep 17 00:00:00 2001 +From: Sui Chen +Date: Mon, 13 Jun 2022 17:46:49 +0000 +Subject: [PATCH] Remove "check_build_deps" build steps + +When building with Bitbake, we want Bitbake to manage our dependencies, +so we remove the "check_build_deps" steps from Perfetto. +--- + gn/BUILD.gn | 1 - + gn/standalone/BUILD.gn | 12 ++++++------ + 2 files changed, 6 insertions(+), 7 deletions(-) + +diff --git a/gn/BUILD.gn b/gn/BUILD.gn +index 8a7ca72a8..e4a2d39f0 100644 +--- a/gn/BUILD.gn ++++ b/gn/BUILD.gn +@@ -111,7 +111,6 @@ group("default_deps") { + deps = [ ":gen_buildflags" ] + if (perfetto_build_standalone) { + public_deps = [ +- "//gn/standalone:check_build_deps", + "//gn/standalone/libc++:deps", + "//gn/standalone/sanitizers:deps", + ] +diff --git a/gn/standalone/BUILD.gn b/gn/standalone/BUILD.gn +index 33fd7aab2..6235044c7 100644 +--- a/gn/standalone/BUILD.gn ++++ b/gn/standalone/BUILD.gn +@@ -439,10 +439,10 @@ config("android_liblog") { + } + + # Checks that tools/install-build-deps has been run since it last changed. +-perfetto_check_build_deps("check_build_deps") { +- args = [] +-} ++#perfetto_check_build_deps("check_build_deps") { ++# args = [] ++#} + +-perfetto_check_build_deps("check_build_deps_android") { +- args = [ "--android" ] +-} ++#perfetto_check_build_deps("check_build_deps_android") { ++# args = [ "--android" ] ++#} +-- +2.36.1.476.g0c4daa206d-goog + diff --git a/meta-oe/recipes-devtools/perfetto/perfetto.bb b/meta-oe/recipes-devtools/perfetto/perfetto.bb new file mode 100644 index 00000000000..300330953d2 --- /dev/null +++ b/meta-oe/recipes-devtools/perfetto/perfetto.bb @@ -0,0 +1,116 @@ +LICENSE = "Apache-2.0 & BSD-3-Clause & MIT & ZLib" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=f87516e0b698007e9e75a1fe1012b390 \ + file://buildtools/libcxx/LICENSE.TXT;md5=55d89dd7eec8d3b4204b680e27da3953 \ + file://buildtools/libcxx/utils/google-benchmark/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \ + file://buildtools/libcxxabi/LICENSE.TXT;md5=7b9334635b542c56868400a46b272b1e \ + file://buildtools/libunwind/LICENSE.TXT;md5=f66970035d12f196030658b11725e1a1 \ + file://buildtools/protobuf/LICENSE;md5=37b5762e07f0af8c74ce80a8bda4266b \ + file://buildtools/zlib/LICENSE;md5=f09575dbfb09420642318b413159496f \ + file://debian/copyright;md5=4e08364c82141f181de69d0a2b89d612 \ + file://python/LICENSE;md5=c602a632c34ade9c78a976734077bce7" + +SRC_URI = "git://github.com/google/perfetto.git;protocol=https;name=perfetto \ + git://github.com/protocolbuffers/protobuf.git;branch=3.9.x;protocol=https;destsuffix=git/buildtools/protobuf;name=protobuf \ + git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git;protocol=https;destsuffix=git/buildtools/libcxx;name=libcxx \ + git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git;protocol=https;destsuffix=git/buildtools/libcxxabi;name=libcxxabi \ + git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git;protocol=https;destsuffix=git/buildtools/libunwind;name=libunwind \ + git://android.googlesource.com/platform/external/zlib.git;branch=master;protocol=https;destsuffix=git/buildtools/zlib;name=zlib \ + https://storage.googleapis.com/perfetto/gn-linux64-1968-0725d782;subdir=git/buildtools/;name=gn \ + file://0001-Remove-check_build_deps-build-steps.patch " + +SRCREV_perfetto = "5bd3f582c075d0d026c5fe0b5e291d34dee0d976" +SRCREV_protobuf = "6a59a2ad1f61d9696092f79b6d74368b4d7970a3" +SRCREV_libcxx = "d9040c75cfea5928c804ab7c235fed06a63f743a" +SRCREV_libcxxabi = "196ba1aaa8ac285d94f4ea8d9836390a45360533" +SRCREV_libunwind = "d999d54f4bca789543a2eb6c995af2d9b5a1f3ed" +SRCREV_zlib = "5c85a2da4c13eda07f69d81a1579a5afddd35f59" +SRC_URI[gn.sha256sum] = "f706aaa0676e3e22f5fc9ca482295d7caee8535d1869f99efa2358177b64f5cd" + +DEPENDS += " ninja-native" + +B = "${WORKDIR}/build" + +FILES:${PN}:append = " \ + ${bindir}/tracebox \ + " + +# Run the GN (Generate Ninja) script using the Linux-Arm configuration +# and replace the compiler flags +do_configure () { + # This has to be done from the source directory + cd ${S} + # Rename a few build tools if they have not been renamed + cd buildtools + x="gn-linux64-1968-0725d782" + [ -f $x ] && mkdir linux64 && mv $x linux64/gn + chmod +x linux64/gn + cd .. + + CC_BIN=`echo $CC | awk '{print $1}'` + CXX_BIN=`echo $CXX | awk '{print $1}'` + STRIP_BIN=`echo $STRIP | awk '{print $1}'` + + ARGS="is_debug=false " # Tell gn to use release mode + + if [ -z `echo ${TOOLCHAIN} | grep clang` ]; then + ARGS=$ARGS" is_clang=false" + else + ARGS=$ARGS" is_clang=true" + fi + ARGS=$ARGS" target_os=\"linux\"" + ARGS=$ARGS" target_cpu=\"arm\"" + ARGS=$ARGS" target_cc=\"$CC_BIN\"" + ARGS=$ARGS" target_cxx=\"$CXX_BIN -std=c++11\"" + ARGS=$ARGS" target_strip=\"$STRIP_BIN\"" # + ARGS=$ARGS" target_sysroot=\"${RECIPE_SYSROOT}\"" + ARGS=$ARGS" target_linker=\"$CC_BIN ${LDFLAGS}\"" + ARGS=$ARGS" target_ar=\"$AR\"" + ARGS="'$ARGS'" + cmd="tools/gn gen --args=$ARGS ${B}" + + echo $cmd + # Use eval, not just call $cmd, due to escaping of single quotation marks + eval $cmd + + cd ${B} + # Eliminate a few incompatible build flags + REPLACES="s/-Wl,--icf=all//g" + REPLACES=$REPLACES";s/-Werror//g" + REPLACES=$REPLACES";s/-mfpu=neon//g" + REPLACES=$REPLACES";s/-fcolor-diagnostics//g" + REPLACES=$REPLACES";s/=format-security//g" + REPLACES=$REPLACES";s/-fdiagnostics-show-template-tree//g" + REPLACES=$REPLACES";s/-D_FORTIFY_SOURCE=2//g" + REPLACES=$REPLACES";s/-fuse-ld=\S*/-fuse-ld=gold/g" + find . -name "*.ninja" | xargs sed $REPLACES -i + + # If using the clang toolchain: use the clang host-side binaries built by Bitbake + if [ "${TOOLCHAIN}" = "clang" ]; then + BB_CLANGXX="${RECIPE_SYSROOT_NATIVE}/usr/bin/clang++" + BB_CLANG="${RECIPE_SYSROOT_NATIVE}/usr/bin/clang" + BB_LLVM_OBJCOPY="${RECIPE_SYSROOT_NATIVE}/usr/bin/llvm-objcopy" + cd gcc_like_host + REPLACES="s:\S*clang++ :$BB_CLANGXX :g" + REPLACES=$REPLACES";s:\S*clang :$BB_CLANG :g" + REPLACES=$REPLACES";s:\S*llvm-objcopy :$BB_LLVM_OBJCOPY :g" + find . -name "*.ninja" | xargs sed "$REPLACES" -i + cd .. + fi + + # Done processing the Ninja files +} + +# Perfetto generates a few different binaries, such as traced and traced_probes and perfetto. +# The "tracebox" is a busybox that combines the 3 above and provides a single stop for doing the trace capture work, so we only build "tracebox" here. +do_compile () { + cd ${B} + ninja -C . tracebox +} + +do_install () { + BIN_DIR=${D}${bindir} + + install -d -m0755 $BIN_DIR + install ${B}/stripped/tracebox $BIN_DIR/tracebox +}