03e45e0cb4
`generate-config.pl' runs `make config' to generate a Linux kernel configuration file. For each question (i.e. kernel configuration option), unless an override is provided, it answers "m" if possible, and otherwise uses the default answer (as determined by the default config for the architecture). This is safer than allmodconfig, which answers "y" everywhere it can't answer "m" and thus ends up enabling a lot of experimental or debug options. (For this reason, a configuration generated by allmodconfig must be carefully checked with every new release to ensure that nothing dangerous is enabled. The default config should be safer wrt new kernel releases.) Overrides are specified in the `config' argument to generic.nix, which is a string that contains lines such as `EXT2_FS_POSIX_ACL y'. The script warns about ignored options, and aborts if `make config' selects an answer inconsistent with the one in `config'. This allows us to be sure that `make config' doesn't silently override our configuration values (e.g., depending on other options, it will set FB_TILEBLITTING to "y" even if we want it to be "n"). svn path=/nixpkgs/branches/kernel-config/; revision=18910
115 lines
3.7 KiB
Bash
115 lines
3.7 KiB
Bash
source $stdenv/setup
|
|
|
|
|
|
configurePhase() {
|
|
if test -n "$preConfigure"; then
|
|
eval "$preConfigure";
|
|
fi
|
|
|
|
export INSTALL_PATH=$out
|
|
export INSTALL_MOD_PATH=$out
|
|
|
|
|
|
# Get rid of any "localversion" files installed by patches.
|
|
if test -z "$allowLocalVersion"; then
|
|
rm -f localversion*
|
|
fi
|
|
|
|
# Set our own localversion, if specified.
|
|
if test -n "$localVersion"; then
|
|
echo "$localVersion" > localversion-nix
|
|
fi
|
|
|
|
|
|
# Patch kconfig to print "###" after every question -
|
|
# generate-config.pl expects this.
|
|
sed -e '/fflush(stdout);/i\printf("###");' -i scripts/kconfig/conf.c
|
|
|
|
# Create the config file.
|
|
echo "generating kernel configuration..."
|
|
echo "$kernelConfig" > kernel-config
|
|
ARCH=$arch KERNEL_CONFIG=kernel-config SHELL=bash NIX_INDENT_MAKE= perl -w $generateConfig
|
|
}
|
|
|
|
|
|
installPhase() {
|
|
|
|
ensureDir $out
|
|
|
|
# New kernel versions have a combined tree for i386 and x86_64.
|
|
archDir=$arch
|
|
if test -e arch/x86 -a \( "$arch" = i386 -o "$arch" = x86_64 \); then
|
|
archDir=x86
|
|
fi
|
|
|
|
# Copy the bzImage and System.map.
|
|
cp System.map $out
|
|
if test "$arch" = um; then
|
|
ensureDir $out/bin
|
|
cp linux $out/bin
|
|
else
|
|
cp arch/$archDir/boot/bzImage $out/vmlinuz
|
|
fi
|
|
|
|
# Install the modules in $out/lib/modules with matching paths
|
|
# in modules.dep (i.e., refererring to $out/lib/modules, not
|
|
# /lib/modules). The depmod_opts= is to prevent the kernel
|
|
# from passing `-b PATH' to depmod.
|
|
export MODULE_DIR=$out/lib/modules/
|
|
substituteInPlace Makefile --replace '-b $(INSTALL_MOD_PATH)' ''
|
|
make modules_install \
|
|
DEPMOD=$module_init_tools/sbin/depmod depmod_opts= \
|
|
$makeFlags "${makeFlagsArray[@]}" \
|
|
$installFlags "${installFlagsArray[@]}"
|
|
|
|
# Strip the kernel modules.
|
|
echo "Stripping kernel modules..."
|
|
find $out -name "*.ko" -print0 | xargs -0 strip -S
|
|
|
|
# move this to install later on
|
|
# largely copied from early FC3 kernel spec files
|
|
version=$(cd $out/lib/modules && ls -d *)
|
|
|
|
# remove symlinks and create directories
|
|
rm -f $out/lib/modules/$version/build
|
|
rm -f $out/lib/modules/$version/source
|
|
mkdir $out/lib/modules/$version/build
|
|
|
|
# copy config
|
|
cp .config $out/lib/modules/$version/build/.config
|
|
|
|
if test "$arch" != um; then
|
|
# copy all Makefiles and Kconfig files
|
|
ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source
|
|
cp --parents `find -type f -name Makefile -o -name "Kconfig*"` $out/lib/modules/$version/build
|
|
cp Module.symvers $out/lib/modules/$version/build
|
|
|
|
# weed out unneeded stuff
|
|
rm -rf $out/lib/modules/$version/build/Documentation
|
|
rm -rf $out/lib/modules/$version/build/scripts
|
|
rm -rf $out/lib/modules/$version/build/include
|
|
|
|
# copy architecture dependent files
|
|
cp -a arch/$archDir/scripts $out/lib/modules/$version/build/ || true
|
|
cp -a arch/$archDir/*lds $out/lib/modules/$version/build/ || true
|
|
cp -a arch/$archDir/Makefile*.cpu $out/lib/modules/$version/build/arch/$archDir/ || true
|
|
cp -a --parents arch/$archDir/kernel/asm-offsets.s $out/lib/modules/$version/build/arch/$archDir/kernel/ || true
|
|
|
|
# copy scripts
|
|
rm -f scripts/*.o
|
|
rm -f scripts/*/*.o
|
|
cp -a scripts $out/lib/modules/$version/build
|
|
|
|
# copy include files
|
|
includeDir=$out/lib/modules/$version/build/include
|
|
mkdir -p $includeDir
|
|
(cd include && cp -a * $includeDir)
|
|
(cd arch/$archDir/include && cp -a * $includeDir || true)
|
|
(cd arch/$archDir/include && cp -a asm/* $includeDir/asm/ || true)
|
|
(cd arch/$archDir/include/asm/mach-generic && cp -a * $includeDir/ || true)
|
|
fi
|
|
}
|
|
|
|
|
|
genericBuild
|