Makefile 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. vsock_server_bin := target/$(target)/$(mode)/vsock_server.bin
  8. sysroot := $(shell rustc --print sysroot)
  9. objdump := $(shell find $(sysroot) -name llvm-objdump) --arch-name=aarch64
  10. objcopy := $(shell find $(sysroot) -name llvm-objcopy)
  11. BUILD_ARGS += --target $(target)
  12. ifeq ($(mode), release)
  13. BUILD_ARGS += --release
  14. endif
  15. .PHONY: kernel clean qemu run env
  16. env:
  17. rustup component add llvm-tools-preview rustfmt
  18. rustup target add $(target)
  19. kernel_qemu:
  20. cargo clean
  21. cargo build $(BUILD_ARGS) --config 'build.rustflags="--cfg platform=\"qemu\""'
  22. kernel_crosvm:
  23. cargo clean
  24. cargo build $(BUILD_ARGS) --config 'build.rustflags="--cfg platform=\"crosvm\""'
  25. $(kernel_qemu_bin): kernel_qemu
  26. aarch64-linux-gnu-objcopy -O binary $(kernel) $(kernel_qemu_bin)
  27. $(kernel_crosvm_bin): kernel_crosvm
  28. aarch64-linux-gnu-objcopy -O binary $(kernel) $(kernel_crosvm_bin)
  29. $(vsock_server_bin):
  30. gcc vsock_server.cc -o $(vsock_server_bin)
  31. asm: kernel
  32. $(objdump) -d $(kernel) | less
  33. sym: kernel
  34. $(objdump) -t $(kernel) | less
  35. header: kernel
  36. $(objdump) -x $(kernel) | less
  37. clean:
  38. cargo clean
  39. qemu: $(kernel_qemu_bin) $(img) $(vsock_server_bin)
  40. $(vsock_server_bin) &
  41. qemu-system-aarch64 \
  42. $(QEMU_ARGS) \
  43. -machine virt \
  44. -cpu max \
  45. -serial chardev:char0 \
  46. -kernel $(kernel_qemu_bin) \
  47. -global virtio-mmio.force-legacy=false \
  48. -nic none \
  49. -drive file=$(img),if=none,format=raw,id=x0 \
  50. -device vhost-vsock-device,id=virtiosocket0,guest-cid=102 \
  51. -device virtio-blk-device,drive=x0 \
  52. -device virtio-gpu-device \
  53. -device virtio-serial,id=virtio-serial0 \
  54. -chardev stdio,id=char0,mux=on \
  55. -device virtconsole,chardev=char0
  56. qemu-pci: $(kernel_qemu_bin) $(img)
  57. qemu-system-aarch64 \
  58. $(QEMU_ARGS) \
  59. -machine virt \
  60. -cpu max \
  61. -serial chardev:char0 \
  62. -kernel $(kernel_qemu_bin) \
  63. -nic none \
  64. -drive file=$(img),if=none,format=raw,id=x0 \
  65. -device vhost-vsock-pci,id=virtiosocket0,guest-cid=103 \
  66. -device virtio-blk-pci,drive=x0 \
  67. -device virtio-gpu-pci \
  68. -device virtio-serial,id=virtio-serial0 \
  69. -chardev stdio,id=char0,mux=on \
  70. -device virtconsole,chardev=char0
  71. crosvm: $(kernel_crosvm_bin) $(img)
  72. adb shell 'mkdir -p /data/local/tmp/virt_raw'
  73. adb push $(kernel_crosvm_bin) /data/local/tmp/virt_raw/aarch64_example
  74. adb push $(img) /data/local/tmp/virt_raw/disk_img
  75. 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"
  76. $(img):
  77. dd if=/dev/zero of=$@ bs=512 count=32
  78. run: qemu