Makefile 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 clean
  20. cargo build $(BUILD_ARGS) --config 'build.rustflags="--cfg platform=\"qemu\""'
  21. kernel_crosvm:
  22. cargo clean
  23. cargo build $(BUILD_ARGS) --config 'build.rustflags="--cfg platform=\"crosvm\""'
  24. $(kernel_qemu_bin): kernel_qemu
  25. aarch64-linux-gnu-objcopy -O binary $(kernel) $(kernel_qemu_bin)
  26. $(kernel_crosvm_bin): kernel_crosvm
  27. aarch64-linux-gnu-objcopy -O binary $(kernel) $(kernel_crosvm_bin)
  28. asm: kernel
  29. $(objdump) -d $(kernel) | less
  30. sym: kernel
  31. $(objdump) -t $(kernel) | less
  32. header: kernel
  33. $(objdump) -x $(kernel) | less
  34. clean:
  35. cargo clean
  36. qemu: $(kernel_qemu_bin) $(img)
  37. qemu-system-aarch64 \
  38. $(QEMU_ARGS) \
  39. -machine virt \
  40. -cpu max \
  41. -serial chardev:char0 \
  42. -kernel $(kernel_qemu_bin) \
  43. -global virtio-mmio.force-legacy=false \
  44. -nic none \
  45. -drive file=$(img),if=none,format=raw,id=x0 \
  46. -device virtio-blk-device,drive=x0 \
  47. -device virtio-gpu-device \
  48. -device virtio-serial,id=virtio-serial0 \
  49. -chardev stdio,id=char0,mux=on \
  50. -device virtconsole,chardev=char0
  51. qemu-pci: $(kernel_qemu_bin) $(img)
  52. qemu-system-aarch64 \
  53. -machine virt \
  54. -cpu max \
  55. -serial chardev:char0 \
  56. -kernel $(kernel_qemu_bin) \
  57. -nic none \
  58. -drive file=$(img),if=none,format=raw,id=x0 \
  59. -device virtio-blk-pci,drive=x0 \
  60. -device virtio-gpu-pci \
  61. -device virtio-serial,id=virtio-serial0 \
  62. -chardev stdio,id=char0,mux=on \
  63. -device virtconsole,chardev=char0
  64. crosvm: $(kernel_crosvm_bin) $(img)
  65. adb shell 'mkdir -p /data/local/tmp/virt_raw'
  66. adb push $(kernel_crosvm_bin) /data/local/tmp/virt_raw/aarch64_example
  67. adb push $(img) /data/local/tmp/virt_raw/disk_img
  68. 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"
  69. $(img):
  70. dd if=/dev/zero of=$@ bs=512 count=32
  71. run: qemu