Skip to content

Conversation

@rpardini
Copy link
Member

@rpardini rpardini commented Jan 10, 2026

"get completely rid of dead code toolchain stuff", pt2

  • 🌱 drop find_toolchains, SKIP_EXTERNAL_TOOLCHAINS and all $toolchain PATH injections
    • we've had SKIP_EXTERNAL_TOOLCHAINS=yes for ~5 years now
    • drop all usages, mostly through find_toolchains()
    • drop all manual PATH env injections (we've centralized if ever needed)
  • 🌿 drop UBOOT_USE_GCC, KERNEL_USE_GCC, ATF_USE_GCC completely
    • also CRUST_USE_GCC
    • those don't serve any purpose and cause confusion
  • 🍃 u-boot: fix and unify CROSS_COMPILE and PATH after predatory maintenance
    • also avoid spurious space in CROSS_COMPILE when CCACHE is not set
  • 🍀 "get completely rid of dead code toolchain stuff", pt2
    • this stuff has been laying around, unused, for years
  • 🐸 lib: drop unused functions/general/downloads.sh (get_urls())
    • dead code for a very long time

Summary by CodeRabbit

  • Refactor

    • Simplified compiler and toolchain handling: removed many version-constraint checks, always-normalized compiler names, and switched to direct compiler invocation and a single-compiler workflow with centralized cross-compile handling.
  • Chores

    • Removed external toolchain download, verification, caching, and discovery flows; eliminated related PATH augmentation and mountpoint entries.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 10, 2026

📝 Walkthrough

Walkthrough

This PR removes external toolchain discovery/download and many GCC-version guard variables, and updates build scripts to call compilers directly (removing PATH/toolchain augmentation, find_toolchain, and download/verify logic) across configuration and compilation functions.

Changes

Cohort / File(s) Summary
Config: removed GCC/toolchain flags
config/boards/odroidc1.conf, config/sources/amd64.conf, config/sources/arm64.conf, config/sources/armhf.conf, config/sources/families/d1.conf, config/sources/families/spacemit.conf, config/sources/families/thead.conf, config/sources/families/uefi-loong64.conf, config/sources/families/uefi-riscv64.conf, config/sources/loong64.conf, config/sources/riscv64.conf
Removed declarations like UBOOT_USE_GCC, KERNEL_USE_GCC, ATF_USE_GCC, CRUST_USE_GCC, and SKIP_EXTERNAL_TOOLCHAINS. Audit any consumers expecting these globals.
Config: compiler normalization / fixed compilers
config/sources/arm64.conf, config/sources/armhf.conf, config/sources/families/mvebu64.conf, config/sources/families/include/mvebu-helios4.inc, config/sources/families/include/rockchip64_common.inc
Replaced conditional normalization with unconditional replacements or fixed *_COMPILER values (e.g., ATF_COMPILER='aarch64-linux-gnu-'). Verify assumptions about -none- variants and removed SKIP_EXTERNAL_TOOLCHAINS gating.
Family includes: small defaults removed
config/sources/families/include/crust_firmware.inc
Removed default CRUST_USE_GCC initialization. Check crust/toolchain expectations.
Families: board-specific compile invocations
config/sources/families/jethub.conf, config/sources/families/mvebu64.conf
Switched jethub tools to direct compiler invocations (no PATH augmentation); unified ATF_COMPILER for mvebu64. Review board-specific compile commands.
External toolchain & download plumbing removed
lib/functions/host/external-toolchains.sh, lib/functions/general/downloads.sh
Entire external-toolchain fetch/prune flow and download+verify/torrent/GPG verification utilities removed. Search for remaining callsites and re-evaluate mirror/verify behavior.
Compilation: removed toolchain discovery / PATH prepending
lib/functions/compilation/atf.sh, lib/functions/compilation/crust.sh, lib/functions/compilation/kernel-make.sh, lib/functions/compilation/kernel.sh, lib/functions/compilation/uboot.sh, lib/functions/compilation/utils-compilation.sh
Deleted find_toolchain() and toolchain PATH augmentation; introduced centralized CROSS_COMPILE handling for U-Boot; compiler/version reporting simplified to direct compiler invocation. Validate CROSS_COMPILE propagation and compiler detection logic.
Host preparation / mountpoints / python PATH
lib/functions/host/mountpoints.sh, lib/functions/host/prepare-host.sh, lib/functions/general/python-tools.sh
Removed cache/toolchain mountpoint and external-toolchain download step from host preparation; removed toolchain prefix from Python PATH augmentation. Ensure host setup remains adequate.
Configuration init changes
lib/functions/configuration/main-config.sh
Removed default SKIP_EXTERNAL_TOOLCHAINS and several early-exit checks tied to *_USE_GCC flags. Confirm configuration validation expectations.
Library init / sourcing order
lib/library-functions.sh
Reordered some sourced modules and standardized errtrace/errexit usage around sourcing. Confirm initialization/load-order effects.

Sequence Diagram(s)

sequenceDiagram
  participant Host as Build Scripts
  participant Downloader as Download/Verify (removed)
  participant Cache as Toolchain Cache (removed)
  participant Compiler as Compiler Binary
  participant Builder as Target Build (ATF/KERNEL/UBOOT)

  Note over Host,Cache: OLD FLOW
  Host->>Downloader: request download & verify toolchain
  Downloader->>Cache: populate SRC/cache/toolchain
  Host->>Host: find_toolchain() → toolchain path
  Host->>Compiler: invoke via PATH augmented with toolchain
  Compiler->>Builder: compile using toolchain-prefixed invocations

  Note over Host,Compiler: NEW FLOW
  Host->>Compiler: invoke compiler binary directly (no download/find)
  Compiler->>Builder: compile using direct compiler invocation
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Suggested reviewers

  • clee
  • prahal
  • igorpecovnik
  • EvilOlaf
  • chainsx

Poem

🐰
I nibbled flags and loosened bands,
Took cached toolchains from our hands,
Compilers hop straight to the race,
No PATH detours, a simpler pace.
Carrots for clean build lands! 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 60.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly and accurately reflects the main change: removing dead toolchain-related code as a continuation (pt2) of previous work.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added 02 Milestone: First quarter release size/large PR with 250 lines or more Needs review Seeking for review Hardware Hardware related like kernel, U-Boot, ... Framework Framework components labels Jan 10, 2026
@rpardini rpardini marked this pull request as ready for review January 10, 2026 10:20
@rpardini rpardini requested review from a team and igorpecovnik as code owners January 10, 2026 10:20
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
config/sources/families/mvebu64.conf (1)

33-34: Add declare -g to ATF_COMPILER for consistency with other family variables.

Currently it's the only family variable in this file not declared global. This change also documents that the aarch64-linux-gnu- toolchain (added to host dependencies via prepare-host.sh for arm64 builds) is intentionally required here, overriding the aarch64-none-linux-gnu- default from arm64.conf.

Suggested change
-ATF_COMPILER='aarch64-linux-gnu-'
+declare -g ATF_COMPILER='aarch64-linux-gnu-'
config/sources/families/jethub.conf (1)

141-144: Remove unused toolchain variable declaration.

Line 142 declares local toolchain but it's never assigned or used in the function. This appears to be a leftover from the removed toolchain resolution code.

♻️ Suggested fix
 buildjethomecmds() {
-	local toolchain
-
 	display_alert "Compiler version" "${UBOOT_COMPILER}gcc $(eval env "${UBOOT_COMPILER}gcc" -dumpversion)" "info"
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 9e7f6dc and 0da67b1.

📒 Files selected for processing (29)
  • config/boards/odroidc1.conf
  • config/sources/amd64.conf
  • config/sources/arm64.conf
  • config/sources/armhf.conf
  • config/sources/families/d1.conf
  • config/sources/families/include/crust_firmware.inc
  • config/sources/families/include/mvebu-helios4.inc
  • config/sources/families/include/rockchip64_common.inc
  • config/sources/families/jethub.conf
  • config/sources/families/mvebu64.conf
  • config/sources/families/spacemit.conf
  • config/sources/families/thead.conf
  • config/sources/families/uefi-loong64.conf
  • config/sources/families/uefi-riscv64.conf
  • config/sources/loong64.conf
  • config/sources/riscv64.conf
  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/crust.sh
  • lib/functions/compilation/kernel-make.sh
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/utils-compilation.sh
  • lib/functions/configuration/main-config.sh
  • lib/functions/general/downloads.sh
  • lib/functions/general/python-tools.sh
  • lib/functions/host/external-toolchains.sh
  • lib/functions/host/mountpoints.sh
  • lib/functions/host/prepare-host.sh
  • lib/library-functions.sh
💤 Files with no reviewable changes (18)
  • lib/functions/host/mountpoints.sh
  • config/sources/families/uefi-loong64.conf
  • config/sources/families/include/mvebu-helios4.inc
  • lib/functions/compilation/utils-compilation.sh
  • config/sources/families/uefi-riscv64.conf
  • config/sources/riscv64.conf
  • config/sources/families/thead.conf
  • config/sources/families/spacemit.conf
  • lib/functions/host/external-toolchains.sh
  • config/boards/odroidc1.conf
  • lib/functions/general/downloads.sh
  • config/sources/loong64.conf
  • config/sources/amd64.conf
  • config/sources/families/include/rockchip64_common.inc
  • config/sources/families/include/crust_firmware.inc
  • lib/functions/configuration/main-config.sh
  • config/sources/families/d1.conf
  • lib/functions/host/prepare-host.sh
🧰 Additional context used
🧠 Learnings (49)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8328
File: lib/functions/compilation/patch/drivers_network.sh:542-545
Timestamp: 2025-06-24T10:08:40.313Z
Learning: In the Armbian build system, when a PR removes build support for a specific kernel version, version check issues for that removed version become practically irrelevant even if they appear incorrect in isolation. Context about which kernel versions are being deprecated/removed is important for understanding the impact of version-related code changes.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 9159
File: patch/u-boot/u-boot-genio/0026-dts-configs-add-Grinn-GenioSBC-510.patch:161-161
Timestamp: 2026-01-03T20:46:29.189Z
Learning: For the Armbian genio family (config/sources/families/genio.conf and patch/u-boot/u-boot-genio/), when reviewing PRs that include vendor U-Boot patches from Collabora, avoid flagging potential issues in board configurations that are out of scope for the PR's primary focus (e.g., don't flag Genio 510/700 board issues when the PR is focused on radxa-nio-12l/Genio 1200). The maintainer prioritizes keeping vendor patches close to upstream for easier re-copying and maintenance, even if secondary board configs have potential mismatches.
<!-- </add_learning>
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/armhf.conf
  • config/sources/arm64.conf
  • lib/functions/compilation/uboot.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-10-14T05:08:11.785Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8754
File: config/boards/bestv-r3300-l.csc:14-16
Timestamp: 2025-10-14T05:08:11.785Z
Learning: In the Armbian build system, BOOTBRANCH_BOARD is a valid framework variable used as a fallback when BOOTBRANCH is unset. The framework checks BOOTBRANCH_BOARD before applying the default bootloader branch value (see config/sources/common.conf). Board configuration files can use BOOTBRANCH_BOARD to specify the bootloader branch.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-05-16T15:34:34.672Z
Learnt from: Grippy98
Repo: armbian/build PR: 8202
File: config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh:2-3
Timestamp: 2025-05-16T15:34:34.672Z
Learning: The shell scripts in the Armbian build system's desktop configuration files, such as config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh, rely on environment variables like $SRC and $destination that are expected to be set externally before the script is executed.

Applied to files:

  • config/sources/families/mvebu64.conf
  • lib/library-functions.sh
  • config/sources/armhf.conf
  • lib/functions/compilation/kernel-make.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-09-07T17:39:32.272Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8586
File: config/boards/nanopi-r76s.conf:15-21
Timestamp: 2025-09-07T17:39:32.272Z
Learning: In the Armbian build system, the variables $BOARD and $SDCARD are always set by the build framework, so guard checks for these variables are unnecessary in board configuration files and hook functions.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/armhf.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-12-12T23:09:56.813Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9058
File: config/sources/families/spacemit.conf:39-45
Timestamp: 2025-12-12T23:09:56.813Z
Learning: In Armbian build configs for vendor kernel sources, prefer the following branch naming conventions: use 'vendor' or 'vendor-rt' for stable vendor releases, and 'vendor-edge' for bleeding-edge/pre-release vendor versions. The 'edge' naming without the 'vendor-' prefix is reserved for mainline kernel branches. Apply this pattern to family config files under config/sources/families (e.g., spacemit.conf) to ensure consistent vendor kernel sourcing naming across the repository.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-12-18T23:40:41.627Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:41.627Z
Learning: In the Armbian build framework, scripts run with set -e, so a non-zero exit status will abort the script. During reviews, assume failures will stop execution unless explicitly handled. Verify that commands that must fail are checked, errors are propagated, and any critical steps have proper error handling (e.g., using pipefail where appropriate, checking exit codes, and not masking failures).

Applied to files:

  • lib/functions/general/python-tools.sh
  • lib/library-functions.sh
  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/crust.sh
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: In Armbian build framework, extensions are loaded and executed via lib/functions/general/extensions.sh using call_extension_method. The framework sets set -o errexit and set -o errtrace globally, and individual commands run with pipefail protection through the command execution functions.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-04-28T08:27:26.890Z
Learnt from: leggewie
Repo: armbian/build PR: 8133
File: extensions/apa.sh:1-2
Timestamp: 2025-04-28T08:27:26.890Z
Learning: In the Armbian build system, extension scripts in the `extensions/` directory contain hook functions and are meant to be sourced, not executed directly. These scripts don't require a shebang or `set -euo pipefail`.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-09-12T19:28:38.491Z
Learnt from: Grippy98
Repo: armbian/build PR: 8622
File: config/sources/families/k3.conf:66-66
Timestamp: 2025-09-12T19:28:38.491Z
Learning: In the Armbian k3 family build system (config/sources/families/k3.conf), builds do not fail when TIBOOT3_BOOTCONFIG is unset, even though tiboot3.bin is still listed in UBOOT_TARGET_MAP. The gating mechanism in pre_config_uboot_target__build_first_stage function works as intended to conditionally build/copy tiboot3.bin only when TIBOOT3_BOOTCONFIG is defined.

Applied to files:

  • lib/library-functions.sh
  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
  • config/sources/arm64.conf
  • lib/functions/compilation/uboot.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-09-09T07:30:22.419Z
Learnt from: amazingfate
Repo: armbian/build PR: 8595
File: lib/functions/compilation/patch/drivers_network.sh:0-0
Timestamp: 2025-09-09T07:30:22.419Z
Learning: RTW_WARN_LMT sed workaround in driver_rtl8852bs() function in lib/functions/compilation/patch/drivers_network.sh is necessary for kernel 6.1 compatibility, even when the upstream wifi-rtl8852bs driver has the macro defined for newer kernels. The workaround ensures cross-kernel compatibility from 6.1 to 6.16+.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-09-05T12:31:03.067Z
Learnt from: Ayush1325
Repo: armbian/build PR: 8382
File: packages/bsp/usb-gadget-network/setup-usbgadget-network-multi.sh:104-105
Timestamp: 2025-09-05T12:31:03.067Z
Learning: Scripts using `set -euo pipefail` provide comprehensive error handling that automatically exits on any command failure, making explicit error handling for function calls redundant.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-06-22T00:45:26.182Z
Learnt from: djurny
Repo: armbian/build PR: 8315
File: lib/functions/rootfs/distro-agnostic.sh:54-68
Timestamp: 2025-06-22T00:45:26.182Z
Learning: In Armbian build system, external command dependencies like envsubst are handled by adding the required packages (e.g., gettext for envsubst) to host_dependencies in adaptative_prepare_host_dependencies function in lib/functions/host/prepare-host.sh, rather than checking command availability at runtime.

Applied to files:

  • lib/library-functions.sh
  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
  • config/sources/arm64.conf
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/kernel-make.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-12-18T23:40:55.905Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:55.905Z
Learning: In the Armbian build framework, host dependencies are strictly controlled, ensuring that specific tools like `zstdmt` are guaranteed to be available in the build environment.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-07-23T10:01:41.310Z
Learnt from: amazingfate
Repo: armbian/build PR: 8419
File: lib/functions/host/prepare-host.sh:272-275
Timestamp: 2025-07-23T10:01:41.310Z
Learning: In the Armbian build system, the design philosophy is to fail fast when host dependencies are not met rather than gracefully skipping unsupported architectures. This ensures build environment consistency and prevents silent failures. Host dependency checks should be explicit and non-negotiable.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
  • config/sources/arm64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-08-30T06:48:09.091Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T06:48:09.091Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the user prefers flexible grep patterns over anchored ones for BTRFS configuration checks, but agrees to use quiet grep (-q) to avoid polluting build logs.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
  • lib/functions/compilation/kernel.sh
  • config/sources/arm64.conf
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged can properly handle shell redirection operators like >> when passed as arguments, contrary to typical command wrapper behavior. The function has been tested to work correctly with redirection for appending to files like armbianEnv.txt.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: The run_host_command_logged function in the Armbian build system works by executing all its arguments through `bash -c "$*"`. This means shell redirection operators like ">>" are properly processed by bash, making commands like `run_host_command_logged echo "content" >> file.txt` work correctly. The function does not treat redirection operators as literal arguments.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged properly handles shell redirection operators like ">>" when passed as string arguments. This pattern is used consistently throughout the codebase, such as in lib/functions/rootfs/distro-agnostic.sh where it's used to append to armbianEnv.txt files. The function has been tested and confirmed to work correctly with this syntax.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: Armbian build framework extensions are NOT designed to run standalone but are called by the supervisor. The framework provides environment variables like USERPATCHES_PATH and SDCARD, and commands are executed with protection via run_host_command_logged and chroot_sdcard functions that use bash -e -o pipefail.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-09-12T09:49:31.957Z
Learnt from: amazingfate
Repo: armbian/build PR: 8617
File: lib/functions/compilation/kernel.sh:126-127
Timestamp: 2025-09-12T09:49:31.957Z
Learning: In the Armbian build system, the "all" target in kernel build has been used for a long time without issues. The "all" target builds vmlinux/Image/Image.gz defaults for the architecture and works correctly alongside KERNEL_IMAGE_TYPE in the build_targets_build array.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • config/sources/armhf.conf
📚 Learning: 2025-06-25T03:40:52.109Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8330
File: config/sources/families/sun55iw3.conf:32-36
Timestamp: 2025-06-25T03:40:52.109Z
Learning: In Armbian build system configuration files like config/sources/families/*.conf, when KERNELSOURCE is not explicitly declared in a case branch, the system falls back to a default KERNELSOURCE value, so missing KERNELSOURCE declarations are not critical issues.

Applied to files:

  • config/sources/armhf.conf
📚 Learning: 2025-10-03T11:42:46.660Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8705
File: .github/workflows/rewrite-kernel-configs.yml:96-169
Timestamp: 2025-10-03T11:42:46.660Z
Learning: In the Armbian build repository's kernel config rewrite workflow (.github/workflows/rewrite-kernel-configs.yml), deletion of kernel config files does not need to be handled. The workflow intentionally only captures ACMR (added/copied/modified/renamed) changes and does not need to propagate deletions to the aggregator.

Applied to files:

  • config/sources/armhf.conf
📚 Learning: 2025-09-27T21:50:15.915Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sunxi64-current.config:94-94
Timestamp: 2025-09-27T21:50:15.915Z
Learning: When kernel config files are generated through Armbian's automated process (previous config → armbian-kernel.sh changes → make oldconfig → Armbian machinery processing), manual config file edits are not appropriate since they would be overwritten. Deprecated option handling should be implemented in the automated tooling instead.

Applied to files:

  • config/sources/armhf.conf
📚 Learning: 2025-12-28T01:49:34.661Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9136
File: lib/functions/compilation/armbian-kernel.sh:529-537
Timestamp: 2025-12-28T01:49:34.661Z
Learning: In lib/functions/compilation/armbian-kernel.sh's opts_m handling, checking .config (kernel defconfig) is problematic because savedefconfig elides options matching defconfig, making it impossible to distinguish overlay silence from defconfig agreement. The correct approach is to check only kernel_config_source_filename (the overlay) for explicit =y, otherwise default to =m, letting savedefconfig handle deduplication with defconfig automatically.

Applied to files:

  • config/sources/armhf.conf
  • lib/functions/compilation/kernel.sh
  • config/sources/arm64.conf
  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-09-22T21:52:01.225Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-201
Timestamp: 2025-09-22T21:52:01.225Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the kernel_config_modifying_hashes array is not universally required for all kernel configuration functions - some functions like armbian_kernel_config__netkit() operate without it, and adding entries with '=m' would be incorrect when the actual result might be '=y' for options already built-in.

Applied to files:

  • config/sources/armhf.conf
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-07-17T04:12:33.125Z
Learnt from: pyavitz
Repo: armbian/build PR: 8388
File: config/boards/kickpik2b.conf:1-14
Timestamp: 2025-07-17T04:12:33.125Z
Learning: In the Armbian build system, board configuration files (*.conf) follow a project standard of not including shebang lines, even though they contain bash code and are sourced by the build system. This is an established Armbian convention that individual contributors are expected to follow, and changes to this standard would require broader project maintainer approval.

Applied to files:

  • config/sources/armhf.conf
  • lib/functions/compilation/kernel-make.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-06-12T21:03:39.686Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:148-161
Timestamp: 2025-06-12T21:03:39.686Z
Learning: In Armbian U-Boot bootscripts, the `${cpu}` environment variable is always pre-set by U-Boot (or defaults to a valid value), so additional guards against it being unset are unnecessary.

Applied to files:

  • config/sources/armhf.conf
  • config/sources/arm64.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-11-13T14:50:44.662Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8925
File: lib/functions/host/docker.sh:141-141
Timestamp: 2025-11-13T14:50:44.662Z
Learning: In the Armbian build system, certain boards have U-Boot that doesn't build correctly on ubuntu:noble but works on ubuntu:jammy. For these boards, DOCKER_ARMBIAN_BASE_IMAGE can be set to "ubuntu:jammy" via an extension file loaded before docker_cli_prepare() runs, allowing legacy toolchains to work while the community works on proper fixes with limited resources.

Applied to files:

  • config/sources/armhf.conf
  • config/sources/arm64.conf
  • lib/functions/compilation/uboot.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-08-02T05:46:10.664Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-02T05:46:10.664Z
Learning: In the Armbian build system, the modern recommended approach for kernel configuration is to use the kernel-config command via "./compile.sh BOARD=boardname BRANCH=branchname kernel-config" instead of the deprecated KERNEL_CONFIGURE=yes flag. This provides a two-step workflow: configure using menuconfig, then build, with better transparency and control over configuration changes.

Applied to files:

  • config/sources/armhf.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-08-21T08:10:25.459Z
Learnt from: leggewie
Repo: armbian/build PR: 8524
File: config/boards/nanopiduo2.csc:12-12
Timestamp: 2025-08-21T08:10:25.459Z
Learning: KERNEL_TARGET and KERNEL_TEST_TARGET in Armbian build system do not have enforced validation relationships. KERNEL_TARGET is used for interactive menu ordering and branch validation, while KERNEL_TEST_TARGET is used for build list generation and recorded in /etc/armbian-release. No existing codebase validation enforces that KERNEL_TEST_TARGET values must be present in KERNEL_TARGET.

Applied to files:

  • config/sources/armhf.conf
📚 Learning: 2025-09-22T21:59:36.334Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:200-200
Timestamp: 2025-09-22T21:59:36.334Z
Learning: Functions named with the pattern `armbian_kernel_config__*` in lib/functions/compilation/armbian-kernel.sh are automatically discovered and invoked by Armbian's extension system via metaprogramming using `compgen -A function`, without requiring explicit registration or calls.

Applied to files:

  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-05-18T00:59:02.274Z
Learnt from: djurny
Repo: armbian/build PR: 8203
File: config/bootscripts/boot-sunxi.cmd:34-38
Timestamp: 2025-05-18T00:59:02.274Z
Learning: In U-Boot shell environments, `itest` silently handles non-numeric values without producing errors, unlike in bash or other standard shells. Additionally, U-Boot doesn't support stderr redirection with syntax like `2>/dev/null`. The standard pattern for verbosity checking in U-Boot is `if test "${verbosity}" != "" ; then if itest ${verbosity} -gt 0 ; then...`, which correctly handles both numeric and non-numeric values.

Applied to files:

  • config/sources/arm64.conf
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • config/sources/arm64.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/kernel-make.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2026-01-03T20:46:29.189Z
Learnt from: rpardini
Repo: armbian/build PR: 9159
File: patch/u-boot/u-boot-genio/0026-dts-configs-add-Grinn-GenioSBC-510.patch:161-161
Timestamp: 2026-01-03T20:46:29.189Z
Learning: For the Armbian genio family (config/sources/families/genio.conf and patch/u-boot/u-boot-genio/), when reviewing PRs that include vendor U-Boot patches from Collabora, avoid flagging potential issues in board configurations that are out of scope for the PR's primary focus (e.g., don't flag Genio 510/700 board issues when the PR is focused on radxa-nio-12l/Genio 1200). The maintainer prioritizes keeping vendor patches close to upstream for easier re-copying and maintenance, even if secondary board configs have potential mismatches.
<!-- </add_learning>

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:50:04.845Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-edge.config:80-82
Timestamp: 2025-09-27T21:50:04.845Z
Learning: In the Armbian build system, kernel configuration files are generated through this automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-09-27T21:49:27.188Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-k3-edge.config:97-99
Timestamp: 2025-09-27T21:49:27.188Z
Learning: make oldconfig preserves existing deprecated kernel options and only prompts for new configuration options, unlike make defconfig which would auto-correct by removing deprecated options. This explains why deprecated options like CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD might persist through the automated Armbian kernel configuration generation process.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:47:58.020Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-bcm2711-edge.config:859-861
Timestamp: 2025-09-27T21:47:58.020Z
Learning: In the Armbian build system, kernel configuration files in config/kernel/ are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-09-27T21:49:55.796Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-current.config:78-80
Timestamp: 2025-09-27T21:49:55.796Z
Learning: In the Armbian build system, kernel configuration files are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-09-22T21:52:01.225Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-201
Timestamp: 2025-09-22T21:52:01.225Z
Learning: The kernel_config_set_m function in lib/functions/compilation/armbian-kernel.sh preserves existing 'y' (built-in) settings and only sets options to 'm' (module) when they are not already built-in, achieving "prefer modules but allow built-ins" behavior.

Applied to files:

  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-10-26T12:56:29.185Z
Learnt from: rpardini
Repo: armbian/build PR: 8820
File: config/sources/families/include/meson64_common.inc:51-53
Timestamp: 2025-10-26T12:56:29.185Z
Learning: In the Armbian build framework, scripts/config correctly handles kernel configuration option names both with and without the CONFIG_ prefix, so opts_m+=("CONFIG_RTL8822CS") and opts_m+=("RTL8822CS") are both valid and will work correctly.

Applied to files:

  • lib/functions/compilation/kernel-make.sh
📚 Learning: 2025-08-03T15:21:20.148Z
Learnt from: pyavitz
Repo: armbian/build PR: 8455
File: config/sources/families/sun50iw1.conf:19-24
Timestamp: 2025-08-03T15:21:20.148Z
Learning: In the Armbian build system, when copying firmware files during family_tweaks_s(), use /lib/firmware/updates/ instead of /lib/firmware/ to avoid conflicts with the Armbian firmware package. The /lib/firmware/updates directory takes precedence in Linux firmware loading hierarchy and is the proper location for user-installed firmware files.

Applied to files:

  • config/sources/families/jethub.conf
🧬 Code graph analysis (3)
lib/functions/compilation/atf.sh (2)
lib/functions/logging/display-alert.sh (1)
  • display_alert (10-227)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
lib/functions/compilation/crust.sh (1)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
lib/functions/compilation/uboot.sh (1)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
🔇 Additional comments (18)
lib/functions/compilation/kernel.sh (1)

76-77: LGTM - Clean removal of unused variable.

The local toolchain variable declaration has been appropriately removed. The kernel_determine_toolchain function is still invoked for its side effects (logging and toolchain setup), and the comment has been updated to reflect the simplified behavior.

config/sources/armhf.conf (1)

38-39: LGTM - Simplified toolchain normalization.

The unconditional normalization of -none- to - in UBOOT_COMPILER and ATF_COMPILER simplifies the configuration by removing dependency on the now-deleted UBOOT_USE_GCC and KERNEL_USE_GCC variables. The string substitution is safe and won't cause issues if -none- is not present in the compiler name.

lib/functions/compilation/crust.sh (2)

53-59: Ensure consistent CROSS_COMPILE quoting.

The make commands use CROSS_COMPILE='$CCACHE $CRUST_COMPILER' with single quotes around the entire value. Verify that this quoting is correct and that $CCACHE and $CRUST_COMPILER expand properly within the run_host_command_logged context, which executes commands through bash -c "$*".

Based on the relevant code snippet showing that run_host_command_logged uses bash -c "$*", the variable expansion should occur correctly before the command is passed to bash.


34-34: No action required. The or1k-elf toolchain availability is properly ensured through the dependency management system: the gcc-or1k-elf package is added to EXTRA_BUILD_DEPS via add_host_dependencies__sunxi_add_or1k_c_compiler() in extensions/sunxi-tools.sh, which installs or1k-elf-gcc and or1k-elf-ld.bfd to /usr/bin/ on the host. The CRUST_COMPILER variable is correctly defined as 'or1k-elf-' in config/sources/families/include/crust_firmware.inc, so direct invocations like ${CRUST_COMPILER}gcc and or1k-elf-ld.bfd are guaranteed to be in PATH.

lib/functions/compilation/atf.sh (2)

86-89: CROSS_COMPILE quoting is correct.

The CROSS_COMPILE and CC variable assignments use single quotes with variable references (e.g., CROSS_COMPILE='ccache ${ATF_COMPILER}'). Since run_host_command_logged executes via bash -c "$*", the single-quoted strings are passed as-is to the subshell where bash will perform the variable expansion correctly.


34-34: No action needed. Host preparation ensures ATF cross-compiler toolchains (gcc-aarch64-linux-gnu, gcc-arm-linux-gnueabi, gcc-arm-linux-gnueabihf) are installed as required dependencies and available in the default PATH. The ATF_COMPILER configuration correctly references these standard toolchain prefixes, so the direct invocation of ${ATF_COMPILER}gcc on line 34 is safe.

lib/functions/general/python-tools.sh (1)

110-110: Remove this comment — PATH expansion is correct.

The PATH assignment uses single quotes as literal characters in the string value, not as shell syntax. Variable expansion occurs at array declaration time (line 105-111) when the double-quoted string is processed, not at env invocation time. The resulting array element contains the actual expanded paths: PATH='/path/to/.local/bin:/usr/bin:/bin'. The @Q operator then properly escapes this for env invocation. This pattern is intentional and consistent across the codebase (kernel-make.sh, uboot.sh).

Likely an incorrect or invalid review comment.

config/sources/families/jethub.conf (1)

150-167: LGTM! Direct compiler invocations are cleaner.

The switch from PATH-prepended toolchain resolution to direct compiler variable usage ($gpp, $gcc) is a good simplification. The run_host_command_logged with env ensures proper execution context.

lib/library-functions.sh (3)

103-111: LGTM! New artifact-uboot.sh sourced correctly.

The new artifact-uboot.sh source follows the established pattern with proper error-trace and errexit settings before sourcing.


477-488: LGTM! Source ordering updated.

The swap in source order between drivers_network.sh and drivers-harness.sh follows the auto-generation pattern of this file.


688-696: LGTM! New github-actions.sh sourced correctly.

The new github-actions.sh source follows the established pattern with proper error-trace and errexit settings.

config/sources/arm64.conf (1)

45-48: LGTM! Unconditional -none- removal is correct.

Since SKIP_EXTERNAL_TOOLCHAINS has been yes for ~5 years (per PR description), making this substitution unconditional simplifies the code without changing behavior. The comment clearly explains the rationale.

lib/functions/compilation/uboot.sh (4)

50-62: LGTM! Clean CROSS_COMPILE construction with CCACHE handling.

The conditional construction of cross_compile correctly avoids the spurious leading space when CCACHE is not set, addressing the issue mentioned in the PR description. The single quotes inside the string are intentional - they survive the bash -c invocation used by run_host_command_logged.


102-104: LGTM! Centralized cross_compile usage in make commands.

The cross_compile variable is now consistently used across all make invocations (config, olddefconfig, compilation), replacing the previous scattered PATH/toolchain handling.


248-260: LGTM! Simplified environment setup for u-boot make.

The uboot_make_envs array now preserves PATH as-is without toolchain injection. The cross_compile is passed directly to make, which is cleaner than the previous approach.


417-419: LGTM! Direct compiler version retrieval.

Using eval env "${UBOOT_COMPILER}gcc" directly is cleaner than the previous PATH-based toolchain lookup approach.

lib/functions/compilation/kernel-make.sh (2)

20-27: LGTM! Simplified PATH without toolchain injection.

Removing the toolchain from PATH injection (Line 23) aligns with the PR's goal of using direct compiler invocations. The system toolchains are expected to be in the standard PATH. The reformatting to single-quoted values is a consistency improvement.


105-112: LGTM! Clean compiler version detection.

The new kernel_compiler_full variable correctly constructs the full compiler name for version detection:

  • For clang: uses "clang" directly
  • For GCC: appends gcc to KERNEL_COMPILER prefix (e.g., aarch64-linux-gnu-gcc)

This is cleaner than the previous approach that relied on toolchain PATH lookup.

@EvilOlaf EvilOlaf added the Build Executing build train (permission needed) label Jan 11, 2026
@rpardini rpardini force-pushed the pr/get-completely-rid-of-dead-code-toolchain-stuff-pt2 branch from 0da67b1 to 583e2d7 Compare January 11, 2026 11:23
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
lib/functions/compilation/uboot.sh (2)

50-62: LGTM: Cross-compile construction correctly avoids spurious space.

The conditional logic properly handles CCACHE to construct CROSS_COMPILE without introducing an extra space when CCACHE is empty. The quoted string format ensures proper argument passing to make.

Minor suggestion: Consider adding a brief comment explaining the CCACHE conditional, as this addresses a specific issue mentioned in the PR objectives.

📝 Optional: Add clarifying comment
+	# Construct CROSS_COMPILE with optional CCACHE prefix (avoiding spurious space when CCACHE is empty)
 	declare cross_compile="undetermined_cross_compile"
 	if [[ -n "${CCACHE}" ]]; then

418-418: Optional: Simplify gcc version retrieval.

The eval env appears redundant here since no environment modifications are needed. Consider simplifying to:

gcc_version_main="$("${UBOOT_COMPILER}gcc" -dumpfullversion -dumpversion)"

Note: This line also depends on the toolchain being in PATH (same concern as Line 249).

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 0da67b1 and 583e2d7.

📒 Files selected for processing (29)
  • config/boards/odroidc1.conf
  • config/sources/amd64.conf
  • config/sources/arm64.conf
  • config/sources/armhf.conf
  • config/sources/families/d1.conf
  • config/sources/families/include/crust_firmware.inc
  • config/sources/families/include/mvebu-helios4.inc
  • config/sources/families/include/rockchip64_common.inc
  • config/sources/families/jethub.conf
  • config/sources/families/mvebu64.conf
  • config/sources/families/spacemit.conf
  • config/sources/families/thead.conf
  • config/sources/families/uefi-loong64.conf
  • config/sources/families/uefi-riscv64.conf
  • config/sources/loong64.conf
  • config/sources/riscv64.conf
  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/crust.sh
  • lib/functions/compilation/kernel-make.sh
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/utils-compilation.sh
  • lib/functions/configuration/main-config.sh
  • lib/functions/general/downloads.sh
  • lib/functions/general/python-tools.sh
  • lib/functions/host/external-toolchains.sh
  • lib/functions/host/mountpoints.sh
  • lib/functions/host/prepare-host.sh
  • lib/library-functions.sh
💤 Files with no reviewable changes (18)
  • config/boards/odroidc1.conf
  • config/sources/riscv64.conf
  • lib/functions/host/external-toolchains.sh
  • config/sources/families/spacemit.conf
  • lib/functions/compilation/utils-compilation.sh
  • config/sources/loong64.conf
  • lib/functions/host/mountpoints.sh
  • lib/functions/general/downloads.sh
  • config/sources/families/thead.conf
  • lib/functions/host/prepare-host.sh
  • config/sources/amd64.conf
  • config/sources/families/d1.conf
  • config/sources/families/uefi-loong64.conf
  • lib/functions/configuration/main-config.sh
  • config/sources/families/include/crust_firmware.inc
  • config/sources/families/include/mvebu-helios4.inc
  • config/sources/families/uefi-riscv64.conf
  • config/sources/families/include/rockchip64_common.inc
🚧 Files skipped from review as they are similar to previous changes (3)
  • config/sources/families/jethub.conf
  • config/sources/armhf.conf
  • lib/functions/compilation/kernel-make.sh
🧰 Additional context used
🧠 Learnings (44)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8328
File: lib/functions/compilation/patch/drivers_network.sh:542-545
Timestamp: 2025-06-24T10:08:40.313Z
Learning: In the Armbian build system, when a PR removes build support for a specific kernel version, version check issues for that removed version become practically irrelevant even if they appear incorrect in isolation. Context about which kernel versions are being deprecated/removed is important for understanding the impact of version-related code changes.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 9159
File: patch/u-boot/u-boot-genio/0026-dts-configs-add-Grinn-GenioSBC-510.patch:161-161
Timestamp: 2026-01-03T20:46:29.189Z
Learning: For the Armbian genio family (config/sources/families/genio.conf and patch/u-boot/u-boot-genio/), when reviewing PRs that include vendor U-Boot patches from Collabora, avoid flagging potential issues in board configurations that are out of scope for the PR's primary focus (e.g., don't flag Genio 510/700 board issues when the PR is focused on radxa-nio-12l/Genio 1200). The maintainer prioritizes keeping vendor patches close to upstream for easier re-copying and maintenance, even if secondary board configs have potential mismatches.
<!-- </add_learning>
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
📚 Learning: 2025-12-18T23:40:55.905Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:55.905Z
Learning: In the Armbian build framework, host dependencies are strictly controlled, ensuring that specific tools like `zstdmt` are guaranteed to be available in the build environment.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-07-23T10:01:41.310Z
Learnt from: amazingfate
Repo: armbian/build PR: 8419
File: lib/functions/host/prepare-host.sh:272-275
Timestamp: 2025-07-23T10:01:41.310Z
Learning: In the Armbian build system, the design philosophy is to fail fast when host dependencies are not met rather than gracefully skipping unsupported architectures. This ensures build environment consistency and prevents silent failures. Host dependency checks should be explicit and non-negotiable.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/arm64.conf
📚 Learning: 2025-06-22T00:45:26.182Z
Learnt from: djurny
Repo: armbian/build PR: 8315
File: lib/functions/rootfs/distro-agnostic.sh:54-68
Timestamp: 2025-06-22T00:45:26.182Z
Learning: In Armbian build system, external command dependencies like envsubst are handled by adding the required packages (e.g., gettext for envsubst) to host_dependencies in adaptative_prepare_host_dependencies function in lib/functions/host/prepare-host.sh, rather than checking command availability at runtime.

Applied to files:

  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
  • lib/library-functions.sh
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged can properly handle shell redirection operators like >> when passed as arguments, contrary to typical command wrapper behavior. The function has been tested to work correctly with redirection for appending to files like armbianEnv.txt.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-08-30T06:48:09.091Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T06:48:09.091Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the user prefers flexible grep patterns over anchored ones for BTRFS configuration checks, but agrees to use quiet grep (-q) to avoid polluting build logs.

Applied to files:

  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/kernel.sh
  • config/sources/arm64.conf
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: The run_host_command_logged function in the Armbian build system works by executing all its arguments through `bash -c "$*"`. This means shell redirection operators like ">>" are properly processed by bash, making commands like `run_host_command_logged echo "content" >> file.txt` work correctly. The function does not treat redirection operators as literal arguments.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-09-12T19:28:38.491Z
Learnt from: Grippy98
Repo: armbian/build PR: 8622
File: config/sources/families/k3.conf:66-66
Timestamp: 2025-09-12T19:28:38.491Z
Learning: In the Armbian k3 family build system (config/sources/families/k3.conf), builds do not fail when TIBOOT3_BOOTCONFIG is unset, even though tiboot3.bin is still listed in UBOOT_TARGET_MAP. The gating mechanism in pre_config_uboot_target__build_first_stage function works as intended to conditionally build/copy tiboot3.bin only when TIBOOT3_BOOTCONFIG is defined.

Applied to files:

  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
  • lib/library-functions.sh
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged properly handles shell redirection operators like ">>" when passed as string arguments. This pattern is used consistently throughout the codebase, such as in lib/functions/rootfs/distro-agnostic.sh where it's used to append to armbianEnv.txt files. The function has been tested and confirmed to work correctly with this syntax.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: Armbian build framework extensions are NOT designed to run standalone but are called by the supervisor. The framework provides environment variables like USERPATCHES_PATH and SDCARD, and commands are executed with protection via run_host_command_logged and chroot_sdcard functions that use bash -e -o pipefail.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-09-12T09:49:31.957Z
Learnt from: amazingfate
Repo: armbian/build PR: 8617
File: lib/functions/compilation/kernel.sh:126-127
Timestamp: 2025-09-12T09:49:31.957Z
Learning: In the Armbian build system, the "all" target in kernel build has been used for a long time without issues. The "all" target builds vmlinux/Image/Image.gz defaults for the architecture and works correctly alongside KERNEL_IMAGE_TYPE in the build_targets_build array.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-12-18T23:40:41.627Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:41.627Z
Learning: In the Armbian build framework, scripts run with set -e, so a non-zero exit status will abort the script. During reviews, assume failures will stop execution unless explicitly handled. Verify that commands that must fail are checked, errors are propagated, and any critical steps have proper error handling (e.g., using pipefail where appropriate, checking exit codes, and not masking failures).

Applied to files:

  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/crust.sh
  • lib/library-functions.sh
  • lib/functions/general/python-tools.sh
📚 Learning: 2025-12-28T01:49:34.661Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9136
File: lib/functions/compilation/armbian-kernel.sh:529-537
Timestamp: 2025-12-28T01:49:34.661Z
Learning: In lib/functions/compilation/armbian-kernel.sh's opts_m handling, checking .config (kernel defconfig) is problematic because savedefconfig elides options matching defconfig, making it impossible to distinguish overlay silence from defconfig agreement. The correct approach is to check only kernel_config_source_filename (the overlay) for explicit =y, otherwise default to =m, letting savedefconfig handle deduplication with defconfig automatically.

Applied to files:

  • lib/functions/compilation/kernel.sh
  • config/sources/arm64.conf
📚 Learning: 2025-09-22T21:52:01.225Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-201
Timestamp: 2025-09-22T21:52:01.225Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the kernel_config_modifying_hashes array is not universally required for all kernel configuration functions - some functions like armbian_kernel_config__netkit() operate without it, and adding entries with '=m' would be incorrect when the actual result might be '=y' for options already built-in.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-09-22T21:59:36.334Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:200-200
Timestamp: 2025-09-22T21:59:36.334Z
Learning: Functions named with the pattern `armbian_kernel_config__*` in lib/functions/compilation/armbian-kernel.sh are automatically discovered and invoked by Armbian's extension system via metaprogramming using `compgen -A function`, without requiring explicit registration or calls.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-09-22T21:52:01.225Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-201
Timestamp: 2025-09-22T21:52:01.225Z
Learning: The kernel_config_set_m function in lib/functions/compilation/armbian-kernel.sh preserves existing 'y' (built-in) settings and only sets options to 'm' (module) when they are not already built-in, achieving "prefer modules but allow built-ins" behavior.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-09-25T18:37:00.330Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-09-27T21:50:15.915Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sunxi64-current.config:94-94
Timestamp: 2025-09-27T21:50:15.915Z
Learning: When kernel config files are generated through Armbian's automated process (previous config → armbian-kernel.sh changes → make oldconfig → Armbian machinery processing), manual config file edits are not appropriate since they would be overwritten. Deprecated option handling should be implemented in the automated tooling instead.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/library-functions.sh
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/library-functions.sh
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/families/mvebu64.conf
  • config/sources/arm64.conf
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/library-functions.sh
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2026-01-09T10:53:08.974Z
Learnt from: rpardini
Repo: armbian/build PR: 9192
File: lib/functions/compilation/uboot.sh:470-483
Timestamp: 2026-01-09T10:53:08.974Z
Learning: In the Armbian build system (lib/functions/compilation/uboot.sh), binwalk requires the `--run-as=root` flag when analyzing u-boot binaries because the build system runs as root. Binwalk detects root execution and refuses to proceed without explicit consent via this flag, even for analysis-only operations without extraction.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-08-02T05:46:10.664Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-02T05:46:10.664Z
Learning: In the Armbian build system, the modern recommended approach for kernel configuration is to use the kernel-config command via "./compile.sh BOARD=boardname BRANCH=branchname kernel-config" instead of the deprecated KERNEL_CONFIGURE=yes flag. This provides a two-step workflow: configure using menuconfig, then build, with better transparency and control over configuration changes.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:50:04.845Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-edge.config:80-82
Timestamp: 2025-09-27T21:50:04.845Z
Learning: In the Armbian build system, kernel configuration files are generated through this automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:49:27.188Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-k3-edge.config:97-99
Timestamp: 2025-09-27T21:49:27.188Z
Learning: make oldconfig preserves existing deprecated kernel options and only prompts for new configuration options, unlike make defconfig which would auto-correct by removing deprecated options. This explains why deprecated options like CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD might persist through the automated Armbian kernel configuration generation process.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:47:58.020Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-bcm2711-edge.config:859-861
Timestamp: 2025-09-27T21:47:58.020Z
Learning: In the Armbian build system, kernel configuration files in config/kernel/ are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:49:55.796Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-current.config:78-80
Timestamp: 2025-09-27T21:49:55.796Z
Learning: In the Armbian build system, kernel configuration files are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-06-12T21:03:39.686Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:148-161
Timestamp: 2025-06-12T21:03:39.686Z
Learning: In Armbian U-Boot bootscripts, the `${cpu}` environment variable is always pre-set by U-Boot (or defaults to a valid value), so additional guards against it being unset are unnecessary.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
📚 Learning: 2025-11-13T14:50:44.662Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8925
File: lib/functions/host/docker.sh:141-141
Timestamp: 2025-11-13T14:50:44.662Z
Learning: In the Armbian build system, certain boards have U-Boot that doesn't build correctly on ubuntu:noble but works on ubuntu:jammy. For these boards, DOCKER_ARMBIAN_BASE_IMAGE can be set to "ubuntu:jammy" via an extension file loaded before docker_cli_prepare() runs, allowing legacy toolchains to work while the community works on proper fixes with limited resources.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
📚 Learning: 2025-10-14T05:08:11.785Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8754
File: config/boards/bestv-r3300-l.csc:14-16
Timestamp: 2025-10-14T05:08:11.785Z
Learning: In the Armbian build system, BOOTBRANCH_BOARD is a valid framework variable used as a fallback when BOOTBRANCH is unset. The framework checks BOOTBRANCH_BOARD before applying the default bootloader branch value (see config/sources/common.conf). Board configuration files can use BOOTBRANCH_BOARD to specify the bootloader branch.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-05-16T15:34:34.672Z
Learnt from: Grippy98
Repo: armbian/build PR: 8202
File: config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh:2-3
Timestamp: 2025-05-16T15:34:34.672Z
Learning: The shell scripts in the Armbian build system's desktop configuration files, such as config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh, rely on environment variables like $SRC and $destination that are expected to be set externally before the script is executed.

Applied to files:

  • config/sources/families/mvebu64.conf
  • lib/library-functions.sh
📚 Learning: 2025-09-07T17:39:32.272Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8586
File: config/boards/nanopi-r76s.conf:15-21
Timestamp: 2025-09-07T17:39:32.272Z
Learning: In the Armbian build system, the variables $BOARD and $SDCARD are always set by the build framework, so guard checks for these variables are unnecessary in board configuration files and hook functions.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-12-12T23:09:56.813Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9058
File: config/sources/families/spacemit.conf:39-45
Timestamp: 2025-12-12T23:09:56.813Z
Learning: In Armbian build configs for vendor kernel sources, prefer the following branch naming conventions: use 'vendor' or 'vendor-rt' for stable vendor releases, and 'vendor-edge' for bleeding-edge/pre-release vendor versions. The 'edge' naming without the 'vendor-' prefix is reserved for mainline kernel branches. Apply this pattern to family config files under config/sources/families (e.g., spacemit.conf) to ensure consistent vendor kernel sourcing naming across the repository.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • config/sources/arm64.conf
📚 Learning: 2025-05-18T00:59:02.274Z
Learnt from: djurny
Repo: armbian/build PR: 8203
File: config/bootscripts/boot-sunxi.cmd:34-38
Timestamp: 2025-05-18T00:59:02.274Z
Learning: In U-Boot shell environments, `itest` silently handles non-numeric values without producing errors, unlike in bash or other standard shells. Additionally, U-Boot doesn't support stderr redirection with syntax like `2>/dev/null`. The standard pattern for verbosity checking in U-Boot is `if test "${verbosity}" != "" ; then if itest ${verbosity} -gt 0 ; then...`, which correctly handles both numeric and non-numeric values.

Applied to files:

  • config/sources/arm64.conf
📚 Learning: 2025-04-28T08:27:26.890Z
Learnt from: leggewie
Repo: armbian/build PR: 8133
File: extensions/apa.sh:1-2
Timestamp: 2025-04-28T08:27:26.890Z
Learning: In the Armbian build system, extension scripts in the `extensions/` directory contain hook functions and are meant to be sourced, not executed directly. These scripts don't require a shebang or `set -euo pipefail`.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: In Armbian build framework, extensions are loaded and executed via lib/functions/general/extensions.sh using call_extension_method. The framework sets set -o errexit and set -o errtrace globally, and individual commands run with pipefail protection through the command execution functions.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-09-09T07:30:22.419Z
Learnt from: amazingfate
Repo: armbian/build PR: 8595
File: lib/functions/compilation/patch/drivers_network.sh:0-0
Timestamp: 2025-09-09T07:30:22.419Z
Learning: RTW_WARN_LMT sed workaround in driver_rtl8852bs() function in lib/functions/compilation/patch/drivers_network.sh is necessary for kernel 6.1 compatibility, even when the upstream wifi-rtl8852bs driver has the macro defined for newer kernels. The workaround ensures cross-kernel compatibility from 6.1 to 6.16+.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-09-05T12:31:03.067Z
Learnt from: Ayush1325
Repo: armbian/build PR: 8382
File: packages/bsp/usb-gadget-network/setup-usbgadget-network-multi.sh:104-105
Timestamp: 2025-09-05T12:31:03.067Z
Learning: Scripts using `set -euo pipefail` provide comprehensive error handling that automatically exits on any command failure, making explicit error handling for function calls redundant.

Applied to files:

  • lib/library-functions.sh
🧬 Code graph analysis (1)
lib/functions/compilation/uboot.sh (1)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
🔇 Additional comments (17)
lib/functions/compilation/kernel.sh (1)

76-77: LGTM!

The simplified comment accurately describes the purpose of this section. The kernel_determine_toolchain call remains intact to log the kernel toolchain version, which is appropriate for the PR's goal of removing dead toolchain code while preserving essential version logging.

lib/functions/general/python-tools.sh (1)

110-110: LGTM!

The PATH construction now cleanly prepends only the Python userbase bin directory, removing any prior toolchain-related PATH augmentation. This aligns with the PR's goal of eliminating toolchain PATH injections while maintaining proper Python tool accessibility.

lib/functions/compilation/crust.sh (3)

34-34: LGTM!

Direct compiler version retrieval via eval env "${CRUST_COMPILER}gcc" is cleaner than the previous toolchain PATH lookup approach.


50-50: LGTM!

Direct invocation of or1k-elf-ld.bfd without PATH augmentation is appropriate, as the Crust toolchain is expected to be available in the system PATH via host dependencies.


53-59: LGTM!

The build commands correctly use CROSS_COMPILE='$CCACHE $CRUST_COMPILER' directly without PATH toolchain augmentation. This aligns with the PR's goal of simplifying compiler invocation to rely on system-installed tools.

lib/library-functions.sh (3)

103-110: LGTM!

New sourcing block for artifact-uboot.sh follows the established pattern with proper error handling preamble. As this file is autogenerated by ./lib/tools/gen-library.sh, the addition is consistent with the framework's source inclusion conventions.


477-488: LGTM!

The swap in sourcing order between drivers_network.sh and drivers-harness.sh follows the autogenerated pattern. Since this file is produced by ./lib/tools/gen-library.sh, the ordering reflects the tool's output.


688-695: LGTM!

New sourcing block for github-actions.sh follows the established pattern with proper error handling preamble, consistent with other sourced files in this autogenerated library.

config/sources/families/mvebu64.conf (1)

33-33: LGTM!

Unconditional assignment of ATF_COMPILER='aarch64-linux-gnu-' simplifies the configuration by removing conditional toolchain selection. This aligns with the PR's broader goal of eliminating GCC-version gating and is consistent with arm64.conf which normalizes -none- variants anyway.

lib/functions/compilation/atf.sh (2)

34-34: LGTM!

Direct compiler version retrieval via eval env "${ATF_COMPILER}gcc" is cleaner than the previous approach with toolchain PATH lookup. This relies on ATF_COMPILER being properly set by architecture/family configs.


86-89: LGTM!

The simplified build invocation correctly sets CROSS_COMPILE and CC with ccache prefixes directly, without PATH toolchain augmentation. The removal of toolchain resolution logic aligns with the PR's goal of using system-installed cross-compilers directly.

config/sources/arm64.conf (1)

46-47: LGTM!

Unconditional normalization of UBOOT_COMPILER and ATF_COMPILER to remove the -none- variant is appropriate. System toolchains use aarch64-linux-gnu- rather than aarch64-none-linux-gnu-, and since SKIP_EXTERNAL_TOOLCHAINS has been set to yes for approximately 5 years (per PR description), this normalization is now always required.

Note that KERNEL_COMPILER doesn't need this treatment as it already defaults to aarch64-linux-gnu- without the -none- variant (lines 26, 32, 36).

lib/functions/compilation/uboot.sh (5)

104-104: LGTM: Consistent cross_compile usage across configuration steps.

The cross_compile variable is correctly applied to the defconfig, olddefconfig, and configuration update steps. This unifies the CROSS_COMPILE handling across the configuration phase.

Also applies to: 188-188, 219-219


260-260: LGTM: Consistent cross_compile usage in compilation phase.

The cross_compile variable is correctly applied to both the main compilation and savedefconfig steps, using the properly configured environment from uboot_make_envs.

Also applies to: 266-266


342-342: LGTM: Simplified global variable declarations.

The removal of toolchain-related global exports aligns with the single-compiler workflow. The remaining global variables are appropriate for the u-boot target loop context.


249-249: Verify toolchain binaries are pre-installed and accessible in PATH.

The code now preserves PATH without injecting toolchain directories. This assumes that cross-compiler binaries (e.g., aarch64-linux-gnu-gcc, arm-linux-gnueabihf-gcc) are pre-installed and accessible in the environment where u-boot builds execute. Without them, both the gcc version check (line 418) and compilation will fail.

Ensure that build host documentation or setup procedures explicitly require and verify cross-toolchain installation as a prerequisite before this code runs. If toolchain availability is handled in a prior build phase ("pt1") or external setup, link to that documentation in a code comment.


54-54: No action needed — UBOOT_COMPILER is properly set via architecture-level defaults.

The assertion correctly assumes UBOOT_COMPILER is defined. It's initialized in architecture config files (config/sources/arm64.conf, armhf.conf, riscv64.conf, amd64.conf) using conditional checks that allow family and board configs to override. The cascading configuration pattern ensures the variable is always set before compile_uboot_target() is invoked.

Likely an incorrect or invalid review comment.

@rpardini rpardini force-pushed the pr/get-completely-rid-of-dead-code-toolchain-stuff-pt2 branch from 583e2d7 to c87dbfa Compare January 12, 2026 15:07
@rpardini rpardini requested a review from a team January 12, 2026 15:08
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
lib/functions/compilation/atf.sh (1)

86-89: Inconsistent ccache handling compared to other compilation scripts.

ATF hardcodes ccache in the CROSS_COMPILE and CC variables, while crust.sh uses $CCACHE $CRUST_COMPILER and uboot.sh conditionally includes ccache only when ${CCACHE} is non-empty. If ccache is disabled or unavailable, this could cause build failures for ATF.

Consider aligning with the conditional pattern used in uboot.sh:

♻️ Suggested alignment with uboot.sh pattern
-	run_host_command_logged "CROSS_COMPILE='ccache ${ATF_COMPILER}'" CCACHE_BASEDIR="$(pwd)" "CC='ccache ${ATF_COMPILER}gcc'" \
+	declare atf_cross_compile
+	if [[ -n "${CCACHE}" ]]; then
+		atf_cross_compile="CROSS_COMPILE='${CCACHE} ${ATF_COMPILER}'"
+	else
+		atf_cross_compile="CROSS_COMPILE='${ATF_COMPILER}'"
+	fi
+	run_host_command_logged "${atf_cross_compile}" CCACHE_BASEDIR="$(pwd)" "CC='${CCACHE:+${CCACHE} }${ATF_COMPILER}gcc'" \
config/sources/families/jethub.conf (1)

162-170: Minor style inconsistency in compiler invocations.

Lines 150-151 use env "$gpp" while lines 162-167 invoke "$gcc" and "$gpp" directly without env. Both work correctly, but the inconsistency is worth noting.

For consistency, consider either:

  • Removing env from lines 150-151 (since env without environment modifications is redundant)
  • Or adding env to lines 162-167

This is a minor style nit and doesn't affect functionality.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 583e2d7 and c87dbfa.

📒 Files selected for processing (29)
  • config/boards/odroidc1.conf
  • config/sources/amd64.conf
  • config/sources/arm64.conf
  • config/sources/armhf.conf
  • config/sources/families/d1.conf
  • config/sources/families/include/crust_firmware.inc
  • config/sources/families/include/mvebu-helios4.inc
  • config/sources/families/include/rockchip64_common.inc
  • config/sources/families/jethub.conf
  • config/sources/families/mvebu64.conf
  • config/sources/families/spacemit.conf
  • config/sources/families/thead.conf
  • config/sources/families/uefi-loong64.conf
  • config/sources/families/uefi-riscv64.conf
  • config/sources/loong64.conf
  • config/sources/riscv64.conf
  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/crust.sh
  • lib/functions/compilation/kernel-make.sh
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/utils-compilation.sh
  • lib/functions/configuration/main-config.sh
  • lib/functions/general/downloads.sh
  • lib/functions/general/python-tools.sh
  • lib/functions/host/external-toolchains.sh
  • lib/functions/host/mountpoints.sh
  • lib/functions/host/prepare-host.sh
  • lib/library-functions.sh
💤 Files with no reviewable changes (18)
  • config/sources/riscv64.conf
  • lib/functions/compilation/utils-compilation.sh
  • config/sources/loong64.conf
  • config/sources/families/include/crust_firmware.inc
  • lib/functions/host/mountpoints.sh
  • config/sources/families/uefi-loong64.conf
  • config/sources/families/spacemit.conf
  • lib/functions/configuration/main-config.sh
  • lib/functions/host/prepare-host.sh
  • config/sources/families/include/mvebu-helios4.inc
  • config/sources/families/include/rockchip64_common.inc
  • lib/functions/host/external-toolchains.sh
  • lib/functions/general/downloads.sh
  • config/sources/amd64.conf
  • config/sources/families/thead.conf
  • config/sources/families/d1.conf
  • config/sources/families/uefi-riscv64.conf
  • config/boards/odroidc1.conf
🚧 Files skipped from review as they are similar to previous changes (3)
  • lib/functions/compilation/kernel-make.sh
  • config/sources/armhf.conf
  • lib/functions/general/python-tools.sh
🧰 Additional context used
🧠 Learnings (43)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8328
File: lib/functions/compilation/patch/drivers_network.sh:542-545
Timestamp: 2025-06-24T10:08:40.313Z
Learning: In the Armbian build system, when a PR removes build support for a specific kernel version, version check issues for that removed version become practically irrelevant even if they appear incorrect in isolation. Context about which kernel versions are being deprecated/removed is important for understanding the impact of version-related code changes.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 9159
File: patch/u-boot/u-boot-genio/0026-dts-configs-add-Grinn-GenioSBC-510.patch:161-161
Timestamp: 2026-01-03T20:46:29.189Z
Learning: For the Armbian genio family (config/sources/families/genio.conf and patch/u-boot/u-boot-genio/), when reviewing PRs that include vendor U-Boot patches from Collabora, avoid flagging potential issues in board configurations that are out of scope for the PR's primary focus (e.g., don't flag Genio 510/700 board issues when the PR is focused on radxa-nio-12l/Genio 1200). The maintainer prioritizes keeping vendor patches close to upstream for easier re-copying and maintenance, even if secondary board configs have potential mismatches.
<!-- </add_learning>
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
📚 Learning: 2025-12-18T23:40:55.905Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:55.905Z
Learning: In the Armbian build framework, host dependencies are strictly controlled, ensuring that specific tools like `zstdmt` are guaranteed to be available in the build environment.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-07-23T10:01:41.310Z
Learnt from: amazingfate
Repo: armbian/build PR: 8419
File: lib/functions/host/prepare-host.sh:272-275
Timestamp: 2025-07-23T10:01:41.310Z
Learning: In the Armbian build system, the design philosophy is to fail fast when host dependencies are not met rather than gracefully skipping unsupported architectures. This ensures build environment consistency and prevents silent failures. Host dependency checks should be explicit and non-negotiable.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/arm64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-06-22T00:45:26.182Z
Learnt from: djurny
Repo: armbian/build PR: 8315
File: lib/functions/rootfs/distro-agnostic.sh:54-68
Timestamp: 2025-06-22T00:45:26.182Z
Learning: In Armbian build system, external command dependencies like envsubst are handled by adding the required packages (e.g., gettext for envsubst) to host_dependencies in adaptative_prepare_host_dependencies function in lib/functions/host/prepare-host.sh, rather than checking command availability at runtime.

Applied to files:

  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
  • config/sources/families/jethub.conf
  • lib/library-functions.sh
📚 Learning: 2025-08-30T06:48:09.091Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T06:48:09.091Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the user prefers flexible grep patterns over anchored ones for BTRFS configuration checks, but agrees to use quiet grep (-q) to avoid polluting build logs.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/arm64.conf
  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged can properly handle shell redirection operators like >> when passed as arguments, contrary to typical command wrapper behavior. The function has been tested to work correctly with redirection for appending to files like armbianEnv.txt.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: The run_host_command_logged function in the Armbian build system works by executing all its arguments through `bash -c "$*"`. This means shell redirection operators like ">>" are properly processed by bash, making commands like `run_host_command_logged echo "content" >> file.txt` work correctly. The function does not treat redirection operators as literal arguments.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-09-12T19:28:38.491Z
Learnt from: Grippy98
Repo: armbian/build PR: 8622
File: config/sources/families/k3.conf:66-66
Timestamp: 2025-09-12T19:28:38.491Z
Learning: In the Armbian k3 family build system (config/sources/families/k3.conf), builds do not fail when TIBOOT3_BOOTCONFIG is unset, even though tiboot3.bin is still listed in UBOOT_TARGET_MAP. The gating mechanism in pre_config_uboot_target__build_first_stage function works as intended to conditionally build/copy tiboot3.bin only when TIBOOT3_BOOTCONFIG is defined.

Applied to files:

  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
  • config/sources/families/jethub.conf
  • lib/library-functions.sh
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged properly handles shell redirection operators like ">>" when passed as string arguments. This pattern is used consistently throughout the codebase, such as in lib/functions/rootfs/distro-agnostic.sh where it's used to append to armbianEnv.txt files. The function has been tested and confirmed to work correctly with this syntax.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: Armbian build framework extensions are NOT designed to run standalone but are called by the supervisor. The framework provides environment variables like USERPATCHES_PATH and SDCARD, and commands are executed with protection via run_host_command_logged and chroot_sdcard functions that use bash -e -o pipefail.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-09-12T09:49:31.957Z
Learnt from: amazingfate
Repo: armbian/build PR: 8617
File: lib/functions/compilation/kernel.sh:126-127
Timestamp: 2025-09-12T09:49:31.957Z
Learning: In the Armbian build system, the "all" target in kernel build has been used for a long time without issues. The "all" target builds vmlinux/Image/Image.gz defaults for the architecture and works correctly alongside KERNEL_IMAGE_TYPE in the build_targets_build array.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-12-18T23:40:41.627Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:41.627Z
Learning: In the Armbian build framework, scripts run with set -e, so a non-zero exit status will abort the script. During reviews, assume failures will stop execution unless explicitly handled. Verify that commands that must fail are checked, errors are propagated, and any critical steps have proper error handling (e.g., using pipefail where appropriate, checking exit codes, and not masking failures).

Applied to files:

  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/crust.sh
  • lib/library-functions.sh
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • config/sources/families/mvebu64.conf
  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-10-14T05:08:11.785Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8754
File: config/boards/bestv-r3300-l.csc:14-16
Timestamp: 2025-10-14T05:08:11.785Z
Learning: In the Armbian build system, BOOTBRANCH_BOARD is a valid framework variable used as a fallback when BOOTBRANCH is unset. The framework checks BOOTBRANCH_BOARD before applying the default bootloader branch value (see config/sources/common.conf). Board configuration files can use BOOTBRANCH_BOARD to specify the bootloader branch.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-05-16T15:34:34.672Z
Learnt from: Grippy98
Repo: armbian/build PR: 8202
File: config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh:2-3
Timestamp: 2025-05-16T15:34:34.672Z
Learning: The shell scripts in the Armbian build system's desktop configuration files, such as config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh, rely on environment variables like $SRC and $destination that are expected to be set externally before the script is executed.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
  • lib/library-functions.sh
📚 Learning: 2025-09-07T17:39:32.272Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8586
File: config/boards/nanopi-r76s.conf:15-21
Timestamp: 2025-09-07T17:39:32.272Z
Learning: In the Armbian build system, the variables $BOARD and $SDCARD are always set by the build framework, so guard checks for these variables are unnecessary in board configuration files and hook functions.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-12-12T23:09:56.813Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9058
File: config/sources/families/spacemit.conf:39-45
Timestamp: 2025-12-12T23:09:56.813Z
Learning: In Armbian build configs for vendor kernel sources, prefer the following branch naming conventions: use 'vendor' or 'vendor-rt' for stable vendor releases, and 'vendor-edge' for bleeding-edge/pre-release vendor versions. The 'edge' naming without the 'vendor-' prefix is reserved for mainline kernel branches. Apply this pattern to family config files under config/sources/families (e.g., spacemit.conf) to ensure consistent vendor kernel sourcing naming across the repository.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/library-functions.sh
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/families/jethub.conf
  • lib/library-functions.sh
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • lib/library-functions.sh
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2026-01-03T20:46:29.189Z
Learnt from: rpardini
Repo: armbian/build PR: 9159
File: patch/u-boot/u-boot-genio/0026-dts-configs-add-Grinn-GenioSBC-510.patch:161-161
Timestamp: 2026-01-03T20:46:29.189Z
Learning: For the Armbian genio family (config/sources/families/genio.conf and patch/u-boot/u-boot-genio/), when reviewing PRs that include vendor U-Boot patches from Collabora, avoid flagging potential issues in board configurations that are out of scope for the PR's primary focus (e.g., don't flag Genio 510/700 board issues when the PR is focused on radxa-nio-12l/Genio 1200). The maintainer prioritizes keeping vendor patches close to upstream for easier re-copying and maintenance, even if secondary board configs have potential mismatches.
<!-- </add_learning>

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/families/jethub.conf
📚 Learning: 2025-08-02T05:46:10.664Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-02T05:46:10.664Z
Learning: In the Armbian build system, the modern recommended approach for kernel configuration is to use the kernel-config command via "./compile.sh BOARD=boardname BRANCH=branchname kernel-config" instead of the deprecated KERNEL_CONFIGURE=yes flag. This provides a two-step workflow: configure using menuconfig, then build, with better transparency and control over configuration changes.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:50:04.845Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-edge.config:80-82
Timestamp: 2025-09-27T21:50:04.845Z
Learning: In the Armbian build system, kernel configuration files are generated through this automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:49:27.188Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-k3-edge.config:97-99
Timestamp: 2025-09-27T21:49:27.188Z
Learning: make oldconfig preserves existing deprecated kernel options and only prompts for new configuration options, unlike make defconfig which would auto-correct by removing deprecated options. This explains why deprecated options like CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD might persist through the automated Armbian kernel configuration generation process.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:47:58.020Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-bcm2711-edge.config:859-861
Timestamp: 2025-09-27T21:47:58.020Z
Learning: In the Armbian build system, kernel configuration files in config/kernel/ are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:49:55.796Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-current.config:78-80
Timestamp: 2025-09-27T21:49:55.796Z
Learning: In the Armbian build system, kernel configuration files are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-06-12T21:03:39.686Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:148-161
Timestamp: 2025-06-12T21:03:39.686Z
Learning: In Armbian U-Boot bootscripts, the `${cpu}` environment variable is always pre-set by U-Boot (or defaults to a valid value), so additional guards against it being unset are unnecessary.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
📚 Learning: 2025-11-13T14:50:44.662Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8925
File: lib/functions/host/docker.sh:141-141
Timestamp: 2025-11-13T14:50:44.662Z
Learning: In the Armbian build system, certain boards have U-Boot that doesn't build correctly on ubuntu:noble but works on ubuntu:jammy. For these boards, DOCKER_ARMBIAN_BASE_IMAGE can be set to "ubuntu:jammy" via an extension file loaded before docker_cli_prepare() runs, allowing legacy toolchains to work while the community works on proper fixes with limited resources.

Applied to files:

  • lib/functions/compilation/uboot.sh
  • config/sources/arm64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-12-28T01:49:34.661Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9136
File: lib/functions/compilation/armbian-kernel.sh:529-537
Timestamp: 2025-12-28T01:49:34.661Z
Learning: In lib/functions/compilation/armbian-kernel.sh's opts_m handling, checking .config (kernel defconfig) is problematic because savedefconfig elides options matching defconfig, making it impossible to distinguish overlay silence from defconfig agreement. The correct approach is to check only kernel_config_source_filename (the overlay) for explicit =y, otherwise default to =m, letting savedefconfig handle deduplication with defconfig automatically.

Applied to files:

  • config/sources/arm64.conf
  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-05-18T00:59:02.274Z
Learnt from: djurny
Repo: armbian/build PR: 8203
File: config/bootscripts/boot-sunxi.cmd:34-38
Timestamp: 2025-05-18T00:59:02.274Z
Learning: In U-Boot shell environments, `itest` silently handles non-numeric values without producing errors, unlike in bash or other standard shells. Additionally, U-Boot doesn't support stderr redirection with syntax like `2>/dev/null`. The standard pattern for verbosity checking in U-Boot is `if test "${verbosity}" != "" ; then if itest ${verbosity} -gt 0 ; then...`, which correctly handles both numeric and non-numeric values.

Applied to files:

  • config/sources/arm64.conf
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • config/sources/families/jethub.conf
📚 Learning: 2025-08-03T15:21:20.148Z
Learnt from: pyavitz
Repo: armbian/build PR: 8455
File: config/sources/families/sun50iw1.conf:19-24
Timestamp: 2025-08-03T15:21:20.148Z
Learning: In the Armbian build system, when copying firmware files during family_tweaks_s(), use /lib/firmware/updates/ instead of /lib/firmware/ to avoid conflicts with the Armbian firmware package. The /lib/firmware/updates directory takes precedence in Linux firmware loading hierarchy and is the proper location for user-installed firmware files.

Applied to files:

  • config/sources/families/jethub.conf
📚 Learning: 2025-07-17T04:12:33.125Z
Learnt from: pyavitz
Repo: armbian/build PR: 8388
File: config/boards/kickpik2b.conf:1-14
Timestamp: 2025-07-17T04:12:33.125Z
Learning: In the Armbian build system, board configuration files (*.conf) follow a project standard of not including shebang lines, even though they contain bash code and are sourced by the build system. This is an established Armbian convention that individual contributors are expected to follow, and changes to this standard would require broader project maintainer approval.

Applied to files:

  • config/sources/families/jethub.conf
📚 Learning: 2025-09-22T21:59:36.334Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:200-200
Timestamp: 2025-09-22T21:59:36.334Z
Learning: Functions named with the pattern `armbian_kernel_config__*` in lib/functions/compilation/armbian-kernel.sh are automatically discovered and invoked by Armbian's extension system via metaprogramming using `compgen -A function`, without requiring explicit registration or calls.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-09-22T21:52:01.225Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-201
Timestamp: 2025-09-22T21:52:01.225Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the kernel_config_modifying_hashes array is not universally required for all kernel configuration functions - some functions like armbian_kernel_config__netkit() operate without it, and adding entries with '=m' would be incorrect when the actual result might be '=y' for options already built-in.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-04-28T08:27:26.890Z
Learnt from: leggewie
Repo: armbian/build PR: 8133
File: extensions/apa.sh:1-2
Timestamp: 2025-04-28T08:27:26.890Z
Learning: In the Armbian build system, extension scripts in the `extensions/` directory contain hook functions and are meant to be sourced, not executed directly. These scripts don't require a shebang or `set -euo pipefail`.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: In Armbian build framework, extensions are loaded and executed via lib/functions/general/extensions.sh using call_extension_method. The framework sets set -o errexit and set -o errtrace globally, and individual commands run with pipefail protection through the command execution functions.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-09-09T07:30:22.419Z
Learnt from: amazingfate
Repo: armbian/build PR: 8595
File: lib/functions/compilation/patch/drivers_network.sh:0-0
Timestamp: 2025-09-09T07:30:22.419Z
Learning: RTW_WARN_LMT sed workaround in driver_rtl8852bs() function in lib/functions/compilation/patch/drivers_network.sh is necessary for kernel 6.1 compatibility, even when the upstream wifi-rtl8852bs driver has the macro defined for newer kernels. The workaround ensures cross-kernel compatibility from 6.1 to 6.16+.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-09-05T12:31:03.067Z
Learnt from: Ayush1325
Repo: armbian/build PR: 8382
File: packages/bsp/usb-gadget-network/setup-usbgadget-network-multi.sh:104-105
Timestamp: 2025-09-05T12:31:03.067Z
Learning: Scripts using `set -euo pipefail` provide comprehensive error handling that automatically exits on any command failure, making explicit error handling for function calls redundant.

Applied to files:

  • lib/library-functions.sh
🧬 Code graph analysis (3)
lib/functions/compilation/atf.sh (2)
lib/functions/logging/display-alert.sh (1)
  • display_alert (10-227)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
lib/functions/compilation/uboot.sh (1)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
lib/functions/compilation/crust.sh (1)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Generate artifacts / JSON matrix: 17/16 :: 17 artifact chunks, 16 image chunks
🔇 Additional comments (18)
lib/functions/compilation/kernel.sh (1)

76-77: LGTM! Dead code cleanup.

The removal of the unused local toolchain variable declaration is correct. The kernel_determine_toolchain function continues to be invoked for logging/setup purposes, and the comment accurately reflects the intent.

config/sources/arm64.conf (1)

45-47: LGTM!

The unconditional -none- normalization is correct. Since external toolchains have been disabled for ~5 years (per PR description), always normalizing to system toolchain naming (aarch64-linux-gnu-) simplifies the code. The bash substitution is safe and idempotent when the pattern isn't present.

config/sources/families/mvebu64.conf (1)

33-33: LGTM!

Unconditionally setting ATF_COMPILER='aarch64-linux-gnu-' is consistent with the arm64.conf normalization and the broader PR goal. The system toolchain will be used for all ATF builds, eliminating the need for conditional -none- variant selection.

lib/functions/compilation/crust.sh (2)

34-34: LGTM - Direct compiler invocation for version display.

The change correctly removes PATH augmentation and invokes the compiler directly. The eval env pattern is needed here to expand the variable and capture the output for the display_alert string.


50-59: LGTM - Simplified toolchain invocations.

The removal of PATH-based toolchain augmentation is consistent with the PR's goal. The direct invocation of or1k-elf-ld.bfd and the compiler via CRUST_COMPILER assumes these tools are available in the system PATH, which aligns with the broader shift away from external toolchain management.

lib/functions/compilation/atf.sh (1)

34-34: LGTM - Direct compiler invocation for version display.

Consistent with the pattern used in crust.sh for removing PATH-based toolchain augmentation.

config/sources/families/jethub.conf (1)

144-151: LGTM - Simplified compiler invocations for JetHub tooling.

The direct compiler invocations correctly replace the previous PATH-based toolchain approach. The use of UBOOT_COMPILER prefix for the g++ and gcc variables is consistent with the PR's direction.

lib/library-functions.sh (3)

103-110: LGTM - Addition of artifact-uboot.sh sourcing.

This addition follows the established pattern in the file with proper error handling setup before sourcing. Consistent with the PR's uboot compilation changes.


688-695: LGTM - Addition of github-actions.sh sourcing.

This addition follows the established pattern with proper error handling setup before sourcing.


477-488: The stated load order is incorrect.

The current load order in lib/library-functions.sh has drivers-harness.sh loading before drivers_network.sh (lines 479 and 488), not the other way around. This order is correct and matches both the alphabetical sorting applied by gen-library.sh and the dependency relationship where drivers-harness.sh references drivers_network.sh. No action needed.

Likely an incorrect or invalid review comment.

lib/functions/compilation/uboot.sh (8)

50-62: Well-designed centralized CROSS_COMPILE handling.

The conditional construction of cross_compile properly handles both ccache-enabled and ccache-disabled scenarios, avoiding the spurious leading space issue mentioned in the PR objectives. The explicit requirement check for UBOOT_COMPILER on line 54 provides clear error messaging.

This is cleaner than the previous approach and ensures consistent compiler invocation across all make targets.


102-104: LGTM - Centralized cross_compile usage in config step.

The ${cross_compile} variable is correctly applied to the initial BOOTCONFIG make invocation.


186-188: LGTM - Consistent cross_compile usage in debug olddefconfig.

Maintains consistency with other make invocations.


217-219: LGTM - Consistent cross_compile usage in olddefconfig consolidation.

Properly applies cross_compile after hook-based config changes.


248-260: LGTM - Simplified uboot_make_envs without toolchain PATH injection.

The PATH='${PATH}' entry preserves the current environment PATH without injecting toolchain-specific directories, aligning with the PR's goal of removing PATH-based toolchain augmentation. The build command correctly uses the centralized ${cross_compile} variable.


266-267: LGTM - Consistent cross_compile usage in savedefconfig.

The savedefconfig step properly uses the same cross_compile variable for consistency.


342-342: LGTM - Simplified global variable declarations.

Removing the toolchain-related exports (toolchain, toolchain2) from the global scope aligns with the centralized cross_compile approach and reduces unnecessary global state.


418-419: LGTM - Direct compiler version retrieval.

The eval env pattern for compiler version retrieval is consistent with crust.sh and atf.sh, removing the previous PATH-based toolchain augmentation.

…n` `PATH` injections

- we've had SKIP_EXTERNAL_TOOLCHAINS=yes for ~5 years now
- drop all usages, mostly through `find_toolchains()`
- drop all manual PATH env injections (we've centralized if ever needed)
- also `CRUST_USE_GCC`
- those don't serve any purpose and cause confusion
…tenance

- also avoid spurious space in `CROSS_COMPILE` when `CCACHE` is not set
- this stuff has been laying around, unused, for years
@rpardini rpardini force-pushed the pr/get-completely-rid-of-dead-code-toolchain-stuff-pt2 branch from c87dbfa to d38f7c3 Compare January 13, 2026 12:14
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
config/sources/families/jethub.conf (1)

162-170: LGTM! Board-specific tool compilation simplified.

The compilation commands for jethubj80 (eth_leds, efuse tools) and jethubj100 (mac tool) now use direct compiler invocation. Error handling is preserved with || exit_with_error.

Minor observation: Lines 150-151 use env "$gpp" while lines 164-170 use "$gpp" or "$gcc" directly. Both work correctly via run_host_command_logged, but the inconsistency could optionally be normalized in a future cleanup.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between c87dbfa and d38f7c3.

📒 Files selected for processing (29)
  • config/boards/odroidc1.conf
  • config/sources/amd64.conf
  • config/sources/arm64.conf
  • config/sources/armhf.conf
  • config/sources/families/d1.conf
  • config/sources/families/include/crust_firmware.inc
  • config/sources/families/include/mvebu-helios4.inc
  • config/sources/families/include/rockchip64_common.inc
  • config/sources/families/jethub.conf
  • config/sources/families/mvebu64.conf
  • config/sources/families/spacemit.conf
  • config/sources/families/thead.conf
  • config/sources/families/uefi-loong64.conf
  • config/sources/families/uefi-riscv64.conf
  • config/sources/loong64.conf
  • config/sources/riscv64.conf
  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/crust.sh
  • lib/functions/compilation/kernel-make.sh
  • lib/functions/compilation/kernel.sh
  • lib/functions/compilation/uboot.sh
  • lib/functions/compilation/utils-compilation.sh
  • lib/functions/configuration/main-config.sh
  • lib/functions/general/downloads.sh
  • lib/functions/general/python-tools.sh
  • lib/functions/host/external-toolchains.sh
  • lib/functions/host/mountpoints.sh
  • lib/functions/host/prepare-host.sh
  • lib/library-functions.sh
💤 Files with no reviewable changes (18)
  • config/boards/odroidc1.conf
  • lib/functions/configuration/main-config.sh
  • lib/functions/host/prepare-host.sh
  • config/sources/families/include/mvebu-helios4.inc
  • config/sources/riscv64.conf
  • config/sources/families/spacemit.conf
  • lib/functions/compilation/utils-compilation.sh
  • config/sources/families/d1.conf
  • config/sources/amd64.conf
  • config/sources/families/uefi-riscv64.conf
  • config/sources/families/thead.conf
  • lib/functions/host/external-toolchains.sh
  • lib/functions/host/mountpoints.sh
  • config/sources/families/include/crust_firmware.inc
  • config/sources/loong64.conf
  • config/sources/families/uefi-loong64.conf
  • config/sources/families/include/rockchip64_common.inc
  • lib/functions/general/downloads.sh
🚧 Files skipped from review as they are similar to previous changes (3)
  • lib/functions/general/python-tools.sh
  • config/sources/arm64.conf
  • lib/functions/compilation/kernel-make.sh
🧰 Additional context used
🧠 Learnings (49)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8328
File: lib/functions/compilation/patch/drivers_network.sh:542-545
Timestamp: 2025-06-24T10:08:40.313Z
Learning: In the Armbian build system, when a PR removes build support for a specific kernel version, version check issues for that removed version become practically irrelevant even if they appear incorrect in isolation. Context about which kernel versions are being deprecated/removed is important for understanding the impact of version-related code changes.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 9159
File: patch/u-boot/u-boot-genio/0026-dts-configs-add-Grinn-GenioSBC-510.patch:161-161
Timestamp: 2026-01-03T20:46:29.189Z
Learning: For the Armbian genio family (config/sources/families/genio.conf and patch/u-boot/u-boot-genio/), when reviewing PRs that include vendor U-Boot patches from Collabora, avoid flagging potential issues in board configurations that are out of scope for the PR's primary focus (e.g., don't flag Genio 510/700 board issues when the PR is focused on radxa-nio-12l/Genio 1200). The maintainer prioritizes keeping vendor patches close to upstream for easier re-copying and maintenance, even if secondary board configs have potential mismatches.
<!-- </add_learning>
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
📚 Learning: 2025-09-22T21:59:36.334Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:200-200
Timestamp: 2025-09-22T21:59:36.334Z
Learning: Functions named with the pattern `armbian_kernel_config__*` in lib/functions/compilation/armbian-kernel.sh are automatically discovered and invoked by Armbian's extension system via metaprogramming using `compgen -A function`, without requiring explicit registration or calls.

Applied to files:

  • lib/functions/compilation/kernel.sh
📚 Learning: 2025-09-22T21:52:01.225Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-201
Timestamp: 2025-09-22T21:52:01.225Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the kernel_config_modifying_hashes array is not universally required for all kernel configuration functions - some functions like armbian_kernel_config__netkit() operate without it, and adding entries with '=m' would be incorrect when the actual result might be '=y' for options already built-in.

Applied to files:

  • lib/functions/compilation/kernel.sh
  • config/sources/families/mvebu64.conf
  • config/sources/armhf.conf
📚 Learning: 2025-12-28T01:49:34.661Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9136
File: lib/functions/compilation/armbian-kernel.sh:529-537
Timestamp: 2025-12-28T01:49:34.661Z
Learning: In lib/functions/compilation/armbian-kernel.sh's opts_m handling, checking .config (kernel defconfig) is problematic because savedefconfig elides options matching defconfig, making it impossible to distinguish overlay silence from defconfig agreement. The correct approach is to check only kernel_config_source_filename (the overlay) for explicit =y, otherwise default to =m, letting savedefconfig handle deduplication with defconfig automatically.

Applied to files:

  • lib/functions/compilation/kernel.sh
  • config/sources/armhf.conf
📚 Learning: 2025-12-18T23:40:41.627Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:41.627Z
Learning: In the Armbian build framework, scripts run with set -e, so a non-zero exit status will abort the script. During reviews, assume failures will stop execution unless explicitly handled. Verify that commands that must fail are checked, errors are propagated, and any critical steps have proper error handling (e.g., using pipefail where appropriate, checking exit codes, and not masking failures).

Applied to files:

  • lib/functions/compilation/kernel.sh
  • lib/library-functions.sh
  • lib/functions/compilation/atf.sh
  • lib/functions/compilation/crust.sh
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • lib/library-functions.sh
  • config/sources/families/jethub.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: In Armbian build framework, extensions are loaded and executed via lib/functions/general/extensions.sh using call_extension_method. The framework sets set -o errexit and set -o errtrace globally, and individual commands run with pipefail protection through the command execution functions.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • lib/library-functions.sh
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-04-28T08:27:26.890Z
Learnt from: leggewie
Repo: armbian/build PR: 8133
File: extensions/apa.sh:1-2
Timestamp: 2025-04-28T08:27:26.890Z
Learning: In the Armbian build system, extension scripts in the `extensions/` directory contain hook functions and are meant to be sourced, not executed directly. These scripts don't require a shebang or `set -euo pipefail`.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-05-16T15:34:34.672Z
Learnt from: Grippy98
Repo: armbian/build PR: 8202
File: config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh:2-3
Timestamp: 2025-05-16T15:34:34.672Z
Learning: The shell scripts in the Armbian build system's desktop configuration files, such as config/desktop/trixie/environments/gnome/armbian/create_desktop_package.sh, rely on environment variables like $SRC and $destination that are expected to be set externally before the script is executed.

Applied to files:

  • lib/library-functions.sh
  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
  • config/sources/armhf.conf
📚 Learning: 2025-09-12T19:28:38.491Z
Learnt from: Grippy98
Repo: armbian/build PR: 8622
File: config/sources/families/k3.conf:66-66
Timestamp: 2025-09-12T19:28:38.491Z
Learning: In the Armbian k3 family build system (config/sources/families/k3.conf), builds do not fail when TIBOOT3_BOOTCONFIG is unset, even though tiboot3.bin is still listed in UBOOT_TARGET_MAP. The gating mechanism in pre_config_uboot_target__build_first_stage function works as intended to conditionally build/copy tiboot3.bin only when TIBOOT3_BOOTCONFIG is defined.

Applied to files:

  • lib/library-functions.sh
  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-09T07:30:22.419Z
Learnt from: amazingfate
Repo: armbian/build PR: 8595
File: lib/functions/compilation/patch/drivers_network.sh:0-0
Timestamp: 2025-09-09T07:30:22.419Z
Learning: RTW_WARN_LMT sed workaround in driver_rtl8852bs() function in lib/functions/compilation/patch/drivers_network.sh is necessary for kernel 6.1 compatibility, even when the upstream wifi-rtl8852bs driver has the macro defined for newer kernels. The workaround ensures cross-kernel compatibility from 6.1 to 6.16+.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-09-05T12:31:03.067Z
Learnt from: Ayush1325
Repo: armbian/build PR: 8382
File: packages/bsp/usb-gadget-network/setup-usbgadget-network-multi.sh:104-105
Timestamp: 2025-09-05T12:31:03.067Z
Learning: Scripts using `set -euo pipefail` provide comprehensive error handling that automatically exits on any command failure, making explicit error handling for function calls redundant.

Applied to files:

  • lib/library-functions.sh
📚 Learning: 2025-06-22T00:45:26.182Z
Learnt from: djurny
Repo: armbian/build PR: 8315
File: lib/functions/rootfs/distro-agnostic.sh:54-68
Timestamp: 2025-06-22T00:45:26.182Z
Learning: In Armbian build system, external command dependencies like envsubst are handled by adding the required packages (e.g., gettext for envsubst) to host_dependencies in adaptative_prepare_host_dependencies function in lib/functions/host/prepare-host.sh, rather than checking command availability at runtime.

Applied to files:

  • lib/library-functions.sh
  • config/sources/families/jethub.conf
  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
  • config/sources/armhf.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-06-25T03:42:09.086Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8330
File: config/sources/families/sun55iw3.conf:32-36
Timestamp: 2025-06-25T03:42:09.086Z
Learning: In Armbian build system configuration files like config/sources/families/*.conf, KERNELSOURCE is explicitly declared when using unofficial or 3rd party kernel repositories (like the "dev" branch using https://github.com/apritzel/linux), but can be omitted when using the standard mainline kernel (like the "edge" branch) since it will fall back to the default mainline source.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-06-25T03:40:52.109Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8330
File: config/sources/families/sun55iw3.conf:32-36
Timestamp: 2025-06-25T03:40:52.109Z
Learning: In Armbian build system configuration files like config/sources/families/*.conf, when KERNELSOURCE is not explicitly declared in a case branch, the system falls back to a default KERNELSOURCE value, so missing KERNELSOURCE declarations are not critical issues.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/armhf.conf
📚 Learning: 2025-07-17T04:12:33.125Z
Learnt from: pyavitz
Repo: armbian/build PR: 8388
File: config/boards/kickpik2b.conf:1-14
Timestamp: 2025-07-17T04:12:33.125Z
Learning: In the Armbian build system, board configuration files (*.conf) follow a project standard of not including shebang lines, even though they contain bash code and are sourced by the build system. This is an established Armbian convention that individual contributors are expected to follow, and changes to this standard would require broader project maintainer approval.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
  • config/sources/armhf.conf
📚 Learning: 2025-07-27T15:53:30.629Z
Learnt from: pyavitz
Repo: armbian/build PR: 8421
File: config/kernel/linux-sunxi64-edge.config:805-825
Timestamp: 2025-07-27T15:53:30.629Z
Learning: In the Armbian build system, kernel configurations prioritize broad hardware compatibility over optimization concerns. Even when including numerous legacy/obsolete drivers causes technical issues like increased initramfs size and slower enumeration, the project philosophy is to "appease the masses" by ensuring maximum device compatibility rather than optimizing for specific use cases.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-07-23T10:01:41.310Z
Learnt from: amazingfate
Repo: armbian/build PR: 8419
File: lib/functions/host/prepare-host.sh:272-275
Timestamp: 2025-07-23T10:01:41.310Z
Learning: In the Armbian build system, the design philosophy is to fail fast when host dependencies are not met rather than gracefully skipping unsupported architectures. This ensures build environment consistency and prevents silent failures. Host dependency checks should be explicit and non-negotiable.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
📚 Learning: 2025-10-26T12:56:29.185Z
Learnt from: rpardini
Repo: armbian/build PR: 8820
File: config/sources/families/include/meson64_common.inc:51-53
Timestamp: 2025-10-26T12:56:29.185Z
Learning: In the Armbian build framework, scripts/config correctly handles kernel configuration option names both with and without the CONFIG_ prefix, so opts_m+=("CONFIG_RTL8822CS") and opts_m+=("RTL8822CS") are both valid and will work correctly.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-10-03T11:42:46.660Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8705
File: .github/workflows/rewrite-kernel-configs.yml:96-169
Timestamp: 2025-10-03T11:42:46.660Z
Learning: In the Armbian build repository's kernel config rewrite workflow (.github/workflows/rewrite-kernel-configs.yml), deletion of kernel config files does not need to be handled. The workflow intentionally only captures ACMR (added/copied/modified/renamed) changes and does not need to propagate deletions to the aggregator.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/armhf.conf
📚 Learning: 2025-10-14T05:08:11.785Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8754
File: config/boards/bestv-r3300-l.csc:14-16
Timestamp: 2025-10-14T05:08:11.785Z
Learning: In the Armbian build system, BOOTBRANCH_BOARD is a valid framework variable used as a fallback when BOOTBRANCH is unset. The framework checks BOOTBRANCH_BOARD before applying the default bootloader branch value (see config/sources/common.conf). Board configuration files can use BOOTBRANCH_BOARD to specify the bootloader branch.

Applied to files:

  • config/sources/families/mvebu64.conf
📚 Learning: 2025-09-07T17:39:32.272Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8586
File: config/boards/nanopi-r76s.conf:15-21
Timestamp: 2025-09-07T17:39:32.272Z
Learning: In the Armbian build system, the variables $BOARD and $SDCARD are always set by the build framework, so guard checks for these variables are unnecessary in board configuration files and hook functions.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
  • config/sources/armhf.conf
📚 Learning: 2025-12-12T23:09:56.813Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9058
File: config/sources/families/spacemit.conf:39-45
Timestamp: 2025-12-12T23:09:56.813Z
Learning: In Armbian build configs for vendor kernel sources, prefer the following branch naming conventions: use 'vendor' or 'vendor-rt' for stable vendor releases, and 'vendor-edge' for bleeding-edge/pre-release vendor versions. The 'edge' naming without the 'vendor-' prefix is reserved for mainline kernel branches. Apply this pattern to family config files under config/sources/families (e.g., spacemit.conf) to ensure consistent vendor kernel sourcing naming across the repository.

Applied to files:

  • config/sources/families/mvebu64.conf
  • config/sources/families/jethub.conf
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • config/sources/families/jethub.conf
  • config/sources/armhf.conf
📚 Learning: 2026-01-03T20:46:29.189Z
Learnt from: rpardini
Repo: armbian/build PR: 9159
File: patch/u-boot/u-boot-genio/0026-dts-configs-add-Grinn-GenioSBC-510.patch:161-161
Timestamp: 2026-01-03T20:46:29.189Z
Learning: For the Armbian genio family (config/sources/families/genio.conf and patch/u-boot/u-boot-genio/), when reviewing PRs that include vendor U-Boot patches from Collabora, avoid flagging potential issues in board configurations that are out of scope for the PR's primary focus (e.g., don't flag Genio 510/700 board issues when the PR is focused on radxa-nio-12l/Genio 1200). The maintainer prioritizes keeping vendor patches close to upstream for easier re-copying and maintenance, even if secondary board configs have potential mismatches.
<!-- </add_learning>

Applied to files:

  • config/sources/families/jethub.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-11-13T14:50:44.662Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8925
File: lib/functions/host/docker.sh:141-141
Timestamp: 2025-11-13T14:50:44.662Z
Learning: In the Armbian build system, certain boards have U-Boot that doesn't build correctly on ubuntu:noble but works on ubuntu:jammy. For these boards, DOCKER_ARMBIAN_BASE_IMAGE can be set to "ubuntu:jammy" via an extension file loaded before docker_cli_prepare() runs, allowing legacy toolchains to work while the community works on proper fixes with limited resources.

Applied to files:

  • config/sources/families/jethub.conf
  • config/sources/armhf.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-12-18T23:40:55.905Z
Learnt from: rpardini
Repo: armbian/build PR: 9101
File: lib/functions/image/compress-checksum.sh:44-48
Timestamp: 2025-12-18T23:40:55.905Z
Learning: In the Armbian build framework, host dependencies are strictly controlled, ensuring that specific tools like `zstdmt` are guaranteed to be available in the build environment.

Applied to files:

  • config/sources/families/jethub.conf
  • lib/functions/compilation/atf.sh
📚 Learning: 2025-06-14T05:53:10.627Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8298
File: extensions/https_proxy.sh:1-9
Timestamp: 2025-06-14T05:53:10.627Z
Learning: Armbian build framework extensions are NOT designed to run standalone but are called by the supervisor. The framework provides environment variables like USERPATCHES_PATH and SDCARD, and commands are executed with protection via run_host_command_logged and chroot_sdcard functions that use bash -e -o pipefail.

Applied to files:

  • config/sources/families/jethub.conf
  • lib/functions/compilation/atf.sh
📚 Learning: 2025-08-03T15:21:20.148Z
Learnt from: pyavitz
Repo: armbian/build PR: 8455
File: config/sources/families/sun50iw1.conf:19-24
Timestamp: 2025-08-03T15:21:20.148Z
Learning: In the Armbian build system, when copying firmware files during family_tweaks_s(), use /lib/firmware/updates/ instead of /lib/firmware/ to avoid conflicts with the Armbian firmware package. The /lib/firmware/updates directory takes precedence in Linux firmware loading hierarchy and is the proper location for user-installed firmware files.

Applied to files:

  • config/sources/families/jethub.conf
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged can properly handle shell redirection operators like >> when passed as arguments, contrary to typical command wrapper behavior. The function has been tested to work correctly with redirection for appending to files like armbianEnv.txt.

Applied to files:

  • config/sources/families/jethub.conf
  • lib/functions/compilation/atf.sh
📚 Learning: 2025-08-30T06:48:09.091Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T06:48:09.091Z
Learning: In lib/functions/compilation/armbian-kernel.sh, the user prefers flexible grep patterns over anchored ones for BTRFS configuration checks, but agrees to use quiet grep (-q) to avoid polluting build logs.

Applied to files:

  • lib/functions/compilation/atf.sh
  • config/sources/armhf.conf
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: The run_host_command_logged function in the Armbian build system works by executing all its arguments through `bash -c "$*"`. This means shell redirection operators like ">>" are properly processed by bash, making commands like `run_host_command_logged echo "content" >> file.txt` work correctly. The function does not treat redirection operators as literal arguments.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-09-13T19:51:14.713Z
Learnt from: pyavitz
Repo: armbian/build PR: 8631
File: config/boards/khadas-vim4.conf:42-42
Timestamp: 2025-09-13T19:51:14.713Z
Learning: In the Armbian build system, run_host_command_logged properly handles shell redirection operators like ">>" when passed as string arguments. This pattern is used consistently throughout the codebase, such as in lib/functions/rootfs/distro-agnostic.sh where it's used to append to armbianEnv.txt files. The function has been tested and confirmed to work correctly with this syntax.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-09-12T09:49:31.957Z
Learnt from: amazingfate
Repo: armbian/build PR: 8617
File: lib/functions/compilation/kernel.sh:126-127
Timestamp: 2025-09-12T09:49:31.957Z
Learning: In the Armbian build system, the "all" target in kernel build has been used for a long time without issues. The "all" target builds vmlinux/Image/Image.gz defaults for the architecture and works correctly alongside KERNEL_IMAGE_TYPE in the build_targets_build array.

Applied to files:

  • lib/functions/compilation/atf.sh
📚 Learning: 2025-09-27T21:50:15.915Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sunxi64-current.config:94-94
Timestamp: 2025-09-27T21:50:15.915Z
Learning: When kernel config files are generated through Armbian's automated process (previous config → armbian-kernel.sh changes → make oldconfig → Armbian machinery processing), manual config file edits are not appropriate since they would be overwritten. Deprecated option handling should be implemented in the automated tooling instead.

Applied to files:

  • config/sources/armhf.conf
📚 Learning: 2025-06-12T21:03:39.686Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:148-161
Timestamp: 2025-06-12T21:03:39.686Z
Learning: In Armbian U-Boot bootscripts, the `${cpu}` environment variable is always pre-set by U-Boot (or defaults to a valid value), so additional guards against it being unset are unnecessary.

Applied to files:

  • config/sources/armhf.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-08-02T05:46:10.664Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-02T05:46:10.664Z
Learning: In the Armbian build system, the modern recommended approach for kernel configuration is to use the kernel-config command via "./compile.sh BOARD=boardname BRANCH=branchname kernel-config" instead of the deprecated KERNEL_CONFIGURE=yes flag. This provides a two-step workflow: configure using menuconfig, then build, with better transparency and control over configuration changes.

Applied to files:

  • config/sources/armhf.conf
  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-08-21T08:10:25.459Z
Learnt from: leggewie
Repo: armbian/build PR: 8524
File: config/boards/nanopiduo2.csc:12-12
Timestamp: 2025-08-21T08:10:25.459Z
Learning: KERNEL_TARGET and KERNEL_TEST_TARGET in Armbian build system do not have enforced validation relationships. KERNEL_TARGET is used for interactive menu ordering and branch validation, while KERNEL_TEST_TARGET is used for build list generation and recorded in /etc/armbian-release. No existing codebase validation enforces that KERNEL_TEST_TARGET values must be present in KERNEL_TARGET.

Applied to files:

  • config/sources/armhf.conf
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:50:04.845Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-edge.config:80-82
Timestamp: 2025-09-27T21:50:04.845Z
Learning: In the Armbian build system, kernel configuration files are generated through this automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:49:27.188Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-k3-edge.config:97-99
Timestamp: 2025-09-27T21:49:27.188Z
Learning: make oldconfig preserves existing deprecated kernel options and only prompts for new configuration options, unlike make defconfig which would auto-correct by removing deprecated options. This explains why deprecated options like CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD might persist through the automated Armbian kernel configuration generation process.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:47:58.020Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-bcm2711-edge.config:859-861
Timestamp: 2025-09-27T21:47:58.020Z
Learning: In the Armbian build system, kernel configuration files in config/kernel/ are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
📚 Learning: 2025-09-27T21:49:55.796Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-current.config:78-80
Timestamp: 2025-09-27T21:49:55.796Z
Learning: In the Armbian build system, kernel configuration files are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • lib/functions/compilation/uboot.sh
🧬 Code graph analysis (3)
lib/functions/compilation/atf.sh (2)
lib/functions/logging/display-alert.sh (1)
  • display_alert (10-227)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
lib/functions/compilation/crust.sh (2)
lib/functions/logging/display-alert.sh (1)
  • display_alert (10-227)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
lib/functions/compilation/uboot.sh (1)
lib/functions/logging/runners.sh (1)
  • run_host_command_logged (204-206)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Generate artifacts / JSON matrix: 17/16 :: 17 artifact chunks, 16 image chunks
🔇 Additional comments (22)
lib/library-functions.sh (3)

103-111: LGTM!

The addition of artifact-uboot.sh follows the established pattern in this autogenerated file, with proper error handling (errtrace/errexit) and shellcheck directive.


477-488: Load order swap has no dependency issues.

The swapped loading order is safe. Verification confirms that drivers_network.sh does not depend on any functions (kernel_drivers_create_patches_hash_only, kernel_drivers_create_patches, kernel_drivers_prepare_harness, export_changes_as_patch_via_git_format_patch, kernel_drivers_handle_mutable_ref) or variables from drivers-harness.sh.


688-696: LGTM!

The addition of github-actions.sh follows the established pattern in this autogenerated file. The placement after git.sh is logical, and the shellcheck directive correctly matches the source path.

lib/functions/compilation/kernel.sh (1)

76-77: LGTM! Clean removal of unused variable declaration.

The toolchain variable declaration was removed while preserving the logging section that determines and logs toolchain information. This aligns with the PR's goal of removing dead toolchain-related code.

lib/functions/compilation/crust.sh (3)

34-34: LGTM! Direct compiler invocation for version display.

The compiler version is now retrieved via direct invocation without PATH augmentation, consistent with the PR's simplification of toolchain handling.


49-51: LGTM! Simplified binutils version retrieval.

Direct invocation of or1k-elf-ld.bfd without PATH manipulation, relying on the host build environment having the toolchain available.


53-59: LGTM! Simplified build invocations without PATH augmentation.

Both make commands now run without PATH-prefixed toolchain directories. The CROSS_COMPILE variable properly combines ccache with the compiler prefix, maintaining build efficiency while simplifying the environment setup.

lib/functions/compilation/atf.sh (2)

34-34: LGTM! Consistent compiler version retrieval pattern.

Direct compiler invocation for version display, matching the simplified pattern used across the codebase in this PR.


86-89: LGTM! Simplified ATF build command.

The build invocation now directly sets CROSS_COMPILE and CC with ccache integration, eliminating the need for PATH-based toolchain augmentation. The linker flag detection logic (lines 55-82) properly handles binutils compatibility across different versions.

config/sources/families/mvebu64.conf (1)

33-33: LGTM! Simplified ATF_COMPILER assignment.

The conditional logic based on SKIP_EXTERNAL_TOOLCHAINS has been removed, and ATF_COMPILER is now unconditionally set to 'aarch64-linux-gnu-'. This codifies the de facto behavior since SKIP_EXTERNAL_TOOLCHAINS has been yes for approximately 5 years.

config/sources/families/jethub.conf (2)

144-144: LGTM! Consistent compiler version display pattern.

Direct compiler invocation using UBOOT_COMPILER prefix, aligned with the simplified toolchain handling throughout the PR.


150-151: LGTM! Direct compiler invocation for common tools.

The compilation commands now use env "$gpp" for direct invocation, removing PATH-based toolchain augmentation while preserving the error handling pattern.

config/sources/armhf.conf (1)

37-39: LGTM - Unconditional compiler normalization is safe and consistent.

The normalization of -none- to - in UBOOT_COMPILER and ATF_COMPILER is applied unconditionally now. This is safe because:

  • If the variable is unset/empty, the substitution results in an empty string (harmless).
  • If the variable is set with -none-, it gets normalized correctly.

This aligns with the broader cleanup removing conditional SKIP_EXTERNAL_TOOLCHAINS checks across architecture configs.

lib/functions/compilation/uboot.sh (9)

50-62: Well-structured CROSS_COMPILE centralization.

The conditional construction of cross_compile correctly avoids the spurious space issue when CCACHE is unset, addressing the PR objective. The required check for UBOOT_COMPILER on line 54 ensures early failure with a clear message if the compiler isn't configured.


102-104: LGTM - Consistent CROSS_COMPILE usage in config step.


186-188: LGTM - Consistent CROSS_COMPILE usage in debug olddefconfig.


217-219: LGTM - Consistent CROSS_COMPILE usage in post-hook olddefconfig.


248-254: Correct PATH preservation with env -i.

Since env -i on line 259 clears the environment, explicitly preserving PATH here is essential. The current implementation correctly maintains the host PATH without injecting toolchain-specific paths, aligning with the PR's goal of removing manual PATH manipulations.


258-260: LGTM - Clean environment with centralized CROSS_COMPILE for main build.


264-267: LGTM - Consistent CROSS_COMPILE usage for savedefconfig.


342-344: LGTM - Simplified variable declarations without toolchain globals.

Removing toolchain-related variables from the target loop globals aligns with the centralized cross_compile approach in compile_uboot_target.


417-419: This pattern is used consistently and successfully throughout the Armbian build system (kernel-make.sh, crust.sh, atf.sh, and uboot.sh), with version strings being captured and used in version comparisons like linux-version compare "${gcc_version_main}" ge "11.0". The consistent application across multiple compilation targets without fallback handling or reported failures indicates this is intentional and working as expected.

@github-actions
Copy link
Contributor

✅ This PR has been reviewed and approved — all set for merge!

@github-actions github-actions bot added Ready to merge Reviewed, tested and ready for merge and removed Needs review Seeking for review labels Jan 13, 2026
@igorpecovnik igorpecovnik merged commit cb36a6b into armbian:main Jan 14, 2026
55 of 56 checks passed
@igorpecovnik
Copy link
Member

igorpecovnik commented Jan 15, 2026

x86 qemu uboot compilation fails probably due to this change https://paste.armbian.com/uhixivujid

@rpardini
Copy link
Member Author

x86 qemu uboot compilation fails probably due to this change paste.armbian.com/uhixivujid

Yes, very very niche case, will address in pt3

@rpardini
Copy link
Member Author

Sent pt3 with fix for qemu x86 uboot plus other cleanups mentioned here. #9252

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

02 Milestone: First quarter release Build Executing build train (permission needed) Framework Framework components Hardware Hardware related like kernel, U-Boot, ... Ready to merge Reviewed, tested and ready for merge size/large PR with 250 lines or more

Development

Successfully merging this pull request may close these issues.

3 participants