...

Text file src/github.com/Microsoft/hcsshim/Makefile

Documentation: github.com/Microsoft/hcsshim

     1BASE:=base.tar.gz
     2DEV_BUILD:=0
     3
     4GO:=go
     5GO_FLAGS:=-ldflags "-s -w" # strip Go binaries
     6CGO_ENABLED:=0
     7GOMODVENDOR:=
     8
     9CFLAGS:=-O2 -Wall
    10LDFLAGS:=-static -s # strip C binaries
    11
    12GO_FLAGS_EXTRA:=
    13ifeq "$(GOMODVENDOR)" "1"
    14GO_FLAGS_EXTRA += -mod=vendor
    15endif
    16GO_BUILD_TAGS:=
    17ifneq ($(strip $(GO_BUILD_TAGS)),)
    18GO_FLAGS_EXTRA += -tags="$(GO_BUILD_TAGS)"
    19endif
    20GO_BUILD:=CGO_ENABLED=$(CGO_ENABLED) $(GO) build $(GO_FLAGS) $(GO_FLAGS_EXTRA)
    21
    22SRCROOT=$(dir $(abspath $(firstword $(MAKEFILE_LIST))))
    23# additional directories to search for rule prerequisites and targets
    24VPATH=$(SRCROOT)
    25
    26DELTA_TARGET=out/delta.tar.gz
    27
    28ifeq "$(DEV_BUILD)" "1"
    29DELTA_TARGET=out/delta-dev.tar.gz
    30endif
    31
    32# The link aliases for gcstools
    33GCS_TOOLS=\
    34	generichook \
    35	install-drivers
    36
    37.PHONY: all always rootfs test
    38
    39.DEFAULT_GOAL := all
    40
    41all: out/initrd.img out/rootfs.tar.gz
    42
    43clean:
    44	find -name '*.o' -print0 | xargs -0 -r rm
    45	rm -rf bin deps rootfs out
    46
    47test:
    48	cd $(SRCROOT) && $(GO) test -v ./internal/guest/...
    49
    50rootfs: out/rootfs.vhd
    51
    52out/rootfs.vhd: out/rootfs.tar.gz bin/cmd/tar2ext4
    53	gzip -f -d ./out/rootfs.tar.gz
    54	bin/cmd/tar2ext4 -vhd -i ./out/rootfs.tar -o $@
    55
    56out/rootfs.tar.gz: out/initrd.img
    57	rm -rf rootfs-conv
    58	mkdir rootfs-conv
    59	gunzip -c out/initrd.img | (cd rootfs-conv && cpio -imd)
    60	tar -zcf $@ -C rootfs-conv .
    61	rm -rf rootfs-conv
    62
    63out/initrd.img: $(BASE) $(DELTA_TARGET) $(SRCROOT)/hack/catcpio.sh
    64	$(SRCROOT)/hack/catcpio.sh "$(BASE)" $(DELTA_TARGET) > out/initrd.img.uncompressed
    65	gzip -c out/initrd.img.uncompressed > $@
    66	rm out/initrd.img.uncompressed
    67
    68# This target includes utilities which may be useful for testing purposes.
    69out/delta-dev.tar.gz: out/delta.tar.gz bin/internal/tools/snp-report
    70	rm -rf rootfs-dev
    71	mkdir rootfs-dev
    72	tar -xzf out/delta.tar.gz -C rootfs-dev
    73	cp bin/internal/tools/snp-report rootfs-dev/bin/
    74	tar -zcf $@ -C rootfs-dev .
    75	rm -rf rootfs-dev
    76
    77out/delta.tar.gz: bin/init bin/vsockexec bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths Makefile
    78	@mkdir -p out
    79	rm -rf rootfs
    80	mkdir -p rootfs/bin/
    81	mkdir -p rootfs/info/
    82	cp bin/init rootfs/
    83	cp bin/vsockexec rootfs/bin/
    84	cp bin/cmd/gcs rootfs/bin/
    85	cp bin/cmd/gcstools rootfs/bin/
    86	cp bin/cmd/hooks/wait-paths rootfs/bin/
    87	for tool in $(GCS_TOOLS); do ln -s gcstools rootfs/bin/$$tool; done
    88	git -C $(SRCROOT) rev-parse HEAD > rootfs/info/gcs.commit && \
    89	git -C $(SRCROOT) rev-parse --abbrev-ref HEAD > rootfs/info/gcs.branch && \
    90	date --iso-8601=minute --utc > rootfs/info/tar.date
    91	$(if $(and $(realpath $(subst .tar,.testdata.json,$(BASE))), $(shell which jq)), \
    92		jq -r '.IMAGE_NAME' $(subst .tar,.testdata.json,$(BASE)) 2>/dev/null > rootfs/info/image.name && \
    93		jq -r '.DATETIME' $(subst .tar,.testdata.json,$(BASE)) 2>/dev/null > rootfs/info/build.date)
    94	tar -zcf $@ -C rootfs .
    95	rm -rf rootfs
    96
    97bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths bin/cmd/tar2ext4 bin/internal/tools/snp-report:
    98	@mkdir -p $(dir $@)
    99	GOOS=linux $(GO_BUILD) -o $@ $(SRCROOT)/$(@:bin/%=%)
   100
   101bin/vsockexec: vsockexec/vsockexec.o vsockexec/vsock.o
   102	@mkdir -p bin
   103	$(CC) $(LDFLAGS) -o $@ $^
   104
   105bin/init: init/init.o vsockexec/vsock.o
   106	@mkdir -p bin
   107	$(CC) $(LDFLAGS) -o $@ $^
   108
   109%.o: %.c
   110	@mkdir -p $(dir $@)
   111	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

View as plain text