Files
Sebastiaan van Stijn 7c3e04997e vendor: github.com/Microsoft/hcsshim v0.15.0-rc.1
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-07-16 21:41:41 +02:00

131 lines
4.0 KiB
Makefile

include Makefile.bootfiles
# C settings
# enable loading kernel modules in init
KMOD:=0
CFLAGS:=-O2 -Wall
LDFLAGS:=-static -s #strip C binaries
LDLIBS:=
PREPROCESSORFLAGS:=
ifeq "$(KMOD)" "1"
LDFLAGS:=-s
LDLIBS:=-lkmod
PREPROCESSORFLAGS:=-DMODULES=1
endif
# Go settings
# if Go is from the Microsoft Go fork
MSGO:=0
# explicitly use vendored modules when building
GOMODVENDOR:=
# Go tags to enable
GO_BUILD_TAGS:=
# additional Go build flags
GO_FLAGS_EXTRA:=
# use CGO
CGO_ENABLED:=0
GO:=go
GO_FLAGS:=-ldflags "-s -w" # strip Go binaries
ifeq "$(GOMODVENDOR)" "1"
GO_FLAGS+=-mod=vendor
endif
ifneq ($(strip $(GO_BUILD_TAGS)),)
GO_FLAGS+=-tags="$(GO_BUILD_TAGS)"
endif
GO_BUILD_ENV:=CGO_ENABLED=$(CGO_ENABLED)
# starting with ms-go1.25, systemcrypto (for FIPS compliance) is enabled by default, which
# requires CGo.
# disable it for non-CGo builds.
#
# https://github.com/microsoft/go/blob/microsoft/main/eng/doc/MigrationGuide.md#cgo-is-not-enabled
# https://github.com/microsoft/go/blob/microsoft/main/eng/doc/MigrationGuide.md#disabling-systemcrypto
ifeq "$(MSGO)" "1"
ifneq "$(CGO_ENABLED)" "1"
# MS_GO_NOSYSTEMCRYPTO only works for >=ms-go1.25.2
GO_BUILD_ENV+=MS_GO_NOSYSTEMCRYPTO=1 GOEXPERIMENT=nosystemcrypto
endif
endif
GO_BUILD:= $(GO_BUILD_ENV) $(GO) build $(GO_FLAGS) $(GO_FLAGS_EXTRA)
SRCROOT=$(dir $(abspath $(firstword $(MAKEFILE_LIST))))
# additional directories to search for rule prerequisites and targets
VPATH=$(SRCROOT)
# The link aliases for gcstools
GCS_TOOLS=\
generichook \
install-drivers
test:
cd $(SRCROOT) && $(GO) test -v ./internal/guest/...
# 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-snp.tar.gz: out/delta.tar.gz bin/internal/tools/snp-report boot/startup_v2056.sh boot/startup_simple.sh boot/startup.sh
rm -rf rootfs-snp
mkdir rootfs-snp
tar -xzf out/delta.tar.gz -C rootfs-snp
cp boot/startup_v2056.sh rootfs-snp/startup_v2056.sh
cp boot/startup_simple.sh rootfs-snp/startup_simple.sh
cp boot/startup.sh rootfs-snp/startup.sh
cp bin/internal/tools/snp-report rootfs-snp/bin/
chmod a+x rootfs-snp/startup_v2056.sh
chmod a+x rootfs-snp/startup_simple.sh
chmod a+x rootfs-snp/startup.sh
tar -zcf $@ -C rootfs-snp .
rm -rf rootfs-snp
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
# Use force target to always call `go build` per make invocation and rely on Go's build cache
# to decide if binaries should be (re)built.
# Note: don't use `.PHONY` since the targets are actual files.
#
# www.gnu.org/software/make/manual/html_node/Force-Targets.html
bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths bin/cmd/tar2ext4 bin/internal/tools/snp-report: FORCE
@mkdir -p $(dir $@)
GOOS=linux $(GO_BUILD) -o $@ $(SRCROOT)/$(@:bin/%=%)
FORCE:
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 $@ $^ $(LDLIBS)
%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(PREPROCESSORFLAGS) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<