Files
liminix/pkgs/kernel/dtb.nix
kurogeek 9dd92ac53e mob next [ci-skip] [ci skip] [skip ci]
lastFile:pkgs/kernel/default.nix
2025-10-14 10:07:38 +07:00

38 lines
1.1 KiB
Nix

{
stdenv,
dtc,
lib,
runCommand,
writeText,
}:
{
dts,
includes,
commandLine,
}:
let
cppDtSearchFlags = builtins.concatStringsSep " " (map (f: "-I${f}") includes);
dtcSearchFlags = builtins.concatStringsSep " " (map (f: "-i${f}") includes);
cmdline = lib.concatStringsSep " " commandLine;
chosen = writeText "chosen.dtsi" "/{ chosen { bootargs = ${builtins.toJSON cmdline}; }; };";
combined = writeText "combined-dts-fragments" (
lib.concatStrings (builtins.map (f: "#include \"${f}\"\n") (dts ++ [ chosen ]))
);
in
stdenv.mkDerivation {
name = "dtb";
phases = [ "buildPhase" ];
nativeBuildInputs = [ dtc ];
buildPhase = ''
echo ==================================================
echo ${dtcSearchFlags}
echo ==
echo ${cppDtSearchFlags}
echo ==================================================
${stdenv.cc.targetPrefix}cpp -nostdinc -x assembler-with-cpp ${cppDtSearchFlags} -undef -D__DTS__ -o dtb.tmp ${combined}
dtc ${dtcSearchFlags} -I dts -O dtb -o $out dtb.tmp
# dtc -I dtb -O dts $out
test -e $out
'';
}