123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- BASE:=base.tar.gz
- DEV_BUILD:=0
- GO:=go
- GO_FLAGS:=-ldflags "-s -w" # strip Go binaries
- CGO_ENABLED:=0
- GOMODVENDOR:=
- CFLAGS:=-O2 -Wall
- LDFLAGS:=-static -s # strip C binaries
- GO_FLAGS_EXTRA:=
- ifeq "$(GOMODVENDOR)" "1"
- GO_FLAGS_EXTRA += -mod=vendor
- endif
- GO_BUILD_TAGS:=
- ifneq ($(strip $(GO_BUILD_TAGS)),)
- GO_FLAGS_EXTRA += -tags="$(GO_BUILD_TAGS)"
- endif
- GO_BUILD:=CGO_ENABLED=$(CGO_ENABLED) $(GO) build $(GO_FLAGS) $(GO_FLAGS_EXTRA)
- SRCROOT=$(dir $(abspath $(firstword $(MAKEFILE_LIST))))
- # additional directories to search for rule prerequisites and targets
- VPATH=$(SRCROOT)
- DELTA_TARGET=out/delta.tar.gz
- ifeq "$(DEV_BUILD)" "1"
- DELTA_TARGET=out/delta-dev.tar.gz
- endif
- # The link aliases for gcstools
- GCS_TOOLS=\
- generichook \
- install-drivers
- .PHONY: all always rootfs test
- .DEFAULT_GOAL := all
- all: out/initrd.img out/rootfs.tar.gz
- clean:
- find -name '*.o' -print0 | xargs -0 -r rm
- rm -rf bin deps rootfs out
- test:
- cd $(SRCROOT) && $(GO) test -v ./internal/guest/...
- rootfs: out/rootfs.vhd
- out/rootfs.vhd: out/rootfs.tar.gz bin/cmd/tar2ext4
- gzip -f -d ./out/rootfs.tar.gz
- bin/cmd/tar2ext4 -vhd -i ./out/rootfs.tar -o $@
- out/rootfs.tar.gz: out/initrd.img
- rm -rf rootfs-conv
- mkdir rootfs-conv
- gunzip -c out/initrd.img | (cd rootfs-conv && cpio -imd)
- tar -zcf $@ -C rootfs-conv .
- rm -rf rootfs-conv
- out/initrd.img: $(BASE) $(DELTA_TARGET) $(SRCROOT)/hack/catcpio.sh
- $(SRCROOT)/hack/catcpio.sh "$(BASE)" $(DELTA_TARGET) > out/initrd.img.uncompressed
- gzip -c out/initrd.img.uncompressed > $@
- rm out/initrd.img.uncompressed
- # This target includes utilities which may be useful for testing purposes.
- out/delta-dev.tar.gz: out/delta.tar.gz bin/internal/tools/snp-report
- rm -rf rootfs-dev
- mkdir rootfs-dev
- tar -xzf out/delta.tar.gz -C rootfs-dev
- cp bin/internal/tools/snp-report rootfs-dev/bin/
- tar -zcf $@ -C rootfs-dev .
- rm -rf rootfs-dev
- out/delta.tar.gz: bin/init bin/vsockexec bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths Makefile
- @mkdir -p out
- rm -rf rootfs
- mkdir -p rootfs/bin/
- mkdir -p rootfs/info/
- cp bin/init rootfs/
- cp bin/vsockexec rootfs/bin/
- cp bin/cmd/gcs rootfs/bin/
- cp bin/cmd/gcstools rootfs/bin/
- cp bin/cmd/hooks/wait-paths rootfs/bin/
- for tool in $(GCS_TOOLS); do ln -s gcstools rootfs/bin/$$tool; done
- git -C $(SRCROOT) rev-parse HEAD > rootfs/info/gcs.commit && \
- git -C $(SRCROOT) rev-parse --abbrev-ref HEAD > rootfs/info/gcs.branch && \
- date --iso-8601=minute --utc > rootfs/info/tar.date
- $(if $(and $(realpath $(subst .tar,.testdata.json,$(BASE))), $(shell which jq)), \
- jq -r '.IMAGE_NAME' $(subst .tar,.testdata.json,$(BASE)) 2>/dev/null > rootfs/info/image.name && \
- jq -r '.DATETIME' $(subst .tar,.testdata.json,$(BASE)) 2>/dev/null > rootfs/info/build.date)
- tar -zcf $@ -C rootfs .
- rm -rf rootfs
- bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths bin/cmd/tar2ext4 bin/internal/tools/snp-report:
- @mkdir -p $(dir $@)
- GOOS=linux $(GO_BUILD) -o $@ $(SRCROOT)/$(@:bin/%=%)
- bin/vsockexec: vsockexec/vsockexec.o vsockexec/vsock.o
- @mkdir -p bin
- $(CC) $(LDFLAGS) -o $@ $^
- bin/init: init/init.o vsockexec/vsock.o
- @mkdir -p bin
- $(CC) $(LDFLAGS) -o $@ $^
- %.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
|