Makefile 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. target := aarch64-unknown-none
  2. mode := release
  3. kernel := target/$(target)/$(mode)/aarch64
  4. kernel_qemu_bin := target/$(target)/$(mode)/aarch64_qemu.bin
  5. kernel_crosvm_bin := target/$(target)/$(mode)/aarch64_crosvm.bin
  6. img := target/$(target)/$(mode)/img
  7. sysroot := $(shell rustc --print sysroot)
  8. objdump := $(shell find $(sysroot) -name llvm-objdump) --arch-name=aarch64
  9. objcopy := $(shell find $(sysroot) -name llvm-objcopy)
  10. BUILD_ARGS += --target $(target)
  11. ifeq ($(mode), release)
  12. BUILD_ARGS += --release
  13. endif
  14. .PHONY: kernel clean qemu run env
  15. env:
  16. rustup component add llvm-tools-preview rustfmt
  17. rustup target add $(target)
  18. kernel_qemu:
  19. cargo build $(BUILD_ARGS) --config 'build.rustflags="--cfg platform=\"qemu\""'
  20. kernel_crosvm:
  21. cargo build $(BUILD_ARGS) --config 'build.rustflags="--cfg platform=\"crosvm\""'
  22. $(kernel_qemu_bin): kernel_qemu
  23. aarch64-linux-gnu-objcopy -O binary $(kernel) $(kernel_qemu_bin)
  24. $(kernel_crosvm_bin): kernel_crosvm
  25. aarch64-linux-gnu-objcopy -O binary $(kernel) $(kernel_crosvm_bin)
  26. asm: kernel
  27. $(objdump) -d $(kernel) | less
  28. sym: kernel
  29. $(objdump) -t $(kernel) | less
  30. header: kernel
  31. $(objdump) -x $(kernel) | less
  32. clean:
  33. cargo clean
  34. qemu: $(kernel_qemu_bin) $(img)
  35. qemu-system-aarch64 \
  36. $(QEMU_ARGS) \
  37. -machine virt \
  38. -cpu max \
  39. -serial chardev:char0 \
  40. -kernel $(kernel_qemu_bin) \
  41. -global virtio-mmio.force-legacy=false \
  42. -nic none \
  43. -drive file=$(img),if=none,format=raw,id=x0 \
  44. -device virtio-blk-device,drive=x0 \
  45. -device virtio-gpu-device \
  46. -device virtio-serial,id=virtio-serial0 \
  47. -chardev stdio,id=char0,mux=on \
  48. -device virtconsole,chardev=char0
  49. qemu-pci: $(kernel_qemu_bin) $(img)
  50. qemu-system-aarch64 \
  51. -machine virt \
  52. -cpu max \
  53. -serial chardev:char0 \
  54. -kernel $(kernel_qemu_bin) \
  55. -nic none \
  56. -drive file=$(img),if=none,format=raw,id=x0 \
  57. -device virtio-blk-pci,drive=x0 \
  58. -device virtio-gpu-pci \
  59. -device virtio-serial,id=virtio-serial0 \
  60. -chardev stdio,id=char0,mux=on \
  61. -device virtconsole,chardev=char0
  62. crosvm: $(kernel_crosvm_bin) $(img)
  63. adb shell 'mkdir -p /data/local/tmp/virt_raw'
  64. adb push $(kernel_crosvm_bin) /data/local/tmp/virt_raw/aarch64_example
  65. adb push $(img) /data/local/tmp/virt_raw/disk_img
  66. adb shell "/data/local/tmp/crosvm --log-level=trace --extended-status run --disable-sandbox --serial=stdout,hardware=serial,num=1 --rwdisk=/data/local/tmp/virt_raw/disk_img --bios=/data/local/tmp/virt_raw/aarch64_example"
  67. $(img):
  68. dd if=/dev/zero of=$@ bs=512 count=32
  69. run: qemu