Something went wrong. Try again.
libkrun v1.19.4 fork adding PVH boot primitives (start_info + protected-mode vCPU state) for faster, kernel-direct x86_64 microVM startup.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281LIBRARY_HEADER = include/libkrun.hLIBRARY_HEADER_DISPLAY = include/libkrun_display.hLIBRARY_HEADER_INPUT = include/libkrun_input.h
ABI_VERSION=2FULL_VERSION=2.0.0
AWS_NITRO_INIT_SRC = \ init/aws-nitro/include/* \ init/aws-nitro/main.c \ init/aws-nitro/archive.c \ init/aws-nitro/args_reader.c \ init/aws-nitro/fs.c \ init/aws-nitro/mod.c \ init/aws-nitro/device/include/* \ init/aws-nitro/device/app_stdio_output.c \ init/aws-nitro/device/device.c \ init/aws-nitro/device/net_tap_afvsock.c \ init/aws-nitro/device/signal.c \
AWS_NITRO_INIT_LD_FLAGS = -larchive -lnsm
ifeq ($(SEV),1) VARIANT = -sev FEATURE_FLAGS := --features amd-sevendififeq ($(TDX),1) VARIANT = -tdx FEATURE_FLAGS := --features tdxendififeq ($(VIRGL_RESOURCE_MAP2),1) FEATURE_FLAGS += --features virgl_resource_map2endif# Test targets require the block device (BLK) feature for FreeBSD disk tests# and the NET feature for gvproxy-based network tests.# Enable automatically unless the user explicitly set them to a value.ifeq ($(BLK),) ifneq ($(filter test test-prefix,$(MAKECMDGOALS)),) BLK := 1 endifendififeq ($(NET),) ifneq ($(filter test test-prefix,$(MAKECMDGOALS)),) NET := 1 endifendififeq ($(INIT_BLOB),0) FEATURE_FLAGS += --no-default-featuresendififeq ($(BLK),1) FEATURE_FLAGS += --features blkendififeq ($(NET),1) FEATURE_FLAGS += --features netendififeq ($(GPU),1) FEATURE_FLAGS += --features gpuendififeq ($(INPUT),1) FEATURE_FLAGS += --features inputendififeq ($(VHOST_USER),1) FEATURE_FLAGS += --features vhost-userendififeq ($(TIMESYNC),1) FEATURE_FLAGS += --features timesyncendififeq ($(AWS_NITRO),1) VARIANT = -awsnitro FEATURE_FLAGS := --features aws-nitro,netendif
CLANG = /usr/bin/clang
OS = $(shell uname -s)ARCH = $(shell uname -m)FREEBSD_VERSION ?= 14.3-RELEASEFREEBSD_ROOTFS_DIR = freebsd-sysroot
KRUN_BINARY_Linux = libkrun$(VARIANT).so.$(FULL_VERSION)KRUN_SONAME_Linux = libkrun$(VARIANT).so.$(ABI_VERSION)KRUN_BASE_Linux = libkrun$(VARIANT).so
KRUN_BINARY_Darwin = libkrun$(VARIANT).$(FULL_VERSION).dylibKRUN_SONAME_Darwin = libkrun$(VARIANT).$(ABI_VERSION).dylibKRUN_BASE_Darwin = libkrun$(VARIANT).dylib
LIBRARY_RELEASE_Linux = target/release/$(KRUN_BINARY_Linux)LIBRARY_DEBUG_Linux = target/debug/$(KRUN_BINARY_Linux)LIBRARY_RELEASE_Darwin = target/release/$(KRUN_BINARY_Darwin)LIBRARY_DEBUG_Darwin = target/debug/$(KRUN_BINARY_Darwin)
LIBDIR_Linux = lib64LIBDIR_Darwin = lib
ifeq ($(PREFIX),) PREFIX := /usr/localendif
.PHONY: install clean test test-prefix $(LIBRARY_RELEASE_$(OS)) $(LIBRARY_DEBUG_$(OS)) libkrun.pc clean-sysroot clean-all
all: $(LIBRARY_RELEASE_$(OS)) libkrun.pc
debug: $(LIBRARY_DEBUG_$(OS)) libkrun.pc
ifeq ($(OS),Darwin) # Cross-linker for musl targets on macOS (brew install llvm for lld). export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER = $(CLANG) export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS = \ -C link-arg=-target -C link-arg=aarch64-linux-gnu \ -C link-arg=-fuse-ld=lld -C link-arg=-Wl,-strip-debugendif
AWS_NITRO_INIT_BINARY= init/aws-nitro/init$(AWS_NITRO_INIT_BINARY): $(AWS_NITRO_INIT_SRC) $(CC) -O2 -static -s -Wall $(AWS_NITRO_INIT_LD_FLAGS) -o $@ $(AWS_NITRO_INIT_SRC) $(AWS_NITRO_INIT_LD_FLAGS)
ifeq ($(OS),Darwin)# macOS -> FreeBSD cross-compilationifeq ($(SYSROOT_BSD),) SYSROOT_BSD = $(FREEBSD_ROOTFS_DIR) SYSROOT_BSD_TARGET = $(FREEBSD_ROOTFS_DIR)/.sysroot_readyelse SYSROOT_BSD_TARGET =endif # Cross-compile on macOS with the LLVM linker (brew install lld) CC_BSD=$(CLANG) -target $(ARCH)-unknown-freebsd -fuse-ld=lld -stdlib=libc++ -Wl,-strip-debug --sysroot $(SYSROOT_BSD) CARGO_BSD_RUSTFLAGS = -C linker=$(CLANG) -C link-arg=-target -C link-arg=$(ARCH)-unknown-freebsd -C link-arg=-fuse-ld=lld -C link-arg=-stdlib=libc++ -C link-arg=--sysroot=$(abspath $(SYSROOT_BSD)) -C target-feature=+crt-staticelse ifeq ($(OS),Linux)# Linux -> FreeBSD cross-compilationifeq ($(SYSROOT_BSD),) SYSROOT_BSD = $(FREEBSD_ROOTFS_DIR) SYSROOT_BSD_TARGET = $(FREEBSD_ROOTFS_DIR)/.sysroot_readyelse SYSROOT_BSD_TARGET =endif # Cross-compile on Linux with clang CC_BSD=$(CLANG) -target $(ARCH)-unknown-freebsd -fuse-ld=lld -Wl,-strip-debug --sysroot $(SYSROOT_BSD) CARGO_BSD_RUSTFLAGS = -C linker=$(CLANG) -C link-arg=-target -C link-arg=$(ARCH)-unknown-freebsd -C link-arg=-fuse-ld=lld -C link-arg=--sysroot=$(abspath $(SYSROOT_BSD)) -C target-feature=+crt-staticelse # Build on FreeBSD host CC_BSD=$(CC) SYSROOT_BSD_TARGET = CARGO_BSD_RUSTFLAGS = -C target-feature=+crt-staticendif
FREEBSD_RUST_TARGET = $(subst arm64,aarch64,$(ARCH))-unknown-freebsd
# aarch64-unknown-freebsd is Tier 3: no prebuilt std, requires nightly + build-std.ifeq ($(FREEBSD_RUST_TARGET),aarch64-unknown-freebsd) CARGO_BSD_TOOLCHAIN = +nightly CARGO_BSD_EXTRA_FLAGS = -Z build-stdelse CARGO_BSD_TOOLCHAIN = CARGO_BSD_EXTRA_FLAGS =endif
ifeq ($(BUILD_BSD_INIT),1)INIT_BINARY_BSD = init/init-freebsd$(INIT_BINARY_BSD): $(shell find init/src -name '*.rs') init/Cargo.toml $(SYSROOT_BSD_TARGET) RUSTFLAGS="$(CARGO_BSD_RUSTFLAGS)" \ cargo $(CARGO_BSD_TOOLCHAIN) build --release \ $(CARGO_BSD_EXTRA_FLAGS) \ --manifest-path init/Cargo.toml \ --target $(FREEBSD_RUST_TARGET) cp target/$(FREEBSD_RUST_TARGET)/release/krun-init $@endif
# FreeBSD sysroot preparation rules for cross-compilation on macOSFREEBSD_BASE_TXZ = $(FREEBSD_ROOTFS_DIR)/base.txz
.INTERMEDIATE: $(FREEBSD_BASE_TXZ)
$(FREEBSD_ROOTFS_DIR)/.sysroot_ready: $(FREEBSD_BASE_TXZ) @echo "Extracting FreeBSD base to $(FREEBSD_ROOTFS_DIR)..." @cd $(FREEBSD_ROOTFS_DIR) && tar xJf base.txz 2>/dev/null || true @touch $@
BSD_ARCH=$(subst x86_64,amd64,$(subst aarch64,arm64,$(ARCH)))
$(FREEBSD_BASE_TXZ): @echo "Downloading FreeBSD $(FREEBSD_VERSION) base for $(BSD_ARCH)..." @mkdir -p $(FREEBSD_ROOTFS_DIR) @curl -fL -o $@ https://download.freebsd.org/releases/$(BSD_ARCH)/$(FREEBSD_VERSION)/base.txz
clean-sysroot: rm -rf $(FREEBSD_ROOTFS_DIR)
$(LIBRARY_RELEASE_$(OS)): $(INIT_BINARY_BSD) cargo build --release $(FEATURE_FLAGS)ifeq ($(SEV),1) mv target/release/libkrun.so target/release/$(KRUN_BASE_$(OS))endififeq ($(AWS_NITRO),1) mv target/release/libkrun.so target/release/$(KRUN_BASE_$(OS))endififeq ($(TDX),1) mv target/release/libkrun.so target/release/$(KRUN_BASE_$(OS))endififeq ($(OS),Darwin) mv target/release/libkrun.dylib target/release/$(KRUN_BASE_$(OS))endif cp target/release/$(KRUN_BASE_$(OS)) $(LIBRARY_RELEASE_$(OS))
$(LIBRARY_DEBUG_$(OS)): $(INIT_BINARY_BSD) cargo build $(FEATURE_FLAGS)ifeq ($(SEV),1) mv target/debug/libkrun.so target/debug/$(KRUN_BASE_$(OS))endififeq ($(TDX),1) mv target/debug/libkrun.so target/debug/$(KRUN_BASE_$(OS))endif cp target/debug/$(KRUN_BASE_$(OS)) $(LIBRARY_DEBUG_$(OS))
libkrun.pc: libkrun.pc.in Makefile rm -f $@ $@-t sed -e 's|@prefix@|$(PREFIX)|' \ -e 's|@libdir@|$(PREFIX)/$(LIBDIR_$(OS))|' \ -e 's|@includedir@|$(PREFIX)/include|' \ -e 's|@PACKAGE_NAME@|libkrun|' \ -e 's|@PACKAGE_VERSION@|$(FULL_VERSION)|' \ libkrun.pc.in > $@-t mv $@-t $@
install: libkrun.pc install -d $(DESTDIR)$(PREFIX)/$(LIBDIR_$(OS))/ install -d $(DESTDIR)$(PREFIX)/$(LIBDIR_$(OS))/pkgconfig install -d $(DESTDIR)$(PREFIX)/include install -m 644 $(LIBRARY_HEADER) $(DESTDIR)$(PREFIX)/include install -m 644 $(LIBRARY_HEADER_DISPLAY) $(DESTDIR)$(PREFIX)/include install -m 644 $(LIBRARY_HEADER_INPUT) $(DESTDIR)$(PREFIX)/include install -m 644 libkrun.pc $(DESTDIR)$(PREFIX)/$(LIBDIR_$(OS))/pkgconfig install -m 755 $(LIBRARY_RELEASE_$(OS)) $(DESTDIR)$(PREFIX)/$(LIBDIR_$(OS))/ cd $(DESTDIR)$(PREFIX)/$(LIBDIR_$(OS))/ ; ln -sf $(KRUN_BINARY_$(OS)) $(KRUN_SONAME_$(OS)) ; ln -sf $(KRUN_SONAME_$(OS)) $(KRUN_BASE_$(OS))
clean:ifeq ($(BUILD_BSD_INIT),1) rm -f $(INIT_BINARY_BSD)endif cargo clean rm -rf test-prefix cd tests; cargo clean
clean-all: clean clean-sysroot
test-prefix/$(LIBDIR_$(OS))/libkrun.pc: $(LIBRARY_RELEASE_$(OS)) mkdir -p test-prefix PREFIX="$$(realpath test-prefix)" make install
# Build and install libkrunfw from a source tree into test-prefix.# Usage: make test LIBKRUNFW_SRC=/path/to/libkrunfwifdef LIBKRUNFW_SRC.PHONY: test-prefix-libkrunfwtest-prefix-libkrunfw: $(MAKE) -C $(LIBKRUNFW_SRC) mkdir -p test-prefix PREFIX="$$(realpath test-prefix)" $(MAKE) -C $(LIBKRUNFW_SRC) install
test-prefix: test-prefix/$(LIBDIR_$(OS))/libkrun.pc test-prefix-libkrunfwelsetest-prefix: test-prefix/$(LIBDIR_$(OS))/libkrun.pc @if ls test-prefix/$(LIBDIR_$(OS))/libkrunfw* >/dev/null 2>&1; then \ echo "WARNING: test-prefix contains a custom libkrunfw from a previous LIBKRUNFW_SRC= run." >&2; \ echo " Tests will use it instead of the system libkrunfw." >&2; \ echo " To reset, run: rm -rf test-prefix" >&2; \ fiendif
TEST ?= *TEST_FLAGS ?=
# Extra library paths needed for tests (libkrunfw, llvm)EXTRA_LIBPATH_Linux =EXTRA_LIBPATH_Darwin = /opt/homebrew/opt/libkrunfw/lib:/opt/homebrew/opt/llvm/lib
# On macOS, SIP strips DYLD_LIBRARY_PATH when executing scripts via a shebang,# so we pass the path via LIBKRUN_LIB_PATH and let run.sh set the real variable.test: test-prefix cd tests; RUST_LOG=trace LIBKRUN_LIB_PATH="$$(realpath ../test-prefix/$(LIBDIR_$(OS))/):$(EXTRA_LIBPATH_$(OS))" PKG_CONFIG_PATH="$$(realpath ../test-prefix/$(LIBDIR_$(OS))/pkgconfig/)" ./run.sh test --test-case "$(TEST)" $(TEST_FLAGS)