From 2fdcabdcceabe25a43073079db7785acf66538d7 Mon Sep 17 00:00:00 2001 From: ZauberNerd Date: Fri, 4 Mar 2022 14:58:40 +0000 Subject: [PATCH] src/runtime: add runtime.Version() This adds the `Version()` function of the `runtime` package which embeds the go version that was used to build tinygo. For programs that are compiled with tinygo the version can be overriden via the: `tinygo build -ldflags="-X 'runtime.buildVersion=abc'"` flag. Otherwise it will continue to use the go version with which tinygo was compiled. --- builder/build.go | 15 +++++++++++++++ src/runtime/extern.go | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/builder/build.go b/builder/build.go index 3dfca4e4..45e03875 100644 --- a/builder/build.go +++ b/builder/build.go @@ -204,6 +204,21 @@ func Build(pkgName, outpath string, config *compileopts.Config, action func(Buil var packageJobs []*compileJob packageBitcodePaths := make(map[string]string) packageActionIDs := make(map[string]string) + + if config.Options.GlobalValues["runtime"]["buildVersion"] == "" { + version := goenv.Version + if strings.HasSuffix(goenv.Version, "-dev") && goenv.GitSha1 != "" { + version += "-" + goenv.GitSha1 + } + if config.Options.GlobalValues == nil { + config.Options.GlobalValues = make(map[string]map[string]string) + } + if config.Options.GlobalValues["runtime"] == nil { + config.Options.GlobalValues["runtime"] = make(map[string]string) + } + config.Options.GlobalValues["runtime"]["buildVersion"] = version + } + for _, pkg := range lprogram.Sorted() { pkg := pkg // necessary to avoid a race condition diff --git a/src/runtime/extern.go b/src/runtime/extern.go index 12de0284..17f42ebe 100644 --- a/src/runtime/extern.go +++ b/src/runtime/extern.go @@ -3,3 +3,15 @@ package runtime func Callers(skip int, pc []uintptr) int { return 0 } + +// buildVersion is the Tinygo tree's version string at build time. +// +// This is set by the linker. +var buildVersion string + +// Version returns the Tinygo tree's version string. +// It is the same as goenv.Version, or in case of a development build, +// it will be the concatenation of goenv.Version and the git commit hash. +func Version() string { + return buildVersion +}