-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
examples/virtio: use Makefile snippets
Signed-off-by: Alex Brown <[email protected]>
- Loading branch information
1 parent
a3f1ffc
commit 37c4c57
Showing
19 changed files
with
311 additions
and
324 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Submodule sddf
updated
14 files
+39 −0 | blk/components/blk_components.mk | |
+30 −17 | blk/components/virt.c | |
+8 −3 | drivers/network/virtio/ethernet.c | |
+1 −1 | examples/echo_server/lwip.c | |
+1 −1 | examples/serial/include/serial_config/serial_config.h | |
+2 −2 | examples/serial/serial_server.c | |
+60 −0 | examples/timer/README.md | |
+47 −11 | include/sddf/serial/queue.h | |
+2 −2 | network/components/copy.c | |
+1 −1 | network/components/virt_rx.c | |
+31 −21 | serial/components/virt_tx.c | |
+39 −0 | sound/components/sound_components.mk | |
+43 −18 | util/cache.c | |
+5 −1 | util/putchar_serial.c |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,335 +1,64 @@ | ||
# | ||
# Copyright 2021, Breakaway Consulting Pty. Ltd. | ||
# Copyright 2022, UNSW (ABN 57 195 873 179) | ||
# Copyright 2024, UNSW | ||
# | ||
# SPDX-License-Identifier: BSD-2-Clause | ||
# | ||
|
||
# Default build directory, pass BUILD_DIR=<dir> to override | ||
BUILD_DIR ?= build | ||
# Default config is a debug build, pass CONFIG=<debug/release/benchmark> to override | ||
CONFIG ?= debug | ||
export MICROKIT_CONFIG ?= debug | ||
|
||
ifeq ($(strip $(MICROKIT_SDK)),) | ||
$(error MICROKIT_SDK must be specified) | ||
$(error MICROKIT_SDK must be specified) | ||
endif | ||
|
||
ifndef BOARD | ||
$(error BOARD must be specified) | ||
endif | ||
|
||
ifeq ($(filter $(BOARD), odroidc4 qemu_arm_virt),) | ||
$(error "Board $(BOARD) is not supported") | ||
endif | ||
|
||
# @ivanv: check that all dependencies exist | ||
# Specify that we use bash for all shell commands | ||
SHELL=/bin/bash | ||
# All dependencies needed to compile the VMM | ||
QEMU := qemu-system-aarch64 | ||
DTC := dtc | ||
|
||
CC := clang | ||
CC_USERLEVEL := zig cc | ||
LD := ld.lld | ||
AR := llvm-ar | ||
RANLIB := llvm-ranlib | ||
|
||
MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit | ||
|
||
# @ivanv: need to have a step for putting in the initrd node into the DTB, | ||
# right now it is unfortunately hard-coded. | ||
|
||
# @ivanv: check that the path of SDK_PATH/BOARD exists | ||
# @ivanv: Have a list of supported boards to check with, if it's not one of those | ||
# have a helpful message that lists all the support boards. | ||
|
||
# @ivanv: incremental builds don't work with IMAGE_DIR changing | ||
BOARD_DIR := $(MICROKIT_SDK)/board/$(BOARD)/$(CONFIG) | ||
LIBVMM := $(abspath ../..) | ||
LIBVMM_TOOLS := $(LIBVMM)/tools | ||
LIBVMM_SRC_DIR := $(LIBVMM)/src | ||
SYSTEM_DESCRIPTION := board/$(BOARD)/virtio.system | ||
|
||
CURRENT_DIR := $(shell pwd) | ||
|
||
LINUX_DIR := $(LIBVMM_TOOLS)/linux | ||
LINUX_BLK_DIR := $(LINUX_DIR)/blk | ||
LINUX_BLK_BOARD_DIR := $(LINUX_BLK_DIR)/board/$(BOARD) | ||
|
||
UIO_DIR := $(LINUX_DIR)/uio | ||
UIO_DRIVER_BLK_DIR := $(LINUX_DIR)/uio_drivers/blk | ||
|
||
SDDF_DIR := $(abspath ../../dep/sddf) | ||
|
||
VMM_INCLUDE := include | ||
|
||
BLK_DRIVER_VM_DIR := board/$(BOARD)/blk_driver_vm | ||
BLK_DRIVER_VM_DTS_DIR := $(BLK_DRIVER_VM_DIR)/dts | ||
BLK_DRIVER_VM_ROOTFS_TMP_DIR := $(BUILD_DIR)/blk_driver_vm_rootfs | ||
|
||
CLIENT_VM_DIR := board/$(BOARD)/client_vm | ||
CLIENT_VM_DTS_DIR := $(CLIENT_VM_DIR)/dts | ||
CLIENT_VM_ROOTFS_TMP_DIR := $(BUILD_DIR)/client_vm_rootfs | ||
|
||
|
||
BLK_DRIVER_VM_LINUX := $(BLK_DRIVER_VM_DIR)/linux | ||
BLK_DRIVER_VM_INITRD := $(BLK_DRIVER_VM_DIR)/rootfs.cpio.gz | ||
BLK_DRIVER_VM_INITRD_MODIFIED := $(BUILD_DIR)/blk_driver_vm_rootfs.cpio.gz | ||
BLK_DRIVER_VM_BASE_DTS := $(BLK_DRIVER_VM_DTS_DIR)/linux.dts | ||
BLK_DRIVER_VM_DTS_OVERLAYS_qemu_arm_virt := $(BLK_DRIVER_VM_DTS_DIR)/init.dts \ | ||
$(BLK_DRIVER_VM_DTS_DIR)/io.dts \ | ||
$(BLK_DRIVER_VM_DTS_DIR)/disable.dts | ||
BLK_DRIVER_VM_DTS_OVERLAYS_odroidc4 := $(BLK_DRIVER_VM_DTS_DIR)/init.dts \ | ||
$(BLK_DRIVER_VM_DTS_DIR)/io.dts \ | ||
$(BLK_DRIVER_VM_DTS_DIR)/disable.dts | ||
BLK_DRIVER_VM_DTS_OVERLAYS := ${BLK_DRIVER_VM_DTS_OVERLAYS_${BOARD}} | ||
BLK_DRIVER_VM_DTB := $(BUILD_DIR)/blk_driver_vm.dtb | ||
|
||
|
||
CLIENT_VM_LINUX := $(CLIENT_VM_DIR)/linux | ||
CLIENT_VM_INITRD := $(CLIENT_VM_DIR)/rootfs.cpio.gz | ||
CLIENT_VM_INITRD_MODIFIED := $(BUILD_DIR)/client_vm_rootfs.cpio.gz | ||
CLIENT_VM_BASE_DTS := $(CLIENT_VM_DTS_DIR)/linux.dts | ||
CLIENT_VM_DTS_OVERLAYS_qemu_arm_virt := $(CLIENT_VM_DTS_DIR)/init.dts \ | ||
$(CLIENT_VM_DTS_DIR)/virtio.dts | ||
CLIENT_VM_DTS_OVERLAYS_odroidc4 := $(CLIENT_VM_DTS_DIR)/init.dts \ | ||
$(CLIENT_VM_DTS_DIR)/virtio.dts\ | ||
$(CLIENT_VM_DTS_DIR)/disable.dts | ||
CLIENT_VM_DTS_OVERLAYS := ${CLIENT_VM_DTS_OVERLAYS_${BOARD}} | ||
CLIENT_VM_DTB := $(BUILD_DIR)/client_vm.dtb | ||
|
||
SDDF_BLK_COMPONENTS := $(SDDF_DIR)/blk/components | ||
SDDF_BLK_UTIL := $(SDDF_DIR)/blk/util | ||
|
||
ifeq ($(strip $(BOARD)), odroidc4) | ||
export UART_DRIVER_DIR := meson | ||
else ifeq ($(strip $(BOARD)), qemu_arm_virt) | ||
export UART_DRIVER_DIR := arm | ||
export override MICROKIT_SDK:=$(abspath $(MICROKIT_SDK)) | ||
|
||
ifeq ($(strip $(MICROKIT_BOARD)), odroidc4) | ||
export UART_DRIVER := meson | ||
export CPU := cortex-a55 | ||
else ifeq ($(strip $(MICROKIT_BOARD)), imx8mm_evk) | ||
export UART_DRIVER := imx | ||
export CPU := cortex-a53 | ||
else ifeq ($(strip $(MICROKIT_BOARD)), maaxboard) | ||
export UART_DRIVER := imx | ||
export CPU := cortex-a53 | ||
else ifeq ($(strip $(MICROKIT_BOARD)), qemu_arm_virt) | ||
export UART_DRIVER := arm | ||
export CPU := cortex-a53 | ||
QEMU := qemu-system-aarch64 | ||
|
||
export BLK_NUM_PART = 2 | ||
export BLK_SIZE = 512 | ||
export BLK_MEM ?= 2101248 | ||
else | ||
$(error Unsupported BOARD given) | ||
endif | ||
SDDF_SERIAL_DRIVER := $(SDDF_DIR)/drivers/serial/$(UART_DRIVER_DIR) | ||
|
||
ELFS := client_vmm.elf blk_driver_vmm.elf serial_virt_tx.elf serial_virt_rx.elf uart_driver.elf blk_virt.elf | ||
|
||
BLK_DRIVER_VM_USERLEVEL := uio_blk_driver | ||
BLK_DRIVER_VM_USERLEVEL_INIT := blk_driver_init | ||
|
||
CLIENT_VM_USERLEVEL := | ||
CLIENT_VM_USERLEVEL_INIT := blk_client_init | ||
|
||
IMAGE_FILE = $(BUILD_DIR)/loader.img | ||
REPORT_FILE = $(BUILD_DIR)/report.txt | ||
|
||
# @ivanv: should only compile printf.o in debug | ||
VMM_OBJS := printf.o \ | ||
virq.o \ | ||
linux.o \ | ||
guest.o \ | ||
psci.o \ | ||
smc.o \ | ||
fault.o \ | ||
util.o \ | ||
vgic.o \ | ||
vgic_v2.o \ | ||
tcb.o \ | ||
vcpu.o | ||
|
||
CLIENT_VMM_OBJS := $(VMM_OBJS) \ | ||
client_images.o \ | ||
client_vmm.o \ | ||
console.o \ | ||
block.o \ | ||
mmio.o \ | ||
libsddf_util_debug.a | ||
|
||
BLK_DRIVER_VMM_OBJS := $(VMM_OBJS) \ | ||
blk_driver_images.o \ | ||
blk_driver_vmm.o \ | ||
console.o \ | ||
mmio.o | ||
|
||
BLK_VIRT_OBJS := sddf_blk_virt.o libsddf_util_debug.a | ||
UIO_BLK_DRIVER_OBJS := blk.o libuio.o | ||
|
||
# Toolchain flags | ||
# FIXME: For optimisation we should consider providing the flag -mcpu. | ||
# FIXME: We should also consider whether -mgeneral-regs-only should be | ||
# used to avoid the use of the FPU and therefore seL4 does not have to | ||
# context switch the FPU. | ||
# Note we only need -Wno-unused-command-line-argument because in Nix | ||
# passes an extra `--gcc-toolchain` flag which we do not need. | ||
CFLAGS := -mstrict-align \ | ||
-g3 \ | ||
-O3 \ | ||
-ffreestanding \ | ||
-nostdlib \ | ||
-Wno-unused-command-line-argument \ | ||
-Wall -Wno-unused-function -Werror \ | ||
-I$(BOARD_DIR)/include \ | ||
-I$(SDDF_DIR)/include \ | ||
-I$(LIBVMM)/include \ | ||
-I$(VMM_INCLUDE) \ | ||
-DBOARD_$(BOARD) \ | ||
-DCONFIG_$(CONFIG) \ | ||
-target aarch64-none-elf | ||
|
||
CFLAGS_LINUX := -g3 \ | ||
-O3 \ | ||
-Wno-unused-command-line-argument \ | ||
-Wall -Wno-unused-function -Werror \ | ||
-D_GNU_SOURCE \ | ||
-I$(SDDF_DIR)/include \ | ||
-I$(LINUX_DIR)/include \ | ||
-I$(VMM_INCLUDE) \ | ||
-target aarch64-linux-gnu | ||
|
||
LDFLAGS := -L$(BOARD_DIR)/lib | ||
LIBS := -lmicrokit -Tmicrokit.ld $(BUILD_DIR)/libsddf_util_debug.a | ||
|
||
ifeq ($(BOARD), qemu_arm_virt) | ||
NUM_PART = 2 | ||
BLK_SIZE = 512 | ||
BLK_MEM ?= 2101248 | ||
$(error Unsupported MICROKIT_BOARD given) | ||
endif | ||
|
||
all: directories $(IMAGE_FILE) | ||
|
||
clean: | ||
rm -rf $(BUILD_DIR) | ||
|
||
qemu: all $(BUILD_DIR)/storage | ||
# @ivanv: check that the amount of RAM given to QEMU is at least the number of RAM that QEMU is setup with for seL4. | ||
if ! command -v $(QEMU) &> /dev/null; then echo "Could not find dependency: qemu-system-aarch64"; exit 1; fi | ||
$(QEMU) -machine virt,virtualization=on,secure=off \ | ||
-cpu cortex-a53 \ | ||
-serial mon:stdio \ | ||
-device loader,file=$(IMAGE_FILE),addr=0x70000000,cpu-num=0 \ | ||
-m size=2G \ | ||
-nographic \ | ||
-drive file=$(BUILD_DIR)/storage,format=raw,if=none,id=drive0 \ | ||
-device virtio-blk-device,drive=drive0,id=virtblk0,num-queues=1 | ||
|
||
directories: | ||
$(shell mkdir -p $(BUILD_DIR)) | ||
$(shell mkdir -p $(BUILD_DIR)/util) | ||
$(shell mkdir -p $(BUILD_DIR)/serial) | ||
|
||
SDDF_LIB_UTIL_DBG_OBJS := cache.o sddf_printf.o newlibc.o assert.o putchar_debug.o bitarray.o fsmalloc.o | ||
|
||
$(BUILD_DIR)/libsddf_util_debug.a: $(addprefix ${BUILD_DIR}/util/, ${SDDF_LIB_UTIL_DBG_OBJS}) | ||
${AR} rv $@ $^ | ||
${RANLIB} $@ | ||
|
||
$(BUILD_DIR)/util/sddf_printf.o: ${SDDF_DIR}/util/printf.c | ||
${CC} ${CFLAGS} -c -o $@ $< | ||
|
||
$(BUILD_DIR)/util/%.o: ${SDDF_DIR}/util/%.c | ||
${CC} ${CFLAGS} -c -o $@ $< | ||
|
||
$(BUILD_DIR)/uart_driver.elf: $(BUILD_DIR)/serial/uart_driver.o | ||
$(LD) $(LDFLAGS) $< $(LIBS) -o $@ | ||
|
||
$(BUILD_DIR)/serial/uart_driver.o: ${SDDF_SERIAL_DRIVER}/uart.c | ||
$(CC) -c $(CFLAGS) -I${SDDF_SERIAL_DRIVER}/include -o $@ $< | ||
|
||
$(BUILD_DIR)/serial_virt_%.elf: $(BUILD_DIR)/serial/virt_%.o | ||
$(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | ||
|
||
$(BUILD_DIR)/serial/virt_%.o: ${SDDF_DIR}/serial/components/virt_%.c | ||
${CC} ${CFLAGS} -o $@ -c $< | ||
|
||
$(BUILD_DIR)/storage: | ||
$(LIBVMM_TOOLS)/mkvirtdisk $@ $(NUM_PART) $(BLK_SIZE) $(BLK_MEM) | ||
|
||
# Unpack rootfs, put the userlevel in /root and userlevel_init in /etc/init.d/S99, repack rootfs | ||
$(BLK_DRIVER_VM_INITRD_MODIFIED): $(addprefix $(BUILD_DIR)/, $(BLK_DRIVER_VM_USERLEVEL)) \ | ||
$(addprefix $(BUILD_DIR)/, $(BLK_DRIVER_VM_USERLEVEL_INIT)) | ||
$(LIBVMM_TOOLS)/packrootfs $(BLK_DRIVER_VM_INITRD) $(BLK_DRIVER_VM_ROOTFS_TMP_DIR) -o $(BLK_DRIVER_VM_INITRD_MODIFIED) \ | ||
--startup $(addprefix $(BUILD_DIR)/, $(BLK_DRIVER_VM_USERLEVEL_INIT)) \ | ||
--home $(addprefix $(BUILD_DIR)/, $(BLK_DRIVER_VM_USERLEVEL)) | ||
|
||
$(CLIENT_VM_INITRD_MODIFIED): $(addprefix $(BUILD_DIR)/, $(CLIENT_VM_USERLEVEL)) \ | ||
$(addprefix $(BUILD_DIR)/, $(CLIENT_VM_USERLEVEL_INIT)) | ||
$(LIBVMM_TOOLS)/packrootfs $(CLIENT_VM_INITRD) $(CLIENT_VM_ROOTFS_TMP_DIR) -o $(CLIENT_VM_INITRD_MODIFIED) \ | ||
--startup $(addprefix $(BUILD_DIR)/, $(CLIENT_VM_USERLEVEL_INIT)) \ | ||
--home $(addprefix $(BUILD_DIR)/, $(CLIENT_VM_USERLEVEL)) | ||
|
||
$(BLK_DRIVER_VM_DTB): $(BLK_DRIVER_VM_BASE_DTS) $(BLK_DRIVER_VM_DTS_OVERLAYS) | ||
$(LIBVMM_TOOLS)/dtscat $^ > $(BUILD_DIR)/blk_driver_vm.dts | ||
$(DTC) -q -I dts -O dtb $(BUILD_DIR)/blk_driver_vm.dts > $@ | ||
|
||
$(CLIENT_VM_DTB): $(CLIENT_VM_BASE_DTS) $(CLIENT_VM_DTS_OVERLAYS) | ||
$(LIBVMM_TOOLS)/dtscat $^ > $(BUILD_DIR)/client_vm.dts | ||
$(DTC) -q -I dts -O dtb $(BUILD_DIR)/client_vm.dts > $@ | ||
|
||
$(BUILD_DIR)/blk_driver_images.o: $(LIBVMM_TOOLS)/package_guest_images.S $(BLK_DRIVER_VM_LINUX) $(BLK_DRIVER_VM_DTB) $(BLK_DRIVER_VM_INITRD_MODIFIED) | ||
$(CC) -c -g3 -x assembler-with-cpp \ | ||
-DGUEST_KERNEL_IMAGE_PATH=\"$(BLK_DRIVER_VM_LINUX)\" \ | ||
-DGUEST_DTB_IMAGE_PATH=\"$(BLK_DRIVER_VM_DTB)\" \ | ||
-DGUEST_INITRD_IMAGE_PATH=\"$(BLK_DRIVER_VM_INITRD_MODIFIED)\" \ | ||
-target aarch64-none-elf \ | ||
$< -o $@ | ||
|
||
$(BUILD_DIR)/client_images.o: $(LIBVMM_TOOLS)/package_guest_images.S $(CLIENT_VM_LINUX) $(CLIENT_VM_DTB) $(CLIENT_VM_INITRD_MODIFIED) | ||
$(CC) -c -g3 -x assembler-with-cpp \ | ||
-DGUEST_KERNEL_IMAGE_PATH=\"$(CLIENT_VM_LINUX)\" \ | ||
-DGUEST_DTB_IMAGE_PATH=\"$(CLIENT_VM_DTB)\" \ | ||
-DGUEST_INITRD_IMAGE_PATH=\"$(CLIENT_VM_INITRD_MODIFIED)\" \ | ||
-target aarch64-none-elf \ | ||
$< -o $@ | ||
|
||
$(BUILD_DIR)/%.o: %.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/%.o: $(LIBVMM_SRC_DIR)/%.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/%.o: $(LIBVMM_SRC_DIR)/util/%.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/%.o: $(LIBVMM_SRC_DIR)/arch/aarch64/%.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/%.o: $(LIBVMM_SRC_DIR)/arch/aarch64/vgic/%.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/%.o: $(LIBVMM_SRC_DIR)/virtio/%.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/sddf_blk_%.o: $(SDDF_BLK_COMPONENTS)/%.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/sddf_blk_%.o: $(SDDF_BLK_UTIL)/%.c Makefile | ||
$(CC) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/client_vmm.elf: $(addprefix $(BUILD_DIR)/, $(CLIENT_VMM_OBJS)) | ||
$(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | ||
|
||
$(BUILD_DIR)/blk_driver_vmm.elf: $(addprefix $(BUILD_DIR)/, $(BLK_DRIVER_VMM_OBJS)) | ||
$(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | ||
|
||
$(BUILD_DIR)/blk_virt.elf: $(addprefix $(BUILD_DIR)/, $(BLK_VIRT_OBJS)) | ||
$(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | ||
|
||
$(BUILD_DIR)/postmark: $(LINUX_BLK_DIR)/postmark.c | ||
$(CC_USERLEVEL) $(CFLAGS_LINUX) $< -o $@ | ||
export BUILD_DIR:=$(abspath $(BUILD_DIR)) | ||
export MICROKIT_SDK:=$(abspath $(MICROKIT_SDK)) | ||
export VIRTIO_EXAMPLE:=$(abspath .) | ||
|
||
$(BUILD_DIR)/blk_client_init: $(LINUX_BLK_DIR)/blk_client_init | ||
cp $< $@ | ||
export TARGET := aarch64-none-elf | ||
export CC := clang | ||
export CC_USERLEVEL := zig cc | ||
export LD := ld.lld | ||
export AS := llvm-as | ||
export AR := llvm-ar | ||
export DTC := dtc | ||
export RANLIB := llvm-ranlib | ||
export MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit | ||
export SDDF=$(abspath ../../dep/sddf) | ||
export LIBVMM=$(abspath ../../) | ||
|
||
$(BUILD_DIR)/blk_driver_init: $(LINUX_BLK_BOARD_DIR)/blk_driver_init | ||
cp $< $@ | ||
IMAGE_FILE := $(BUILD_DIR)/loader.img | ||
REPORT_FILE := $(BUILD_DIR)/report.txt | ||
|
||
$(BUILD_DIR)/%.o: $(UIO_DIR)/%.c Makefile | ||
$(CC_USERLEVEL) -c $(CFLAGS_LINUX) $< -o $@ | ||
all: $(IMAGE_FILE) | ||
|
||
$(BUILD_DIR)/%.o: $(UIO_DRIVER_BLK_DIR)/%.c Makefile | ||
$(CC_USERLEVEL) -c $(CFLAGS_LINUX) $< -o $@ | ||
qemu $(IMAGE_FILE) $(REPORT_FILE) clean clobber: $(BUILD_DIR)/Makefile FORCE | ||
$(MAKE) -C $(BUILD_DIR) MICROKIT_SDK=$(MICROKIT_SDK) $(notdir $@) | ||
|
||
$(BUILD_DIR)/uio_blk_driver: $(addprefix $(BUILD_DIR)/, $(UIO_BLK_DRIVER_OBJS)) | ||
$(CC_USERLEVEL) $(CFLAGS_LINUX) $^ -o $@ | ||
$(BUILD_DIR)/Makefile: virtio.mk | ||
mkdir -p $(BUILD_DIR) | ||
cp virtio.mk $@ | ||
|
||
$(IMAGE_FILE) $(REPORT_FILE): $(addprefix $(BUILD_DIR)/, $(ELFS)) $(SYSTEM_DESCRIPTION) | ||
$(MICROKIT_TOOL) $(SYSTEM_DESCRIPTION) --search-path $(BUILD_DIR) --board $(BOARD) --config $(CONFIG) -o $(IMAGE_FILE) -r $(REPORT_FILE) | ||
FORCE: |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Oops, something went wrong.