feat: dynamic cross compiler (#14)

This pr adds initial support for creating a cross-compile tool chain for arbitrary architectures. For now only `aarch64`  and `riscv64` are implemented, but simlpy adding another architecture to the list of supported platforms in each package should mostly work with minimal patches.
In order to build native gcc for aarch64, you can run
```
nix-build --expr '((import ./tidepool).packages.foundation.gcc.versions."13.2.0-stage4".package.extend { platform = { build = "aarch64-linux"; host = "aarch64-linux"; target = "aarch64-linux"; }; }).package'
```
or
```
nix-build tidepool -A packages.foundation.gcc.latest.packages.aarch64-linux.aarch64-linux.aarch64-linux
```
Running this command:
- Uses [foundation](https://git.auxolotl.org/auxolotl/foundation) to bootstrap i686 gcc
- Incrementally bootstraps x86_64 gcc from i686
- Runs through the same incremental process, but this time using x86_64 gcc we previously built to bootstrap aarch64
- Build the final native aarch64 gcc

Co-authored-by: Jake Hamilton <jake.hamilton@hey.com>
Reviewed-on: #14
Reviewed-by: Jake Hamilton <jake.hamilton@hey.com>
Co-authored-by: Victor Fuentes <vlinkz@snowflakeos.org>
Co-committed-by: Victor Fuentes <vlinkz@snowflakeos.org>
This commit is contained in:
Victor Fuentes 2025-09-08 20:08:35 +00:00 committed by Jake Hamilton
parent 913b94f06a
commit 4e4b9366a4
48 changed files with 1760 additions and 297 deletions

View file

@ -53,10 +53,19 @@ in
script = lib.strings.concatMapSep "\n" (entry: entry.value) sorted.result;
executable = if system == "i686-linux" then
"${foundation.stage2-bash}/bin/bash"
else
"${(lib.packages.build packages.foundation.bash.versions."5.2.15-stage1" "i686-linux" system system).package}/bin/bash";
executable =
if system == "i686-linux" then
"${foundation.stage2-bash}/bin/bash"
else if system == "x86_64-linux" then
"${
(lib.packages.build packages.foundation.bash.versions."5.2.15-stage1" "i686-linux" system system)
.package
}/bin/bash"
else
"${
(lib.packages.build packages.foundation.bash.versions."5.2.15-stage1" "x86_64-linux" system system)
.package
}/bin/bash";
built = builtins.derivation (
package.env
@ -87,6 +96,13 @@ in
(lib.packages.build packages.foundation.coreutils.versions."9.4-stage1" "i686-linux" system system)
.package
]
++ lib.lists.when (system != "i686-linux" && system != "x86_64-linux") [
(lib.packages.build packages.foundation.bash.versions."5.2.15-stage1" "x86_64-linux" system system)
.package
(lib.packages.build packages.foundation.coreutils.versions."9.4-stage1" "x86_64-linux" system
system
).package
]
);
in
builtins.concatStringsSep ":" (

View file

@ -9,9 +9,11 @@ let
;
inherit (global.internal.packages) foundation;
package = packages.foundation.gnupatch.versions."2.7-stage1".extend {
package = packages.foundation.bash.versions."5.2.15-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -32,6 +34,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -32,6 +32,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -43,17 +53,31 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
};
host = {
gcc = packages.foundation.gcc.versions."13.2.0-stage2";
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.binutils.versions."2.41-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -81,6 +81,31 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "riscv64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -92,33 +117,54 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
bzip2 = packages.foundation.bzip2.versions."1.0.8-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
binutils = packages.foundation.binutils.versions."2.41-stage1-passthrough";
};
host = {
gcc =
if isBootstrapped then
packages.foundation.gcc.versions."13.2.0-bootstrap"
else if isCross then
packages.foundation.gcc.versions."13.2.0-stage2"
else
packages.foundation.gcc.versions."13.2.0-stage2";
packages.foundation.gcc.versions."13.2.0-stage4";
binutils =
if isBootstrapped then
packages.foundation.binutils.versions."2.41-bootstrap"
else if isCross then
packages.foundation.binutils.versions."2.41-stage1"
else
packages.foundation.binutils.versions."2.41-stage1";
packages.foundation.binutils.versions."2.41-stage1-passthrough";
};
};
};

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.bzip2.versions."1.0.8-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -35,6 +35,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -46,11 +56,19 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.coreutils.versions."9.4-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -42,6 +42,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -53,17 +63,31 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.diffutils.versions."3.10-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,33 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.findutils.versions."4.9.0-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,33 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.gawk.versions."5.2.2-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,33 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -8,14 +8,16 @@
{
config.packages.foundation.gcc = {
stable = config.packages.foundation.gcc.versions."13.2.0-bootstrap";
latest = config.packages.foundation.gcc.versions."13.2.0-stage4";
latest = config.packages.foundation.gcc.versions."13.2.0-stage5";
versions = {
"13.2.0-stage5" = ./versions/13.2.0-stage5.nix;
"13.2.0-stage4" = ./versions/13.2.0-stage4.nix;
"13.2.0-stage3-passthrough" = ./versions/13.2.0-stage3-passthrough.nix;
"13.2.0-stage3" = ./versions/13.2.0-stage3.nix;
"13.2.0-stage2" = ./versions/13.2.0-stage2.nix;
"13.2.0-stage1" = ./versions/13.2.0-stage1.nix;
"13.2.0-stage0" = ./versions/13.2.0-stage0.nix;
"13.2.0-bootstrap" = ./versions/13.2.0-bootstrap.nix;
};
};

View file

@ -33,8 +33,8 @@ in
hooks = ctx: {
"aux:gcc:env" = lib.dag.entry.before [ "unpack" ] ''
export CC='gcc -Wl,-dynamic-linker -Wl,${foundation.stage1-musl}/lib/libc.so'
export CXX='g++ -Wl,-dynamic-linker -Wl,${foundation.stage1-musl}/lib/libc.so'
export CC='gcc -Wl,-dynamic-linker -Wl,${foundation.stage1-musl}/lib/libc.so -B${foundation.stage1-musl}/lib'
export CXX='g++ -Wl,-dynamic-linker -Wl,${foundation.stage1-musl}/lib/libc.so -B${foundation.stage1-musl}/lib'
export CC_FOR_TARGET=$CC
export CXX_FOR_TARGET=$CXX
export CC_FOR_BUILD=$CC

View file

@ -0,0 +1,208 @@
# gcc-bootstrap-glibc
{ config, global }:
let
inherit (global)
lib
packages
builders
mirrors
;
inherit (global.internal.packages) foundation;
version = lib.strings.removeSuffix "-stage0" config.version;
platform = {
build = lib.systems.withBuildInfo config.platform.build;
host = lib.systems.withBuildInfo config.platform.host;
target = lib.systems.withBuildInfo config.platform.target;
};
patches = [
../patches/libstdc++-target.patch
];
gccFlags = [
"-Wl,-dynamic-linker"
"-Wl,${config.deps.target.target.glibc.dynamicLinker}"
"-B${config.deps.target.target.glibc.package}/lib"
];
configureFlags = [
"--prefix=${builtins.placeholder "out"}"
"--build=${platform.build.triple}"
"--host=${platform.host.triple}"
"--target=${platform.target.triple}"
"--enable-languages=c,c++"
"--disable-lto"
"--disable-bootstrap"
"--disable-libsanitizer"
"--disable-multilib"
"--with-build-sysroot=/"
"--with-native-system-header-dir=${config.deps.target.target.glibc.package}/include"
];
in
{
options = {
gmp.version = lib.options.create {
type = lib.types.string;
description = "Version of gmp.";
};
mpfr.version = lib.options.create {
type = lib.types.string;
description = "Version of mpfr.";
};
mpc.version = lib.options.create {
type = lib.types.string;
description = "Version of mpc.";
};
isl.version = lib.options.create {
type = lib.types.string;
description = "Version of isl.";
};
};
config = {
meta = {
description = "GNU Compiler Collection.";
homepage = "https://gcc.gnu.org";
license = lib.licenses.gpl3Plus;
};
platforms = [
{
build = "i686-linux";
host = "i686-linux";
target = "i686-linux";
}
];
builder = builders.basic;
gmp.version = "6.3.0";
mpfr.version = "4.2.1";
mpc.version = "1.3.1";
isl.version = "0.24";
src = {
gcc = builtins.fetchurl {
url = "${mirrors.gnu}/gcc/gcc-${version}/gcc-${version}.tar.xz";
sha256 = "4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
};
gmp = builtins.fetchurl {
url = "${mirrors.gnu}/gmp/gmp-${config.gmp.version}.tar.xz";
sha256 = "o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
};
mpfr = builtins.fetchurl {
url = "${mirrors.gnu}/mpfr/mpfr-${config.mpfr.version}.tar.xz";
sha256 = "J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
};
mpc = builtins.fetchurl {
url = "${mirrors.gnu}/mpc/mpc-${config.mpc.version}.tar.gz";
sha256 = "q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
};
isl = builtins.fetchurl {
url = "https://gcc.gnu.org/pub/gcc/infrastructure/isl-${config.isl.version}.tar.bz2";
sha256 = "/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
};
};
deps = {
build = {
build = {
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
};
host = {
gcc = packages.foundation.gcc.versions."13.2.0-bootstrap";
};
};
target = {
target = {
glibc = packages.foundation.glibc.versions."2.38-bootstrap";
};
};
};
env = {
CFLAGS_FOR_TARGET = "-Wl,-dynamic-linker -Wl,${config.deps.target.target.glibc.dynamicLinker} -B${config.deps.target.target.glibc.package}/lib";
LDFLAGS_FOR_TARGET = "-L$(pwd)/${platform.target.triple}/libgcc -L${config.deps.target.target.glibc.package}/lib";
LIBRARY_PATH = "${config.deps.target.target.glibc.package}/lib";
};
hooks = ctx: {
"aux:gcc:env" = lib.dag.entry.between [ "unpack" ] [ "configure" ] ''
export CC='${config.package}/bin/gcc ${builtins.concatStringsSep " " gccFlags}'
export CXX='${config.package}/bin/g++ ${builtins.concatStringsSep " " gccFlags}'
export CC_FOR_TARGET=$CC
export CXX_FOR_TARGET=$CXX
export CC_FOR_BUILD=$CC
export CXX_FOR_BUILD=$CXX
alias gcc='$CC'
alias g++='$CXX'
'';
};
phases = {
unpack = ''
# Unpack
tar xf ${config.src.gcc}
tar xf ${config.src.gmp}
tar xf ${config.src.mpfr}
tar xf ${config.src.mpc}
tar xf ${config.src.isl}
cd gcc-${version}
ln -s ../gmp-${config.gmp.version} gmp
ln -s ../mpfr-${config.mpfr.version} mpfr
ln -s ../mpc-${config.mpc.version} mpc
ln -s ../isl-${config.isl.version} isl
'';
patch = ''
${lib.strings.concatMapSep "\n" (file: "patch -Np1 -i ${file}") patches}
'';
configure = ''
# Configure
mkdir build
cd build
bash ../configure ${builtins.concatStringsSep " " configureFlags}
'';
build = ''
# Build
make -j $NIX_BUILD_CORES V=1
'';
install = ''
# Install
${lib.strings.when (platform.host.is64bit) ''
mkdir -p $out/lib
ln -s lib $out/lib64
''}
make -j $NIX_BUILD_CORES install
'';
};
};
}

View file

@ -90,6 +90,16 @@ in
host = "i686-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -128,22 +138,39 @@ in
deps = {
build = {
build = {
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gcc = packages.foundation.gcc.versions."13.2.0-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gcc = packages.foundation.gcc.versions."13.2.0-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
}
else
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gcc = packages.foundation.gcc.versions."13.2.0-stage4";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
binutils = packages.foundation.binutils.versions."2.41-stage1-passthrough";
};
target = {
binutils = packages.foundation.binutils.versions."2.41-stage1";
};

View file

@ -28,9 +28,7 @@ let
gccFlags = [
"-Wl,-dynamic-linker"
"-Wl,${config.deps.target.target.glibc.package}/lib/ld-linux${
lib.strings.when (platform.target.isx86 && platform.target.is64bit) "-x86-64"
}.so.2"
"-Wl,${config.deps.target.target.glibc.dynamicLinker}"
"-B${config.deps.target.target.glibc.package}/lib"
];
@ -47,7 +45,6 @@ let
"--disable-multilib"
"--with-headers=${config.deps.target.target.glibc.package}/include"
"--with-build-sysroot=/"
# "--with-sysroot=${config.deps.target.target.glibc.package}"
"--with-native-system-header-dir=${config.deps.target.target.glibc.package}/include"
"--with-build-time-tools=${config.deps.build.target.binutils.package}/bin"
];
@ -88,6 +85,16 @@ in
host = "i686-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -126,21 +133,39 @@ in
deps = {
build = {
build = {
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gcc = packages.foundation.gcc.versions."13.2.0-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gcc = packages.foundation.gcc.versions."13.2.0-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
}
else
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gcc = packages.foundation.gcc.versions."13.2.0-stage4";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
binutils = packages.foundation.binutils.versions."2.41-stage1-passthrough";
};
target = {
binutils = packages.foundation.binutils.versions."2.41-stage1";
@ -155,14 +180,13 @@ in
};
env = {
CC = "gcc -Wl,-dynamic-linker";
CXX = "g++ -Wl,-dynamic-linker";
CFLAGS_FOR_TARGET = "-Wl,-dynamic-linker -Wl,${config.deps.target.target.glibc.package}/lib/ld-linux-x86-64.so.2 -B${config.deps.target.target.glibc.package}/lib";
CFLAGS_FOR_TARGET = "-Wl,-dynamic-linker -Wl,${config.deps.target.target.glibc.dynamicLinker} -B${config.deps.target.target.glibc.package}/lib";
LDFLAGS_FOR_TARGET = "-L$(pwd)/${platform.target.triple}/libgcc -L${config.deps.target.target.glibc.package}/lib";
LIBRARY_PATH = "${config.deps.target.target.glibc.package}/lib";
};
hooks = ctx: {
"aux:gcc:env" = lib.dag.entry.before [ "unpack" "configure" "build" "install" ] ''
"aux:gcc-cross:env" = lib.dag.entry.before [ "unpack" "configure" "build" "install" ] ''
export CC='${config.package}/bin/${prefix}gcc ${builtins.concatStringsSep " " gccFlags}'
export CXX='${config.package}/bin/${prefix}g++ ${builtins.concatStringsSep " " gccFlags}'
export CC_FOR_TARGET=$CC
@ -196,16 +220,14 @@ in
configure = ''
# Configure
mkdir build
cd build
echo PATH=$PATH
# TODO(vlinkz) Hack to fix missing crti.o and crtn.o. Figure out how to properly find their paths.
mkdir gcc
ln -sv ${config.deps.target.target.glibc.package}/lib/{crti.o,crtn.o} gcc
mkdir -p x86_64-unknown-linux-gnu/libstdc++-v3/src
ln -sv ${config.deps.target.target.glibc.package}/lib/{crti.o,crtn.o} x86_64-unknown-linux-gnu/libstdc++-v3/src
mkdir -p ${platform.target.triple}/libstdc++-v3/src
ln -sv ${config.deps.target.target.glibc.package}/lib/{crti.o,crtn.o} ${platform.target.triple}/libstdc++-v3/src
bash ../configure ${builtins.concatStringsSep " " configureFlags}
'';

View file

@ -12,7 +12,9 @@ let
package = packages.foundation.gcc.versions."13.2.0-stage3".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.target == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -32,6 +34,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -1,4 +1,4 @@
# gcc-bootstrap
# gcc-crossed
{ config, global }:
let
@ -28,20 +28,18 @@ let
gccFlags = [
"-Wl,-dynamic-linker"
"-Wl,${config.deps.host.host.glibc.package}/lib/ld-linux${
lib.strings.when (platform.target.isx86 && platform.target.is64bit) "-x86-64"
}.so.2"
"-Wl,${config.deps.host.host.glibc.dynamicLinker}"
"-B${config.deps.host.host.glibc.package}/lib"
]
++ lib.lists.when (config.platform.target == "riscv64-linux") [
"-L${config.package.outPath}/lib"
];
configureFlags = [
"--prefix=${builtins.placeholder "out"}"
# Pretend we're native even though we're not
"--build=${platform.target.triple}"
"--build=${platform.build.triple}"
"--host=${platform.host.triple}"
"--target=${platform.target.triple}"
"--with-as=${config.deps.build.target.binutils.package}/bin/${prefix}as"
"--with-ld=${config.deps.build.target.binutils.package}/bin/${prefix}ld"
"--enable-languages=c,c++"
"--disable-lto"
"--disable-bootstrap"
@ -88,6 +86,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -126,20 +134,41 @@ in
deps = {
build = {
build = {
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-stage1";
};
build =
if (config.platform.build == "i686-linux") then
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-stage1";
gcc = packages.foundation.gcc.versions."13.2.0-stage0";
glibc = packages.foundation.glibc.versions."2.38-bootstrap";
}
else
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
binutils = packages.foundation.binutils.versions."2.41-stage1";
gcc = packages.foundation.gcc.versions."13.2.0-stage4";
glibc = packages.foundation.glibc.versions."2.38-stage1-passthrough";
};
host = {
gcc = packages.foundation.gcc.versions."13.2.0-stage2";
@ -157,10 +186,23 @@ in
};
};
env = {
CFLAGS_FOR_TARGET = "-Wl,-dynamic-linker -Wl,${config.deps.host.host.glibc.package}/lib/ld-linux-x86-64.so.2";
LIBRARY_PATH = "${config.deps.host.host.glibc.package}/lib";
env = rec {
CC_FOR_BUILD = "${config.deps.build.build.gcc.package}/bin/gcc -Wl,-dynamic-linker -Wl,${config.deps.build.build.glibc.dynamicLinker} -B${config.deps.build.build.glibc.package}/lib";
CXX_FOR_BUILD = "${config.deps.build.build.gcc.package}/bin/g++ -Wl,-dynamic-linker -Wl,${config.deps.build.build.glibc.dynamicLinker} -B${config.deps.build.build.glibc.package}/lib";
CFLAGS_FOR_BUILD = "-Wl,-dynamic-linker -Wl,${config.deps.build.build.glibc.dynamicLinker} -B${config.deps.build.build.glibc.package}/lib";
LDFLAGS_FOR_BUILD = "-L${config.deps.build.build.gcc.package}/lib -L${config.deps.build.build.glibc.package}/lib -Wl,-rpath,${config.deps.build.build.gcc.package}/lib -Wl,-rpath,${config.deps.build.build.glibc.package}/lib";
CC_FOR_TARGET = "${prefix}gcc -Wl,-dynamic-linker -Wl,${config.deps.host.host.glibc.dynamicLinker} -B${config.deps.host.host.glibc.package}/lib";
CXX_FOR_TARGET = "${prefix}g++ -Wl,-dynamic-linker -Wl,${config.deps.host.host.glibc.dynamicLinker} -B${config.deps.host.host.glibc.package}/lib";
CFLAGS_FOR_TARGET = "-Wl,-dynamic-linker -Wl,${config.deps.host.host.glibc.dynamicLinker} -B${config.deps.host.host.glibc.package}/lib";
LDFLAGS_FOR_TARGET = "-L$(pwd)/${platform.target.triple}/libgcc -L${config.deps.host.host.glibc.package}/lib";
CC = CC_FOR_TARGET;
CXX = CXX_FOR_TARGET;
CFLAGS = CFLAGS_FOR_TARGET;
LDFLAGS = LDFLAGS_FOR_TARGET;
LIBRARY_PATH = "${config.deps.host.host.glibc.package}/lib";
LD_LIBRARY_PATH = "${config.deps.host.host.glibc.package}/lib";
};
hooks = ctx: {
@ -177,6 +219,10 @@ in
};
phases = {
"aux:gcc:env" = '''';
"aux:gcc-cross:env" = '''';
unpack = ''
# Unpack
tar xf ${config.src.gcc}
@ -218,9 +264,5 @@ in
make -j $NIX_BUILD_CORES install
'';
};
context = {
a = true;
};
};
}

View file

@ -24,10 +24,11 @@ let
gccFlags = [
"-Wl,-dynamic-linker"
"-Wl,${config.deps.host.host.glibc.package}/lib/ld-linux${
lib.strings.when (platform.target.isx86 && platform.target.is64bit) "-x86-64"
}.so.2"
"-Wl,${config.deps.host.host.glibc.dynamicLinker}"
"-B${config.deps.host.host.glibc.package}/lib"
]
++ lib.lists.when (config.platform.target == "riscv64-linux") [
"-L${config.package.outPath}/lib"
];
configureFlags = [
@ -80,6 +81,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -150,7 +161,7 @@ in
};
env = {
CFLAGS_FOR_TARGET = "-Wl,-dynamic-linker -Wl,${"${config.deps.host.host.glibc.package}/lib/ld-linux${lib.strings.when (platform.target.isx86 && platform.target.is64bit) "-x86-64"}.so.2"}";
CFLAGS_FOR_TARGET = "-Wl,-dynamic-linker -Wl,${config.deps.host.host.glibc.dynamicLinker}";
LIBRARY_PATH = "${config.deps.host.host.glibc.package}/lib";
};

View file

@ -0,0 +1,79 @@
{ config, global }:
let
inherit (global)
lib
packages
builders
mirrors
;
inherit (global.internal.packages) foundation;
package =
if
config.platform.build == config.platform.host && config.platform.host != config.platform.target
then
packages.foundation.gcc.versions."13.2.0-stage2".extend {
platform = lib.modules.overrides.force config.platform;
}
else if
config.platform.build != config.platform.host && config.platform.host == config.platform.target
then
packages.foundation.gcc.versions."13.2.0-stage3".extend {
platform = lib.modules.overrides.force config.platform;
}
else
packages.foundation.gcc.versions."13.2.0-stage4".extend {
platform = lib.modules.overrides.force config.platform;
};
in
{
config = {
meta = {
description = "GNU Compiler Collection.";
homepage = "https://gcc.gnu.org";
license = lib.licenses.gpl3Plus;
};
platforms = [
{
build = "i686-linux";
host = "i686-linux";
target = "i686-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "riscv64-linux";
}
];
hooks = package.hooks;
builder = builders.passthrough.extend {
settings = {
derivation = package.package;
};
};
};
}

View file

@ -1,10 +1,30 @@
{ config, global }:
let
inherit (global) lib packages builders;
inherit (global)
lib
packages
builders
mirrors
;
inherit (global.internal.packages) foundation;
version = lib.strings.removeSuffix "-bootstrap" config.version;
platform = {
build = lib.systems.withBuildInfo config.platform.build;
host = lib.systems.withBuildInfo config.platform.host;
target = lib.systems.withBuildInfo config.platform.target;
};
in
{
options = {
dynamicLinker = lib.options.create {
type = lib.types.string;
description = "The dynamic linker/loader to be used.";
};
};
config = {
meta = {
description = "The GNU C Library.";
@ -20,10 +40,68 @@ in
}
];
builder = builders.passthrough.extend {
settings = {
derivation = foundation.stage2-glibc;
builder = builders.basic;
src = builtins.fetchurl {
url = "${mirrors.gnu}/libc/glibc-${version}.tar.xz";
sha256 = "+4KZiZiyspllRnvBtp0VLpwwfSzzAcnq+0VVt3DvP9I=";
};
deps = {
build = {
build = {
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
python = packages.foundation.python.versions."3.12.0-bootstrap";
bison = packages.foundation.bison.versions."3.8.2-bootstrap";
};
host = {
gcc = packages.foundation.gcc.versions."13.2.0-bootstrap";
binutils = packages.foundation.binutils.versions."2.41-bootstrap";
linux-headers = packages.foundation.linux-headers.versions."6.5.6-stage1";
};
};
};
dynamicLinker = "${config.package.outPath}/lib/ld-linux.so.2";
phases = {
unpack = ''
tar xf ${config.src}
cd glibc-${version}
'';
configure = ''
mkdir build
cd build
bash ../configure \
--prefix=$out \
--build=${platform.build.triple} \
--host=${platform.host.triple} \
--with-headers=${config.deps.build.host.linux-headers.package}/include \
--with-binutils=${config.deps.build.host.binutils.package}/${platform.target.triple}/bin
'';
build = ''
# Build
make -j $NIX_BUILD_CORES
'';
install = ''
# Install
make -j $NIX_BUILD_CORES install
ln -sv $(ls -d ${config.deps.build.host.linux-headers.package}/include/* | grep -v scsi\$) $out/include/
'';
};
};
}

View file

@ -11,13 +11,23 @@ let
package = packages.foundation.glibc.versions."2.38-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
};
in
{
options = {
dynamicLinker = lib.options.create {
type = lib.types.string;
default = "ld-linux-x86-64.so.2";
description = "The dynamic linker/loader to be used.";
};
};
config = {
meta = {
description = "The GNU C Library.";
@ -31,8 +41,20 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
dynamicLinker = package.dynamicLinker;
builder = builders.passthrough.extend {
settings = {
derivation = package.package;

View file

@ -18,6 +18,14 @@ let
};
in
{
options = {
dynamicLinker = lib.options.create {
type = lib.types.string;
default = "ld-linux-x86-64.so.2";
description = "The dynamic linker/loader to be used.";
};
};
config = {
meta = {
description = "The GNU C Library.";
@ -31,6 +39,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,29 +60,60 @@ in
deps = {
build = {
build = {
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
python = packages.foundation.python.versions."3.12.0-bootstrap";
bison = packages.foundation.bison.versions."3.8.2-bootstrap";
linux-headers = packages.foundation.linux-headers.versions."6.5.6-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
python = packages.foundation.python.versions."3.12.0-bootstrap";
bison = packages.foundation.bison.versions."3.8.2-bootstrap";
}
else
{
bzip2 = packages.foundation.bzip2.versions."1.0.8-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
python = packages.foundation.python.versions."3.12.0-stage1";
bison = packages.foundation.bison.versions."3.8.2-stage1-passthrough";
};
host = {
gcc = packages.foundation.gcc.versions."13.2.0-stage1";
binutils = packages.foundation.binutils.versions."2.41-stage1";
linux-headers = packages.foundation.linux-headers.versions."6.5.6-stage1";
};
};
};
dynamicLinker =
"${config.package.outPath}/lib/"
+ (
if platform.target.double == "x86_64-linux" then
"ld-linux-x86-64.so.2"
else if platform.target.double == "aarch64-linux" then
"ld-linux-aarch64.so.1"
else if platform.target.double == "riscv64-linux" then
"ld-linux-riscv64-lp64d.so.1"
else
"ld-linux.so.2"
);
phases = {
unpack = ''
tar xf ${config.src}
@ -79,7 +128,7 @@ in
--prefix=$out \
--build=${platform.build.triple} \
--host=${platform.host.triple} \
--with-headers=${config.deps.build.build.linux-headers.package}/include \
--with-headers=${config.deps.build.host.linux-headers.package}/include \
--with-binutils=${config.deps.build.host.binutils.package}/${platform.target.triple}/bin
'';
@ -91,7 +140,7 @@ in
install = ''
# Install
make -j $NIX_BUILD_CORES install
ln -sv $(ls -d ${config.deps.build.build.linux-headers.package}/include/* | grep -v scsi\$) $out/include/
ln -sv $(ls -d ${config.deps.build.host.linux-headers.package}/include/* | grep -v scsi\$) $out/include/
'';
};
};

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.gnugrep.versions."3.11-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,33 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.gnumake.versions."4.4.1-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -36,6 +36,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -47,18 +57,34 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.gnupatch.versions."2.7-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,34 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.gnused.versions."4.9-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,33 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.gnutar.versions."1.35-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,34 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.gzip.versions."1.13-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -31,6 +33,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -31,6 +31,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -42,18 +52,33 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -25,6 +25,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -22,9 +22,24 @@ in
platforms = [
{
build = "i686-linux";
host = "x86_64-linux";
host = "i686-linux";
target = "i686-linux";
}
{
build = "i686-linux";
host = "i686-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -36,22 +51,41 @@ in
deps = {
build = {
build = {
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
diffutils = packages.foundation.diffutils.versions."3.10-bootstrap";
findutils = packages.foundation.findutils.versions."4.9.0-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnupatch = packages.foundation.gnupatch.versions."2.7-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";
gcc = packages.foundation.gcc.versions."13.2.0-stage2";
gcc =
if (config.platform.build == "i686-linux") then
packages.foundation.gcc.versions."13.2.0-bootstrap"
else
packages.foundation.gcc.versions."13.2.0-stage4";
};
};
};
@ -66,7 +100,7 @@ in
make -j $NIX_BUILD_CORES V=1 \
"CC=$CC" \
"HOSTCC=$CC" \
ARCH=${platform.host.linux.arch} \
ARCH=${platform.target.linux.arch} \
headers
'';

View file

@ -2,9 +2,11 @@
{
config.packages.foundation.python = {
stable = config.packages.foundation.python.versions."3.12.0-bootstrap";
latest = config.packages.foundation.python.versions."3.12.0-stage1";
versions = {
"3.12.0-bootstrap" = ./versions/3.12.0-bootstrap.nix;
"3.12.0-stage1" = ./versions/3.12.0-stage1.nix;
};
};
}

View file

@ -0,0 +1,108 @@
From 5330b6af9f832af59aa5c61d9ef6971053a8e709 Mon Sep 17 00:00:00 2001
From: Jonathan Ringer <jonringer117@gmail.com>
Date: Mon, 9 Nov 2020 10:24:35 -0800
Subject: [PATCH] CPython: Don't use ldconfig
---
Lib/ctypes/util.py | 77 ++--------------------------------------------
1 file changed, 2 insertions(+), 75 deletions(-)
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
index 0c2510e161..7fb98af308 100644
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -100,53 +100,7 @@ def _is_elf(filename):
return thefile.read(4) == elf_header
def _findLib_gcc(name):
- # Run GCC's linker with the -t (aka --trace) option and examine the
- # library name it prints out. The GCC command will fail because we
- # haven't supplied a proper program with main(), but that does not
- # matter.
- expr = os.fsencode(r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name))
-
- c_compiler = shutil.which('gcc')
- if not c_compiler:
- c_compiler = shutil.which('cc')
- if not c_compiler:
- # No C compiler available, give up
- return None
-
- temp = tempfile.NamedTemporaryFile()
- try:
- args = [c_compiler, '-Wl,-t', '-o', temp.name, '-l' + name]
-
- env = dict(os.environ)
- env['LC_ALL'] = 'C'
- env['LANG'] = 'C'
- try:
- proc = subprocess.Popen(args,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- env=env)
- except OSError: # E.g. bad executable
- return None
- with proc:
- trace = proc.stdout.read()
- finally:
- try:
- temp.close()
- except FileNotFoundError:
- # Raised if the file was already removed, which is the normal
- # behaviour of GCC if linking fails
- pass
- res = re.findall(expr, trace)
- if not res:
- return None
-
- for file in res:
- # Check if the given file is an elf file: gcc can report
- # some files that are linker scripts and not actual
- # shared objects. See bpo-41976 for more details
- if not _is_elf(file):
- continue
- return os.fsdecode(file)
+ return None
if sys.platform == "sunos5":
@@ -268,34 +222,7 @@ def find_library(name, is64 = False):
else:
def _findSoname_ldconfig(name):
- import struct
- if struct.calcsize('l') == 4:
- machine = os.uname().machine + '-32'
- else:
- machine = os.uname().machine + '-64'
- mach_map = {
- 'x86_64-64': 'libc6,x86-64',
- 'ppc64-64': 'libc6,64bit',
- 'sparc64-64': 'libc6,64bit',
- 's390x-64': 'libc6,64bit',
- 'ia64-64': 'libc6,IA-64',
- }
- abi_type = mach_map.get(machine, 'libc6')
-
- # XXX assuming GLIBC's ldconfig (with option -p)
- regex = r'\s+(lib%s\.[^\s]+)\s+\(%s'
- regex = os.fsencode(regex % (re.escape(name), abi_type))
- try:
- with subprocess.Popen(['/sbin/ldconfig', '-p'],
- stdin=subprocess.DEVNULL,
- stderr=subprocess.DEVNULL,
- stdout=subprocess.PIPE,
- env={'LC_ALL': 'C', 'LANG': 'C'}) as p:
- res = re.search(regex, p.stdout.read())
- if res:
- return os.fsdecode(res.group(1))
- except OSError:
- pass
+ return None
def _findLib_ld(name):
# See issue #9998 for why this is needed
--
2.33.1

View file

@ -0,0 +1,115 @@
{ config, global }:
let
inherit (global)
lib
packages
builders
mirrors
;
inherit (global.internal.packages) foundation;
version = lib.strings.removeSuffix "-stage1" config.version;
platform = {
build = lib.systems.withBuildInfo config.platform.build;
host = lib.systems.withBuildInfo config.platform.host;
target = lib.systems.withBuildInfo config.platform.target;
};
patches = [
../patches/no-ldconfig.patch
];
in
{
config = {
meta = {
description = "A high-level dynamically-typed programming language.";
homepage = "https://www.python.org";
license = lib.licenses.psfl;
};
platforms = [
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
src = builtins.fetchurl {
url = "https://www.python.org/ftp/python/${version}/Python-${version}.tar.xz";
sha256 = "eVw09E30Wg6blxDIxxwVxnGHFSTNQSyhTe8hLozLFV0=";
};
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnupatch = packages.foundation.gnupatch.versions."2.7-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
diffutils = packages.foundation.diffutils.versions."3.10-stage1-passthrough";
findutils = packages.foundation.findutils.versions."4.9.0-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
zlib = packages.foundation.zlib.versions."1.3-stage1";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1-passthrough";
gcc = packages.foundation.gcc.versions."13.2.0-stage4";
};
};
};
env = {
C_INCLUDE_PATH = "${config.deps.build.build.zlib.package}/include";
LIBRARY_PATH = "${config.deps.build.build.zlib.package}/lib";
LD_LIBRARY_PATH = "${config.deps.build.build.zlib.package}/lib";
};
phases = {
unpack = ''
# Unpack
tar xf ${config.src}
cd Python-${version}
'';
patch = ''
# Patch
${lib.strings.concatMapSep "\n" (file: "patch -Np1 -i ${file}") patches}
'';
configure = ''
bash ./configure \
--prefix=$out \
--build=${platform.build.triple} \
--host=${platform.host.triple}
'';
build = ''
# Build
make -j $NIX_BUILD_CORES
'';
install = ''
# Install
make -j $NIX_BUILD_CORES install
'';
};
};
}

View file

@ -11,7 +11,9 @@ let
package = packages.foundation.xz.versions."5.4.3-stage1".extend {
platform = {
build = lib.modules.overrides.force "i686-linux";
build = lib.modules.overrides.force (
if config.platform.build == "x86_64-linux" then "i686-linux" else "x86_64-linux"
);
host = lib.modules.overrides.force config.platform.host;
target = lib.modules.overrides.force config.platform.target;
};
@ -34,6 +36,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.passthrough.extend {

View file

@ -34,6 +34,16 @@ in
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "x86_64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "x86_64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
@ -45,15 +55,27 @@ in
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
};
build =
if (config.platform.build == "i686-linux") then
{
gnumake = packages.foundation.gnumake.versions."4.4.1-bootstrap";
gnused = packages.foundation.gnused.versions."4.9-bootstrap";
gawk = packages.foundation.gawk.versions."5.2.2-bootstrap";
gnutar = packages.foundation.gnutar.versions."1.35-bootstrap";
gnugrep = packages.foundation.gnugrep.versions."3.11-bootstrap";
gzip = packages.foundation.gzip.versions."1.13-bootstrap";
xz = packages.foundation.xz.versions."5.4.3-bootstrap";
}
else
{
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gawk = packages.foundation.gawk.versions."5.2.2-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
gzip = packages.foundation.gzip.versions."1.13-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1";

View file

@ -2,9 +2,11 @@
{
config.packages.foundation.zlib = {
stable = config.packages.foundation.zlib.versions."1.3-bootstrap";
latest = config.packages.foundation.zlib.versions."1.3-stage1";
versions = {
"1.3-bootstrap" = ./versions/1.3-bootstrap.nix;
"1.3-stage1" = ./versions/1.3-stage1.nix;
};
};
}

View file

@ -0,0 +1,94 @@
{ config, global }:
let
inherit (global)
lib
packages
builders
mirrors
;
inherit (global.internal.packages) foundation;
version = lib.strings.removeSuffix "-stage1" config.version;
platform = {
build = lib.systems.withBuildInfo config.platform.build;
host = lib.systems.withBuildInfo config.platform.host;
target = lib.systems.withBuildInfo config.platform.target;
};
in
{
config = {
meta = {
description = "Lossless data-compression library.";
homepage = "https://zlib.net";
license = lib.licenses.zlib;
};
platforms = [
{
build = "x86_64-linux";
host = "x86_64-linux";
target = "x86_64-linux";
}
{
build = "aarch64-linux";
host = "aarch64-linux";
target = "aarch64-linux";
}
{
build = "riscv64-linux";
host = "riscv64-linux";
target = "riscv64-linux";
}
];
builder = builders.basic;
src = builtins.fetchurl {
url = "https://github.com/madler/zlib/releases/download/v${version}/zlib-${version}.tar.xz";
sha256 = "ipuiiY4dDXdOymultGJ6EeVYi6hciFEzbrON5GgwUKc=";
};
deps = {
build = {
build = {
gnumake = packages.foundation.gnumake.versions."4.4.1-stage1-passthrough";
gnused = packages.foundation.gnused.versions."4.9-stage1-passthrough";
gnutar = packages.foundation.gnutar.versions."1.35-stage1-passthrough";
gnugrep = packages.foundation.gnugrep.versions."3.11-stage1-passthrough";
xz = packages.foundation.xz.versions."5.4.3-stage1-passthrough";
};
host = {
binutils = packages.foundation.binutils.versions."2.41-stage1-passthrough";
gcc = packages.foundation.gcc.versions."13.2.0-stage4";
};
};
};
phases = {
unpack = ''
# Unpack
tar xf ${config.src}
cd zlib-${version}
'';
configure = ''
# Configure
bash ./configure \
--prefix=$out
'';
build = ''
# Build
make -j $NIX_BUILD_CORES
'';
install = ''
# Install
make -j $NIX_BUILD_CORES install
'';
};
};
}