diff --git a/builder/build.go b/builder/build.go index 3dfca4e4ae..45e03875b1 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 12de028401..17f42ebeef 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 +}