Commit e826a6a2 authored by John Ericson's avatar John Ericson
Browse files

stdenv: Move some logic from cross adapter to stdenv proper

Eventually the adapter will be removed.  Moved is

 - Name suffix from hostPlatform

 - configurePlatforms

   To not cause more breakage, the default is currently [], but
   eventually it will be [ "build" "host" ], as the cross adapter makes
   it today.
parent 30a14204
Loading
Loading
Loading
Loading
+1 −18
Original line number Diff line number Diff line
@@ -73,15 +73,8 @@ rec {
    };
  in stdenv // {
    mkDerivation =
      { name ? "", buildInputs ? [], nativeBuildInputs ? []
      { buildInputs ? [], nativeBuildInputs ? []
      , propagatedBuildInputs ? [], propagatedNativeBuildInputs ? []
      , # Disabling the tests by default when cross compiling, as usually the
        # tests rely on being able to run produced binaries.
        doCheck ? false
      , configureFlags ? []
      , # Target is not included by default because most programs don't care.
        # Including it then would cause needless massive rebuilds.
        configurePlatforms   ? args.crossAttrs.configurePlatforms   or [ "build" "host" ]
      , selfNativeBuildInput ? args.crossAttrs.selfNativeBuildInput or false
      , ...
      } @ args:
@@ -106,7 +99,6 @@ rec {
        nativeInputsFromBuildInputs = stdenv.lib.filter hostAsNativeDrv buildInputsNotNull;
      in
        stdenv.mkDerivation (args // {
          name = name + "-" + hostPlatform.config;
          nativeBuildInputs = nativeBuildInputs
            ++ nativeInputsFromBuildInputs
            ++ stdenv.lib.optional selfNativeBuildInput nativeDrv
@@ -116,15 +108,6 @@ rec {
            ++ stdenv.lib.optional (hostPlatform.config == "aarch64-linux-gnu") pkgs.updateAutotoolsGnuConfigScriptsHook
            ;

          inherit doCheck;

          # This parameter is sometimes a string and sometimes a list, yuck
          configureFlags = let inherit (stdenv.lib) optional elem; in
            (if stdenv.lib.isString configureFlags then [configureFlags] else configureFlags)
            ++ optional (elem "build"  configurePlatforms) "--build=${buildPlatform.config}"
            ++ optional (elem "host"   configurePlatforms) "--host=${hostPlatform.config}"
            ++ optional (elem "target" configurePlatforms) "--target=${targetPlatform.config}";

          # Cross-linking dynamic libraries, every buildInput should
          # be propagated because ld needs the -rpath-link to find
          # any library needed to link the program dynamically at
+22 −1
Original line number Diff line number Diff line
@@ -12,12 +12,22 @@ rec {
  # * https://nixos.org/nix/manual/#ssec-derivation
  #   Explanation about derivations in general
  mkDerivation =
    { nativeBuildInputs ? []
    { name ? ""

    , nativeBuildInputs ? []
    , buildInputs ? []

    , propagatedNativeBuildInputs ? []
    , propagatedBuildInputs ? []

    , configureFlags ? []
    , # Target is not included by default because most programs don't care.
      # Including it then would cause needless mass rebuilds.
      #
      # TODO(@Ericson2314): Make [ "build" "host" ] always the default.
      configurePlatforms ? lib.optionals
        (stdenv.hostPlatform != stdenv.buildPlatform)
        [ "build" "host" ]
    , crossConfig ? null
    , meta ? {}
    , passthru ? {}
@@ -72,6 +82,9 @@ rec {
            lib.unique (lib.concatMap (input: input.__propagatedImpureHostDeps or []) (lib.concatLists propagatedDependencies'));
        in
        {
          name = name + lib.optionalString
            (stdenv.hostPlatform != stdenv.buildPlatform)
            stdenv.hostPlatform.config;
          builder = attrs.realBuilder or stdenv.shell;
          args = attrs.args or ["-e" (attrs.builder or ./default-builder.sh)];
          inherit stdenv;
@@ -84,6 +97,14 @@ rec {

          propagatedNativeBuildInputs = lib.elemAt propagatedDependencies' 0;
          propagatedBuildInputs = lib.elemAt propagatedDependencies' 1;

          # This parameter is sometimes a string and sometimes a list, yuck
          configureFlags = let inherit (lib) optional elem; in
            (if lib.isString configureFlags then [configureFlags] else configureFlags)
            ++ optional (elem "build"  configurePlatforms) "--build=${stdenv.buildPlatform.config}"
            ++ optional (elem "host"   configurePlatforms) "--host=${stdenv.hostPlatform.config}"
            ++ optional (elem "target" configurePlatforms) "--target=${stdenv.targetPlatform.config}";

        } // lib.optionalAttrs (stdenv.buildPlatform.isDarwin) {
          # TODO: remove lib.unique once nix has a list canonicalization primitive
          __sandboxProfile =