Merge pull request #129806 from lovesegfault/kernel-extra-build-flags
linux: groundwork to enable LLVM/LTO builds
This commit is contained in:
commit
91ffffd904
3 changed files with 26 additions and 13 deletions
|
@ -19,6 +19,7 @@ my $autoModules = $ENV{'AUTO_MODULES'};
|
|||
my $preferBuiltin = $ENV{'PREFER_BUILTIN'};
|
||||
my $ignoreConfigErrors = $ENV{'ignoreConfigErrors'};
|
||||
my $buildRoot = $ENV{'BUILD_ROOT'};
|
||||
my $makeFlags = $ENV{'MAKE_FLAGS'};
|
||||
$SIG{PIPE} = 'IGNORE';
|
||||
|
||||
# Read the answers.
|
||||
|
@ -40,7 +41,7 @@ close ANSWERS;
|
|||
sub runConfig {
|
||||
|
||||
# Run `make config'.
|
||||
my $pid = open2(\*IN, \*OUT, "make -C $ENV{SRC} O=$buildRoot config SHELL=bash ARCH=$ENV{ARCH} CC=$ENV{CC} HOSTCC=$ENV{HOSTCC} HOSTCXX=$ENV{HOSTCXX}");
|
||||
my $pid = open2(\*IN, \*OUT, "make -C $ENV{SRC} O=$buildRoot config SHELL=bash ARCH=$ENV{ARCH} CC=$ENV{CC} HOSTCC=$ENV{HOSTCC} HOSTCXX=$ENV{HOSTCXX} $makeFlags");
|
||||
|
||||
# Parse the output, look for questions and then send an
|
||||
# appropriate answer.
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
, # Legacy overrides to the intermediate kernel config, as string
|
||||
extraConfig ? ""
|
||||
|
||||
# Additional make flags passed to kbuild
|
||||
, extraMakeFlags ? []
|
||||
|
||||
, # kernel intermediate config overrides, as a set
|
||||
structuredExtraConfig ? {}
|
||||
|
||||
|
@ -97,7 +100,7 @@ let
|
|||
in lib.concatStringsSep "\n" ([baseConfigStr] ++ configFromPatches);
|
||||
|
||||
configfile = stdenv.mkDerivation {
|
||||
inherit ignoreConfigErrors autoModules preferBuiltin kernelArch;
|
||||
inherit ignoreConfigErrors autoModules preferBuiltin kernelArch extraMakeFlags;
|
||||
pname = "linux-config";
|
||||
inherit version;
|
||||
|
||||
|
@ -116,6 +119,9 @@ let
|
|||
# e.g. "bzImage"
|
||||
kernelTarget = stdenv.hostPlatform.linux-kernel.target;
|
||||
|
||||
makeFlags = lib.optionals (stdenv.hostPlatform.linux-kernel ? makeFlags) stdenv.hostPlatform.linux-kernel.makeFlags
|
||||
++ extraMakeFlags;
|
||||
|
||||
prePatch = kernel.prePatch + ''
|
||||
# Patch kconfig to print "###" after every question so that
|
||||
# generate-config.pl from the generic builder can answer them.
|
||||
|
@ -134,16 +140,19 @@ let
|
|||
export HOSTLD=$LD_FOR_BUILD
|
||||
|
||||
# Get a basic config file for later refinement with $generateConfig.
|
||||
make -C . O="$buildRoot" $kernelBaseConfig \
|
||||
make $makeFlags \
|
||||
-C . O="$buildRoot" $kernelBaseConfig \
|
||||
ARCH=$kernelArch \
|
||||
HOSTCC=$HOSTCC HOSTCXX=$HOSTCXX HOSTAR=$HOSTAR HOSTLD=$HOSTLD \
|
||||
CC=$CC OBJCOPY=$OBJCOPY OBJDUMP=$OBJDUMP READELF=$READELF
|
||||
CC=$CC OBJCOPY=$OBJCOPY OBJDUMP=$OBJDUMP READELF=$READELF \
|
||||
$makeFlags
|
||||
|
||||
# Create the config file.
|
||||
echo "generating kernel configuration..."
|
||||
ln -s "$kernelConfigPath" "$buildRoot/kernel-config"
|
||||
DEBUG=1 ARCH=$kernelArch KERNEL_CONFIG="$buildRoot/kernel-config" AUTO_MODULES=$autoModules \
|
||||
PREFER_BUILTIN=$preferBuiltin BUILD_ROOT="$buildRoot" SRC=. perl -w $generateConfig
|
||||
PREFER_BUILTIN=$preferBuiltin BUILD_ROOT="$buildRoot" SRC=. MAKE_FLAGS="$makeFlags" \
|
||||
perl -w $generateConfig
|
||||
'';
|
||||
|
||||
installPhase = "mv $buildRoot/.config $out";
|
||||
|
@ -151,7 +160,6 @@ let
|
|||
enableParallelBuilding = true;
|
||||
|
||||
passthru = rec {
|
||||
|
||||
module = import ../../../../nixos/modules/system/boot/kernel_config.nix;
|
||||
# used also in apache
|
||||
# { modules = [ { options = res.options; config = svc.config or svc; } ];
|
||||
|
@ -172,14 +180,14 @@ let
|
|||
}; # end of configfile derivation
|
||||
|
||||
kernel = (callPackage ./manual-config.nix {}) {
|
||||
inherit version modDirVersion src kernelPatches randstructSeed lib stdenv extraMeta configfile;
|
||||
inherit version modDirVersion src kernelPatches randstructSeed lib stdenv extraMakeFlags extraMeta configfile;
|
||||
|
||||
config = { CONFIG_MODULES = "y"; CONFIG_FW_LOADER = "m"; };
|
||||
};
|
||||
|
||||
passthru = {
|
||||
features = kernelFeatures;
|
||||
inherit commonStructuredConfig isZen isHardened isLibre modDirVersion;
|
||||
inherit commonStructuredConfig structuredExtraConfig extraMakeFlags isZen isHardened isLibre modDirVersion;
|
||||
isXen = lib.warn "The isXen attribute is deprecated. All Nixpkgs kernels that support it now have Xen enabled." true;
|
||||
kernelOlder = lib.versionOlder version;
|
||||
kernelAtLeast = lib.versionAtLeast version;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{ lib, buildPackages, runCommand, nettools, bc, bison, flex, perl, rsync, gmp, libmpc, mpfr, openssl
|
||||
, libelf, cpio, elfutils, zstd, gawk
|
||||
, libelf, cpio, elfutils, zstd, gawk, python3Minimal
|
||||
, writeTextFile
|
||||
}:
|
||||
|
||||
|
@ -19,6 +19,8 @@ in {
|
|||
stdenv,
|
||||
# The kernel version
|
||||
version,
|
||||
# Additional kernel make flags
|
||||
extraMakeFlags ? [],
|
||||
# The version of the kernel module directory
|
||||
modDirVersion ? version,
|
||||
# The kernel source (tarball, git checkout, etc.)
|
||||
|
@ -121,7 +123,7 @@ let
|
|||
# See also https://kernelnewbies.org/BuildId
|
||||
sed -i Makefile -e 's|--build-id=[^ ]*|--build-id=none|'
|
||||
|
||||
patchShebangs scripts/ld-version.sh
|
||||
patchShebangs scripts
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
|
@ -173,7 +175,9 @@ let
|
|||
"KBUILD_BUILD_VERSION=1-NixOS"
|
||||
kernelConf.target
|
||||
"vmlinux" # for "perf" and things like that
|
||||
] ++ optional isModular "modules";
|
||||
]
|
||||
++ optional isModular "modules"
|
||||
++ extraMakeFlags;
|
||||
|
||||
installFlags = [
|
||||
"INSTALLKERNEL=${installkernel}"
|
||||
|
@ -307,7 +311,7 @@ stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.linux-kernel kernelPat
|
|||
enableParallelBuilding = true;
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
nativeBuildInputs = [ perl bc nettools openssl rsync gmp libmpc mpfr gawk zstd ]
|
||||
nativeBuildInputs = [ perl bc nettools openssl rsync gmp libmpc mpfr gawk zstd python3Minimal ]
|
||||
++ optional (stdenv.hostPlatform.linux-kernel.target == "uImage") buildPackages.ubootTools
|
||||
++ optional (lib.versionAtLeast version "4.14" && lib.versionOlder version "5.8") libelf
|
||||
# Removed util-linuxMinimal since it should not be a dependency.
|
||||
|
@ -325,7 +329,7 @@ stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.linux-kernel kernelPat
|
|||
"ARCH=${stdenv.hostPlatform.linuxArch}"
|
||||
] ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
||||
];
|
||||
] ++ extraMakeFlags;
|
||||
|
||||
karch = stdenv.hostPlatform.linuxArch;
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue