mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-08-18 11:11:30 +00:00
With the current recipe I am getting ``` gn: error while loading shared libraries: libc++abi.so.1: cannot open shared object file: No such file or directory ``` on my aarch64 machine This is due to gn having a relative library runpath causing the interpreter not finding the shared libraries Instead of copying the binary just directly execute it Additionally remove the unnecessary download of the prebuilt gn binary Signed-off-by: Willi Ye <zye2@snap.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
154 lines
7.7 KiB
BlitzBasic
154 lines
7.7 KiB
BlitzBasic
LICENSE = "Apache-2.0 & BSD-3-Clause & MIT & Zlib"
|
|
|
|
LIC_FILES_CHKSUM = "file://LICENSE;md5=c0c9924c5c63b4834b8b1959816c8e3b \
|
|
file://buildtools/libcxx/LICENSE.TXT;md5=55d89dd7eec8d3b4204b680e27da3953 \
|
|
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=8c75f2b4df47a77f9445315a9500cd1c \
|
|
file://debian/copyright;md5=55b18749ff89714316c007d06f305c4a \
|
|
file://python/LICENSE;md5=c602a632c34ade9c78a976734077bce7"
|
|
|
|
# Dependencies from perfetto/tools/install-build-deps
|
|
SRC_URI:append = " \
|
|
git://github.com/protocolbuffers/protobuf.git;branch=main;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/protobuf;name=protobuf \
|
|
git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/libcxx;branch=main;name=libcxx \
|
|
git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/libcxxabi;branch=main;name=libcxxabi \
|
|
git://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/libunwind;branch=main;name=libunwind \
|
|
git://android.googlesource.com/platform/system/libbase.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/android-libbase;name=libbase \
|
|
git://android.googlesource.com/platform/system/unwinding.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/android-unwinding;name=unwinding \
|
|
git://android.googlesource.com/platform/system/logging.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/android-logging;name=logging \
|
|
git://android.googlesource.com/platform/system/libprocinfo.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/android-libprocinfo;name=libprocinfo \
|
|
git://android.googlesource.com/platform/system/core.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/android-core;name=core \
|
|
git://android.googlesource.com/platform/bionic.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/bionic;name=bionic \
|
|
git://chromium.googlesource.com/chromium/src/third_party/zlib.git;nobranch=1;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/zlib;name=zlib \
|
|
git://android.googlesource.com/platform/external/lzma.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/lzma;name=lzma \
|
|
git://android.googlesource.com/platform/external/zstd.git;branch=master;protocol=https;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/buildtools/zstd;name=zstd \
|
|
\
|
|
file://0001-Remove-check_build_deps-build-steps.patch \
|
|
"
|
|
|
|
SRCREV_bionic = "a0d0355105cb9d4a4b5384897448676133d7b8e2"
|
|
SRCREV_core = "9e6cef7f07d8c11b3ea820938aeb7ff2e9dbaa52"
|
|
SRCREV_lzma = "7851dce6f4ca17f5caa1c93a4e0a45686b1d56c3"
|
|
SRCREV_libprocinfo = "fd214c13ededecae97a3b15b5fccc8925a749a84"
|
|
SRCREV_logging = "7b36b566c9113fc703d68f76e8f40c0c2432481c"
|
|
SRCREV_unwinding = "4b59ea8471e89d01300481a92de3230b79b6d7c7"
|
|
SRCREV_protobuf = "f0dc78d7e6e331b8c6bb2d5283e06aa26883ca7c"
|
|
SRCREV_libbase = "78f1c2f83e625bdf66d55b48bdb3a301c20d2fb3"
|
|
SRCREV_libcxx = "852bc6746f45add53fec19f3a29280e69e358d44"
|
|
SRCREV_libcxxabi = "a37a3aa431f132b02a58656f13984d51098330a2"
|
|
SRCREV_libunwind = "419b03c0b8f20d6da9ddcb0d661a94a97cdd7dad"
|
|
SRCREV_zlib = "6f9b4e61924021237d474569027cfb8ac7933ee6"
|
|
SRCREV_zstd = "77211fcc5e08c781734a386402ada93d0d18d093"
|
|
|
|
SRCREV_FORMAT .= "_bionic_core_lzma_libprocinfo_logging_unwinding_protobuf_libbase_libcxx_libcxxabi_libunwind_zlib_zstd"
|
|
|
|
require perfetto.inc
|
|
|
|
DEPENDS += " ninja-native gn-native"
|
|
|
|
# Use clang in order to enable traced_perf ( see https://github.com/google/perfetto/blob/092d0ceace6fa516fac1bd4e715c226eaaebe26e/gn/perfetto.gni#L177 ,
|
|
# enable_perfetto_traced_perf depends on "is_clang")
|
|
TOOLCHAIN = "clang"
|
|
COMPATIBLE_HOST = "(i.86|x86_64|aarch64|arm).*-linux*"
|
|
|
|
CCACHE_DISABLE = "1"
|
|
|
|
# Some musl hacks gets through compiling it for musl
|
|
# Nullifying -DTEMP_FAILURE_RETRY might be grossest of them
|
|
TUNE_CCARGS:append:libc-musl = " -D_LIBCPP_HAS_MUSL_LIBC -Dgetprogname\(\)=program_invocation_name -DTEMP_FAILURE_RETRY="
|
|
FILES:${PN}:append = " \
|
|
${bindir}/tracebox \
|
|
"
|
|
|
|
B = "${WORKDIR}/build"
|
|
|
|
# Run the GN (Generate Ninja) script, and replace the compiler flags where applicable
|
|
do_configure () {
|
|
# Configuration needs to be done from the source directory
|
|
cd ${S}
|
|
|
|
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
|
|
|
|
# Architecture parameter accepted by Perfetto
|
|
arch=${TARGET_ARCH}
|
|
if [ $arch = "i686" ]; then
|
|
arch="x86"
|
|
elif [ $arch = "x86_64" ]; then
|
|
arch="x64"
|
|
elif [ $arch = "aarch64" ]; then
|
|
arch="arm64"
|
|
fi
|
|
|
|
ARGS=$ARGS" target_os=\"linux\""
|
|
ARGS=$ARGS" target_cpu=\"$arch\""
|
|
ARGS=$ARGS" target_cc=\"$CC_BIN ${TUNE_CCARGS} ${DEBUG_PREFIX_MAP}\""
|
|
ARGS=$ARGS" target_cxx=\"$CXX_BIN ${TUNE_CCARGS} ${DEBUG_PREFIX_MAP}\""
|
|
ARGS=$ARGS" target_strip=\"$STRIP_BIN\"" #
|
|
ARGS=$ARGS" target_sysroot=\"${RECIPE_SYSROOT}\""
|
|
ARGS=$ARGS" target_linker=\"$CC_BIN ${TUNE_CCARGS} ${LDFLAGS}\""
|
|
ARGS=$ARGS" target_ar=\"$AR\""
|
|
ARGS="'$ARGS'"
|
|
cmd="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/-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*//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="${BUILD_CXX} ${BUILD_LDFLAGS}"
|
|
BB_CLANG="${BUILD_CC}"
|
|
BB_LLVM_OBJCOPY="${RECIPE_SYSROOT_NATIVE}/usr/bin/llvm-objcopy"
|
|
|
|
HOST_CLANGXX="${STAGING_DIR_NATIVE}/usr/bin/clang++ -stdlib=libc++ -rtlib=libgcc -unwindlib=libgcc"
|
|
HOST_CLANG="${STAGING_DIR_NATIVE}/usr/bin/clang"
|
|
HOST_LLVM_OBJCOPY="${STAGING_DIR_NATIVE}/usr/bin/llvm-objcopy"
|
|
|
|
cd gcc_like_host
|
|
REPLACES="s:\S*clang++ :$HOST_CLANGXX :g"
|
|
REPLACES=$REPLACES";s:\S*clang :$HOST_CLANG :g"
|
|
REPLACES=$REPLACES";s:\S*llvm-objcopy :$HOST_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 trace capture, 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}/tracebox $BIN_DIR/tracebox
|
|
}
|