d4c673a92b
Thanks to Qyriad, it was found out that Nixpkgs was unable to cross compile when CMake was needed at cross compilation time with Meson because Meson refuse to use the ambiant CMake. A simple fix is to always provide the ambiant CMake and trust the packager to pass the right CMake, otherwise the rest of the build would probably fail in mysterious ways. An example of package that required this fix is the Lix, a Nix implementation, that uses `toml11` discovered via CMake during the Meson configure phase. Co-authored-by: Qyriad <qyriad@qyriad.me> Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
40 lines
1.4 KiB
Nix
40 lines
1.4 KiB
Nix
{ stdenv, lib }:
|
|
|
|
let
|
|
inherit (lib) boolToString optionals;
|
|
|
|
# See https://mesonbuild.com/Reference-tables.html#cpu-families
|
|
cpuFamily = platform: with platform;
|
|
/**/ if isAarch32 then "arm"
|
|
else if isx86_32 then "x86"
|
|
else platform.uname.processor;
|
|
|
|
crossFile = builtins.toFile "cross-file.conf" ''
|
|
[properties]
|
|
bindgen_clang_arguments = ['-target', '${stdenv.targetPlatform.config}']
|
|
needs_exe_wrapper = ${boolToString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform)}
|
|
|
|
[host_machine]
|
|
system = '${stdenv.targetPlatform.parsed.kernel.name}'
|
|
cpu_family = '${cpuFamily stdenv.targetPlatform}'
|
|
cpu = '${stdenv.targetPlatform.parsed.cpu.name}'
|
|
endian = ${if stdenv.targetPlatform.isLittleEndian then "'little'" else "'big'"}
|
|
|
|
[binaries]
|
|
llvm-config = 'llvm-config-native'
|
|
rust = ['rustc', '--target', '${stdenv.targetPlatform.rust.rustcTargetSpec}']
|
|
# Meson refuses to consider any CMake binary during cross compilation if it's
|
|
# not explicitly specified here, in the cross file.
|
|
# https://github.com/mesonbuild/meson/blob/0ed78cf6fa6d87c0738f67ae43525e661b50a8a2/mesonbuild/cmake/executor.py#L72
|
|
cmake = 'cmake'
|
|
'';
|
|
|
|
crossFlags = optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ "--cross-file=${crossFile}" ];
|
|
|
|
makeMesonFlags = { mesonFlags ? [], ... }: crossFlags ++ mesonFlags;
|
|
|
|
in
|
|
{
|
|
inherit makeMesonFlags;
|
|
}
|