Loading nixos/modules/hardware/device-tree.nix +47 −19 Original line number Diff line number Diff line Loading @@ -66,36 +66,32 @@ let }; filterDTBs = src: if cfg.filter == null then "${src}/dtbs" then src else pkgs.runCommand "dtbs-filtered" {} '' mkdir -p $out cd ${src}/dtbs cd ${src} find . -type f -name '${cfg.filter}' -print0 \ | xargs -0 cp -v --no-preserve=mode --target-directory $out --parents ''; filteredDTBs = filterDTBs cfg.kernelPackage; # Compile single Device Tree overlay source # file (.dts) into its compiled variant (.dtbo) compileDTS = name: f: pkgs.callPackage({ stdenv, dtc }: stdenv.mkDerivation { name = "${name}-dtbo"; nativeBuildInputs = [ dtc ]; buildCommand = '' $CC -E -nostdinc -I${getDev cfg.kernelPackage}/lib/modules/${cfg.kernelPackage.modDirVersion}/source/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp ${f} | \ dtc -I dts -O dtb -@ -o $out ''; }) {}; filteredDTBs = filterDTBs cfg.dtbSource; # Fill in `dtboFile` for each overlay if not set already. # Existence of one of these is guarded by assertion below withDTBOs = xs: flip map xs (o: o // { dtboFile = let includePaths = ["${getDev cfg.kernelPackage}/lib/modules/${cfg.kernelPackage.modDirVersion}/source/scripts/dtc/include-prefixes"] ++ cfg.dtboBuildExtraIncludePaths; extraPreprocessorFlags = cfg.dtboBuildExtraPreprocessorFlags; in if o.dtboFile == null then if o.dtsFile != null then compileDTS o.name o.dtsFile else compileDTS o.name (pkgs.writeText "dts" o.dtsText) let dtsFile = if o.dtsFile == null then (pkgs.writeText "dts" o.dtsText) else o.dtsFile; in pkgs.deviceTree.compileDTS { name = "${o.name}-dtbo"; inherit includePaths extraPreprocessorFlags dtsFile; } else o.dtboFile; } ); in Loading @@ -121,7 +117,39 @@ in example = literalExpression "pkgs.linux_latest"; type = types.path; description = lib.mdDoc '' Kernel package containing the base device-tree (.dtb) to boot. Uses Kernel package where device tree include directory is from. Also used as default source of dtb package to apply overlays to ''; }; dtboBuildExtraPreprocessorFlags = mkOption { default = []; example = literalExpression "[ \"-DMY_DTB_DEFINE\" ]"; type = types.listOf types.str; description = lib.mdDoc '' Additional flags to pass to the preprocessor during dtbo compilations ''; }; dtboBuildExtraIncludePaths = mkOption { default = []; example = literalExpression '' [ ./my_custom_include_dir_1 ./custom_include_dir_2 ] ''; type = types.listOf types.path; description = lib.mdDoc '' Additional include paths that will be passed to the preprocessor when creating the final .dts to compile into .dtbo ''; }; dtbSource = mkOption { default = "${cfg.kernelPackage}/dtbs"; defaultText = literalExpression "\${cfg.kernelPackage}/dtbs"; type = types.path; description = lib.mdDoc '' Path to dtb directory that overlays and other processing will be applied to. Uses device trees bundled with the Linux kernel by default. ''; }; Loading pkgs/os-specific/linux/device-tree/default.nix +24 −1 Original line number Diff line number Diff line { lib, stdenvNoCC, dtc }: { lib, stdenv, stdenvNoCC, dtc }: with lib; { # Compile single Device Tree overlay source # file (.dts) into its compiled variant (.dtb) compileDTS = ({ name, dtsFile, includePaths ? [], extraPreprocessorFlags ? [] }: stdenv.mkDerivation { inherit name; nativeBuildInputs = [ dtc ]; buildCommand = let includeFlagsStr = lib.concatMapStringsSep " " (includePath: "-I${includePath}") includePaths; extraPreprocessorFlagsStr = lib.concatStringsSep " " extraPreprocessorFlags; in '' $CC -E -nostdinc ${includeFlagsStr} -undef -D__DTS__ -x assembler-with-cpp ${extraPreprocessorFlagsStr} ${dtsFile} | \ dtc -I dts -O dtb -@ -o $out ''; }); applyOverlays = (base: overlays': stdenvNoCC.mkDerivation { name = "device-tree-overlays"; nativeBuildInputs = [ dtc ]; Loading Loading
nixos/modules/hardware/device-tree.nix +47 −19 Original line number Diff line number Diff line Loading @@ -66,36 +66,32 @@ let }; filterDTBs = src: if cfg.filter == null then "${src}/dtbs" then src else pkgs.runCommand "dtbs-filtered" {} '' mkdir -p $out cd ${src}/dtbs cd ${src} find . -type f -name '${cfg.filter}' -print0 \ | xargs -0 cp -v --no-preserve=mode --target-directory $out --parents ''; filteredDTBs = filterDTBs cfg.kernelPackage; # Compile single Device Tree overlay source # file (.dts) into its compiled variant (.dtbo) compileDTS = name: f: pkgs.callPackage({ stdenv, dtc }: stdenv.mkDerivation { name = "${name}-dtbo"; nativeBuildInputs = [ dtc ]; buildCommand = '' $CC -E -nostdinc -I${getDev cfg.kernelPackage}/lib/modules/${cfg.kernelPackage.modDirVersion}/source/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp ${f} | \ dtc -I dts -O dtb -@ -o $out ''; }) {}; filteredDTBs = filterDTBs cfg.dtbSource; # Fill in `dtboFile` for each overlay if not set already. # Existence of one of these is guarded by assertion below withDTBOs = xs: flip map xs (o: o // { dtboFile = let includePaths = ["${getDev cfg.kernelPackage}/lib/modules/${cfg.kernelPackage.modDirVersion}/source/scripts/dtc/include-prefixes"] ++ cfg.dtboBuildExtraIncludePaths; extraPreprocessorFlags = cfg.dtboBuildExtraPreprocessorFlags; in if o.dtboFile == null then if o.dtsFile != null then compileDTS o.name o.dtsFile else compileDTS o.name (pkgs.writeText "dts" o.dtsText) let dtsFile = if o.dtsFile == null then (pkgs.writeText "dts" o.dtsText) else o.dtsFile; in pkgs.deviceTree.compileDTS { name = "${o.name}-dtbo"; inherit includePaths extraPreprocessorFlags dtsFile; } else o.dtboFile; } ); in Loading @@ -121,7 +117,39 @@ in example = literalExpression "pkgs.linux_latest"; type = types.path; description = lib.mdDoc '' Kernel package containing the base device-tree (.dtb) to boot. Uses Kernel package where device tree include directory is from. Also used as default source of dtb package to apply overlays to ''; }; dtboBuildExtraPreprocessorFlags = mkOption { default = []; example = literalExpression "[ \"-DMY_DTB_DEFINE\" ]"; type = types.listOf types.str; description = lib.mdDoc '' Additional flags to pass to the preprocessor during dtbo compilations ''; }; dtboBuildExtraIncludePaths = mkOption { default = []; example = literalExpression '' [ ./my_custom_include_dir_1 ./custom_include_dir_2 ] ''; type = types.listOf types.path; description = lib.mdDoc '' Additional include paths that will be passed to the preprocessor when creating the final .dts to compile into .dtbo ''; }; dtbSource = mkOption { default = "${cfg.kernelPackage}/dtbs"; defaultText = literalExpression "\${cfg.kernelPackage}/dtbs"; type = types.path; description = lib.mdDoc '' Path to dtb directory that overlays and other processing will be applied to. Uses device trees bundled with the Linux kernel by default. ''; }; Loading
pkgs/os-specific/linux/device-tree/default.nix +24 −1 Original line number Diff line number Diff line { lib, stdenvNoCC, dtc }: { lib, stdenv, stdenvNoCC, dtc }: with lib; { # Compile single Device Tree overlay source # file (.dts) into its compiled variant (.dtb) compileDTS = ({ name, dtsFile, includePaths ? [], extraPreprocessorFlags ? [] }: stdenv.mkDerivation { inherit name; nativeBuildInputs = [ dtc ]; buildCommand = let includeFlagsStr = lib.concatMapStringsSep " " (includePath: "-I${includePath}") includePaths; extraPreprocessorFlagsStr = lib.concatStringsSep " " extraPreprocessorFlags; in '' $CC -E -nostdinc ${includeFlagsStr} -undef -D__DTS__ -x assembler-with-cpp ${extraPreprocessorFlagsStr} ${dtsFile} | \ dtc -I dts -O dtb -@ -o $out ''; }); applyOverlays = (base: overlays': stdenvNoCC.mkDerivation { name = "device-tree-overlays"; nativeBuildInputs = [ dtc ]; Loading