summaryrefslogtreecommitdiff
path: root/poky/scripts/lib/devtool/ide_sdk.py
diff options
context:
space:
mode:
authorPatrick Williams <patrick@stwcx.xyz>2024-02-20 17:07:48 +0300
committerPatrick Williams <patrick@stwcx.xyz>2024-03-01 00:30:06 +0300
commit73bd93f1d0a338767f36fd1acb54c52ad057db39 (patch)
treef5c80db4a466b90aacce702b852945785bdd51a3 /poky/scripts/lib/devtool/ide_sdk.py
parentf5510eca70b356348a25198e2d9c38039f68365b (diff)
downloadopenbmc-73bd93f1d0a338767f36fd1acb54c52ad057db39.tar.xz
subtree updates
poky: 348d9aba33..fc8e5d7c13: Adithya Balakumar (1): wic: implement reproducible Disk GUID Adrian Freihofer (20): cmake.bbclass: use --install devtool: support plugins with plugins devtool: refactor exec_fakeroot devtool: refactor deploy to use exec_fakeroot_no_d devtool: refactor deploy-target recipetool: cleanup imports oeqa: replace deprecated assertEquals oeqa/selftest/recipetool: fix for python 3.12 oeqa/selftest/oelib/buildhistory: git default branch scripts: python 3.12 regex feature-microblaze-versions.inc: python 3.12 regex meta/lib/oeqa: python 3.12 regex meta/lib/patchtest: python 3.12 regex meta/recipes: python 3.12 regex bitbake: bitbake/lib/bs4/tests/test_tree.py: python 3.12 regex devtool: new ide-sdk plugin oe-selftest devtool: ide-sdk tests devtool: ide-sdk make deploy-target quicker vscode: drop .vscode folder oe-init-build-env: generate .vscode from template Aleksey Smirnov (2): conf/machine: Add Power8 tune to PowerPC architecture busybox: Explicitly specify tty device for serial consoles Alex Kiernan (1): wireless-regdb: Upgrade 2023.09.01 -> 2024.01.23 Alex Stewart (3): opkg: upgrade to 0.6.3 opkg: add deprecation warning for internal solver opkg-arch-config: update recipe HOMEPAGE Alexander Kanavin (26): sysroot user management postinsts: run with /bin/sh -e to report errors when they happen classes/multilib: expand PACKAGE_WRITE_DEPS in addition to DEPENDS classes/staging: capture output of sysroot postinsts into logs classes/package_rpm: write file permissions and ownership explicitly into .spec classes/package_rpm: use weak user/group dependencies classes/package_rpm: set bogus locations for passwd/group files oeqa/runtime/rpm: fail tests if test rpm file cannot be found rpm: update 4.18.1 -> 4.19.1 classes/package_rpm: correctly escape percent characters setftest/cdn tests: check for exceptions also in fetcher diagnostics rpm: override curl executable search with just 'curl' classes/package_rpm: additionally escape \ and " in filenames classes/package_rpm: streamline the logic in one of the condition blocks lzlib: add a recipe file: enable additional internal compressor support selftest/SStateCacheManagement: do not manipulate ERROR_QA selftest/SStateCacheManagement: pre-populate the cache shadow: add a packageconfig for logind support meta/conf/templates/default/conf-notes.txt: remove scripts/oe-setup-layers: write a list of layer paths into the checkout's top dir meta/conf/templates/default/conf-summary.txt: add a template summary meta/lib/bblayers/buildconf.py: add support for configuration summaries scripts/oe-setup-builddir: add support for configuration summaries oe-setup-build: add a tool for discovering config templates and setting up builds meta-poky/conf/templates/default/conf-summary.txt: add a template summary bitbake: Revert "bitbake: wget.py: always use the custom user agent" Alexis Lothoré (3): patchtest-send-results: remove unused variable patchtest-send-results: properly parse test status testimage: retrieve ptests directory when ptests fail André Draszik (4): sstate-cache-management: fix regex for 'sigdata' stamp files bitbake: fetch/git2: support git's safe.bareRepository bitbake: tests/fetch: support git's safe.bareRepository bitbake: git-make-shallow: support git's safe.bareRepository Anibal Limon (1): ptest-runner: Bump to 2.4.3 (92c1b97) Anuj Mittal (8): enchant2: upgrade 2.6.5 -> 2.6.7 libproxy: upgrade 0.5.3 -> 0.5.4 sqlite3: upgrade 3.44.2 -> 3.45.1 orc: upgrade 0.4.36 -> 0.4.37 stress-ng: upgrade 0.17.04 -> 0.17.05 libcap-ng: fix build with swig 4.2.0 gstreamer1.0: upgrade 1.22.9 -> 1.22.10 swig: upgrade 4.1.1 -> 4.2.0 Bruce Ashfield (13): lttng-modules: fix v6.8+ build linux-yocto-dev: update to v6.8 linux-yocto/6.6: features/qat/qat.cfg: enable CONFIG_PCIEAER linux-yocto/6.6: beaglebone: drop nonassignable kernel options linux-yocto/6.6: update to v6.6.13 linux-yocto/6.6: update CVE exclusions linux-yocto/6.6: can: drop obsolete CONFIG_PCH_CAN linux-yocto/6.6: update to v6.6.15 linux-yocto/6.6: update CVE exclusions yocto-bsp: update reference boards to v6.6.15 linux-yocto/6.6: update to v6.6.16 linux-yocto/6.6: update CVE exclusions linux-yocto/6.6: qemuriscv: enable goldfish RTC Chen Qi (5): multilib_global.bbclass: fix parsing error with no kernel module split gnupg: disable tests to avoid running target binaries at build time bitbake: fetch2/git.py: fix a corner case in try_premirror bitbake: tests/fetch.py: add test case for using premirror in restricted network bitbake: fetch2/git.py: add comment in try_premirrors Chi Xu (1): xz: Add ptest support Claus Stovgaard (2): kernel-devsrc: fix RDEPENDS for make kernel-devsrc: RDEPENDS on gawk Clément Péron (1): libpcap: extend with nativesdk Colin McAllister (1): initscripts: Add custom mount args for /var/lib David Reyna (1): bitbake: taskexp_ncurses: ncurses version of taskexp.py Denys Dmytriyenko (3): lttng-modules: upgrade 2.13.10 -> 2.13.11 zlib: upgrade 1.3 -> 1.3.1 xz: upgrade 5.4.5 -> 5.4.6 Enguerrand de Ribaucourt (3): devtool: ide_sdk: Use bitbake's python3 for generated scripts devtool: ide: vscode: Configure read-only files meson: use absolute cross-compiler paths Enrico Jörns (1): rootfs-postcommands: remove make_zimage_symlink_relative() Etienne Cordonnier (1): dropbear: remove unnecessary line Fabien Mahot (1): ldconfig-native: Fix to point correctly on the DT_NEEDED entries in an ELF file Fabio Estevam (3): piglit: Update to latest revision mesa: Upgrade 23.3.3 -> 23.3.4 mesa: Upgrade 23.3.4 -> 23.3.5 Jamin Lin (3): uboot-sign: set load address and entrypoint uboot-sign: Fix to install nonexistent dtb file u-boot-sign:uboot-config: support to verify signed FIT image Jermain Horsman (2): bitbake-layers: Add ability to update the reference of repositories bitbake-layers: Add test case layers setup for custom references Joe Slater (1): eudev: allow for predictable network interface names Johannes Schneider (2): initramfs-framework: overlayroot: fix kernel commandline clash initramfs-framework: overlayroot: align bootparams with module name Jon Mason (2): tunes/sve: Add support for sve2 instructions arm/armv*: add all the Arm tunes in GCC 13.2.0 Jonathan GUILLOT (3): lib/oe/package: replace in place PN-locale-* packages in PACKAGES lib/oe/package: add LOCALE_PATHS to add define all locations for locales cups: use LOCALE_PATHS to split localized HTML templates Jose Quaresma (3): go: update 1.20.12 -> 1.20.13 systemd: pack pre-defined pcrlock files installed with tpm2 qemu: disbale AF_XDP network backend support Joshua Watt (8): bitbake: hashserv: Add Unihash Garbage Collection bitbake: hashserv: sqlalchemy: Use _execute() helper bitbake: hashserv: Add unihash-exists API bitbake: asyncrpc: Add Client Pool object bitbake: hashserv: Add Client Pool bitbake: siggen: Add parallel query API bitbake: siggen: Add parallel unihash exist API sstatesig: Implement new siggen API Kai Kang (2): rpm: fix dependency for package config imaevm ghostscript: correct LICENSE with AGPLv3 Khem Raj (27): elfutils: Fix build with gcc trunk python3: Initialize struct termios before calling tcgetattr() qemu: Replace the basename patch with backport xwayland: Upgrade 23.2.3 -> 23.2.4 armv8/armv9: Avoid using -march when -mcpu is chosen kexec-tools: Fix build with gas 2.42 systemtap: Backport GCC-14 related calloc fixes sdk/assimp.py: Fix build on 32bit arches with 64bit time_t binutils: Upgrade to binutils 2.42 qemu-native: Use inherit_defer for including native class syslinux: Disable error on implicit-function-declaration glibc: Upgrade to 2.39 strace: Upgrade to 6.7 rust/cargo: Build fixes to rust for rv32 target buildcpio.py: Switch to using cpio-2.15 ptest.bbclass: Handle the case when Makefile does not exist in do_install_ptest_base kernel-devsrc: Add needed fixes for 6.1+ kernel build on target on RISCV python3: Fix ptests with expat 2.6+ expat: Upgrade to 2.6.0 gcc-runtime: Move gdb pretty printer file to auto-load location core-image-ptest: Increase disk size to 1.5G for strace ptest image tcmode-default: Do not define LLVMVERSION glibc: Update to latest on 2.39 glibc: Update to bring mips32/clone3 fix piglit: Fix build with musl llvm: Upgrade to LLVM-18 RC2 binutils: Update to tip of 2.42 release branch Konrad Weihmann (1): python3-yamllint: add missing dependency Lee Chee Yang (1): migration-guide: add release notes for 4.0.16 Maanya Goenka (2): toolchain-shar-relocate: allow 'find' access to libraries in symlinked directories bash: nativesdk-bash does not provide /bin/bash so don't claim to Marek Vasut (1): Revert "lzop: remove recipe from oe-core" Mark Hatle (5): qemu: Allow native and nativesdk versions on Linux older then 4.17 tune-cortexa78.inc: Add cortexa78 tune, based on cortexa77 feature-arm-vfp.inc: Allow hard-float on newer simd targets tune-cortexr5: Add hard-float variant tune-cortexr52: Add hard-float variant Markus Volk (6): gtk4: update 4.12.4 -> 4.12.5 mesa: update 23.3.5 -> 24.0.0 mesa: update 24.0.0 -> 24.0.1 libadwaita: update 1.4.2 -> 1.4.3 wayland-protocols: update 1.32 -> 1.33 ell: update 0.61 -> 0.62 Martin Jansa (5): qemu: fix target build with ccache enabled package_manager: ipk: add OPKG_MAKE_INDEX_EXTRA_PARAMS variable package_rpm: add RPMBUILD_EXTRA_PARAMS variable bitbake: bitbake-diffsigs: fix walking the task dependencies and show better error bitbake: tests: fetch.py: use real subversion repository Michael Opdenacker (9): dev-manual: start: remove idle line docs: remove support for mickledore (4.2) release release-notes-4.3: fix spacing alsa-lib: upgrade 1.2.10 -> 1.2.11 alsa-tools: upgrade 1.2.5 -> 1.2.11 alsa-ucm-conf: upgrade 1.2.10 -> 1.2.11 alsa-utils: upgrade 1.2.10 -> 1.2.11 oeqa/runtime/cases: fix typo in information message bitbake: doc: README: simpler link to contributor guide Michal Sieron (1): sanity.bbclass: raise_sanity_error if /tmp is noexec Nick Owens (1): systemd: recommend libelf, libdw for elfutils flag Ola x Nilsson (1): python3-numpy: Use Large File Support version of fallocate Paul Gortmaker (1): bitbake: hashserv: improve the loglevel error message to be more helpful Pavel Zhukov (3): systemd.bbclass: Check for existence of the symlink too bitbake: fetch2/git.py: Fetch mirror into HEAD bitbake: tests/fetch.py: add multiple fetches test Peter Kjellerstedt (12): devtool: modify: Correct appending of type=git-dependency to URIs devtool: standard: Add some missing whitespace devtool: _extract_source: Correct the removal of an old backup directory bitbake: tests/fetch: Make test_git_latest_versionstring support a max version bitbake: fetch2/git: A bit of clean-up of latest_versionstring() bitbake: fetch2/git: Make latest_versionstring extract tags with slashes correctly lib/oe/patch: Make extractPatches() not extract ignored commits lib/oe/patch: Add GitApplyTree.commitIgnored() devtool: Make use of oe.patch.GitApplyTree.commitIgnored() patch.bbclass: Make use of oe.patch.GitApplyTree.commitIgnored() lib/oe/patch: Use git notes to store the filenames for the patches insane.bbclass: Allow the warning about virtual/ to be disabled Peter Marko (2): openssl: Upgrade 3.2.0 -> 3.2.1 util-linux: add alternative link for scriptreplay Petr Vorel (1): ltp: Update to 20240129 Philip Lorenz (1): ipk: Remove temporary package lists during SDK creation Priyal Doshi (1): tzdata : Upgrade to 2024a Quentin Schulz (1): u-boot: add missing dependency on pyelftools-native Randolph Sapp (1): mirrors.bbclass: add infraroot as an https mirror Randy MacLeod (4): valgrind: make ptest depend on all components valgrind: update from 3.21.0 to 3.22.0 valgrind: skip 14 ptests in 3.22 valgrind: Skip 22 arm64 ptests Richard Purdie (34): oeqa/qemurunner: Handle rare shutdown race pseudo: Update to pull in gcc14 fix and missing statvfs64 intercept numactl: upgrade 2.0.16 -> 2.0.17 conf: Move selftest config to dedicated inc file oeqa/selftest/bbtests: Tweak to use no-gplv3 inc file python3-markupsafe: upgrade 2.1.3 -> 2.1.5 python3-markupsafe: Switch to python_setuptools_build_meta qemu: Upgrade 8.2.0 -> 8.2.1 ltp: Enable extra test groups ltp: Try re-enabling problematic test meta-yocto-bsp: Remove accidentally added files oeqa/runtime: Move files from oe-core to bsp layer mirrors: Allow shallow glibc to work correctly ptest-packagelists: Mark python3 as problematic on riscv64 kernel-devsrc: Clean up whitespace selftest/recipetool: Factor tomllib test to a function selftest/recipetool: Improve test failure output layer.conf: Update for the scarthgap release series layer.conf: Update for the scarthgap release series bitbake: process: Add profile logging for main loop bitbake: process/server: Fix typo kernel-arch: Simplify strip support insane: Clarify runtime/ warning bitbake: runqueue: Improve performance for executing tasks bitbake: runqueue: Optimise taskname lookups in next_buildable_task bitbake: runqueue: Improve setcene performance when encoutering many 'hard' dependencies openssh: Add a work around for ICE on mips/mips64 kernel-devsrc: Improve vdso-offsets handling for qemuriscv64 u-boot: Pass in prefix mapping variables to the compiler testsdk: Avoid PATH contamination oeqa/selftest/rust: Exclude failing riscv tests bitbake: bitbake: Bump version to 2.7.3 for hashserv changes sanity.conf: Require bitbake 2.7.3 python: Drop ${PYTHON_PN} Robert Joslyn (2): curl: Update to 8.6.0 gtk: Set CVE_PRODUCT Robert Yang (1): gnu-config: Update to latest version Ross Burton (13): grub2: ignore CVE-2023-4001, this is Red Hat-specific openssl: backport fix for CVE-2023-6129 lib/oeqa: rename assertRaisesRegexp to assertRaisesRegex oeqa/selftest/recipetool: downgrade meson version to not use pyproject.toml recipetool: don't dump stack traces if a toml parser can't be found xz: remove redundant PTEST_ENABLED conditional libpam: remove redundant PTEST_ENABLED conditional glib-2.0: backport memory monitor test fixes python3: move dataclasses to python3-core python3-unittest-automake-output: upgrade to 0.2 meson: remove TMPDIR workaround meson: set the sysroot in the cross files libffi: upgrade to 3.4.5 Simone Weiß (12): gnutls: Upgrade 3.8.2 -> 3.8.3 maintainers.inc: Add self for libseccomp and gnutls bsp-guide: correct formfactor recipe name dev-manual: gen-tapdevs need iptables installed gnutls: print log if ptest fails patchtest: log errors and failures at end grub2: ignore CVE-2024-1048, Redhat only issue libgit2: update 1.7.1 -> 1.7.2 libuv: Upgrade 1.47.0 -> 1.48.0 qemu: Set CVE_STATUS for wrong CVEs patchtest: Add selftest for test cve_check_ignore patchtest: add stronger indication for failed tests Siong W.LIM (1): useradd.bbclass: Fix missing space when appending vardeps. Thomas Perrot (2): opensbi: append LDFLAGS to TARGET_CC_ARCH bitbake: wget.py: always use the custom user agent Tim Orling (13): libxml-parser-perl: upgrade 2.46 -> 2.47 python3-pyyaml: add PACKAGECONFIG for libyaml python3-pyyaml: enable ptest python3-cryptography: upgrade 41.0.7 to 42.0.2 openssh: upgrade 9.5p1 -> 9.6p1 python3-poetry-core: upgrade 1.8.1 -> 1.9.0 python3-attrs: skip test failing with pytest-8 vim: upgrade from 9.0.2130 -> 9.1.0114 python3-pyproject-metadata: move from meta-python python3-pyproject-metadata: HOMEPAGE; DESCRIPTION python3-meson-python: move from meta-python python_mesonpy.bbclass: move from meta-python recipetool; add support for python_mesonpy class Tobias Hagelborn (2): sstate.bbclass: Only sign packages at the time of their creation bitbake: bitbake: hashserv: Postgres adaptations for ignoring duplicate inserts Toni Lammi (1): bitbake: support temporary AWS credentials Trevor Gamblin (7): patchtest.README: update mailing list cmake: upgrade 3.27.7 -> 3.28.3 python3-numpy: upgrade 1.26.3 -> 1.26.4 patchtest-send-results: Add 'References' header patchtest-send-results: use Message-ID directly patchtest: Fix grammar in log output patchtest-send-results: add --debug option Valek Andrej (1): glibc: Refresh CVE status w.r.t 2.39 release Vikas Katariya (1): bmap-tools: Add missing runtime dependency Wang Mingyu (36): at-spi2-core: upgrade 2.50.0 -> 2.50.1 cpio: upgrade 2.14 -> 2.15 ethtool: upgrade 6.6 -> 6.7 iso-codes: upgrade 4.15.0 -> 4.16.0 libinput: upgrade 1.24.0 -> 1.25.0 libtest-warnings-perl: upgrade 0.032 -> 0.033 libwpe: upgrade 1.14.1 -> 1.14.2 lzip: upgrade 1.23 -> 1.24 createrepo-c: upgrade 1.0.2 -> 1.0.3 diffstat: upgrade 1.65 -> 1.66 dos2unix: upgrade 7.5.1 -> 7.5.2 ed: upgrade 1.19 -> 1.20 gnupg: upgrade 2.4.3 -> 2.4.4 gstreamer: upgrade 1.22.8 -> 1.22.9 libidn2: upgrade 2.3.4 -> 2.3.7 libpng: upgrade 1.6.40 -> 1.6.41 libsolv: upgrade 0.7.27 -> 0.7.28 liburi-perl: upgrade 5.21 -> 5.25 nghttp2: upgrade 1.58.0 -> 1.59.0 repo: upgrade 2.40 -> 2.41 orc: upgrade 0.4.34 -> 0.4.36 pkgconf: upgrade 2.0.3 -> 2.1.0 python3-sphinxcontrib-applehelp: upgrade 1.0.7 -> 1.0.8 python3-sphinxcontrib-devhelp: upgrade 1.0.5 -> 1.0.6 python3-sphinxcontrib-htmlhelp: upgrade 2.0.4 -> 2.0.5 python3-sphinxcontrib-qthelp: upgrade 1.0.6 -> 1.0.7 python3-sphinxcontrib-serializinghtml: upgrade 1.1.9 -> 1.1.10 python3-beartype: upgrade 0.16.4 -> 0.17.0 python3-mako: upgrade 1.3.0 -> 1.3.2 python3-hatchling: upgrade 1.21.0 -> 1.21.1 python3-hypothesis: upgrade 6.92.9 -> 6.97.3 python3-pluggy: upgrade 1.3.0 -> 1.4.0 python3-psutil: upgrade 5.9.7 -> 5.9.8 python3-pyopenssl: upgrade 23.3.0 -> 24.0.0 python3-pytz: upgrade 2023.3 -> 2023.4 python3-pytest: upgrade 7.4.4 -> 8.0.0 Xiangyu Chen (1): bash: rebase the patch to fix ptest failure Yi Zhao (2): rpm: add missing dependencies for packageconfig libsdl2: upgrade 2.28.5 -> 2.30.0 Yoann Congal (2): kexec-tools: Replace a submitted patch by the backported one waf.bbclass: Print waf output on unparsable version Yogita Urade (1): tiff: fix CVE-2023-52355 and CVE-2023-52356 baruch@tkos.co.il (3): contributor-guide: fix lore URL overlayfs: add missing closing parenthesis in selftest overlayfs-etc: add option to skip creation of mount dirs meta-arm: 6bb1fc8d8c..025f76a14f: Ali Can Ozaslan (1): arm-bsp/u-boot:corstone1000: Fix deployment of capsule files Drew Reed (4): bsp: Move Corstone-1000 U-Boot configuration entries bsp: Move machine settings bsp,ci: Switch to poky distro bsp: Rename corstone1000-image Harsimran Singh Tungal (2): n1sdp:arm arm-bsp: fix tftf tests for n1sdp arm-bsp/optee: upgrade optee to 4.1.0 for N1SDP Jon Mason (3): arm/opencsd: update to v1.5.1 arm/optee: update to 4.1 arm-bsp/optee: remove unused v3.22.0 recipes Khem Raj (1): layer.conf: Update for the scarthgap release series Ross Burton (5): CI: support extra kas files from environment CI/cve.yml: add a CVE-checking Kas fragment CI: add explanatory comments to variables CI: allow the runner to set a NVD API key CI: use https: to fetch meta-virtualization Vincent Stehlé (1): arm-bsp/documentation: corstone1000: fix typo meta-security: b2e1511338..30e755c592: Armin Kuster (3): python3-pyinotify: do not rely on smtpd module python3-fail2ban: remove unused distutils dependency scap-security-guide: update to 0.1.71 BELOUARGA Mohamed (2): checksec: Add more runtime dependencies to checksec tool lynis: Add missing runtime dependencies Leon Anavi (2): linux-yocto%.bbappend: Add audit.cfg integrity-image-minimal: Fix IMAGE_INSTALL Mikko Rapeli (1): parsec-tool: fix serialNumber check Yi Zhao (1): openscap: fix build with python 3.12 Yushi Sun (1): meta-security: libhoth: SRCREV bump e520f8f...e482716 meta-raspberrypi: 9c901bf170..dbf1113a82: Kevin Hao (1): rpidistro-ffmpeg: Fix old override syntax Khem Raj (3): linux-raspberrypi_6.1.bb: Upgrade to 6.1.74 linux-raspberrypi: Upgrade to 6.1.77 layer.conf: Update for the scarthgap release series Martin Jansa (1): libcamera-apps: fix build with libcamera-0.2.0 Matthew Draws (1): rpi-eeprom_git: v.2024.01.05-2712 Update recipe to latest rpi-eeprom repo This follows the current latest release of rpi-eeprom: https://github.com/raspberrypi/rpi-eeprom Pascal Huerst (1): rpi-base: Add missing hifiberry overlay meta-openembedded: 9953ca1ac0..528f273006: Alex Kiernan (3): mdns: Fix SIGSEGV during DumpStateLog() mdns: Upgrade 2200.60.25.0.4 -> 2200.80.16 c-ares: Upgrade 1.24.0 -> 1.26.0 Angelo Ribeiro (1): flatcc: Add tool recipe Angelo.Ribeiro (1): e2tools: Add tool recipe Archana Polampalli (1): nodejs: update to latest v20 version 20.11.0 Beniamin Sandu (3): mbedtls: upgrade 3.5.1 -> 3.5.2 mbedtls: upgrade 2.28.4 -> 2.28.7 opencv: upgrade 4.8.0 -> 4.9.0 Changqing Li (1): cpuid: fix do_install Chirag Shilwant (1): kernel-selftest: Add few more testcases Christophe Vu-Brugier (4): dropwatch: add new recipe switchtec-user: upgrade 4.1 -> 4.2 libnvme: upgrade 1.7.1 -> 1.8 nvme-cli: upgrade 2.7.1 -> 2.8 Clément Péron (2): proj: extend class to native and nativesdk proj: upgrade 9.3.0 -> 9.3.1 Denys Dmytriyenko (1): libcamera: update 0.1.0 -> 0.2.0 Derek Straka (36): python3-bandit: update to version 1.7.7 python3-web3: update to version 6.15.0 python3-argcomplete: update to version 3.2.2 python3-cytoolz: update to version 0.12.3 python3-pdm: update to version 2.12.2 python3-google-api-python-client: update to version 2.115.0 python3-coverage: update to version 7.4.1 python3-gmqtt: update to version 0.6.14 python3-colorlog: update to version 6.8.2 python3-argh: update to version 0.31.2 python3-luma-core: update to version 2.4.2 python-pdm: update to version 2.12.3 python3-parse: update to version 1.20.1 python3-grpcio: update to version 1.60.1 python3-dill: update to version 0.3.8 python3-types-setuptools: update to version 69.0.0.20240125 python3-pymisp: update to version 2.4.184 python3-cbor2: update to version 5.6.1 python3-sentry-sdk: update to version 1.40.0 python3-pytest-asyncio: update to version 0.23.4 python3-google-api-core: update to version 2.16.1 python3-google-api-python-client: update to version 2.116.0 python3-google-auth: update to version 2.27.0 python3-jsonrpcclient: update to version 4.0.3 python3-dnspython: update to version 2.5.0 python3-eventlet: update to version 0.35.1 python3-platformdirs: update to version 4.2.0 python3-ipython: update to version 8.21.0 python3-grpcio-tools: update to version 1.60.1 python3-cachecontrol: update to version 0.14.0 python3-binwalk: update the regex version for upstream checks python3-pymodbus: update to version 3.6.3 python3-pyyaml-include: add initial recipe for version 1.3.2 python3-appdirs: add ptest into PTESTS_FAST_META_PYTHON items python3-yarl: add ptest into PTESTS_FAST_META_PYTHON items python3-ujson: add ptest into PTESTS_FAST_META_PYTHON items Emil Kronborg (1): php-fpm: fix systemd Etienne Cordonnier (2): uutils-coreutils: upgrade 0.0.23 -> 0.0.24 uutils_coreutils: merge .inc and .bb Fathi Boudra (4): whitenoise: add a new recipe python3-django: upgrade to Django 4.2.10 LTS release libtinyxml2: fix the homepage URL libtinyxml2: allow to build both shared and static libraries Geoff Parker (2): python3-aiodns python3-pycares: Add native & nativesdk support python3-aiohappyeyeballs: Add native & nativesdk support Jean-Marc BOUCHE (1): rtkit: missing files/directories in package Jose Quaresma (1): ostree: Upgrade 2023.8 -> 2024.1 Jörg Sommer (1): bonnie++: New recipe for version 2.0 Khem Raj (18): uftrace: Upgrade to 0.15.2 i2cdev: Set PV correctly minicoredumper: Fix build with clang python3-pytest-mock: Fix ptest failures with python 3.12 ndctl: Update to v78 vk-gl-cts: Disable Werror on amber external module vulkan-cts: Upgrade to 1.3.7.3 uftrace: Adjust the summary to reflect rust and python support libcamera: Fix build with clang-18 breakpad: Upgrade to 2023.06.01 release bpftool: Add missing dep on elfutils-native flatcc: Fix build warnings found with clang-18 Revert "lzop: add (from oe-core)" can-isotp: Update to latest and skip it openflow: Switch SRC_URI to github mirror ot-br-posix: upgrade to latest trunk libcereal: Disable c++11-narrowing-const-reference warning as error ot-br-posix: Limit vla-cxx-extension option to clang >= 18 Li Wang (1): radvd: add '--shell /sbin/nologin' to /etc/passwd Mark Hatle (1): opencv: Fix python3 package generation Markus Volk (9): luajit: allow to build on supported platforms pipewire: fix build with libcamera-0.2 system-config-printer: fix runtime for system-config-printer iwd: update 2.8 -> 2.13 pipewire: update 1.0.1 -> 1.0.3 flatpak: remove unneeded RDEPENDS libosinfo: use hwdata for ids files libnfs: update 5.0.2 -> 5.0.3 hwdata: update 0.378 -> 0.379 Martin Jansa (18): libtalloc, libtevent, libtdb, libldb: set PYTHONARCHDIR for waf to respect python libdir jack: fix build with python3 on host redis: restore Upstream-Status libvpx: restore Upstream-Status python-jsonref: add missing Upstream-Status flatcc: respect baselib flatcc: drop 'r' from gitr and ${SRCPV} recipes: drop ${SRCPV} usage recipes: drop remaining +gitr cases gitpkgv.bbclass: adjust the example in comment a bit ne10: append +git instead of gitr+ evemu-tools: use better PV nana: upgrade to latest commit from github xfstests: upgrade to latest 2024.01.14 xfstests: add gawk to RDEPENDS xfstests: use master branch instead of 'for-next' xfstests: drop the upstream rejected install-sh hack xfstests: fix make install race condition Max Krummenacher (2): libusbgx: fix usbgx.service stop / restart libusbgx: uprev to the latest commit Maxime Roussin-Belanger (1): xdg-desktop-portal: add missing glib-2.0-native dependency Maxime Roussin-Bélanger (1): polkit: fix rules.d permissions Ming Liu (1): plymouth: uprev to 24.004.60 Niko Mauno (4): python3-pybind11: Amend HOMEPAGE python3-pybind11: Prune redundant inherit python3-pybind11: Fix LICENSE python3-pybind11: Cosmetic fixes Pavel Zhukov (1): python3-tzlocal: Add zoneinfo dependency Peter Kjellerstedt (1): xfstests: Only specify the main SRCREV once Peter Marko (2): syslog-ng: ignore CVE-2022-38725 libqmi: correct PV Pratik Manvar (1): python3-pybind11: Remove the Boost dependency Richard Leitner (7): python3-janus: add recipe for v1.0.0 python3-moteus: add recipe for v0.3.67 python3-socksio: add recipe for v1.0.0 python3-anyio: add recipe for v4.2.0 python3-sniffio: add recipe for v1.3.0 python3-httpcore: add recipe for v1.0.2 python3-httpx: add recipe for v0.26.0 Sascha Hauer (1): signing.bbclass: make it work with eliptic curve keys Simone Weiß (1): scapy: Add difftools and logutils in RDEPENDS Thomas Perrot (3): dvb-apps: no longer skip ldflags QA etcd-cpp-apiv3: no longer skip ldflags QA kernel-selftest: no longer skip ldflags QA Tim Orling (60): python3-uritemplate: switch to pytest --automake python3-unidiff: switch to pytest --automake python3-ujson: switch to pytest --automake python3-pytest-lazy-fixture: switch to pytest --automake python3-fastjsonschema: switch to pytest --automake python3-tomlkit: switch to pytest --automake python3-inotify: switch to pytest --automake python3-requests-file: switch to pytest --automake python3-covdefaults: switch to pytest --automake python3-dominate: switch to pytest --automake python3-scrypt: switch to pytest --automake python3-u-msgpack-python: switch to pytest --automake python3-iso3166: switch to pytest --automake python3-trustme: switch to pytest --automake python3-asgiref: switch to pytest --automake python3-html2text: switch to pytest --automake python3-pyasn1-modules: switch to pytest --automake python3-intervals: switch to pytest --automake python3-py-cpuinfo: switch to pytest --automake python3-backports-functools-lru-cache: drop folder python3-whoosh: switch to pytest --automake python3-xlrd: switch to pytest --automake python3-dnspython: switch to pytest --automake python3-prettytable: switch to pytest --automake python3-ptyprocess: switch to pytest --automake python3-gunicorn: switch to pytest --automake python3-pytest-mock: switch to pytest --automake python3-pyroute2: switch to pytest --automake python3-smpplib: switch to pytest --automake python3-pyzmq: switch to pytest --automake python3-multidict: switch to pytest --automake python3-geojson: switch to pytest --automake python3-serpent: switch to pytest --automake python3-soupsieve: switch to pytest --automake python3-requests-toolbelt: switch to pytest --automake python3-yarl: switch to pytest --automake python3-cbor2: switch to pytest --automake python3-ansicolors: switch to pytest --automake python3-ipy: switch to pytest --automake python3-sqlparse: switch to pytest --automake python3-precise-runner: switch to pytest --automake python3-parse-type: switch to pytest --automake python3-inflection: switch to pytest --automake python3-blinker: switch to pytest --automake python3-service-identity: switch to pytest --automake python3-cachetools: switch to pytest --automake python3-simpleeval: switch to pytest --automake python3-appdirs: switch to pytest --automake python3-pillow: switch to pytest --automake python3-semver: switch to pytest --automake python3-platformdirs: switch to pytest --automake python3-polyline: switch to pytest --automake python3-betamax: switch to pytest --automake python3-pytoml: switch to pytest --automake python3-pyserial: switch to pytest --automake python3-typeguard: switch to pytest --automake python3-execnet: switch to pytest --automake python3-pyyaml-include: switch to pytest --automake python3-xxhash: switch to pytest --automake python3-pylint: switch to pytest --automake Tom Geelen (1): python3-pychromecast: add missing RDEPENDS, and add initial recipe for dependency. Wang Mingyu (90): btop: upgrade 1.2.13 -> 1.3.0 ccid: upgrade 1.5.4 -> 1.5.5 ctags: upgrade 6.1.20231231.0 -> 6.1.20240114.0 gcr3: upgrade 3.41.1 -> 3.41.2 htop: upgrade 3.2.2 -> 3.3.0 hwdata: upgrade 0.377 -> 0.378 libdecor: upgrade 0.2.1 -> 0.2.2 libvpx: upgrade 1.13.1 -> 1.14.0 lldpd: upgrade 1.0.17 -> 1.0.18 gjs: upgrade 1.78.2 -> 1.78.3 wireshark: upgrade 4.2.0 -> 4.2.2 capnproto: upgrade 1.0.1.1 -> 1.0.2 dnfdragora: upgrade 2.1.5 -> 2.1.6 libyang: upgrade 2.1.128 -> 2.1.148 lshw: upgrade 02.19.2 -> 02.20 md4c: upgrade 0.4.8 -> 0.5.0 python3-apscheduler: add new recipe redis: upgrade 7.2.3 -> 7.2.4 sanlock: upgrade 3.8.5 -> 3.9.0 python3-eth-keys: upgrade 0.4.0 -> 0.5.0 python3-xmlschema: upgrade 2.5.1 -> 3.0.1 plocate: upgrade 1.1.20 -> 1.1.22 python3-absl: upgrade 2.0.0 -> 2.1.0 python3-asyncinotify: upgrade 4.0.5 -> 4.0.6 python3-beautifulsoup4: upgrade 4.12.2 -> 4.12.3 python3-cantools: upgrade 39.4.2 -> 39.4.3 python3-cbor2: upgrade 5.5.1 -> 5.6.0 python3-dbus-fast: upgrade 2.21.0 -> 2.21.1 python3-django: upgrade 5.0 -> 5.0.1 python3-eth-abi: upgrade 4.2.1 -> 5.0.0 python3-eth-typing: upgrade 3.5.2 -> 4.0.0 python3-eth-utils: upgrade 2.3.1 -> 3.0.0 python3-eventlet: upgrade 0.34.2 -> 0.34.3 python3-flask: upgrade 3.0.0 -> 3.0.1 python3-git-pw: upgrade 2.5.0 -> 2.6.0 python3-google-api-python-client: upgrade 2.113.0 -> 2.114.0 python3-haversine: upgrade 2.8.0 -> 2.8.1 python3-ipython: upgrade 8.19.0 -> 8.20.0 python3-pdm: upgrade 2.11.2 -> 2.12.1 python3-pyatspi: upgrade 2.46.0 -> 2.46.1 python3-sentry-sdk: upgrade 1.39.1 -> 1.39.2 python3-robotframework: upgrade 6.1.1 -> 7.0 python3-pychromecast: upgrade 13.0.8 -> 13.1.0 python3-tox: upgrade 4.11.4 -> 4.12.1 python3-types-psutil: upgrade 5.9.5.17 -> 5.9.5.20240106 qpdf: upgrade 11.7.0 -> 11.8.0 smemstat: upgrade 0.02.12 -> 0.02.13 tesseract: upgrade 5.3.3 -> 5.3.4 libsmi: Fix buildpaths warning. minicoredumper: upgrade 2.0.6 -> 2.0.7 cmocka: Fix install conflict when enable multilib. czmq: Fix install conflict when enable multilib. czmq: Fix buildpaths warning. bdwgc: upgrade 8.2.4 -> 8.2.6 cmark: upgrade 0.30.3 -> 0.31.0 gensio: upgrade 2.8.2 -> 2.8.3 geos: upgrade 3.12.0 -> 3.12.1 imlib2: upgrade 1.12.1 -> 1.12.2 libcbor: upgrade 0.10.2 -> 0.11.0 libinih: upgrade 57 -> 58 libio-socket-ssl-perl: upgrade 2.084 -> 2.085 libjcat: upgrade 0.2.0 -> 0.2.1 libqmi: upgrade 1.35.1 -> 1.35.2 md4c: upgrade 0.5.0 -> 0.5.2 nanomsg: upgrade 1.2 -> 1.2.1 neatvnc: upgrade 0.7.1 -> 0.7.2 network-manager-applet: upgrade 1.34.0 -> 1.36.0 libgsf: upgrade 1.14.51 -> 1.14.52 ndisc6: upgrade 1.0.7 -> 1.0.8 squid: upgrade 6.6 -> 6.7 iotop: upgrade 1.25 -> 1.26 libblockdev: upgrade 3.0.4 -> 3.1.0 neon: upgrade 0.32.5 -> 0.33.0 pkcs11-provider: upgrade 0.2 -> 0.3 sanlock: upgrade 3.9.0 -> 3.9.1 satyr: upgrade 0.42 -> 0.43 python3-astroid: upgrade 3.0.2 -> 3.0.3 python3-elementpath: upgrade 4.1.5 -> 4.2.0 python3-flask: upgrade 3.0.1 -> 3.0.2 python3-google-api-core: upgrade 2.16.1 -> 2.16.2 python3-gspread: upgrade 5.12.4 -> 6.0.0 python3-path: upgrade 16.9.0 -> 16.10.0 python3-gcovr: upgrade 6.0 -> 7.0 python3-types-psutil: upgrade 5.9.5.20240106 -> 5.9.5.20240205 python3-waitress: upgrade 2.1.2 -> 3.0.0 rdma-core: upgrade 48.0 -> 50.0 ser2net: upgrade 4.6.0 -> 4.6.1 sip: upgrade 6.8.1 -> 6.8.2 span-lite: upgrade 0.10.3 -> 0.11.0 tcpslice: upgrade 1.6 -> 1.7 William A. Kennington III (3): nanopb: Update 0.4.7 -> 0.4.8 nanopb: Split into 2 packages nanopb-runtime: Enable shared library Yoann Congal (6): ibus: backport a reproducibility fix radvd: Fix build in reproducible test mariadb: Move useradd handling in target side of the recipe kexec-tools-klibc: Fix building on x86_64 with binutils 2.41 freeradius: Add missing 'radiusd' static group id ntp: Add missing 'ntp' static group id alperak (18): python3-flask-marshmallow: upgrade 0.15.0 -> 1.1.0 python3-netaddr: upgrade 0.10.0 -> 0.10.1 python3-toolz: upgrade 0.12.0 -> 0.12.1 python3-aiohappyeyeballs: add recipe python3-aiohttp: upgrade 3.9.1 -> 3.9.2 python3-eth-rlp: upgrade 1.0.0 -> 1.0.1 python3-aiohttp: upgrade 3.9.2 -> 3.9.3 python3-google-auth-oauthlib: add recipe python3-scikit-build: upgrade 0.16.7 -> 0.17.6 python3-eth-account: upgrade 0.10.0 -> 0.11.0 python3-pyunormalize: add recipe python3-web3: upgrade 6.15.0 -> 6.15.1 python3-gspread: upgrade 6.0.0 -> 6.0.1 python3-strenum: add recipe python3-flask-marshmallow: upgrade 1.1.0 -> 1.2.0 python3-werkzeug: upgrade 2.3.6 -> 3.0.1 python3-imageio: upgrade 2.33.1 -> 2.34.0 python3-werkzeug: add missing runtime dependencies virendra thakur (1): nodejs: Set CVE_PRODUCT to "node.js" Change-Id: If9fadba6ede9e8de3b778d470bbd61f208f48e54 Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Diffstat (limited to 'poky/scripts/lib/devtool/ide_sdk.py')
-rwxr-xr-xpoky/scripts/lib/devtool/ide_sdk.py1065
1 files changed, 1065 insertions, 0 deletions
diff --git a/poky/scripts/lib/devtool/ide_sdk.py b/poky/scripts/lib/devtool/ide_sdk.py
new file mode 100755
index 0000000000..1467974480
--- /dev/null
+++ b/poky/scripts/lib/devtool/ide_sdk.py
@@ -0,0 +1,1065 @@
+# Development tool - ide-sdk command plugin
+#
+# Copyright (C) 2023-2024 Siemens AG
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+"""Devtool ide-sdk plugin"""
+
+import json
+import logging
+import os
+import re
+import shutil
+import stat
+import subprocess
+import sys
+from argparse import RawTextHelpFormatter
+from enum import Enum
+
+import scriptutils
+import bb
+from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError, parse_recipe
+from devtool.standard import get_real_srctree
+from devtool.ide_plugins import BuildTool
+
+
+logger = logging.getLogger('devtool')
+
+# dict of classes derived from IdeBase
+ide_plugins = {}
+
+
+class DevtoolIdeMode(Enum):
+ """Different modes are supported by the ide-sdk plugin.
+
+ The enum might be extended by more advanced modes in the future. Some ideas:
+ - auto: modified if all recipes are modified, shared if none of the recipes is modified.
+ - mixed: modified mode for modified recipes, shared mode for all other recipes.
+ """
+
+ modified = 'modified'
+ shared = 'shared'
+
+
+class TargetDevice:
+ """SSH remote login parameters"""
+
+ def __init__(self, args):
+ self.extraoptions = ''
+ if args.no_host_check:
+ self.extraoptions += '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+ self.ssh_sshexec = 'ssh'
+ if args.ssh_exec:
+ self.ssh_sshexec = args.ssh_exec
+ self.ssh_port = ''
+ if args.port:
+ self.ssh_port = "-p %s" % args.port
+ if args.key:
+ self.extraoptions += ' -i %s' % args.key
+
+ self.target = args.target
+ target_sp = args.target.split('@')
+ if len(target_sp) == 1:
+ self.login = ""
+ self.host = target_sp[0]
+ elif len(target_sp) == 2:
+ self.login = target_sp[0]
+ self.host = target_sp[1]
+ else:
+ logger.error("Invalid target argument: %s" % args.target)
+
+
+class RecipeNative:
+ """Base class for calling bitbake to provide a -native recipe"""
+
+ def __init__(self, name, target_arch=None):
+ self.name = name
+ self.target_arch = target_arch
+ self.bootstrap_tasks = [self.name + ':do_addto_recipe_sysroot']
+ self.staging_bindir_native = None
+ self.target_sys = None
+ self.__native_bin = None
+
+ def _initialize(self, config, workspace, tinfoil):
+ """Get the parsed recipe"""
+ recipe_d = parse_recipe(
+ config, tinfoil, self.name, appends=True, filter_workspace=False)
+ if not recipe_d:
+ raise DevtoolError("Parsing %s recipe failed" % self.name)
+ self.staging_bindir_native = os.path.realpath(
+ recipe_d.getVar('STAGING_BINDIR_NATIVE'))
+ self.target_sys = recipe_d.getVar('TARGET_SYS')
+ return recipe_d
+
+ def initialize(self, config, workspace, tinfoil):
+ """Basic initialization that can be overridden by a derived class"""
+ self._initialize(config, workspace, tinfoil)
+
+ @property
+ def native_bin(self):
+ if not self.__native_bin:
+ raise DevtoolError("native binary name is not defined.")
+ return self.__native_bin
+
+
+class RecipeGdbCross(RecipeNative):
+ """Handle handle gdb-cross on the host and the gdbserver on the target device"""
+
+ def __init__(self, args, target_arch, target_device):
+ super().__init__('gdb-cross-' + target_arch, target_arch)
+ self.target_device = target_device
+ self.gdb = None
+ self.gdbserver_port_next = int(args.gdbserver_port_start)
+ self.config_db = {}
+
+ def __find_gdbserver(self, config, tinfoil):
+ """Absolute path of the gdbserver"""
+ recipe_d_gdb = parse_recipe(
+ config, tinfoil, 'gdb', appends=True, filter_workspace=False)
+ if not recipe_d_gdb:
+ raise DevtoolError("Parsing gdb recipe failed")
+ return os.path.join(recipe_d_gdb.getVar('bindir'), 'gdbserver')
+
+ def initialize(self, config, workspace, tinfoil):
+ super()._initialize(config, workspace, tinfoil)
+ gdb_bin = self.target_sys + '-gdb'
+ gdb_path = os.path.join(
+ self.staging_bindir_native, self.target_sys, gdb_bin)
+ self.gdb = gdb_path
+ self.gdbserver_path = self.__find_gdbserver(config, tinfoil)
+
+ @property
+ def host(self):
+ return self.target_device.host
+
+
+class RecipeImage:
+ """Handle some image recipe related properties
+
+ Most workflows require firmware that runs on the target device.
+ This firmware must be consistent with the setup of the host system.
+ In particular, the debug symbols must be compatible. For this, the
+ rootfs must be created as part of the SDK.
+ """
+
+ def __init__(self, name):
+ self.combine_dbg_image = False
+ self.gdbserver_missing = False
+ self.name = name
+ self.rootfs = None
+ self.__rootfs_dbg = None
+ self.bootstrap_tasks = [self.name + ':do_build']
+
+ def initialize(self, config, tinfoil):
+ image_d = parse_recipe(
+ config, tinfoil, self.name, appends=True, filter_workspace=False)
+ if not image_d:
+ raise DevtoolError(
+ "Parsing image recipe %s failed" % self.name)
+
+ self.combine_dbg_image = bb.data.inherits_class(
+ 'image-combined-dbg', image_d)
+
+ workdir = image_d.getVar('WORKDIR')
+ self.rootfs = os.path.join(workdir, 'rootfs')
+ if image_d.getVar('IMAGE_GEN_DEBUGFS') == "1":
+ self.__rootfs_dbg = os.path.join(workdir, 'rootfs-dbg')
+
+ self.gdbserver_missing = 'gdbserver' not in image_d.getVar(
+ 'IMAGE_INSTALL')
+
+ @property
+ def debug_support(self):
+ return bool(self.rootfs_dbg)
+
+ @property
+ def rootfs_dbg(self):
+ if self.__rootfs_dbg and os.path.isdir(self.__rootfs_dbg):
+ return self.__rootfs_dbg
+ return None
+
+
+class RecipeMetaIdeSupport:
+ """For the shared sysroots mode meta-ide-support is needed
+
+ For use cases where just a cross tool-chain is required but
+ no recipe is used, devtool ide-sdk abstracts calling bitbake meta-ide-support
+ and bitbake build-sysroots. This also allows to expose the cross-toolchains
+ to IDEs. For example VSCode support different tool-chains with e.g. cmake-kits.
+ """
+
+ def __init__(self):
+ self.bootstrap_tasks = ['meta-ide-support:do_build']
+ self.topdir = None
+ self.datadir = None
+ self.deploy_dir_image = None
+ self.build_sys = None
+ # From toolchain-scripts
+ self.real_multimach_target_sys = None
+
+ def initialize(self, config, tinfoil):
+ meta_ide_support_d = parse_recipe(
+ config, tinfoil, 'meta-ide-support', appends=True, filter_workspace=False)
+ if not meta_ide_support_d:
+ raise DevtoolError("Parsing meta-ide-support recipe failed")
+
+ self.topdir = meta_ide_support_d.getVar('TOPDIR')
+ self.datadir = meta_ide_support_d.getVar('datadir')
+ self.deploy_dir_image = meta_ide_support_d.getVar(
+ 'DEPLOY_DIR_IMAGE')
+ self.build_sys = meta_ide_support_d.getVar('BUILD_SYS')
+ self.real_multimach_target_sys = meta_ide_support_d.getVar(
+ 'REAL_MULTIMACH_TARGET_SYS')
+
+
+class RecipeBuildSysroots:
+ """For the shared sysroots mode build-sysroots is needed"""
+
+ def __init__(self):
+ self.standalone_sysroot = None
+ self.standalone_sysroot_native = None
+ self.bootstrap_tasks = [
+ 'build-sysroots:do_build_target_sysroot',
+ 'build-sysroots:do_build_native_sysroot'
+ ]
+
+ def initialize(self, config, tinfoil):
+ build_sysroots_d = parse_recipe(
+ config, tinfoil, 'build-sysroots', appends=True, filter_workspace=False)
+ if not build_sysroots_d:
+ raise DevtoolError("Parsing build-sysroots recipe failed")
+ self.standalone_sysroot = build_sysroots_d.getVar(
+ 'STANDALONE_SYSROOT')
+ self.standalone_sysroot_native = build_sysroots_d.getVar(
+ 'STANDALONE_SYSROOT_NATIVE')
+
+
+class SharedSysrootsEnv:
+ """Handle the shared sysroots based workflow
+
+ Support the workflow with just a tool-chain without a recipe.
+ It's basically like:
+ bitbake some-dependencies
+ bitbake meta-ide-support
+ bitbake build-sysroots
+ Use the environment-* file found in the deploy folder
+ """
+
+ def __init__(self):
+ self.ide_support = None
+ self.build_sysroots = None
+
+ def initialize(self, ide_support, build_sysroots):
+ self.ide_support = ide_support
+ self.build_sysroots = build_sysroots
+
+ def setup_ide(self, ide):
+ ide.setup(self)
+
+
+class RecipeNotModified:
+ """Handling of recipes added to the Direct DSK shared sysroots."""
+
+ def __init__(self, name):
+ self.name = name
+ self.bootstrap_tasks = [name + ':do_populate_sysroot']
+
+
+class RecipeModified:
+ """Handling of recipes in the workspace created by devtool modify"""
+ OE_INIT_BUILD_ENV = 'oe-init-build-env'
+
+ VALID_BASH_ENV_NAME_CHARS = re.compile(r"^[a-zA-Z0-9_]*$")
+
+ def __init__(self, name):
+ self.name = name
+ self.bootstrap_tasks = [name + ':do_install']
+ self.gdb_cross = None
+ # workspace
+ self.real_srctree = None
+ self.srctree = None
+ self.ide_sdk_dir = None
+ self.ide_sdk_scripts_dir = None
+ self.bbappend = None
+ # recipe variables from d.getVar
+ self.b = None
+ self.base_libdir = None
+ self.bblayers = None
+ self.bpn = None
+ self.d = None
+ self.fakerootcmd = None
+ self.fakerootenv = None
+ self.libdir = None
+ self.max_process = None
+ self.package_arch = None
+ self.package_debug_split_style = None
+ self.path = None
+ self.pn = None
+ self.recipe_sysroot = None
+ self.recipe_sysroot_native = None
+ self.staging_incdir = None
+ self.strip_cmd = None
+ self.target_arch = None
+ self.topdir = None
+ self.workdir = None
+ self.recipe_id = None
+ # replicate bitbake build environment
+ self.exported_vars = None
+ self.cmd_compile = None
+ self.__oe_init_dir = None
+ # main build tool used by this recipe
+ self.build_tool = BuildTool.UNDEFINED
+ # build_tool = cmake
+ self.oecmake_generator = None
+ self.cmake_cache_vars = None
+ # build_tool = meson
+ self.meson_buildtype = None
+ self.meson_wrapper = None
+ self.mesonopts = None
+ self.extra_oemeson = None
+ self.meson_cross_file = None
+
+ def initialize(self, config, workspace, tinfoil):
+ recipe_d = parse_recipe(
+ config, tinfoil, self.name, appends=True, filter_workspace=False)
+ if not recipe_d:
+ raise DevtoolError("Parsing %s recipe failed" % self.name)
+
+ # Verify this recipe is built as externalsrc setup by devtool modify
+ workspacepn = check_workspace_recipe(
+ workspace, self.name, bbclassextend=True)
+ self.srctree = workspace[workspacepn]['srctree']
+ # Need to grab this here in case the source is within a subdirectory
+ self.real_srctree = get_real_srctree(
+ self.srctree, recipe_d.getVar('S'), recipe_d.getVar('WORKDIR'))
+ self.bbappend = workspace[workspacepn]['bbappend']
+
+ self.ide_sdk_dir = os.path.join(
+ config.workspace_path, 'ide-sdk', self.name)
+ if os.path.exists(self.ide_sdk_dir):
+ shutil.rmtree(self.ide_sdk_dir)
+ self.ide_sdk_scripts_dir = os.path.join(self.ide_sdk_dir, 'scripts')
+
+ self.b = recipe_d.getVar('B')
+ self.base_libdir = recipe_d.getVar('base_libdir')
+ self.bblayers = recipe_d.getVar('BBLAYERS').split()
+ self.bpn = recipe_d.getVar('BPN')
+ self.d = recipe_d.getVar('D')
+ self.fakerootcmd = recipe_d.getVar('FAKEROOTCMD')
+ self.fakerootenv = recipe_d.getVar('FAKEROOTENV')
+ self.libdir = recipe_d.getVar('libdir')
+ self.max_process = int(recipe_d.getVar(
+ "BB_NUMBER_THREADS") or os.cpu_count() or 1)
+ self.package_arch = recipe_d.getVar('PACKAGE_ARCH')
+ self.package_debug_split_style = recipe_d.getVar(
+ 'PACKAGE_DEBUG_SPLIT_STYLE')
+ self.path = recipe_d.getVar('PATH')
+ self.pn = recipe_d.getVar('PN')
+ self.recipe_sysroot = os.path.realpath(
+ recipe_d.getVar('RECIPE_SYSROOT'))
+ self.recipe_sysroot_native = os.path.realpath(
+ recipe_d.getVar('RECIPE_SYSROOT_NATIVE'))
+ self.staging_incdir = os.path.realpath(
+ recipe_d.getVar('STAGING_INCDIR'))
+ self.strip_cmd = recipe_d.getVar('STRIP')
+ self.target_arch = recipe_d.getVar('TARGET_ARCH')
+ self.topdir = recipe_d.getVar('TOPDIR')
+ self.workdir = os.path.realpath(recipe_d.getVar('WORKDIR'))
+
+ self.__init_exported_variables(recipe_d)
+
+ if bb.data.inherits_class('cmake', recipe_d):
+ self.oecmake_generator = recipe_d.getVar('OECMAKE_GENERATOR')
+ self.__init_cmake_preset_cache(recipe_d)
+ self.build_tool = BuildTool.CMAKE
+ elif bb.data.inherits_class('meson', recipe_d):
+ self.meson_buildtype = recipe_d.getVar('MESON_BUILDTYPE')
+ self.mesonopts = recipe_d.getVar('MESONOPTS')
+ self.extra_oemeson = recipe_d.getVar('EXTRA_OEMESON')
+ self.meson_cross_file = recipe_d.getVar('MESON_CROSS_FILE')
+ self.build_tool = BuildTool.MESON
+
+ # Recipe ID is the identifier for IDE config sections
+ self.recipe_id = self.bpn + "-" + self.package_arch
+ self.recipe_id_pretty = self.bpn + ": " + self.package_arch
+
+ def append_to_bbappend(self, append_text):
+ with open(self.bbappend, 'a') as bbap:
+ bbap.write(append_text)
+
+ def remove_from_bbappend(self, append_text):
+ with open(self.bbappend, 'r') as bbap:
+ text = bbap.read()
+ new_text = text.replace(append_text, '')
+ with open(self.bbappend, 'w') as bbap:
+ bbap.write(new_text)
+
+ @staticmethod
+ def is_valid_shell_variable(var):
+ """Skip strange shell variables like systemd
+
+ prevent from strange bugs because of strange variables which
+ are not used in this context but break various tools.
+ """
+ if RecipeModified.VALID_BASH_ENV_NAME_CHARS.match(var):
+ bb.debug(1, "ignoring variable: %s" % var)
+ return True
+ return False
+
+ def debug_build_config(self, args):
+ """Explicitely set for example CMAKE_BUILD_TYPE to Debug if not defined otherwise"""
+ if self.build_tool is BuildTool.CMAKE:
+ append_text = os.linesep + \
+ 'OECMAKE_ARGS:append = " -DCMAKE_BUILD_TYPE:STRING=Debug"' + os.linesep
+ if args.debug_build_config and not 'CMAKE_BUILD_TYPE' in self.cmake_cache_vars:
+ self.cmake_cache_vars['CMAKE_BUILD_TYPE'] = {
+ "type": "STRING",
+ "value": "Debug",
+ }
+ self.append_to_bbappend(append_text)
+ elif 'CMAKE_BUILD_TYPE' in self.cmake_cache_vars:
+ del self.cmake_cache_vars['CMAKE_BUILD_TYPE']
+ self.remove_from_bbappend(append_text)
+ elif self.build_tool is BuildTool.MESON:
+ append_text = os.linesep + 'MESON_BUILDTYPE = "debug"' + os.linesep
+ if args.debug_build_config and self.meson_buildtype != "debug":
+ self.mesonopts.replace(
+ '--buildtype ' + self.meson_buildtype, '--buildtype debug')
+ self.append_to_bbappend(append_text)
+ elif self.meson_buildtype == "debug":
+ self.mesonopts.replace(
+ '--buildtype debug', '--buildtype plain')
+ self.remove_from_bbappend(append_text)
+ elif args.debug_build_config:
+ logger.warn(
+ "--debug-build-config is not implemented for this build tool yet.")
+
+ def solib_search_path(self, image):
+ """Search for debug symbols in the rootfs and rootfs-dbg
+
+ The debug symbols of shared libraries which are provided by other packages
+ are grabbed from the -dbg packages in the rootfs-dbg.
+
+ But most cross debugging tools like gdb, perf, and systemtap need to find
+ executable/library first and through it debuglink note find corresponding
+ symbols file. Therefore the library paths from the rootfs are added as well.
+
+ Note: For the devtool modified recipe compiled from the IDE, the debug
+ symbols are taken from the unstripped binaries in the image folder.
+ Also, devtool deploy-target takes the files from the image folder.
+ debug symbols in the image folder refer to the corresponding source files
+ with absolute paths of the build machine. Debug symbols found in the
+ rootfs-dbg are relocated and contain paths which refer to the source files
+ installed on the target device e.g. /usr/src/...
+ """
+ base_libdir = self.base_libdir.lstrip('/')
+ libdir = self.libdir.lstrip('/')
+ so_paths = [
+ # debug symbols for package_debug_split_style: debug-with-srcpkg or .debug
+ os.path.join(image.rootfs_dbg, base_libdir, ".debug"),
+ os.path.join(image.rootfs_dbg, libdir, ".debug"),
+ # debug symbols for package_debug_split_style: debug-file-directory
+ os.path.join(image.rootfs_dbg, "usr", "lib", "debug"),
+
+ # The binaries are required as well, the debug packages are not enough
+ # With image-combined-dbg.bbclass the binaries are copied into rootfs-dbg
+ os.path.join(image.rootfs_dbg, base_libdir),
+ os.path.join(image.rootfs_dbg, libdir),
+ # Without image-combined-dbg.bbclass the binaries are only in rootfs.
+ # Note: Stepping into source files located in rootfs-dbg does not
+ # work without image-combined-dbg.bbclass yet.
+ os.path.join(image.rootfs, base_libdir),
+ os.path.join(image.rootfs, libdir)
+ ]
+ return so_paths
+
+ def solib_search_path_str(self, image):
+ """Return a : separated list of paths usable by GDB's set solib-search-path"""
+ return ':'.join(self.solib_search_path(image))
+
+ def __init_exported_variables(self, d):
+ """Find all variables with export flag set.
+
+ This allows to generate IDE configurations which compile with the same
+ environment as bitbake does. That's at least a reasonable default behavior.
+ """
+ exported_vars = {}
+
+ vars = (key for key in d.keys() if not key.startswith(
+ "__") and not d.getVarFlag(key, "func", False))
+ for var in vars:
+ func = d.getVarFlag(var, "func", False)
+ if d.getVarFlag(var, 'python', False) and func:
+ continue
+ export = d.getVarFlag(var, "export", False)
+ unexport = d.getVarFlag(var, "unexport", False)
+ if not export and not unexport and not func:
+ continue
+ if unexport:
+ continue
+
+ val = d.getVar(var)
+ if val is None:
+ continue
+ if set(var) & set("-.{}+"):
+ logger.warn(
+ "Warning: Found invalid character in variable name %s", str(var))
+ continue
+ varExpanded = d.expand(var)
+ val = str(val)
+
+ if not RecipeModified.is_valid_shell_variable(varExpanded):
+ continue
+
+ if func:
+ code_line = "line: {0}, file: {1}\n".format(
+ d.getVarFlag(var, "lineno", False),
+ d.getVarFlag(var, "filename", False))
+ val = val.rstrip('\n')
+ logger.warn("Warning: exported shell function %s() is not exported (%s)" %
+ (varExpanded, code_line))
+ continue
+
+ if export:
+ exported_vars[varExpanded] = val.strip()
+ continue
+
+ self.exported_vars = exported_vars
+
+ def __init_cmake_preset_cache(self, d):
+ """Get the arguments passed to cmake
+
+ Replicate the cmake configure arguments with all details to
+ share on build folder between bitbake and SDK.
+ """
+ site_file = os.path.join(self.workdir, 'site-file.cmake')
+ if os.path.exists(site_file):
+ print("Warning: site-file.cmake is not supported")
+
+ cache_vars = {}
+ oecmake_args = d.getVar('OECMAKE_ARGS').split()
+ extra_oecmake = d.getVar('EXTRA_OECMAKE').split()
+ for param in oecmake_args + extra_oecmake:
+ d_pref = "-D"
+ if param.startswith(d_pref):
+ param = param[len(d_pref):]
+ else:
+ print("Error: expected a -D")
+ param_s = param.split('=', 1)
+ param_nt = param_s[0].split(':', 1)
+
+ def handle_undefined_variable(var):
+ if var.startswith('${') and var.endswith('}'):
+ return ''
+ else:
+ return var
+ # Example: FOO=ON
+ if len(param_nt) == 1:
+ cache_vars[param_s[0]] = handle_undefined_variable(param_s[1])
+ # Example: FOO:PATH=/tmp
+ elif len(param_nt) == 2:
+ cache_vars[param_nt[0]] = {
+ "type": param_nt[1],
+ "value": handle_undefined_variable(param_s[1]),
+ }
+ else:
+ print("Error: cannot parse %s" % param)
+ self.cmake_cache_vars = cache_vars
+
+ def cmake_preset(self):
+ """Create a preset for cmake that mimics how bitbake calls cmake"""
+ toolchain_file = os.path.join(self.workdir, 'toolchain.cmake')
+ cmake_executable = os.path.join(
+ self.recipe_sysroot_native, 'usr', 'bin', 'cmake')
+ self.cmd_compile = cmake_executable + " --build --preset " + self.recipe_id
+
+ preset_dict_configure = {
+ "name": self.recipe_id,
+ "displayName": self.recipe_id_pretty,
+ "description": "Bitbake build environment for the recipe %s compiled for %s" % (self.bpn, self.package_arch),
+ "binaryDir": self.b,
+ "generator": self.oecmake_generator,
+ "toolchainFile": toolchain_file,
+ "cacheVariables": self.cmake_cache_vars,
+ "environment": self.exported_vars,
+ "cmakeExecutable": cmake_executable
+ }
+
+ preset_dict_build = {
+ "name": self.recipe_id,
+ "displayName": self.recipe_id_pretty,
+ "description": "Bitbake build environment for the recipe %s compiled for %s" % (self.bpn, self.package_arch),
+ "configurePreset": self.recipe_id,
+ "inheritConfigureEnvironment": True
+ }
+
+ preset_dict_test = {
+ "name": self.recipe_id,
+ "displayName": self.recipe_id_pretty,
+ "description": "Bitbake build environment for the recipe %s compiled for %s" % (self.bpn, self.package_arch),
+ "configurePreset": self.recipe_id,
+ "inheritConfigureEnvironment": True
+ }
+
+ preset_dict = {
+ "version": 3, # cmake 3.21, backward compatible with kirkstone
+ "configurePresets": [preset_dict_configure],
+ "buildPresets": [preset_dict_build],
+ "testPresets": [preset_dict_test]
+ }
+
+ # Finally write the json file
+ json_file = 'CMakeUserPresets.json'
+ json_path = os.path.join(self.real_srctree, json_file)
+ logger.info("Updating CMake preset: %s (%s)" % (json_file, json_path))
+ if not os.path.exists(self.real_srctree):
+ os.makedirs(self.real_srctree)
+ try:
+ with open(json_path) as f:
+ orig_dict = json.load(f)
+ except json.decoder.JSONDecodeError:
+ logger.info(
+ "Decoding %s failed. Probably because of comments in the json file" % json_path)
+ orig_dict = {}
+ except FileNotFoundError:
+ orig_dict = {}
+
+ # Add or update the presets for the recipe and keep other presets
+ for k, v in preset_dict.items():
+ if isinstance(v, list):
+ update_preset = v[0]
+ preset_added = False
+ if k in orig_dict:
+ for index, orig_preset in enumerate(orig_dict[k]):
+ if 'name' in orig_preset:
+ if orig_preset['name'] == update_preset['name']:
+ logger.debug("Updating preset: %s" %
+ orig_preset['name'])
+ orig_dict[k][index] = update_preset
+ preset_added = True
+ break
+ else:
+ logger.debug("keeping preset: %s" %
+ orig_preset['name'])
+ else:
+ logger.warn("preset without a name found")
+ if not preset_added:
+ if not k in orig_dict:
+ orig_dict[k] = []
+ orig_dict[k].append(update_preset)
+ logger.debug("Added preset: %s" %
+ update_preset['name'])
+ else:
+ orig_dict[k] = v
+
+ with open(json_path, 'w') as f:
+ json.dump(orig_dict, f, indent=4)
+
+ def gen_meson_wrapper(self):
+ """Generate a wrapper script to call meson with the cross environment"""
+ bb.utils.mkdirhier(self.ide_sdk_scripts_dir)
+ meson_wrapper = os.path.join(self.ide_sdk_scripts_dir, 'meson')
+ meson_real = os.path.join(
+ self.recipe_sysroot_native, 'usr', 'bin', 'meson.real')
+ with open(meson_wrapper, 'w') as mwrap:
+ mwrap.write("#!/bin/sh" + os.linesep)
+ for var, val in self.exported_vars.items():
+ mwrap.write('export %s="%s"' % (var, val) + os.linesep)
+ mwrap.write("unset CC CXX CPP LD AR NM STRIP" + os.linesep)
+ private_temp = os.path.join(self.b, "meson-private", "tmp")
+ mwrap.write('mkdir -p "%s"' % private_temp + os.linesep)
+ mwrap.write('export TMPDIR="%s"' % private_temp + os.linesep)
+ mwrap.write('exec "%s" "$@"' % meson_real + os.linesep)
+ st = os.stat(meson_wrapper)
+ os.chmod(meson_wrapper, st.st_mode | stat.S_IEXEC)
+ self.meson_wrapper = meson_wrapper
+ self.cmd_compile = meson_wrapper + " compile -C " + self.b
+
+ def which(self, executable):
+ bin_path = shutil.which(executable, path=self.path)
+ if not bin_path:
+ raise DevtoolError(
+ 'Cannot find %s. Probably the recipe %s is not built yet.' % (executable, self.bpn))
+ return bin_path
+
+ @staticmethod
+ def is_elf_file(file_path):
+ with open(file_path, "rb") as f:
+ data = f.read(4)
+ if data == b'\x7fELF':
+ return True
+ return False
+
+ def find_installed_binaries(self):
+ """find all executable elf files in the image directory"""
+ binaries = []
+ d_len = len(self.d)
+ re_so = re.compile('.*\.so[.0-9]*$')
+ for root, _, files in os.walk(self.d, followlinks=False):
+ for file in files:
+ if os.path.islink(file):
+ continue
+ if re_so.match(file):
+ continue
+ abs_name = os.path.join(root, file)
+ if os.access(abs_name, os.X_OK) and RecipeModified.is_elf_file(abs_name):
+ binaries.append(abs_name[d_len:])
+ return sorted(binaries)
+
+ def gen_delete_package_dirs(self):
+ """delete folders of package tasks
+
+ This is a workaround for and issue with recipes having their sources
+ downloaded as file://
+ This likely breaks pseudo like:
+ path mismatch [3 links]: ino 79147802 db
+ .../build/tmp/.../cmake-example/1.0/package/usr/src/debug/
+ cmake-example/1.0-r0/oe-local-files/cpp-example-lib.cpp
+ .../build/workspace/sources/cmake-example/oe-local-files/cpp-example-lib.cpp
+ Since the files are anyway outdated lets deleted them (also from pseudo's db) to workaround this issue.
+ """
+ cmd_lines = ['#!/bin/sh']
+
+ # Set up the appropriate environment
+ newenv = dict(os.environ)
+ for varvalue in self.fakerootenv.split():
+ if '=' in varvalue:
+ splitval = varvalue.split('=', 1)
+ newenv[splitval[0]] = splitval[1]
+
+ # Replicate the environment variables from bitbake
+ for var, val in newenv.items():
+ if not RecipeModified.is_valid_shell_variable(var):
+ continue
+ cmd_lines.append('%s="%s"' % (var, val))
+ cmd_lines.append('export %s' % var)
+
+ # Delete the folders
+ pkg_dirs = ' '.join([os.path.join(self.workdir, d) for d in [
+ "package", "packages-split", "pkgdata", "sstate-install-package", "debugsources.list", "*.spec"]])
+ cmd = "%s rm -rf %s" % (self.fakerootcmd, pkg_dirs)
+ cmd_lines.append('%s || { "%s failed"; exit 1; }' % (cmd, cmd))
+
+ return self.write_script(cmd_lines, 'delete_package_dirs')
+
+ def gen_deploy_target_script(self, args):
+ """Generate a script which does what devtool deploy-target does
+
+ This script is much quicker than devtool target-deploy. Because it
+ does not need to start a bitbake server. All information from tinfoil
+ is hard-coded in the generated script.
+ """
+ cmd_lines = ['#!%s' % str(sys.executable)]
+ cmd_lines.append('import sys')
+ cmd_lines.append('devtool_sys_path = %s' % str(sys.path))
+ cmd_lines.append('devtool_sys_path.reverse()')
+ cmd_lines.append('for p in devtool_sys_path:')
+ cmd_lines.append(' if p not in sys.path:')
+ cmd_lines.append(' sys.path.insert(0, p)')
+ cmd_lines.append('from devtool.deploy import deploy_no_d')
+ args_filter = ['debug', 'dry_run', 'key', 'no_check_space', 'no_host_check',
+ 'no_preserve', 'port', 'show_status', 'ssh_exec', 'strip', 'target']
+ filtered_args_dict = {key: value for key, value in vars(
+ args).items() if key in args_filter}
+ cmd_lines.append('filtered_args_dict = %s' % str(filtered_args_dict))
+ cmd_lines.append('class Dict2Class(object):')
+ cmd_lines.append(' def __init__(self, my_dict):')
+ cmd_lines.append(' for key in my_dict:')
+ cmd_lines.append(' setattr(self, key, my_dict[key])')
+ cmd_lines.append('filtered_args = Dict2Class(filtered_args_dict)')
+ cmd_lines.append(
+ 'setattr(filtered_args, "recipename", "%s")' % self.bpn)
+ cmd_lines.append('deploy_no_d("%s", "%s", "%s", "%s", "%s", "%s", %d, "%s", "%s", filtered_args)' %
+ (self.d, self.workdir, self.path, self.strip_cmd,
+ self.libdir, self.base_libdir, self.max_process,
+ self.fakerootcmd, self.fakerootenv))
+ return self.write_script(cmd_lines, 'deploy_target')
+
+ def gen_install_deploy_script(self, args):
+ """Generate a script which does install and deploy"""
+ cmd_lines = ['#!/bin/bash']
+
+ cmd_lines.append(self.gen_delete_package_dirs())
+
+ # . oe-init-build-env $BUILDDIR
+ # Note: Sourcing scripts with arguments requires bash
+ cmd_lines.append('cd "%s" || { echo "cd %s failed"; exit 1; }' % (
+ self.oe_init_dir, self.oe_init_dir))
+ cmd_lines.append('. "%s" "%s" || { echo ". %s %s failed"; exit 1; }' % (
+ self.oe_init_build_env, self.topdir, self.oe_init_build_env, self.topdir))
+
+ # bitbake -c install
+ cmd_lines.append(
+ 'bitbake %s -c install --force || { echo "bitbake %s -c install --force failed"; exit 1; }' % (self.bpn, self.bpn))
+
+ # Self contained devtool deploy-target
+ cmd_lines.append(self.gen_deploy_target_script(args))
+
+ return self.write_script(cmd_lines, 'install_and_deploy')
+
+ def write_script(self, cmd_lines, script_name):
+ bb.utils.mkdirhier(self.ide_sdk_scripts_dir)
+ script_name_arch = script_name + '_' + self.recipe_id
+ script_file = os.path.join(self.ide_sdk_scripts_dir, script_name_arch)
+ with open(script_file, 'w') as script_f:
+ script_f.write(os.linesep.join(cmd_lines))
+ st = os.stat(script_file)
+ os.chmod(script_file, st.st_mode | stat.S_IEXEC)
+ return script_file
+
+ @property
+ def oe_init_build_env(self):
+ """Find the oe-init-build-env used for this setup"""
+ oe_init_dir = self.oe_init_dir
+ if oe_init_dir:
+ return os.path.join(oe_init_dir, RecipeModified.OE_INIT_BUILD_ENV)
+ return None
+
+ @property
+ def oe_init_dir(self):
+ """Find the directory where the oe-init-build-env is located
+
+ Assumption: There might be a layer with higher priority than poky
+ which provides to oe-init-build-env in the layer's toplevel folder.
+ """
+ if not self.__oe_init_dir:
+ for layer in reversed(self.bblayers):
+ result = subprocess.run(
+ ['git', 'rev-parse', '--show-toplevel'], cwd=layer, capture_output=True)
+ if result.returncode == 0:
+ oe_init_dir = result.stdout.decode('utf-8').strip()
+ oe_init_path = os.path.join(
+ oe_init_dir, RecipeModified.OE_INIT_BUILD_ENV)
+ if os.path.exists(oe_init_path):
+ logger.debug("Using %s from: %s" % (
+ RecipeModified.OE_INIT_BUILD_ENV, oe_init_path))
+ self.__oe_init_dir = oe_init_dir
+ break
+ if not self.__oe_init_dir:
+ logger.error("Cannot find the bitbake top level folder")
+ return self.__oe_init_dir
+
+
+def ide_setup(args, config, basepath, workspace):
+ """Generate the IDE configuration for the workspace"""
+
+ # Explicitely passing some special recipes does not make sense
+ for recipe in args.recipenames:
+ if recipe in ['meta-ide-support', 'build-sysroots']:
+ raise DevtoolError("Invalid recipe: %s." % recipe)
+
+ # Collect information about tasks which need to be bitbaked
+ bootstrap_tasks = []
+ bootstrap_tasks_late = []
+ tinfoil = setup_tinfoil(config_only=False, basepath=basepath)
+ try:
+ # define mode depending on recipes which need to be processed
+ recipes_image_names = []
+ recipes_modified_names = []
+ recipes_other_names = []
+ for recipe in args.recipenames:
+ try:
+ check_workspace_recipe(
+ workspace, recipe, bbclassextend=True)
+ recipes_modified_names.append(recipe)
+ except DevtoolError:
+ recipe_d = parse_recipe(
+ config, tinfoil, recipe, appends=True, filter_workspace=False)
+ if not recipe_d:
+ raise DevtoolError("Parsing recipe %s failed" % recipe)
+ if bb.data.inherits_class('image', recipe_d):
+ recipes_image_names.append(recipe)
+ else:
+ recipes_other_names.append(recipe)
+
+ invalid_params = False
+ if args.mode == DevtoolIdeMode.shared:
+ if len(recipes_modified_names):
+ logger.error("In shared sysroots mode modified recipes %s cannot be handled." % str(
+ recipes_modified_names))
+ invalid_params = True
+ if args.mode == DevtoolIdeMode.modified:
+ if len(recipes_other_names):
+ logger.error("Only in shared sysroots mode not modified recipes %s can be handled." % str(
+ recipes_other_names))
+ invalid_params = True
+ if len(recipes_image_names) != 1:
+ logger.error(
+ "One image recipe is required as the rootfs for the remote development.")
+ invalid_params = True
+ for modified_recipe_name in recipes_modified_names:
+ if modified_recipe_name.startswith('nativesdk-') or modified_recipe_name.endswith('-native'):
+ logger.error(
+ "Only cross compiled recipes are support. %s is not cross." % modified_recipe_name)
+ invalid_params = True
+
+ if invalid_params:
+ raise DevtoolError("Invalid parameters are passed.")
+
+ # For the shared sysroots mode, add all dependencies of all the images to the sysroots
+ # For the modified mode provide one rootfs and the corresponding debug symbols via rootfs-dbg
+ recipes_images = []
+ for recipes_image_name in recipes_image_names:
+ logger.info("Using image: %s" % recipes_image_name)
+ recipe_image = RecipeImage(recipes_image_name)
+ recipe_image.initialize(config, tinfoil)
+ bootstrap_tasks += recipe_image.bootstrap_tasks
+ recipes_images.append(recipe_image)
+
+ # Provide a Direct SDK with shared sysroots
+ recipes_not_modified = []
+ if args.mode == DevtoolIdeMode.shared:
+ ide_support = RecipeMetaIdeSupport()
+ ide_support.initialize(config, tinfoil)
+ bootstrap_tasks += ide_support.bootstrap_tasks
+
+ logger.info("Adding %s to the Direct SDK sysroots." %
+ str(recipes_other_names))
+ for recipe_name in recipes_other_names:
+ recipe_not_modified = RecipeNotModified(recipe_name)
+ bootstrap_tasks += recipe_not_modified.bootstrap_tasks
+ recipes_not_modified.append(recipe_not_modified)
+
+ build_sysroots = RecipeBuildSysroots()
+ build_sysroots.initialize(config, tinfoil)
+ bootstrap_tasks_late += build_sysroots.bootstrap_tasks
+ shared_env = SharedSysrootsEnv()
+ shared_env.initialize(ide_support, build_sysroots)
+
+ recipes_modified = []
+ if args.mode == DevtoolIdeMode.modified:
+ logger.info("Setting up workspaces for modified recipe: %s" %
+ str(recipes_modified_names))
+ gdbs_cross = {}
+ for recipe_name in recipes_modified_names:
+ recipe_modified = RecipeModified(recipe_name)
+ recipe_modified.initialize(config, workspace, tinfoil)
+ bootstrap_tasks += recipe_modified.bootstrap_tasks
+ recipes_modified.append(recipe_modified)
+
+ if recipe_modified.target_arch not in gdbs_cross:
+ target_device = TargetDevice(args)
+ gdb_cross = RecipeGdbCross(
+ args, recipe_modified.target_arch, target_device)
+ gdb_cross.initialize(config, workspace, tinfoil)
+ bootstrap_tasks += gdb_cross.bootstrap_tasks
+ gdbs_cross[recipe_modified.target_arch] = gdb_cross
+ recipe_modified.gdb_cross = gdbs_cross[recipe_modified.target_arch]
+
+ finally:
+ tinfoil.shutdown()
+
+ if not args.skip_bitbake:
+ bb_cmd = 'bitbake '
+ if args.bitbake_k:
+ bb_cmd += "-k "
+ bb_cmd_early = bb_cmd + ' '.join(bootstrap_tasks)
+ exec_build_env_command(
+ config.init_path, basepath, bb_cmd_early, watch=True)
+ if bootstrap_tasks_late:
+ bb_cmd_late = bb_cmd + ' '.join(bootstrap_tasks_late)
+ exec_build_env_command(
+ config.init_path, basepath, bb_cmd_late, watch=True)
+
+ for recipe_image in recipes_images:
+ if (recipe_image.gdbserver_missing):
+ logger.warning(
+ "gdbserver not installed in image %s. Remote debugging will not be available" % recipe_image)
+
+ if recipe_image.combine_dbg_image is False:
+ logger.warning(
+ 'IMAGE_CLASSES += "image-combined-dbg" is missing for image %s. Remote debugging will not find debug symbols from rootfs-dbg.' % recipe_image)
+
+ # Instantiate the active IDE plugin
+ ide = ide_plugins[args.ide]()
+ if args.mode == DevtoolIdeMode.shared:
+ ide.setup_shared_sysroots(shared_env)
+ elif args.mode == DevtoolIdeMode.modified:
+ for recipe_modified in recipes_modified:
+ if recipe_modified.build_tool is BuildTool.CMAKE:
+ recipe_modified.cmake_preset()
+ if recipe_modified.build_tool is BuildTool.MESON:
+ recipe_modified.gen_meson_wrapper()
+ ide.setup_modified_recipe(
+ args, recipe_image, recipe_modified)
+ else:
+ raise DevtoolError("Must not end up here.")
+
+
+def register_commands(subparsers, context):
+ """Register devtool subcommands from this plugin"""
+
+ global ide_plugins
+
+ # Search for IDE plugins in all sub-folders named ide_plugins where devtool seraches for plugins.
+ pluginpaths = [os.path.join(path, 'ide_plugins')
+ for path in context.pluginpaths]
+ ide_plugin_modules = []
+ for pluginpath in pluginpaths:
+ scriptutils.load_plugins(logger, ide_plugin_modules, pluginpath)
+
+ for ide_plugin_module in ide_plugin_modules:
+ if hasattr(ide_plugin_module, 'register_ide_plugin'):
+ ide_plugin_module.register_ide_plugin(ide_plugins)
+ # Sort plugins according to their priority. The first entry is the default IDE plugin.
+ ide_plugins = dict(sorted(ide_plugins.items(),
+ key=lambda p: p[1].ide_plugin_priority(), reverse=True))
+
+ parser_ide_sdk = subparsers.add_parser('ide-sdk', group='working', order=50, formatter_class=RawTextHelpFormatter,
+ help='Setup the SDK and configure the IDE')
+ parser_ide_sdk.add_argument(
+ 'recipenames', nargs='+', help='Generate an IDE configuration suitable to work on the given recipes.\n'
+ 'Depending on the --mode paramter different types of SDKs and IDE configurations are generated.')
+ parser_ide_sdk.add_argument(
+ '-m', '--mode', type=DevtoolIdeMode, default=DevtoolIdeMode.modified,
+ help='Different SDK types are supported:\n'
+ '- "' + DevtoolIdeMode.modified.name + '" (default):\n'
+ ' devtool modify creates a workspace to work on the source code of a recipe.\n'
+ ' devtool ide-sdk builds the SDK and generates the IDE configuration(s) in the workspace directorie(s)\n'
+ ' Usage example:\n'
+ ' devtool modify cmake-example\n'
+ ' devtool ide-sdk cmake-example core-image-minimal\n'
+ ' Start the IDE in the workspace folder\n'
+ ' At least one devtool modified recipe plus one image recipe are required:\n'
+ ' The image recipe is used to generate the target image and the remote debug configuration.\n'
+ '- "' + DevtoolIdeMode.shared.name + '":\n'
+ ' Usage example:\n'
+ ' devtool ide-sdk -m ' + DevtoolIdeMode.shared.name + ' recipe(s)\n'
+ ' This command generates a cross-toolchain as well as the corresponding shared sysroot directories.\n'
+ ' To use this tool-chain the environment-* file found in the deploy..image folder needs to be sourced into a shell.\n'
+ ' In case of VSCode and cmake the tool-chain is also exposed as a cmake-kit')
+ default_ide = list(ide_plugins.keys())[0]
+ parser_ide_sdk.add_argument(
+ '-i', '--ide', choices=ide_plugins.keys(), default=default_ide,
+ help='Setup the configuration for this IDE (default: %s)' % default_ide)
+ parser_ide_sdk.add_argument(
+ '-t', '--target', default='root@192.168.7.2',
+ help='Live target machine running an ssh server: user@hostname.')
+ parser_ide_sdk.add_argument(
+ '-G', '--gdbserver-port-start', default="1234", help='port where gdbserver is listening.')
+ parser_ide_sdk.add_argument(
+ '-c', '--no-host-check', help='Disable ssh host key checking', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-e', '--ssh-exec', help='Executable to use in place of ssh')
+ parser_ide_sdk.add_argument(
+ '-P', '--port', help='Specify ssh port to use for connection to the target')
+ parser_ide_sdk.add_argument(
+ '-I', '--key', help='Specify ssh private key for connection to the target')
+ parser_ide_sdk.add_argument(
+ '--skip-bitbake', help='Generate IDE configuration but skip calling bibtake to update the SDK.', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-k', '--bitbake-k', help='Pass -k parameter to bitbake', action='store_true')
+ parser_ide_sdk.add_argument(
+ '--no-strip', help='Do not strip executables prior to deploy', dest='strip', action='store_false')
+ parser_ide_sdk.add_argument(
+ '-n', '--dry-run', help='List files to be undeployed only', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-s', '--show-status', help='Show progress/status output', action='store_true')
+ parser_ide_sdk.add_argument(
+ '-p', '--no-preserve', help='Do not preserve existing files', action='store_true')
+ parser_ide_sdk.add_argument(
+ '--no-check-space', help='Do not check for available space before deploying', action='store_true')
+ parser_ide_sdk.add_argument(
+ '--debug-build-config', help='Use debug build flags, for example set CMAKE_BUILD_TYPE=Debug', action='store_true')
+ parser_ide_sdk.set_defaults(func=ide_setup)