about summary refs log tree commit diff
path: root/lib/systems
AgeCommit message (Collapse)AuthorFilesLines
2023-01-03Merge pull request #208698 from amjoseph-nixpkgs/pr/nss/ilp32Martin Weinelt1-0/+1
2023-01-01lib/systems/inspect.nix: add isILP32 predicateAdam Joseph1-0/+1
I've run into a few packages that need an extra flag on platforms where `int` has more bits than `void*` does. I know of three such platforms: * [aarch64ilp32], used on both Linux and also on the [Apple Watch] * [x32], the x86 ILP32 ABI * [mips64n32], used on [Longsoon] and Cavium Octeon routers. This PR introduces a predicate so the package flags can be added in a generic way. [Apple Watch]: https://gist.github.com/woachk/943828f37c14563a607a26116435bf27#watch [mips64n32]: https://en.wikipedia.org/wiki/MIPS_architecture#Calling_conventions [Longsoon]: https://en.wikipedia.org/wiki/Loongson [x32]: https://en.wikipedia.org/wiki/X32_ABI
2023-01-01lib/systems: fix uname.processor for powerpc{32,64}, mips64Adam Joseph1-7/+9
Cross-compilation of anything downstream of gtk3 requires qemu (due to gobject-introspection) with --target-list=*-linux-user. Without this commit, those qemu builds will fail on a powerpc64le host due to qemu being configured with --cpu=powerpc64le instead of --cpu=ppc64le. Unfortunately the build failure message from qemu in this situation is extremely cryptic. The root cause turns out not to be the qemu expression, but rather the fact that on powerpc64le hostPlatform.uname.processor returns the gnu-name (powerpc64le) for the cpu instead of the linux-name (ppc64le) for the cpu. uname.processor on mips64el also needs adjustment -- the Linux-name is "mips64" for both big and little endian (unlike powerpc64, where the Linux-name includes a "le" suffix): ``` nix@oak:/tmp$ uname -m; lscpu | head -n2 mips64 Architecture: mips64 Byte Order: Little Endian ``` uname.processor on powerpc32 has also been adjusted.
2022-12-17lib: fix typosfigsoda3-4/+4
2022-11-22Merge pull request #180964 from amjoseph-nixpkgs/pr/mkSkeletonFromList/simplifyJohn Ericson1-23/+23
lib/systems/parse.nix: mkSkeletonFromList: improve readability
2022-11-21Merge pull request #170737 from amjoseph-nixpkgs/fix-mips32-detectionArtturi1-1/+1
lib/systems/platforms.nix: fix broken mips32 detection
2022-11-13lib/systems/parse.nix: mkSkeletonFromList: improve readabilityAdam Joseph1-23/+23
The main purpose of this PR is to make the basis for `mkSkeletonFromList`'s decision between `cpu-kernel-libcabi` vs `cpu-vendor-os` clear, without changing its behavior. The existing code obscures this decision behind a sequence of prioritized matches (i.e. `if-then`) which jump around between different coordinates. Two side benefits of this PR: 1. It makes the root cause of #165836 obvious: we are missing a case for `cpu-vendor-libcabi`. This is why nixpkgs stumbles over `*-none-*`. 2. It illuminates some very weird corner cases in the existing logic, like `*-${vendor}-ghcjs` overriding the `vendor` field, and `mingw32` being transformed into `windows` in some cases. Co-authored-by: John Ericson <git@JohnEricson.me>
2022-11-13Merge pull request #82131 from Ericson2314/bsd-crossJohn Ericson5-8/+21
FreeBSD packages: Init at 13.1
2022-11-06cross/mingw: fix emulator for mingw32Jörg Thalheim1-3/+2
2022-11-04lib/systems: Support FreeBSDJohn Ericson5-6/+21
A tricky thing about FreeBSD is that there is no stable ABI across versions. That means that putting in the version as part of the config string is paramount. We have a parsed represenation that separates name versus version to accomplish this. We include FreeBSD versions 12 and 13 to demonstrate how it works.
2022-11-04lib/systems: Simplify NetBSD examplesJohn Ericson1-2/+0
The libc will be inferred.
2022-09-29lib/systems/default.nix: add efiArch suffixesIvan Nikolaenko1-0/+8
Move already implemented functionality to the upper level so it could be used in a more generic way. Signed-off-by: Ivan Nikolaenko <ivan.nikolaenko@unikie.com>
2022-09-13Merge pull request #189314 from Artturin/addemulatoravailableArtturi1-30/+39
2022-09-11lib/systems: add emulatorAvailableArtturin1-30/+39
``` nix-repl> pkgsCross.arm-embedded.stdenv.hostPlatform.emulatorAvailable pkgsCross.arm-embedded.buildPackages false nix-repl> pkgsCross.aarch64-multiplatform.stdenv.hostPlatform.emulatorAvailable pkgsCross.aarch64-multiplatform.buildPackages true ``` will be useful for stuff like handling https://github.com/NixOS/nixpkgs/issues/187109
2022-09-06lib/systems: uname.processor is "uname -m", not "uname -p" (#189958)Adam Joseph1-1/+1
The comment in lib/systems/default.nix for uname.processor indicates that it should match `uname -p`. I tried that command and found that it reports `unknown` on all of these machines: - `x86_64-linux` - `aarch64-linux` - `mips64el-linux` - `powerpc64le-linux` The command `uname -m` reports the expected value on all of the above. I think the comment is wrong. So I fixed it.
2022-08-28lib/systems/doubles: add ELFvx GNU ABIsMinijackson1-1/+3
2022-08-28lib/systems: add convenience isAbiElfv2 functionMinijackson1-0/+7
2022-08-28lib/systems/examples: use provided ABIs in PPC64 tripleMinijackson1-3/+2
2022-08-28lib/systems/parse: use ELFv2 by default for PPC64 BEMinijackson1-0/+2
2022-08-28lib/systems: add elfv1 / elfv2 ABIsMinijackson2-1/+9
2022-08-25lib/systems: add MicroBlaze architecturesMinijackson4-6/+14
2022-08-16lib/systems: Add staticLibrary and libraryDaniel Olsen1-1/+7
staticLibrary includes common extensions for static libraries library is a new common attribute that includes both shared and static extensions
2022-08-02lib/system: resolve TODOSandro1-3/+0
2022-07-29lib/systems/inspect.nix: add isAarchSandro1-0/+1
2022-07-27Merge #170736: lib/systems/platforms.nix: fix mips32 ABIVladimír Čunát1-2/+2
2022-07-18Merge pull request #160554 from Cloudef/android-prebuiltRick van Schijndel2-5/+6
Fix android prebuilt toolchains
2022-07-03lib.systems.examples: canonicalize MIPS triplesAlyssa Ross1-14/+12
In Nixpkgs, we assume that the "config" field is a canonicalized GNU triple. I noticed that non-canonical values were being used here, because the pkgsCross.mips64el-linux-gnu triples did not contain the vendor field, but the pkgsCross.mips64el-linux-gnu.pkgsStatic did. Here, I've run all the MIPS triples in lib.systems.examples through config.sub to canonicalize them. I think this will avoid nasty surprises in future. Tested by building Nix and the bootstrap files for pkgsCross.mips64el-linux-gnu.
2022-06-29canExecute: check for androidJari Vetoniemi1-0/+1
2022-06-29update android targets to recommended onesJari Vetoniemi1-5/+5
2022-06-08lib.systems.amd64-netbsd: removeAlyssa Ross1-2/+0
This has been deprecated for a long time, and it's doubtful it had any users to start with. And having an undisablable warning when enumarating platforms is not good.
2022-05-27Merge pull request #174917 from alyssais/scaleway-c1sternenseemann2-9/+0
lib.systems: drop scaleway-c1
2022-05-27lib.systems: drop scaleway-c1Alyssa Ross2-9/+0
These servers apparently no longer exist, since September 2, 2021[1]. If somebody needs this for non-Scaleway machines, they should suggest its reintroduction with a different name. [1]: https://news.ycombinator.com/item?id=27192757
2022-05-25lib/systems/inspect.nix: remove isPowerPCAdam Joseph1-1/+0
Very confusingly, the `isPowerPC` predicate in `lib/systems/inspect.nix` does *not* match `powerpc64le`! This is because `isPowerPC` is defined as isPowerPC = { cpu = cpuTypes.powerpc; }; Where `cpuTypes.powerpc` is: { bits = 32; significantByte = bigEndian; family = "power"; }; This means that the `isPowerPC` predicate actually only matches the subset of machines marketed under this name which happen to be 32-bit and running in big-endian mode which is equivalent to: with stdenv.hostPlatform; isPower && isBigEndian && is32bit This seems like a sharp edge that people could easily cut themselves on. In fact, that has already happened: in `linux/kernel/common-config.nix` there is a test which will always fail: (stdenv.hostPlatform.isPowerPC && stdenv.hostPlatform.is64bit) A more subtle case of the strict isPowerPC being used instead of the moreg general isPower accidentally are the GHC expressions: Update pkgs/development/compilers/ghc/8.10.7.nix Update pkgs/development/compilers/ghc/8.8.4.nix Update pkgs/development/compilers/ghc/9.2.2.nix Update pkgs/development/compilers/ghc/9.0.2.nix Update pkgs/development/compilers/ghc/head.nix Since the remaining legitimate use sites of isPowerPC are so few, remove the isPowerPC predicate completely. The alternative expression above is noted in the release notes as an alternative. Co-authored-by: sternenseemann <sternenseemann@systemli.org>
2022-05-24stdenv: fix evaluation of platform emulatorNick Cao1-1/+1
2022-05-23lib.systems: inform isCompatible users about removalsternenseemann1-0/+1
2022-05-23lib.systems.elaborate: expose canExecute predicate over isCompatiblesternenseemann1-2/+4
canExecute is like isCompatible, but also checks that the Kernels are _equal_, i.e. that both platforms use the same syscall interface. This is crucial in order to actually be able to execute binaries for the other platform. isCompatible is dropped, since it has changed semantically and there's no use case left in nixpkgs.
2022-05-23lib/systems/parse: don't consider mode switching CPUs compatiblesternenseemann1-13/+6
Since we (exclusively) use isCompatible to gauge whether platform a can execute binaries built for platform b, mode switching CPUs are not to be considered compatible for our purposes: Switching the mode of a CPU usually requires a reset. At the very least we can't execute a mix of executables for the two modes which would usually be the case in nixpkgs where we may want to execute buildInputs for the hostPlatform in addition to nativeBuildInputs for the buildPlatform.
2022-05-23lib.systems: remove supported, replace with flakeExposedsternenseemann3-27/+39
Since the list only gates the platforms the nixpkgs flake exposes packages to build on, the `hydra` label made little sense. It was also only used for this purpose, so the `tier*` attributes were largely unnecessary. To reflect the intention more accurately, we expose `lib.systems.flakeExposed` and use it to gate flake.nix's system list.
2022-05-22systems: support cross-compiling for Renesas RX microcontrollers (#173858)yvt4-1/+9
2022-05-04Merge pull request #161156 from ↵Rick van Schijndel1-2/+2
a-m-joseph/abort-on-failed-platform-detection-instead-of-silently-assuming-pc platforms.nix: use {} on failed detection instead of silently assuming pc
2022-05-03platforms.nix: use {} on failed detection instead of silently assuming pcAdam Joseph1-2/+2
This patch causes the autodetection code in lib/systems/platforms.nix to return {} if it cannot detect the platform and one of the platform.nix-detection-provided attributes (linux-kernel, gcc, and rustc) are accessed, rather than silently assuming the "pc" platform as was previously done. It is definitely safe to assume that code using these attributes is prepared to deal with `gcc` and `rustc` not being defined, because many of the working entries in this file don't define it. Regarding `linux-kernel` the situation is less certain, but some code (`lib/systems/default.nix` for example) is already designed to deal with that attribute being missing. At worst it would result in an "attribute not found" error. While adding mips64el bootstrap support to nixpkgs, the silent assumption that mips64el routers are actually Intel PCs caused significant frustration. This commit removes that assumption in order to save people who port nixpkgs to new platforms in the future from this frustration.
2022-04-28platforms.nix: use `inherit` syntaxAdam Joseph1-1/+1
2022-04-28lib.systems: add riscv{32,64} sets and filtersAlyssa Ross2-0/+4
For other platforms like Intel and ARM, we can do e.g. lib.platforms.aarch64 to get only the 64-bit ARM platorms, but until now there were no equivalents for RISC-V.
2022-04-27lib/systems/platforms.nix: fix broken mips32 detectionAdam Joseph1-1/+1
Prior to this commit, nixpkgs would assume that every little-endian mips32 system was a "fuloong2f_n32". Not only are there plenty of mips32 chips other than the fuloong, but the fuloong is actually a mips64 chip! Note that the "n32" ABI is (confusingly) an ABI for 64-bit mips chips (like the "x32" ABI for amd64 chips -- both are ABIs which use 32-bit pointers on an otherwise-64-bit system). This error causes far-ranging problems. One of them was particularly difficult to track down: it caused GCC to select 128-bit `long double` types, which is invalid for the mips32 ABI. This isn't noticed until you try to build musl-libc, which is careful to check for these things. Prior to this commit, nix-build . -A pkgsCross.mipsel-linux-gnu.pkgsStatic.hello would fail. With this commit and #170736, it succeeds.
2022-04-27lib/systems/platforms.nix: use "32" instead of "o32" for mips32 ABIAdam Joseph1-2/+2
There is only one ABI for 32-bit MIPS chips. Before mips64, it didn't really have a name. The 64-bit MIPS ABI comes in two flavors, "n64" and "n32". It is commonplace to refer to the old 32-bit ABI as "o32" (MIPS and SGI documents do this). However, when configuring gcc, one must use --with-abi=32, not --with-abi=o32. Let's keep GCC happy with this commit.
2022-04-25Merge pull request #168111 from a-m-joseph/lib-systems-inspect-powerpcSandro1-0/+1
lib/systems/inspect.nix: add isPower64
2022-04-15lib/systems/platforms: correctly import examples.nixArtturin1-1/+1
before: :p lib.systems failed with error: getting status of '...examples': no such file or directory
2022-04-10lib/systems/inspect.nix: add isPower64Adam Joseph1-0/+1
This commit adds an `isPower64` predicate to the two existing predicates for this architecture (`isPower` and `isPowerPC`). Note that `isPowerPC` matches only 32-bit machines, whereas `isPower` matches both 64-bit and 32-bit machines. Prior to this commit there was no single `isXXX` predicate for `powerpc64le`.
2022-03-10Ericson2314's suggestion here: ↵Adam Joseph2-22/+26
https://github.com/NixOS/nixpkgs/pull/161158#discussion_r822295406
2022-03-10This commit adds only comments to platforms.nix.Adam Joseph1-0/+10