From f9198d6ff79abb53ed51a87f9ce7afe49e08f48f Mon Sep 17 00:00:00 2001 From: Mike Drob Date: Wed, 25 Jun 2025 15:53:35 -0500 Subject: [PATCH] Provides explicit makefile targets for files (#167) fixes #165 `init` depends on `vminitd/bin/vminitd`, `vminitd/bin/vmexec`, and `bin/cctl` `integration` depends on `bin/containerization-integration` `bin/*` get generated via `make containerization` --- Makefile | 38 ++++++++++++++++++++++++-------------- vminitd/Makefile | 18 ++++++++++++------ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 3a75d751..e6c5c914 100644 --- a/Makefile +++ b/Makefile @@ -40,33 +40,39 @@ release: BUILD_CONFIGURATION = release release: all .PHONY: containerization -containerization: +containerization: bin/cctl bin/containerization-integration + +.PHONY: swift-build +swift-build: @echo Building containerization binaries... - @mkdir -p bin @$(SWIFT) build -c $(BUILD_CONFIGURATION) - @echo Copying containerization binaries... - @install $(BUILD_BIN_DIR)/cctl ./bin/ - @install $(BUILD_BIN_DIR)/containerization-integration ./bin/ +$(BUILD_BIN_DIR)/cctl $(BUILD_BIN_DIR)/containerization-integration: + @"$(MAKE)" swift-build - @echo Signing containerization binaries... - @codesign --force --sign - --timestamp=none --entitlements=signing/vz.entitlements bin/cctl - @codesign --force --sign - --timestamp=none --entitlements=signing/vz.entitlements bin/containerization-integration +bin/%: $(BUILD_BIN_DIR)/% + @mkdir -p bin/ + @install $< bin/ + @codesign --force --sign - --timestamp=none --entitlements=signing/vz.entitlements $@ +init := bin/init.rootfs.tar.gz .PHONY: init -init: vminitd +init: $(init) + +$(init): vminitd/bin/vminitd vminitd/bin/vmexec bin/cctl @echo Creating init.ext4... - @rm -f bin/init.rootfs.tar.gz bin/init.block - @./bin/cctl rootfs create --vminitd vminitd/bin/vminitd --labels org.opencontainers.image.source=https://github.com/apple/containerization --vmexec vminitd/bin/vmexec bin/init.rootfs.tar.gz vminit:latest + @rm -f $(init) bin/init.block + @./bin/cctl rootfs create --vminitd vminitd/bin/vminitd --labels org.opencontainers.image.source=https://github.com/apple/containerization --vmexec vminitd/bin/vmexec $(init) vminit:latest .PHONY: cross-prep cross-prep: @"$(MAKE)" -C vminitd cross-prep .PHONY: vminitd -vminitd: - @mkdir -p ./bin - @"$(MAKE)" -C vminitd BUILD_CONFIGURATION=$(BUILD_CONFIGURATION) +vminitd: vminitd/bin/vminitd vminitd/bin/vmexec + +vminitd/bin/%: + @"$(MAKE)" -C vminitd BUILD_CONFIGURATION=$(BUILD_CONFIGURATION) bin/$* .PHONY: update-libarchive-source update-libarchive-source: @@ -88,6 +94,10 @@ ifeq (,$(wildcard bin/vmlinux)) @echo No bin/vmlinux kernel found. See fetch-default-kernel target. @exit 1 endif + @"$(MAKE)" integration-kernel-checked + +.PHONY: integration-kernel-checked +integration-kernel-checked: $(init) bin/containerization-integration @echo Running the integration tests... @./bin/containerization-integration --bootlog ./bin/boot.log diff --git a/vminitd/Makefile b/vminitd/Makefile index 17eb33ee..25ae6c80 100644 --- a/vminitd/Makefile +++ b/vminitd/Makefile @@ -31,14 +31,20 @@ MACOS_RELEASE_TYPE := $(shell sw_vers | grep ReleaseType) .DEFAULT_GOAL := all .PHONY: all -all: +all: bin/vminitd bin/vmexec + +.PHONY: swift-build +swift-build: @echo Building vminitd and vmexec... - @mkdir -p ./bin/ - @rm -f ./bin/vminitd - @rm -f ./bin/vmexec @swift build -c $(BUILD_CONFIGURATION) $(SWIFT_CONFIGURATION) - @install $(VMINITD_BIN_PATH)/vminitd ./bin/vminitd - @install $(VMINITD_BIN_PATH)/vmexec ./bin/vmexec + +$(VMINITD_BIN_PATH)/vminitd $(VMINITD_BIN_PATH)/vmexec: + @$(MAKE) swift-build + +bin/%: $(VMINITD_BIN_PATH)/% + @mkdir -p bin/ + @rm -f $@ + @install $< bin/ .PHONY: cross-prep cross-prep: linux-sdk macos-sdk