mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-26 08:53:21 +00:00
linux/manual-config: Do source unpacking/patching in a separate derivation.
Since we keep the source in the kernel build anyway, no space is wasted by having a separate store path for the unpacked source. The upside is that the same source can be used to build the kernel multiple times, or generate configurations for later kernel builds, without going through the (fairly long) unpack and patch process multiple times.
This commit is contained in:
parent
0dea12ff8d
commit
0c18551c93
@ -74,40 +74,58 @@ let
|
||||
(isModular || (config.isDisabled "FIRMWARE_IN_KERNEL"));
|
||||
|
||||
commonMakeFlags = [
|
||||
"O=../build"
|
||||
"O=$(buildRoot)"
|
||||
"INSTALL_PATH=$(out)"
|
||||
] ++ (optional isModular "INSTALL_MOD_PATH=$(out)")
|
||||
++ optional installsFirmware "INSTALL_FW_PATH=$(out)/lib/firmware";
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
let self = stdenv.mkDerivation {
|
||||
name = "linux-${version}";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
passthru = {
|
||||
inherit version modDirVersion config kernelPatches;
|
||||
inherit version modDirVersion config kernelPatches src;
|
||||
|
||||
source = stdenv.mkDerivation {
|
||||
name = "linux-${version}-source";
|
||||
|
||||
inherit src;
|
||||
|
||||
patches = map (p: p.patch) kernelPatches;
|
||||
|
||||
phases = [ "unpackPhase" "patchPhase" "installPhase" ];
|
||||
|
||||
prePatch = ''
|
||||
for mf in $(find -name Makefile -o -name Makefile.include -o -name install.sh); do
|
||||
echo "stripping FHS paths in \`$mf'..."
|
||||
sed -i "$mf" -e 's|/usr/bin/||g ; s|/bin/||g ; s|/sbin/||g'
|
||||
done
|
||||
sed -i Makefile -e 's|= depmod|= ${kmod}/sbin/depmod|'
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
cd ..
|
||||
mv $sourceRoot $out
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
inherit src;
|
||||
|
||||
patches = map (p: p.patch) kernelPatches;
|
||||
|
||||
prePatch = ''
|
||||
for mf in $(find -name Makefile -o -name Makefile.include -o -name install.sh); do
|
||||
echo "stripping FHS paths in \`$mf'..."
|
||||
sed -i "$mf" -e 's|/usr/bin/||g ; s|/bin/||g ; s|/sbin/||g'
|
||||
done
|
||||
sed -i Makefile -e 's|= depmod|= ${kmod}/sbin/depmod|'
|
||||
unpackPhase = ''
|
||||
ln -sv ${self.source} src
|
||||
export sourceRoot="$(pwd)/src"
|
||||
mkdir build
|
||||
export buildRoot="$(pwd)/build"
|
||||
cd $sourceRoot
|
||||
'';
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
mkdir ../build
|
||||
make $makeFlags "''${makeFlagsArray[@]}" mrproper
|
||||
ln -sv ${configfile} ../build/.config
|
||||
ln -sv ${configfile} $buildRoot/.config
|
||||
make $makeFlags "''${makeFlagsArray[@]}" oldconfig
|
||||
rm ../build/.config.old
|
||||
rm $buildRoot/.config.old
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
@ -131,9 +149,9 @@ stdenv.mkDerivation {
|
||||
rm -f $out/lib/modules/${modDirVersion}/{build,source}
|
||||
cd ..
|
||||
mv $sourceRoot $out/lib/modules/${modDirVersion}/source
|
||||
mv build $out/lib/modules/${modDirVersion}/build
|
||||
mv $buildRoot $out/lib/modules/${modDirVersion}/build
|
||||
unlink $out/lib/modules/${modDirVersion}/build/source
|
||||
ln -sv $out/lib/modules/${modDirVersion}/{,build/}source
|
||||
ln -sv ${self.source} $out/lib/modules/${modDirVersion}/build/source
|
||||
'' else optionalString installsFirmware ''
|
||||
make firmware_install $makeFlags "''${makeFlagsArray[@]}" \
|
||||
$installFlags "''${installFlagsArray[@]}"
|
||||
@ -154,4 +172,4 @@ stdenv.mkDerivation {
|
||||
];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
}; in self
|
||||
|
Loading…
Reference in New Issue
Block a user