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 } // mapAttrs (n: v: v final.parsed) inspect.predicates
// args; // args;
in assert final.useAndroidPrebuilt -> final.isAndroid; 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; final;
} }

View file

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