|
|
@@ -3,8 +3,11 @@
|
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
#
|
|
|
# gocross-wrapper.sh is a wrapper that can be aliased to 'go', which
|
|
|
-# transparently builds gocross using a "bootstrap" Go toolchain, and
|
|
|
-# then invokes gocross.
|
|
|
+# transparently runs the version of github.com/tailscale/go as specified repo's
|
|
|
+# go.toolchain.rev file.
|
|
|
+#
|
|
|
+# It also conditionally (if TS_USE_GOCROSS=1) builds gocross and uses it as a go
|
|
|
+# wrapper to inject certain go flags.
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
@@ -76,6 +79,14 @@ case "$REV" in
|
|
|
;;
|
|
|
esac
|
|
|
|
|
|
+# gocross is opt-in as of 2025-06-16. See tailscale/corp#26717.
|
|
|
+# It's primarily used for xcode builds, and a bit still for Windows.
|
|
|
+# In the past we needed it for git version stamping on Linux etc, but
|
|
|
+# Go does that itself nowadays.
|
|
|
+if [ "${TS_USE_GOCROSS:-}" != "1" ]; then
|
|
|
+ exit 0 # out of subshell
|
|
|
+fi
|
|
|
+
|
|
|
if [[ -d "$toolchain" ]]; then
|
|
|
# A toolchain exists, but is it recent enough to compile gocross? If not,
|
|
|
# wipe it out so that the next if block fetches a usable one.
|
|
|
@@ -119,4 +130,23 @@ if [[ "$gocross_ok" == "0" ]]; then
|
|
|
fi
|
|
|
) # End of the subshell execution.
|
|
|
|
|
|
-exec "${BASH_SOURCE%/*}/../../gocross" "$@"
|
|
|
+repo_root="${BASH_SOURCE%/*}/../.."
|
|
|
+
|
|
|
+# gocross is opt-in as of 2025-06-16. See tailscale/corp#26717
|
|
|
+# and comment above in this file.
|
|
|
+if [ "${TS_USE_GOCROSS:-}" != "1" ]; then
|
|
|
+ read -r REV <"${repo_root}/go.toolchain.rev"
|
|
|
+ case "$REV" in
|
|
|
+ /*)
|
|
|
+ toolchain="$REV"
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ # If the prior subshell completed successfully, this toolchain location
|
|
|
+ # should be valid at this point.
|
|
|
+ toolchain="$HOME/.cache/tsgo/$REV"
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ exec "$toolchain/bin/go" "$@"
|
|
|
+fi
|
|
|
+
|
|
|
+exec "${repo_root}/gocross" "$@"
|