···18, buildPackages
19, pkgsBuildTarget
20, callPackage
021}:
0002223let
24 go_bootstrap = buildPackages.callPackage ./bootstrap.nix { };
···50 # We need a target compiler which is still runnable at build time,
51 # to handle the cross-building case where build != host == target
52 targetCC = pkgsBuildTarget.targetPackages.stdenv.cc;
0053in
5455stdenv.mkDerivation rec {
···70 propagatedBuildInputs = lib.optionals stdenv.isDarwin [ xcbuild ];
7172 depsTargetTargetPropagated = lib.optionals stdenv.isDarwin [ Security Foundation ];
00007374 hardeningDisable = [ "all" ];
75···188 # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those
189 # to be different from CC/CXX
190 CC_FOR_TARGET =
191- if (stdenv.buildPlatform != stdenv.targetPlatform) then
192 "${targetCC}/bin/${targetCC.targetPrefix}cc"
193 else
194 null;
195 CXX_FOR_TARGET =
196- if (stdenv.buildPlatform != stdenv.targetPlatform) then
197 "${targetCC}/bin/${targetCC.targetPrefix}c++"
198 else
199 null;
···217218 export PATH=$(pwd)/bin:$PATH
219220- ${lib.optionalString (stdenv.buildPlatform != stdenv.targetPlatform) ''
221 # Independent from host/target, CC should produce code for the building system.
222 # We only set it when cross-compiling.
223 export CC=${buildPackages.stdenv.cc}/bin/cc
···18, buildPackages
19, pkgsBuildTarget
20, callPackage
21+, threadsCross ? null # for MinGW
22}:
23+24+# threadsCross is just for MinGW
25+assert threadsCross != null -> stdenv.targetPlatform.isWindows;
2627let
28 go_bootstrap = buildPackages.callPackage ./bootstrap.nix { };
···54 # We need a target compiler which is still runnable at build time,
55 # to handle the cross-building case where build != host == target
56 targetCC = pkgsBuildTarget.targetPackages.stdenv.cc;
57+58+ isCross = stdenv.buildPlatform != stdenv.targetPlatform;
59in
6061stdenv.mkDerivation rec {
···76 propagatedBuildInputs = lib.optionals stdenv.isDarwin [ xcbuild ];
7778 depsTargetTargetPropagated = lib.optionals stdenv.isDarwin [ Security Foundation ];
79+80+ depsBuildTarget = lib.optional isCross targetCC;
81+82+ depsTargetTarget = lib.optional (threadsCross != null) threadsCross;
8384 hardeningDisable = [ "all" ];
85···198 # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those
199 # to be different from CC/CXX
200 CC_FOR_TARGET =
201+ if isCross then
202 "${targetCC}/bin/${targetCC.targetPrefix}cc"
203 else
204 null;
205 CXX_FOR_TARGET =
206+ if isCross then
207 "${targetCC}/bin/${targetCC.targetPrefix}c++"
208 else
209 null;
···227228 export PATH=$(pwd)/bin:$PATH
229230+ ${lib.optionalString isCross ''
231 # Independent from host/target, CC should produce code for the building system.
232 # We only set it when cross-compiling.
233 export CC=${buildPackages.stdenv.cc}/bin/cc