diff --git a/pkgs/development/compilers/go/1.17.nix b/pkgs/development/compilers/go/1.17.nix index 1483660d1ec..2c673b7dd4e 100644 --- a/pkgs/development/compilers/go/1.17.nix +++ b/pkgs/development/compilers/go/1.17.nix @@ -18,8 +18,12 @@ , buildPackages , pkgsBuildTarget , callPackage +, threadsCross ? null # for MinGW }: +# threadsCross is just for MinGW +assert threadsCross != null -> stdenv.targetPlatform.isWindows; + let go_bootstrap = buildPackages.callPackage ./bootstrap.nix { }; @@ -50,6 +54,8 @@ let # We need a target compiler which is still runnable at build time, # to handle the cross-building case where build != host == target targetCC = pkgsBuildTarget.targetPackages.stdenv.cc; + + isCross = stdenv.buildPlatform != stdenv.targetPlatform; in stdenv.mkDerivation rec { @@ -71,6 +77,10 @@ stdenv.mkDerivation rec { depsTargetTargetPropagated = lib.optionals stdenv.isDarwin [ Security Foundation ]; + depsBuildTarget = lib.optional isCross targetCC; + + depsTargetTarget = lib.optional (threadsCross != null) threadsCross; + hardeningDisable = [ "all" ]; prePatch = '' @@ -194,12 +204,12 @@ stdenv.mkDerivation rec { # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those # to be different from CC/CXX CC_FOR_TARGET = - if (stdenv.buildPlatform != stdenv.targetPlatform) then + if isCross then "${targetCC}/bin/${targetCC.targetPrefix}cc" else null; CXX_FOR_TARGET = - if (stdenv.buildPlatform != stdenv.targetPlatform) then + if isCross then "${targetCC}/bin/${targetCC.targetPrefix}c++" else null; @@ -223,7 +233,7 @@ stdenv.mkDerivation rec { export PATH=$(pwd)/bin:$PATH - ${lib.optionalString (stdenv.buildPlatform != stdenv.targetPlatform) '' + ${lib.optionalString isCross '' # Independent from host/target, CC should produce code for the building system. # We only set it when cross-compiling. export CC=${buildPackages.stdenv.cc}/bin/cc