From 0f6da8923f2fcafdedc6fd64c6b2cfe1ecc6c97c Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 19 Apr 2015 23:56:30 -0400 Subject: [PATCH] cmd/internal/gc: add -buildid flag to write build ID into object file The build ID is an opaque token supplied by the build system. The compiler writes it out early in the Go export metadata (the second line), in a way that does not bother existing readers. The intent is that the go command can use this to store information about the sources for the generated code, so that it can detect stale packages even in cases (like removed files) where mtimes fail. Change-Id: Ib5082515d6cde8a07a8d4b5c69d1e8e4190cb5e1 Reviewed-on: https://go-review.googlesource.com/9153 Reviewed-by: Ian Lance Taylor --- src/cmd/compile/internal/gc/export.go | 3 +++ src/cmd/compile/internal/gc/lex.go | 12 +++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/cmd/compile/internal/gc/export.go b/src/cmd/compile/internal/gc/export.go index 0d64fdb5f0..1043a7edbf 100644 --- a/src/cmd/compile/internal/gc/export.go +++ b/src/cmd/compile/internal/gc/export.go @@ -361,6 +361,9 @@ func dumpsym(s *Sym) { func dumpexport() { lno := lineno + if buildid != "" { + fmt.Fprintf(bout, "build id %q\n", buildid) + } fmt.Fprintf(bout, "\n$$\npackage %s", localpkg.Name) if safemode != 0 { fmt.Fprintf(bout, " safe") diff --git a/src/cmd/compile/internal/gc/lex.go b/src/cmd/compile/internal/gc/lex.go index 93e405dbad..f79c199258 100644 --- a/src/cmd/compile/internal/gc/lex.go +++ b/src/cmd/compile/internal/gc/lex.go @@ -28,11 +28,12 @@ var yylast int var imported_unsafe int -var goos string - -var goarch string - -var goroot string +var ( + goos string + goarch string + goroot string + buildid string +) var ( Debug_wb int @@ -203,6 +204,7 @@ func Main() { obj.Flagfn0("V", "print compiler version", doversion) obj.Flagcount("W", "debug parse tree after type checking", &Debug['W']) obj.Flagstr("asmhdr", "write assembly header to `file`", &asmhdr) + obj.Flagstr("buildid", "record `id` as the build id in the export metadata", &buildid) obj.Flagcount("complete", "compiling complete package (no C or assembly)", &pure_go) obj.Flagstr("d", "print debug information about items in `list`", &debugstr) obj.Flagcount("e", "no limit on number of errors reported", &Debug['e'])