Compare commits

...

3 commits

Author SHA1 Message Date
e2f6de0b11 refactor: eval performant target (#40)
Using `.extend` function causes nix to not cache the evaluation of a package (`a.extend {} != a.extend {}` ). In effect this meant that every time we used
```
	          gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
            settings.target = config.platform.host;
          };
          binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
            settings.target = config.platform.host;
          };
```
we were performing full re-evaluations of binutils and gcc. To make this worse, since binutils and gcc depend on other binutils and gcc (sometimes with this `.extend`), the amount of evaluations would start to blow up.
Before this patch evaluating `packages.foundation.gcc.latest.packages.x86_64-linux.x86_64-linux.package` would evaluate `binutils` stage1 139 times, after this patch (and before target patch) it's 4.

Reviewed-on: auxolotl/labs#40
Co-authored-by: Victor Fuentes <vlinkz@snowflakeos.org>
Co-committed-by: Victor Fuentes <vlinkz@snowflakeos.org>
2025-10-15 03:23:25 +00:00
76cd63f5fe docs: update build instructions and foundation (#38)
Reviewed-on: auxolotl/labs#38
Reviewed-by: vlinkz <vlinkz@snowflakeos.org>
Co-authored-by: KFears <kfearsoff@gmail.com>
Co-committed-by: KFears <kfearsoff@gmail.com>
2025-10-15 03:21:49 +00:00
cb654dbfd0 tidepool/readme: update links to foundation and lib (#37)
A friend was looking at tidepool, and was confused when these were deadlinks.

Reviewed-on: auxolotl/labs#37
Reviewed-by: vlinkz <vlinkz@snowflakeos.org>
Co-authored-by: dawnofmidnight <dawnofmidnight@duck.com>
Co-committed-by: dawnofmidnight <dawnofmidnight@duck.com>
2025-10-15 03:20:52 +00:00
27 changed files with 107 additions and 162 deletions

View file

@ -1,9 +1,12 @@
# Aux Tidepool
Aux Tidepool is an initial package set built on top of [Aux Foundation](../foundation). Packages
are created and managed using [Aux Lib](../lib)'s module system to allow for highly dynamic and
Aux Tidepool is an initial package set built on top of [Aux Foundation][foundation]. Packages
are created and managed using [Aux Lib][lib]'s module system to allow for highly dynamic and
extensible configuration.
[foundation]: https://git.auxolotl.org/auxolotl/foundation
[lib]: https://git.auxolotl.org/auxolotl/lib
## Installation
Packages can be imported both with and without Nix Flakes. To import them using Nix Flakes,
@ -32,19 +35,19 @@ in
To build a package, you can run the following command inside of the `tidepool` directory:
```console
nix-build -A packages.foundation.bash.latest.packages.x86_64-linux.x86_64-linux.x86_64-linux.package
nix-build -A packages.foundation.bash.latest.packages.x86_64-linux.x86_64-linux.package
```
If you have `nix-command` experimental feature enabled, you can v3 CLI instead:
```console
nix build -f . packages.foundation.bash.latest.packages.x86_64-linux.x86_64-linux.x86_64-linux.package
nix build -f . packages.foundation.bash.latest.packages.x86_64-linux.x86_64-linux.package
```
Using flakes, the difference is only in calling:
```console
nix build .#packages.foundation.bash.latest.packages.x86_64-linux.x86_64-linux.x86_64-linux.package
nix build .#packages.foundation.bash.latest.packages.x86_64-linux.x86_64-linux.package
```
This interface is verbose, but stable. We are still working out the details for
@ -53,44 +56,44 @@ a friendlier interface!
The full command syntax looks like this:
```console
nix-build -A packages.${package-set}.${package}.${version}.packages.${build}.${host}.${target}.package
nix-build -A packages.${package-set}.${package}.${version}.packages.${build}.${host}.package
```
Tidepool packages can have multiple versions available. Tidepool also provides aliases
for convenience, currently "stable" and "latest". Aliases go directly after `${package}`:
```console
nix-build -A packages.${package-set}.${package}.${alias}.packages.${build}.${host}.${target}.package
nix-build -A packages.${package-set}.${package}.${alias}.packages.${build}.${host}.package
```
The actual available versions live one level deeper, under `versions` namespace:
```console
nix-build -A packages.${package-set}.${package}.versions.${version}.packages.${build}.${host}.${target}.package
nix-build -A packages.${package-set}.${package}.versions.${version}.packages.${build}.${host}.package
```
Here are a few practical examples for Tidepool. We can use a specific Bash version:
```console
nix-build -A packages.foundation.bash.versions."5.2.15-stage1".packages.x86_64-linux.x86_64-linux.x86_64-linux.package
nix-build -A packages.foundation.bash.versions."5.2.15-stage1".packages.x86_64-linux.x86_64-linux.package
```
Get Bash cross-compiled from `i686-linux` to `x86_64-linux`:
```console
nix build .#packages.foundation.bash.latest.packages.i686-linux.x86_64-linux.x86_64-linux.package
nix build .#packages.foundation.bash.latest.packages.i686-linux.x86_64-linux.package
```
Or a native `aarch64-linux` Bash:
```console
nix build .#packages.foundation.bash.latest.packages.aarch64-linux.aarch64-linux.aarch64-linux.package
nix build .#packages.foundation.bash.latest.packages.aarch64-linux.aarch64-linux.package
```
Running this command will:
- Bootstrap `i686-linux` `gcc` as a dependency of `x86_64-linux` `gcc`
- Incrementally bootstrap the actual `x86_64-linux` `gcc`
- Bootstrap `i686-linux` `gcc` using Foundation
- Incrementally bootstrap `x86_64-linux` `gcc`
- Incrementally bootstrap `aarch64-linux` `gcc` from `x86_64-linux` `gcc`
- Build the native `aarch64-linux` `gcc`
- Build the native `aarch64-linux` `bash`

View file

@ -5,8 +5,7 @@ In this folder, the Tidepool package sets are stored.
## Foundation
The package set under `foundation` is a minimal set to start building everything
else. It builds upon and uses packages from [Foundation](https://git.auxolotl.org/auxolotl/foundation),
our early bootstrap chain. It provides a comprehensive set of packages that are
else. It provides a comprehensive set of packages that are
used to build all other basic Linux utilities, and are often transitive dependencies
of higher-level packages.
@ -25,21 +24,10 @@ binaries to point to our dependencies. This "unbreaks" proprietary
binaries by making them point to Tidepool-provided dependencies.
Neat!
The bootstrap chain is based on [full-source](https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/)
bootstrap, made possible with amazing work by Guix's people,
and Emily Trau's effort on porting it to Nix!
It bootstraps a proper `gcc` for `i686-linux`, which can then
be used to cross-compile a `gcc` for other architectures, such
as `x86_64-linux`.
To build stage1 (`i686-linux`), run:
```console
nix build --system i686-linux .#packages.foundation.glibc.versions."2.38-stage1-passthrough".packages.i686-linux.x86_64-linux.x86_64-linux.package
```
The full bootstrap chain is available in a confusingly-named
[Foundation repository](https://git.auxolotl.org/auxolotl/foundation).
The `foundation` package set builds upon and uses packages from [Foundation](https://git.auxolotl.org/auxolotl/foundation),
our early bootstrap chain. It augments the packages from Foundation with
Tidepool's cross-compilation capabilities, and adds additional flags
to compilers to better support our use case.
## Aux

View file

@ -78,12 +78,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -36,6 +36,14 @@ in
default.value = false;
};
};
target = lib.options.create {
type = lib.types.raw;
default.value = lib.attrs.generate lib.systems.doubles.all (
target:
(config.extend { settings.target = target; })
.packages.${config.platform.build}.${config.platform.host}
);
};
};
config = {

View file

@ -62,6 +62,14 @@ in
default.value = false;
};
};
target = lib.options.create {
type = lib.types.raw;
default.value = lib.attrs.generate lib.systems.doubles.all (
target:
(config.extend { settings.target = target; })
.packages.${config.platform.build}.${config.platform.host}
);
};
};
config = {
@ -129,12 +137,8 @@ in
}
)
// (lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
});
};

View file

@ -77,12 +77,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -68,12 +68,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -84,12 +84,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -33,6 +33,14 @@ in
default.value = config.platform.host;
description = "Target of the compiler";
};
target = lib.options.create {
type = lib.types.raw;
default.value = lib.attrs.generate lib.systems.doubles.all (
target:
(config.extend { settings.target = target; })
.packages.${config.platform.build}.${config.platform.host}
);
};
};
config = {

View file

@ -79,6 +79,14 @@ in
default.value = "x86_64-linux";
description = "Target of the compiler";
};
target = lib.options.create {
type = lib.types.raw;
default.value = lib.attrs.generate lib.systems.doubles.all (
target:
(config.extend { settings.target = target; })
.packages.${config.platform.build}.${config.platform.host}
);
};
};
config = {
@ -168,9 +176,8 @@ in
}
)
// {
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.settings.target;
};
binutils-cross =
packages.foundation.binutils.versions."2.41-stage1".target.${config.settings.target};
};
};

View file

@ -82,6 +82,14 @@ in
default.value = "x86_64-linux";
description = "Target of the compiler";
};
target = lib.options.create {
type = lib.types.raw;
default.value = lib.attrs.generate lib.systems.doubles.all (
target:
(config.extend { settings.target = target; })
.packages.${config.platform.build}.${config.platform.host}
);
};
};
config = {
@ -171,9 +179,8 @@ in
}
)
// {
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.settings.target;
};
binutils-cross =
packages.foundation.binutils.versions."2.41-stage1".target.${config.settings.target};
};
host = {

View file

@ -163,12 +163,8 @@ in
}
)
// {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
host = {

View file

@ -99,12 +99,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage1".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage1".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
host = {
linux-headers = packages.foundation.linux-headers.versions."6.5.6-stage1";

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -85,12 +85,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -79,12 +79,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc-cross = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils-cross = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -67,12 +67,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
# target = lib.attrs.when (config.platform.host != config.platform.target) {
# gcc = packages.foundation.gcc.versions."13.2.0-stage2";

View file

@ -81,12 +81,8 @@ in
)
// lib.attrs.when (config.platform.build != config.platform.host) {
python = packages.foundation.python.versions."3.12.0-stage1";
gcc = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
host = {

View file

@ -75,12 +75,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};

View file

@ -68,12 +68,8 @@ in
}
)
// lib.attrs.when (config.platform.build != config.platform.host) {
gcc = packages.foundation.gcc.versions."13.2.0-stage2".extend {
settings.target = config.platform.host;
};
binutils = packages.foundation.binutils.versions."2.41-stage1".extend {
settings.target = config.platform.host;
};
gcc = packages.foundation.gcc.versions."13.2.0-stage2".target.${config.platform.host};
binutils = packages.foundation.binutils.versions."2.41-stage1".target.${config.platform.host};
};
};