diff --git a/Makefile b/Makefile index 741bb49f63..130dfeceed 100644 --- a/Makefile +++ b/Makefile @@ -208,7 +208,7 @@ lib/wasi-libc/sysroot/lib/wasm32-wasi/libc.a: # Build the Go compiler. tinygo: @if [ ! -f "$(LLVM_BUILDDIR)/bin/llvm-config" ]; then echo "Fetch and build LLVM first by running:"; echo " make llvm-source"; echo " make $(LLVM_BUILDDIR)"; exit 1; fi - CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) build -buildmode exe -o build/tinygo$(EXE) -tags byollvm -ldflags="-X main.gitSha1=`git rev-parse --short HEAD`" . + CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) build -buildmode exe -o build/tinygo$(EXE) -tags byollvm -ldflags="-X github.com/tinygo-org/tinygo/goenv.GitSha1=`git rev-parse --short HEAD`" . test: wasi-libc CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) test $(GOTESTFLAGS) -timeout=20m -buildmode exe -tags byollvm ./builder ./cgo ./compileopts ./compiler ./interp ./transform . 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/goenv/version.go b/goenv/version.go index 2e4e5a6761..7142491c32 100644 --- a/goenv/version.go +++ b/goenv/version.go @@ -14,6 +14,12 @@ import ( // Update this value before release of new version of software. const Version = "0.23.0-dev" +var ( + // This variable is set at build time using -ldflags parameters. + // See: https://stackoverflow.com/a/11355611 + GitSha1 string +) + // GetGorootVersion returns the major and minor version for a given GOROOT path. // If the goroot cannot be determined, (0, 0) is returned. func GetGorootVersion(goroot string) (major, minor int, err error) { diff --git a/main.go b/main.go index dde4c76132..4d0ed0434f 100644 --- a/main.go +++ b/main.go @@ -36,12 +36,6 @@ import ( "go.bug.st/serial/enumerator" ) -var ( - // This variable is set at build time using -ldflags parameters. - // See: https://stackoverflow.com/a/11355611 - gitSha1 string -) - // commandError is an error type to wrap os/exec.Command errors. This provides // some more information regarding what went wrong while running a command. type commandError struct { @@ -1023,8 +1017,8 @@ func getBMPPorts() (gdbPort, uartPort string, err error) { func usage(command string) { version := goenv.Version - if strings.HasSuffix(version, "-dev") && gitSha1 != "" { - version += "-" + gitSha1 + if strings.HasSuffix(version, "-dev") && goenv.GitSha1 != "" { + version += "-" + goenv.GitSha1 } switch command { @@ -1620,8 +1614,8 @@ func main() { goversion = s } version := goenv.Version - if strings.HasSuffix(goenv.Version, "-dev") && gitSha1 != "" { - version += "-" + gitSha1 + if strings.HasSuffix(goenv.Version, "-dev") && goenv.GitSha1 != "" { + version += "-" + goenv.GitSha1 } fmt.Printf("tinygo version %s %s/%s (using go version %s and LLVM version %s)\n", version, runtime.GOOS, runtime.GOARCH, goversion, llvm.Version) case "env": 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 +} diff --git a/targets/wasi.json b/targets/wasi.json index 9caec7a574..9ae96a338d 100644 --- a/targets/wasi.json +++ b/targets/wasi.json @@ -11,7 +11,6 @@ "ldflags": [ "--allow-undefined", "--stack-first", - "--export-dynamic", "--no-demangle" ], "emulator": ["wasmtime"],