lib/systems: Prohibit "gnu" ABI (*-gnu) with 32-bit ARM

It is ambiguous, and therefore banned within GCC.
This commit is contained in:
John Ericson 2018-05-09 18:50:51 -04:00
parent 4ae207aea0
commit 58b2e875c2
2 changed files with 17 additions and 2 deletions

View file

@ -50,5 +50,12 @@ rec {
} // mapAttrs (n: v: v final.parsed) inspect.predicates
// args;
in assert final.useAndroidPrebuilt -> final.isAndroid;
assert lib.foldl
(pass: { assertion, message }:
if assertion final
then pass
else throw message)
true
(final.parsed.abi.assertions or []);
final;
}

View file

@ -192,7 +192,15 @@ rec {
abis = setTypes types.openAbi {
android = {};
cygnus = {};
gnu = {};
gnu = {
assertions = [
{ assertion = platform: !platform.isAarch32;
message = ''
The "gnu" ABI is ambiguous on 32-bit ARM. Use "gnueabi" or "gnueabihf" instead.
'';
}
];
};
msvc = {};
eabi = {};
androideabi = {};
@ -270,7 +278,7 @@ rec {
kernel = getKernel args.kernel;
abi =
/**/ if args ? abi then getAbi args.abi
else if isLinux parsed then abis.gnu
else if isLinux parsed then (if isAarch32 parsed then abis.gnueabi else abis.gnu)
else if isWindows parsed then abis.gnu
else abis.unknown;
};