Merge pull request #221707 from NixOS/linuxManualConfig-unpack

linuxManualConfig: install GDB scripts
This commit is contained in:
Maximilian Bosch 2023-03-20 20:42:10 +01:00 committed by GitHub
commit e999433b3a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 23 deletions

View file

@ -36,10 +36,7 @@ let
debug = {
# Necessary for BTF
DEBUG_INFO = mkMerge [
(whenOlder "5.2" (if (features.debug or false) then yes else no))
(whenBetween "5.2" "5.18" yes)
];
DEBUG_INFO = yes;
DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT = whenAtLeast "5.18" yes;
# Reduced debug info conflict with BTF and have been enabled in
# aarch64 defconfig since 5.13
@ -62,6 +59,8 @@ let
SUNRPC_DEBUG = yes;
# Provide access to tunables like sched_migration_cost_ns
SCHED_DEBUG = yes;
GDB_SCRIPTS = yes;
};
power-management = {

View file

@ -115,6 +115,20 @@ let
hash = "sha256-bBOyJcP6jUvozFJU0SPTOf3cmnTQ6ZZ4PlHjiniHXLU=";
});
preUnpack = ''
# The same preUnpack is used to build the configfile,
# which does not have $dev.
if [ -n "$dev" ]; then
mkdir -p $dev/lib/modules/${modDirVersion}
cd $dev/lib/modules/${modDirVersion}
fi
'';
postUnpack = ''
mv -Tv "$sourceRoot" source 2>/dev/null || :
export sourceRoot=$PWD/source
'';
postPatch = ''
sed -i Makefile -e 's|= depmod|= ${buildPackages.kmod}/bin/depmod|'
@ -156,8 +170,7 @@ let
configurePhase = ''
runHook preConfigure
mkdir build
export buildRoot="$(pwd)/build"
export buildRoot=$(mktemp -d)
echo "manual-config configurePhase buildRoot=$buildRoot pwd=$PWD"
@ -185,12 +198,14 @@ let
'';
buildFlags = [
"DTC_FLAGS=-@"
"KBUILD_BUILD_VERSION=1-NixOS"
kernelConf.target
"vmlinux" # for "perf" and things like that
] ++ optional isModular "modules"
++ optionals buildDTBs ["dtbs" "DTC_FLAGS=-@"]
++ extraMakeFlags;
# Set by default in the kernel since a73619a845d5,
# replicated here to apply to older versions.
# Makes __FILE__ relative to the build directory.
"KCPPFLAGS=-fmacro-prefix-map=$(sourceRoot)/="
] ++ extraMakeFlags;
installFlags = [
"INSTALL_PATH=$(out)"
@ -262,8 +277,6 @@ let
];
postInstall = optionalString isModular ''
mkdir -p $dev
cp vmlinux $dev/
if [ -z "''${dontStrip-}" ]; then
installFlagsArray+=("INSTALL_MOD_STRIP=1")
fi
@ -272,12 +285,7 @@ let
unlink $out/lib/modules/${modDirVersion}/build
unlink $out/lib/modules/${modDirVersion}/source
mkdir -p $dev/lib/modules/${modDirVersion}/{build,source}
# To save space, exclude a bunch of unneeded stuff when copying.
(cd .. && rsync --archive --prune-empty-dirs \
--exclude='/build/' \
* $dev/lib/modules/${modDirVersion}/source/)
mkdir $dev/lib/modules/${modDirVersion}/build
cd $dev/lib/modules/${modDirVersion}/source
@ -288,12 +296,16 @@ let
# from a `try-run` call from the Makefile
rm -f $dev/lib/modules/${modDirVersion}/build/.[0-9]*.d
# Keep some extra files on some arches (powerpc, aarch64)
for f in arch/powerpc/lib/crtsavres.o arch/arm64/kernel/ftrace-mod.o; do
if [ -f "$buildRoot/$f" ]; then
cp $buildRoot/$f $dev/lib/modules/${modDirVersion}/build/$f
# Keep some extra files
for f in arch/powerpc/lib/crtsavres.o arch/arm64/kernel/ftrace-mod.o \
scripts/gdb/linux vmlinux vmlinux-gdb.py
do
if [ -e "$buildRoot/$f" ]; then
mkdir -p "$(dirname "$dev/lib/modules/${modDirVersion}/build/$f")"
cp -HR $buildRoot/$f $dev/lib/modules/${modDirVersion}/build/$f
fi
done
ln -s $dev/lib/modules/${modDirVersion}/build/vmlinux $dev
# !!! No documentation on how much of the source tree must be kept
# If/when kernel builds fail due to missing files, you can add
@ -336,6 +348,11 @@ let
sed -i Makefile -e 's|= ${buildPackages.kmod}/bin/depmod|= depmod|'
'';
preFixup = ''
# Don't strip $dev/lib/modules/*/vmlinux
stripDebugList="$(cd $dev && echo lib/modules/*/build/*/)"
'';
requiredSystemFeatures = [ "big-parallel" ];
meta = {