# A helper function to get the go platform string of the Bazel host. # This can be used to do cross-platform go compilations. # Example: # $ bazelisk run //bazel:go_platform # darwin_arm64 py_binary( name = "go_platform", srcs = ["go_platform.py"], data = ["@go_sdk//:bin/go"], tags = ["no-remote"], # Need the platform of the host ) _GO_PLATFORM = """ import os import subprocess # https://bazel.build/reference/be/make-variables#predefined_label_variables go_exe = os.path.abspath("$(execpath @go_sdk//:bin/go)") result = subprocess.run([ go_exe, "version", ], capture_output=True, encoding="utf-8") # e.g. go version go1.18 darwin/arm64 os_arch = result.stdout.strip().split(" ")[3] # e.g. darwin/arm64 print(os_arch.replace("/", "_")) """ genrule( name = "create_go_platform_script", outs = ["go_platform.py"], cmd = "echo '%s' > $@" % _GO_PLATFORM, tools = [ "@go_sdk//:bin/go", ], )