mirror of
https://github.com/zyedidia/micro.git
synced 2026-02-05 22:50:21 +09:00
* Makefile: Ensure we strip out embedded paths
To reproduce binaries undeterministic values needs to be removed. By
default Go embeds several module paths into the binaries, which prevents
people from reproducing said distributed binary.
The distributed binary from micro contains the full home path of the
current builder of the binary. -trimpath removes these paths from the
binary.
$ strings micro | grep "/home/zyedidia" | wc -l
868
This also helps other distributions providing reproducible versions of
micro down the line.
Signed-off-by: Morten Linderud <morten@linderud.pw>
* build-date: Ensure build time adheres to SOURCE_DATE_EPOCH
Embedding undeterministic values into binaries prevents reproduction of
the binaries. The reproducible builds projects defines
`SOURCE_DATE_EPOCH` to allow deterministic insertion of build times.
This patch ensures `build-date` checks the environment variable before
building with the local time.
$ SOURCE_DATE_EPOCH=123123 go run tools/build-date.go
January 02, 1970
$ go run tools/build-date.go
July 31, 2020
$ make build-quick && ./micro --version
[...]
Compiled on July 31, 2020
$ SOURCE_DATE_EPOCH=123123 make build-quick && ./micro --version
[...]
Compiled on January 02, 1970
https://reproducible-builds.org/specs/source-date-epoch/
Signed-off-by: Morten Linderud <morten@linderud.pw>
89 lines
3.1 KiB
Makefile
89 lines
3.1 KiB
Makefile
.PHONY: runtime
|
|
|
|
VERSION = $(shell GOOS=$(shell go env GOHOSTOS) GOARCH=$(shell go env GOHOSTARCH) \
|
|
go run tools/build-version.go)
|
|
HASH = $(shell git rev-parse --short HEAD)
|
|
DATE = $(shell GOOS=$(shell go env GOHOSTOS) GOARCH=$(shell go env GOHOSTARCH) \
|
|
go run tools/build-date.go)
|
|
ADDITIONAL_GO_LINKER_FLAGS = $(shell GOOS=$(shell go env GOHOSTOS) \
|
|
GOARCH=$(shell go env GOHOSTARCH) \
|
|
go run tools/info-plist.go "$(VERSION)")
|
|
GOBIN ?= $(shell go env GOPATH)/bin
|
|
GOVARS = -X github.com/zyedidia/micro/v2/internal/util.Version=$(VERSION) -X github.com/zyedidia/micro/v2/internal/util.CommitHash=$(HASH) -X 'github.com/zyedidia/micro/v2/internal/util.CompileDate=$(DATE)'
|
|
DEBUGVAR = -X github.com/zyedidia/micro/v2/internal/util.Debug=ON
|
|
VSCODE_TESTS_BASE_URL = 'https://raw.githubusercontent.com/microsoft/vscode/e6a45f4242ebddb7aa9a229f85555e8a3bd987e2/src/vs/editor/test/common/model/'
|
|
|
|
# Builds micro after checking dependencies but without updating the runtime
|
|
build:
|
|
go build -trimpath -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro
|
|
|
|
build-dbg:
|
|
go build -trimpath -ldflags "-s -w $(ADDITIONAL_GO_LINKER_FLAGS) $(DEBUGVAR)" ./cmd/micro
|
|
|
|
build-tags: fetch-tags
|
|
go build -trimpath -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro
|
|
|
|
# Builds micro after building the runtime and checking dependencies
|
|
build-all: runtime build
|
|
|
|
# Builds micro without checking for dependencies
|
|
build-quick:
|
|
go build -trimpath -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro
|
|
|
|
# Same as 'build' but installs to $GOBIN afterward
|
|
install:
|
|
go install -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro
|
|
|
|
# Same as 'build-all' but installs to $GOBIN afterward
|
|
install-all: runtime install
|
|
|
|
# Same as 'build-quick' but installs to $GOBIN afterward
|
|
install-quick:
|
|
go install -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro
|
|
|
|
fetch-tags:
|
|
git fetch --tags
|
|
|
|
# Builds the runtime
|
|
runtime:
|
|
git submodule update --init
|
|
rm -f runtime/syntax/*.hdr
|
|
go run runtime/syntax/make_headers.go runtime/syntax
|
|
go build -o tools/bindata ./tools/go-bindata
|
|
tools/bindata -pkg config -nomemcopy -nometadata -o runtime.go runtime/...
|
|
mv runtime.go internal/config
|
|
gofmt -w internal/config/runtime.go
|
|
|
|
testgen:
|
|
mkdir -p tools/vscode-tests
|
|
cd tools/vscode-tests && \
|
|
curl --remote-name-all $(VSCODE_TESTS_BASE_URL){editableTextModelAuto,editableTextModel,model.line}.test.ts
|
|
tsc tools/vscode-tests/*.ts > /dev/null; true
|
|
go run tools/testgen.go tools/vscode-tests/*.js > buffer_generated_test.go
|
|
mv buffer_generated_test.go internal/buffer
|
|
gofmt -w internal/buffer/buffer_generated_test.go
|
|
|
|
test:
|
|
go test ./internal/...
|
|
go test ./cmd/...
|
|
|
|
bench:
|
|
for i in 1 2 3; do \
|
|
go test -bench=. ./internal/...; \
|
|
done > benchmark_results
|
|
benchstat benchmark_results
|
|
|
|
bench-baseline:
|
|
for i in 1 2 3; do \
|
|
go test -bench=. ./internal/...; \
|
|
done > benchmark_results_baseline
|
|
|
|
bench-compare:
|
|
for i in 1 2 3; do \
|
|
go test -bench=. ./internal/...; \
|
|
done > benchmark_results
|
|
benchstat -alpha 0.15 benchmark_results_baseline benchmark_results
|
|
|
|
clean:
|
|
rm -f micro
|