diff options
author | Julian Stecklina <julian.stecklina@cyberus-technology.de> | 2024-05-21 14:02:44 +0200 |
---|---|---|
committer | Julian Stecklina <julian.stecklina@cyberus-technology.de> | 2024-05-21 14:02:44 +0200 |
commit | 15ae485eb8384b4bf0abce6beb15130f823254ef (patch) | |
tree | 4c8fe89c27c2a9f38e03325e0c736c1e82824916 | |
parent | 10a64401a24f3f48df5dd4aad21b2cd80366e4bc (diff) |
Add enter-kernel-dev tool
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | flake.nix | 10 | ||||
-rw-r--r-- | tools.nix | 11 | ||||
-rwxr-xr-x | tools/enter-kernel-dev | 67 | ||||
-rwxr-xr-x[-rw-r--r--] | tools/linux-checkout | 2 |
5 files changed, 87 insertions, 4 deletions
@@ -1 +1,2 @@ .direnv +/result @@ -29,7 +29,9 @@ pkgs = nixpkgs.legacyPackages."${system}"; # A set of scripts to simplify kernel development. - kernelDevTools = pkgs.callPackage ./tools.nix { }; + kernelDevTools = pkgs.callPackage ./tools.nix { + flakeSelf = self.outPath; + }; linuxCommonDependencies = [ kernelDevTools @@ -106,6 +108,12 @@ ]; in { + packages = { + default = kernelDevTools; + + inherit kernelDevTools; + }; + devShells = { default = self.devShells."${system}".linux_6_8; @@ -1,9 +1,13 @@ -{ stdenvNoCC }: +{ stdenvNoCC, makeWrapper, flakeSelf }: stdenvNoCC.mkDerivation { name = "kernel-dev-tools"; src = ./tools; - + + nativeBuildInputs = [ + makeWrapper + ]; + dontConfigure = true; dontBuild = true; @@ -16,6 +20,9 @@ stdenvNoCC.mkDerivation { install -m0555 "$script" $out/bin/ done + wrapProgram $out/bin/enter-kernel-dev \ + --set FLAKE_DIR "${flakeSelf}" + runHook preInstall ''; } diff --git a/tools/enter-kernel-dev b/tools/enter-kernel-dev new file mode 100755 index 0000000..ffd16ed --- /dev/null +++ b/tools/enter-kernel-dev @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +set -e + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# When this script is used as is, SCRIPT_DIR is ok. If it's used as +# part of kernelDevTools, we have to inject the path to the flake. +if [ -z "$FLAKE_DIR" ]; then + FLAKE_DIR="$SCRIPT_DIR" +fi + +gcc_flag=false + +# Parse command-line options +TEMP=$(getopt -o '' --longoptions gcc -- "$@") +eval set -- "$TEMP" + +# Extract options into variables +while true; do + case "$1" in + --gcc) + gcc_flag=true + shift + ;; + --) + shift + break + ;; + *) + echo "Error: Invalid option" + echo "Usage: $0 [--gcc]" + exit 1 + ;; + esac +done + +OLDEST_VERSION=$(git tag --contains=HEAD | grep -oE 'v[0-9]+\.[0-9]+' | sort | head -n1) + +if [ -z "$OLDEST_VERSION" ]; then + tput bold + echo -n "Failed to recognize kernel version." + tput sgr0 + echo " This could have different reasons:" + echo + echo "1. This is not a Git checkout of the Linux kernel sources. To checkout Linux, try:" + echo " \$ linux-checkout linux-src" + echo + echo "2. The repository has no remote that contains the version tags. Try:" + echo " \$ git remote add stable git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git" + echo " \$ git fetch stable" + exit 1 +fi + +ATTRIBUTE="linux_$(echo "$OLDEST_VERSION" | tr -d 'v' | tr '.' '_')" + +if $gcc_flag; then + ATTRIBUTE=${ATTRIBUTE}_gcc +fi + +echo -n "Entering environment " +tput bold +echo -n "$ATTRIBUTE" +tput sgr0 # reset +echo ". This might take a moment. Exit via ^D." + +exec nix develop "$FLAKE_DIR"\#"$ATTRIBUTE" --command "$SHELL" diff --git a/tools/linux-checkout b/tools/linux-checkout index 7069f07..7097ad3 100644..100755 --- a/tools/linux-checkout +++ b/tools/linux-checkout @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -eu |