From 8245230753d260b61b928fad7e00323f38ca450f Mon Sep 17 00:00:00 2001 From: John Ericson Date: Sun, 26 Apr 2020 16:47:27 -0400 Subject: meson: Make target-agnostic The cross file is added in the `mkDerivation`. It isn't nice putting build tool-specific stuff here, but our current architecture gives us little alternative. --- .../tools/build-managers/meson/default.nix | 28 --------------------- .../tools/build-managers/meson/setup-hook.sh | 5 ---- pkgs/stdenv/generic/make-derivation.nix | 29 ++++++++++++++++++++++ 3 files changed, 29 insertions(+), 33 deletions(-) (limited to 'pkgs') diff --git a/pkgs/development/tools/build-managers/meson/default.nix b/pkgs/development/tools/build-managers/meson/default.nix index 3fb435c5c2b20..3809d19e7d0c0 100644 --- a/pkgs/development/tools/build-managers/meson/default.nix +++ b/pkgs/development/tools/build-managers/meson/default.nix @@ -3,20 +3,8 @@ , stdenv , writeTextDir , substituteAll -, targetPackages }: -let - # See https://mesonbuild.com/Reference-tables.html#cpu-families - cpuFamilies = { - aarch64 = "aarch64"; - armv5tel = "arm"; - armv6l = "arm"; - armv7l = "arm"; - i686 = "x86"; - x86_64 = "x86_64"; - }; -in python3Packages.buildPythonApplication rec { pname = "meson"; version = "0.54.0"; @@ -70,27 +58,11 @@ python3Packages.buildPythonApplication rec { setupHook = ./setup-hook.sh; - crossFile = writeTextDir "cross-file.conf" '' - [binaries] - pkgconfig = 'pkg-config' - - [properties] - needs_exe_wrapper = true - - [host_machine] - system = '${targetPackages.stdenv.targetPlatform.parsed.kernel.name}' - cpu_family = '${cpuFamilies.${targetPackages.stdenv.targetPlatform.parsed.cpu.name}}' - cpu = '${targetPackages.stdenv.targetPlatform.parsed.cpu.name}' - endian = ${if targetPackages.stdenv.targetPlatform.isLittleEndian then "'little'" else "'big'"} - ''; - # 0.45 update enabled tests but they are failing doCheck = false; # checkInputs = [ ninja pkgconfig ]; # checkPhase = "python ./run_project_tests.py"; - isCross = stdenv.targetPlatform != stdenv.hostPlatform; - meta = with lib; { homepage = "https://mesonbuild.com"; description = "SCons-like build system that use python as a front-end language and Ninja as a building backend"; diff --git a/pkgs/development/tools/build-managers/meson/setup-hook.sh b/pkgs/development/tools/build-managers/meson/setup-hook.sh index aef18e65ea1f5..3d946fcffd522 100644 --- a/pkgs/development/tools/build-managers/meson/setup-hook.sh +++ b/pkgs/development/tools/build-managers/meson/setup-hook.sh @@ -5,11 +5,6 @@ mesonConfigurePhase() { mesonFlags="--prefix=$prefix $mesonFlags" fi - # Build release by default. - if [ -n "@isCross@" ]; then - crossMesonFlags="--cross-file=@crossFile@/cross-file.conf" - fi - # See multiple-outputs.sh and meson’s coredata.py mesonFlags="\ --libdir=${!outputLib}/lib --libexecdir=${!outputLib}/libexec \ diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index a11b280b047ee..e6363ce42c0ae 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -49,6 +49,7 @@ in rec { # Configure Phase , configureFlags ? [] , cmakeFlags ? [] + , mesonFlags ? [] , # Target is not included by default because most programs don't care. # Including it then would cause needless mass rebuilds. # @@ -252,6 +253,34 @@ in rec { ++ lib.optional (stdenv.buildPlatform.uname.system != null) "-DCMAKE_HOST_SYSTEM_NAME=${stdenv.buildPlatform.uname.system}" ++ lib.optional (stdenv.buildPlatform.uname.processor != null) "-DCMAKE_HOST_SYSTEM_PROCESSOR=${stdenv.buildPlatform.uname.processor}" ++ lib.optional (stdenv.buildPlatform.uname.release != null) "-DCMAKE_HOST_SYSTEM_VERSION=${stdenv.buildPlatform.uname.release}"; + + mesonFlags = if mesonFlags == null then null else let + # See https://mesonbuild.com/Reference-tables.html#cpu-families + cpuFamilies = { + aarch64 = "aarch64"; + armv5tel = "arm"; + armv6l = "arm"; + armv7l = "arm"; + i686 = "x86"; + x86_64 = "x86_64"; + }; + crossFile = builtins.toFile "cross-file.conf" ('' + [properties] + needs_exe_wrapper = true + + [host_machine] + system = '${stdenv.targetPlatform.parsed.kernel.name}' + cpu_family = '${cpuFamilies.${stdenv.targetPlatform.parsed.cpu.name}}' + cpu = '${stdenv.targetPlatform.parsed.cpu.name}' + endian = ${if stdenv.targetPlatform.isLittleEndian then "'little'" else "'big'"} + '' + # TODO should have target prefix too, issue #86077 + + '' + + [binaries] + pkgconfig = 'pkg-config' + ''); + in [ "--cross-file=${crossFile}" ] ++ mesonFlags; } // lib.optionalAttrs (attrs.enableParallelBuilding or false) { enableParallelChecking = attrs.enableParallelChecking or true; } // lib.optionalAttrs (hardeningDisable != [] || hardeningEnable != []) { -- cgit 1.4.1