Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 64 additions & 26 deletions pkgs/by-name/se/seabios/package.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,37 @@
{ lib
, stdenv
, fetchgit
, acpica-tools
, python3
, writeText
{
lib,
acpica-tools,
fetchgit,
python3,
stdenv,
writeText,
# Configurable options
___build-type ? "csm",
}:

assert lib.elem (___build-type) [
"coreboot"
# SeaBIOS with CSM (Compatible Support Module) support; learn more at
# https://www.electronicshub.org/what-is-csm-bios/
"csm"
"qemu"
];
let
biosfile =
{
"coreboot" = "bios.bin.elf";
"csm" = "Csm16.bin";
"qemu" = "bios.bin";
}
.${___build-type};
configuration-string =
{
"coreboot" = "CONFIG_COREBOOT";
"csm" = "CONFIG_CSM";
"qemu" = "CONFIG_QEMU";
}
.${___build-type};
in
stdenv.mkDerivation (finalAttrs: {
pname = "seabios";
version = "1.16.3";
Expand All @@ -16,7 +42,10 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-hWemj83cxdY8p+Jhkh5GcPvI0Sy5aKYZJCsKDjHTUUk=";
};

outputs = [ "out" "doc" ];
outputs = [
"out"
"doc"
];

nativeBuildInputs = [ python3 ];

Expand All @@ -29,31 +58,42 @@ stdenv.mkDerivation (finalAttrs: {
"EXTRAVERSION=\"-nixpkgs\""
];

hardeningDisable = [ "pic" "stackprotector" "fortify" ];
hardeningDisable = [
"fortify"
"pic"
"stackprotector"
];

postConfigure = let
config = writeText "config.txt" (lib.generators.toKeyValue { } {
# SeaBIOS with CSM (Compatible Support Module) support; learn more at
# https://www.electronicshub.org/what-is-csm-bios/
"CONFIG_CSM" = "y";
"CONFIG_PERMIT_UNALIGNED_PCIROM" = "y";
"CONFIG_QEMU_HARDWARE" = "y";
});
in ''
cp ${config} .config
make olddefconfig
'';
postConfigure =
let
config = writeText "config.txt" (
lib.generators.toKeyValue { } {
"${configuration-string}" = "y";
"CONFIG_PERMIT_UNALIGNED_PCIROM" = "y";
"CONFIG_QEMU_HARDWARE" = "y";
}
);
in
''
cp ${config} .config
make olddefconfig
'';

installPhase = ''
runHook preInstall

mkdir -pv $doc/share/doc/seabios-${finalAttrs.version}/
cp -v docs/* $doc/share/doc/seabios-${finalAttrs.version}/
install -Dm644 out/Csm16.bin -t $out/share/seabios/
mkdir -pv ''${!outputDoc}/share/doc/seabios-${finalAttrs.version}/
cp -v docs/* ''${!outputDoc}/share/doc/seabios-${finalAttrs.version}/
install -Dm644 out/${biosfile} -t $out/share/seabios/

runHook postInstall
'';

passthru = {
build-type = ___build-type;
firmware = "${finalAttrs.finalPackage}/share/seabios/${biosfile}";
};

meta = {
homepage = "https://www.seabios.org";
description = "Open source implementation of a 16bit x86 BIOS";
Expand All @@ -64,9 +104,7 @@ stdenv.mkDerivation (finalAttrs: {
'';
license = with lib.licenses; [ lgpl3Plus ];
maintainers = with lib.maintainers; [ AndersonTorres ];
platforms = lib.systems.inspect.patternLogicalAnd
lib.systems.inspect.patterns.isUnix
lib.systems.inspect.patterns.isx86;
platforms = lib.systems.inspect.patternLogicalAnd lib.systems.inspect.patterns.isUnix lib.systems.inspect.patterns.isx86;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
platforms = lib.systems.inspect.patternLogicalAnd lib.systems.inspect.patterns.isUnix lib.systems.inspect.patterns.isx86;
platforms = lib.intersectLists lib.platforms.unix lib.platforms.x86_64;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

String-y platforms are considered legacy (

1. (legacy) a system string.
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh wow. Why is everyone still using it?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe it is because the modern way is not so well documented and it is a bit harder to understand.

Further, there are some dark corners on Nixpkgs that still expect the stringy values.

badPlatforms = [ lib.systems.inspect.patterns.isDarwin ];
};
})
4 changes: 4 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5643,6 +5643,10 @@ with pkgs;

nltk-data = callPackage ../tools/text/nltk-data { };

seabios-coreboot = seabios.override { ___build-type = "coreboot"; };
seabios-csm = seabios.override { ___build-type = "csm"; };
seabios-qemu = seabios.override { ___build-type = "qemu"; };

seaborn-data = callPackage ../tools/misc/seaborn-data { };

nodepy-runtime = with python3.pkgs; toPythonApplication nodepy-runtime;
Expand Down