1975a06f9SPatrick WilliamsLICENSE = "Apache-2.0 & BSD-3-Clause & MIT & Zlib" 2975a06f9SPatrick Williams 3*8460358cSPatrick WilliamsLIC_FILES_CHKSUM = "file://LICENSE;md5=d2572d98547d43906b53615f856a8c2d \ 4975a06f9SPatrick Williams file://buildtools/libcxx/LICENSE.TXT;md5=55d89dd7eec8d3b4204b680e27da3953 \ 5975a06f9SPatrick Williams file://buildtools/libcxxabi/LICENSE.TXT;md5=7b9334635b542c56868400a46b272b1e \ 6975a06f9SPatrick Williams file://buildtools/libunwind/LICENSE.TXT;md5=f66970035d12f196030658b11725e1a1 \ 7975a06f9SPatrick Williams file://buildtools/protobuf/LICENSE;md5=37b5762e07f0af8c74ce80a8bda4266b \ 8*8460358cSPatrick Williams file://buildtools/zlib/LICENSE;md5=8c75f2b4df47a77f9445315a9500cd1c \ 9975a06f9SPatrick Williams file://debian/copyright;md5=4e08364c82141f181de69d0a2b89d612 \ 10975a06f9SPatrick Williams file://python/LICENSE;md5=c602a632c34ade9c78a976734077bce7" 11975a06f9SPatrick Williams 12*8460358cSPatrick Williams# Dependencies from perfetto/tools/install-build-deps 132390b1b6SPatrick WilliamsSRC_URI:append = " \ 14*8460358cSPatrick Williams git://github.com/protocolbuffers/protobuf.git;branch=main;protocol=https;destsuffix=git/buildtools/protobuf;name=protobuf \ 15975a06f9SPatrick Williams git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git;protocol=https;destsuffix=git/buildtools/libcxx;branch=main;name=libcxx \ 16975a06f9SPatrick Williams git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git;protocol=https;destsuffix=git/buildtools/libcxxabi;branch=main;name=libcxxabi \ 17975a06f9SPatrick Williams git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git;protocol=https;destsuffix=git/buildtools/libunwind;branch=main;name=libunwind \ 18864cc43bSPatrick Williams git://android.googlesource.com/platform/system/libbase.git;branch=master;protocol=https;destsuffix=git/buildtools/android-libbase;name=libbase \ 19864cc43bSPatrick Williams git://android.googlesource.com/platform/system/unwinding.git;branch=master;protocol=https;destsuffix=git/buildtools/android-unwinding;name=unwinding \ 20864cc43bSPatrick Williams git://android.googlesource.com/platform/system/logging.git;branch=master;protocol=https;destsuffix=git/buildtools/android-logging;name=logging \ 21864cc43bSPatrick Williams git://android.googlesource.com/platform/system/libprocinfo.git;branch=master;protocol=https;destsuffix=git/buildtools/android-libprocinfo;name=libprocinfo \ 22864cc43bSPatrick Williams git://android.googlesource.com/platform/system/core.git;branch=master;protocol=https;destsuffix=git/buildtools/android-core;name=core \ 23864cc43bSPatrick Williams git://android.googlesource.com/platform/bionic.git;branch=master;protocol=https;destsuffix=git/buildtools/bionic;name=bionic \ 24975a06f9SPatrick Williams git://android.googlesource.com/platform/external/zlib.git;branch=master;protocol=https;destsuffix=git/buildtools/zlib;name=zlib \ 25864cc43bSPatrick Williams git://android.googlesource.com/platform/external/lzma.git;branch=master;protocol=https;destsuffix=git/buildtools/lzma;name=lzma \ 26*8460358cSPatrick Williams git://android.googlesource.com/platform/external/zstd.git;branch=master;protocol=https;destsuffix=git/buildtools/zstd;name=zstd \ 27975a06f9SPatrick Williams https://storage.googleapis.com/perfetto/gn-linux64-1968-0725d782;subdir=git/buildtools/;name=gn \ 28864cc43bSPatrick Williams \ 29864cc43bSPatrick Williams file://0001-Remove-check_build_deps-build-steps.patch \ 30*8460358cSPatrick Williams file://0002-traced-fix-missing-include.patch \ 31*8460358cSPatrick Williams " 32975a06f9SPatrick Williams 33*8460358cSPatrick WilliamsSRCREV_bionic = "a0d0355105cb9d4a4b5384897448676133d7b8e2" 34864cc43bSPatrick WilliamsSRCREV_core = "9e6cef7f07d8c11b3ea820938aeb7ff2e9dbaa52" 35864cc43bSPatrick WilliamsSRCREV_lzma = "7851dce6f4ca17f5caa1c93a4e0a45686b1d56c3" 36864cc43bSPatrick WilliamsSRCREV_libprocinfo = "fd214c13ededecae97a3b15b5fccc8925a749a84" 37864cc43bSPatrick WilliamsSRCREV_logging = "7b36b566c9113fc703d68f76e8f40c0c2432481c" 38*8460358cSPatrick WilliamsSRCREV_unwinding = "4b59ea8471e89d01300481a92de3230b79b6d7c7" 39*8460358cSPatrick WilliamsSRCREV_protobuf = "f0dc78d7e6e331b8c6bb2d5283e06aa26883ca7c" 40864cc43bSPatrick WilliamsSRCREV_libbase = "78f1c2f83e625bdf66d55b48bdb3a301c20d2fb3" 41*8460358cSPatrick WilliamsSRCREV_libcxx = "852bc6746f45add53fec19f3a29280e69e358d44" 42*8460358cSPatrick WilliamsSRCREV_libcxxabi = "a37a3aa431f132b02a58656f13984d51098330a2" 43*8460358cSPatrick WilliamsSRCREV_libunwind = "419b03c0b8f20d6da9ddcb0d661a94a97cdd7dad" 44*8460358cSPatrick WilliamsSRCREV_zlib = "6d3f6aa0f87c9791ca7724c279ef61384f331dfd" 45*8460358cSPatrick WilliamsSRCREV_zstd = "77211fcc5e08c781734a386402ada93d0d18d093" 465082cc7fSAndrew Geissler 47*8460358cSPatrick WilliamsSRCREV_FORMAT .="_bionic_core_lzma_libprocinfo_logging_unwinding_protobuf_libbase_libcxx_libcxxabi_libunwind_zlib_zstd" 485082cc7fSAndrew Geissler 49975a06f9SPatrick WilliamsSRC_URI[gn.sha256sum] = "f706aaa0676e3e22f5fc9ca482295d7caee8535d1869f99efa2358177b64f5cd" 50975a06f9SPatrick Williams 512390b1b6SPatrick Williamsrequire perfetto.inc 522390b1b6SPatrick Williams 53975a06f9SPatrick WilliamsDEPENDS += " ninja-native" 54975a06f9SPatrick Williams 55975a06f9SPatrick WilliamsCOMPATIBLE_HOST = "(i.86|x86_64|aarch64|arm).*-linux*" 56975a06f9SPatrick Williams 57864cc43bSPatrick WilliamsCCACHE_DISABLE = "1" 58864cc43bSPatrick Williams 59864cc43bSPatrick Williams# Some musl hacks gets through compiling it for musl 60864cc43bSPatrick Williams# Nullifying -DTEMP_FAILURE_RETRY might be grossest of them 61864cc43bSPatrick WilliamsTUNE_CCARGS:append:libc-musl = " -D_LIBCPP_HAS_MUSL_LIBC -Dgetprogname\(\)=program_invocation_name -DTEMP_FAILURE_RETRY=" 62975a06f9SPatrick WilliamsFILES:${PN}:append = " \ 63975a06f9SPatrick Williams ${bindir}/tracebox \ 64975a06f9SPatrick Williams " 65975a06f9SPatrick Williams 66975a06f9SPatrick WilliamsB = "${WORKDIR}/build" 67975a06f9SPatrick Williams 68975a06f9SPatrick Williams# Run the GN (Generate Ninja) script, and replace the compiler flags where applicable 69975a06f9SPatrick Williamsdo_configure () { 70975a06f9SPatrick Williams # Configuration needs to be done from the source directory 71975a06f9SPatrick Williams cd ${S} 72975a06f9SPatrick Williams # Rename a few build tools if they have not been renamed 73975a06f9SPatrick Williams cd buildtools 74975a06f9SPatrick Williams x="gn-linux64-1968-0725d782" 75975a06f9SPatrick Williams [ -f $x ] && mkdir linux64 && mv $x linux64/gn 76975a06f9SPatrick Williams chmod +x linux64/gn 77975a06f9SPatrick Williams cd .. 78975a06f9SPatrick Williams 79975a06f9SPatrick Williams CC_BIN=`echo $CC | awk '{print $1}'` 80975a06f9SPatrick Williams CXX_BIN=`echo $CXX | awk '{print $1}'` 81975a06f9SPatrick Williams STRIP_BIN=`echo $STRIP | awk '{print $1}'` 82975a06f9SPatrick Williams 83975a06f9SPatrick Williams ARGS="is_debug=false " # Tell gn to use release mode 84975a06f9SPatrick Williams 85975a06f9SPatrick Williams if [ -z `echo ${TOOLCHAIN} | grep clang` ]; then 86975a06f9SPatrick Williams ARGS=$ARGS" is_clang=false" 87975a06f9SPatrick Williams else 88975a06f9SPatrick Williams ARGS=$ARGS" is_clang=true" 89975a06f9SPatrick Williams fi 90975a06f9SPatrick Williams 91975a06f9SPatrick Williams # Architecture parameter accepted by Perfetto 92975a06f9SPatrick Williams arch=${TARGET_ARCH} 93975a06f9SPatrick Williams if [ $arch = "i686" ]; then 94975a06f9SPatrick Williams arch="x86" 95975a06f9SPatrick Williams elif [ $arch = "x86_64" ]; then 96975a06f9SPatrick Williams arch="x64" 97975a06f9SPatrick Williams elif [ $arch = "aarch64" ]; then 98975a06f9SPatrick Williams arch="arm64" 99975a06f9SPatrick Williams fi 100975a06f9SPatrick Williams 101975a06f9SPatrick Williams ARGS=$ARGS" target_os=\"linux\"" 102975a06f9SPatrick Williams ARGS=$ARGS" target_cpu=\"$arch\"" 103*8460358cSPatrick Williams ARGS=$ARGS" target_cc=\"$CC_BIN ${TUNE_CCARGS} ${DEBUG_PREFIX_MAP}\"" 104*8460358cSPatrick Williams ARGS=$ARGS" target_cxx=\"$CXX_BIN ${TUNE_CCARGS} ${DEBUG_PREFIX_MAP}\"" 105975a06f9SPatrick Williams ARGS=$ARGS" target_strip=\"$STRIP_BIN\"" # 106975a06f9SPatrick Williams ARGS=$ARGS" target_sysroot=\"${RECIPE_SYSROOT}\"" 107517393d9SAndrew Geissler ARGS=$ARGS" target_linker=\"$CC_BIN ${TUNE_CCARGS} ${LDFLAGS}\"" 108975a06f9SPatrick Williams ARGS=$ARGS" target_ar=\"$AR\"" 109975a06f9SPatrick Williams ARGS="'$ARGS'" 110975a06f9SPatrick Williams cmd="tools/gn gen --args=$ARGS ${B}" 111975a06f9SPatrick Williams 112975a06f9SPatrick Williams echo $cmd 113975a06f9SPatrick Williams # Use eval, not just call $cmd, due to escaping of single quotation marks 114975a06f9SPatrick Williams eval $cmd 115975a06f9SPatrick Williams 116975a06f9SPatrick Williams cd ${B} 117975a06f9SPatrick Williams # Eliminate a few incompatible build flags 118975a06f9SPatrick Williams REPLACES="s/-Wl,--icf=all//g" 119975a06f9SPatrick Williams REPLACES=$REPLACES";s/-Werror//g" 120975a06f9SPatrick Williams REPLACES=$REPLACES";s/-fcolor-diagnostics//g" 121975a06f9SPatrick Williams REPLACES=$REPLACES";s/=format-security//g" 122975a06f9SPatrick Williams REPLACES=$REPLACES";s/-fdiagnostics-show-template-tree//g" 123975a06f9SPatrick Williams REPLACES=$REPLACES";s/-D_FORTIFY_SOURCE=2//g" 124975a06f9SPatrick Williams REPLACES=$REPLACES";s/-fuse-ld=\S*//g" 125975a06f9SPatrick Williams 126975a06f9SPatrick Williams find . -name "*.ninja" | xargs sed $REPLACES -i 127975a06f9SPatrick Williams 128975a06f9SPatrick Williams # If using the clang toolchain: use the clang host-side binaries built by Bitbake 129975a06f9SPatrick Williams if [ "${TOOLCHAIN}" = "clang" ]; then 130517393d9SAndrew Geissler BB_CLANGXX="${BUILD_CXX} ${BUILD_LDFLAGS}" 131517393d9SAndrew Geissler BB_CLANG="${BUILD_CC}" 132975a06f9SPatrick Williams BB_LLVM_OBJCOPY="${RECIPE_SYSROOT_NATIVE}/usr/bin/llvm-objcopy" 133975a06f9SPatrick Williams 134517393d9SAndrew Geissler HOST_CLANGXX="${STAGING_DIR_NATIVE}/usr/bin/clang++ -stdlib=libc++ -rtlib=libgcc -unwindlib=libgcc" 135517393d9SAndrew Geissler HOST_CLANG="${STAGING_DIR_NATIVE}/usr/bin/clang" 136975a06f9SPatrick Williams HOST_LLVM_OBJCOPY="${STAGING_DIR_NATIVE}/usr/bin/llvm-objcopy" 137975a06f9SPatrick Williams 138975a06f9SPatrick Williams cd gcc_like_host 139975a06f9SPatrick Williams REPLACES="s:\S*clang++ :$HOST_CLANGXX :g" 140975a06f9SPatrick Williams REPLACES=$REPLACES";s:\S*clang :$HOST_CLANG :g" 141975a06f9SPatrick Williams REPLACES=$REPLACES";s:\S*llvm-objcopy :$HOST_LLVM_OBJCOPY :g" 142975a06f9SPatrick Williams find . -name "*.ninja" | xargs sed "$REPLACES" -i 143975a06f9SPatrick Williams cd .. 144975a06f9SPatrick Williams fi 145975a06f9SPatrick Williams # Done processing the Ninja files 146975a06f9SPatrick Williams} 147975a06f9SPatrick Williams 148975a06f9SPatrick Williams# Perfetto generates a few different binaries, such as traced and traced_probes and perfetto. 149975a06f9SPatrick Williams# The "tracebox" is a busybox that combines the 3 above and provides a single stop for trace capture, so we only build "tracebox" here. 150975a06f9SPatrick Williamsdo_compile () { 151975a06f9SPatrick Williams cd ${B} 152975a06f9SPatrick Williams ninja -C . tracebox 153975a06f9SPatrick Williams} 154975a06f9SPatrick Williams 155975a06f9SPatrick Williamsdo_install () { 156975a06f9SPatrick Williams BIN_DIR=${D}${bindir} 157975a06f9SPatrick Williams 158975a06f9SPatrick Williams install -d -m0755 $BIN_DIR 159975a06f9SPatrick Williams install ${B}/tracebox $BIN_DIR/tracebox 160975a06f9SPatrick Williams} 161