refactor(nxp): parameterize i.MX platform builders to reduce duplication

This refactoring reduces code duplication across i.MX93, i.MX8MP, and
i.MX8MQ platforms by extracting common build logic into parameterized
shared builders. This makes it easier to maintain and add new i.MX
platforms while ensuring consistency across all platforms.
This commit is contained in:
Jörg Thalheim
2025-10-29 16:03:39 +01:00
parent 8b405e9c6d
commit 688ee555de
14 changed files with 398 additions and 598 deletions

View File

@@ -0,0 +1,97 @@
# Parameterized U-Boot builder for i.MX platforms
# This builder is used across i.MX93, i.MX8MP, i.MX8MQ and similar platforms
{
lib,
stdenv,
buildPackages,
# Required dependencies
bison,
dtc,
flex,
gnutls,
libuuid,
ncurses,
openssl,
perl,
efitools,
which,
# Platform-specific parameters
pname,
version,
src,
defconfig,
ramdiskAddr,
fdtAddr,
dtbPath,
# Optional parameters
extraConfig ? "",
extraNativeBuildInputs ? [ ],
}:
let
# Import common U-Boot configuration
ubootConfig = import ../lib/uboot-config.nix;
# Generate the common config with platform-specific memory addresses
commonConfig = ubootConfig.imxCommonUbootConfig {
inherit ramdiskAddr fdtAddr;
};
# Combine common config with any platform-specific extra config
finalExtraConfig = commonConfig + extraConfig;
in
stdenv.mkDerivation {
inherit pname version src;
postPatch = ''
patchShebangs tools
patchShebangs scripts
'';
nativeBuildInputs = [
bison
flex
openssl
which
ncurses
libuuid
gnutls
perl
efitools
] ++ extraNativeBuildInputs;
depsBuildBuild = [ buildPackages.stdenv.cc ];
hardeningDisable = [ "all" ];
enableParallelBuilding = true;
makeFlags = [
"DTC=${lib.getExe buildPackages.dtc}"
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
];
extraConfig = finalExtraConfig;
passAsFile = [ "extraConfig" ];
configurePhase = ''
runHook preConfigure
make ${defconfig}
cat $extraConfigPath >> .config
runHook postConfigure
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp ./u-boot-nodtb.bin $out
cp ./spl/u-boot-spl.bin $out
cp ${dtbPath} $out
cp .config $out
runHook postInstall
'';
dontStrip = true;
}