diff options
Diffstat (limited to 'workhorse/Makefile')
-rw-r--r-- | workhorse/Makefile | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/workhorse/Makefile b/workhorse/Makefile index 031fe581d28..44b3e2b8248 100644 --- a/workhorse/Makefile +++ b/workhorse/Makefile @@ -12,7 +12,7 @@ ifdef SOURCE_DATE_EPOCH else BUILD_TIME := $(shell date -u "$(DATE_FMT)") endif -GOBUILD := go build -ldflags "-X main.Version=$(VERSION_STRING) -X main.BuildTime=$(BUILD_TIME)" +GO_BUILD_GENERIC_LDFLAGS := -X main.Version=$(VERSION_STRING) -X main.BuildTime=$(BUILD_TIME) GITALY := tmp/tests/gitaly/_build/bin/gitaly GITALY_PID_FILE := gitaly.pid EXE_ALL := gitlab-resize-image gitlab-zip-cat gitlab-zip-metadata gitlab-workhorse @@ -30,31 +30,35 @@ define message @echo "### $(1)" endef +# To compute a unique and deterministic value for GNU build-id, we build the Go binary a second time. +# From the first build, we extract its unique and deterministic Go build-id, and use that to derive +# a comparably unique and deterministic GNU build-id to inject into the final binary. +# If we cannot extract a Go build-id, we punt and fallback to using a random 32-byte hex string. +# This fallback is unique but non-deterministic. Uniqueness is critical, because the GNU build-id +# can be used as a cache key in a build cache. Without the fallback, we risk cache key collisions. +## Skip generation of the GNU build ID if set to speed up builds. +WITHOUT_BUILD_ID ?= .NOTPARALLEL: .PHONY: all all: clean-build $(EXE_ALL) -.PHONY: gitlab-resize-image -gitlab-resize-image: +.PHONY: gitlab-resize-image gitlab-zip-cat gitlab-zip-metadata +gitlab-resize-image gitlab-zip-cat gitlab-zip-metadata: $(call message,Building $@) - $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ - -.PHONY: gitlab-zip-cat -gitlab-zip-cat: - $(call message,Building $@) - $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ - -.PHONY: gitlab-zip-metadata -gitlab-zip-metadata: - $(call message,Building $@) - $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ + go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ +ifndef WITHOUT_BUILD_ID + go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS) -B 0x$$(_support/make-gnu-build-id.sh $(BUILD_DIR)/$@)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ +endif .PHONY: gitlab-workhorse gitlab-workhorse: $(call message,Building $@) - $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG) + go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG) +ifndef WITHOUT_BUILD_ID + go build -ldflags "$(GO_BUILD_GENERIC_LDFLAGS) -B 0x$$(_support/make-gnu-build-id.sh $(BUILD_DIR)/$@)" -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG) +endif .PHONY: install install: $(EXE_ALL) |