Makefile 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # Determine project root relative to this Makefile (arkos/Makefile)
  2. ROOT := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))/..)
  3. TOOLS := $(ROOT)/tools
  4. ARKOS := $(ROOT)/arkos
  5. CLANG := $(ARKOS)/prebuilts/clang/bin/clang
  6. .PHONY: build run clean run-uefi iso run-iso run-iso-uefi
  7. build:
  8. @$(MAKE) --no-print-directory -C $(TOOLS)
  9. @$(TOOLS)/build $(ARKOS)
  10. run:
  11. @echo "Starting ArkOS Testing Window in QEMU (BIOS)..."
  12. @qemu-system-x86_64 \
  13. -m 2048 \
  14. -smp 2 \
  15. -drive file=finished/boot.img,format=raw,index=0,media=disk \
  16. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  17. -drive file=finished/vend.img,format=raw,index=2,media=disk \
  18. -vga virtio \
  19. -enable-kvm 2>/dev/null || \
  20. qemu-system-x86_64 \
  21. -m 2048 \
  22. -smp 2 \
  23. -drive file=finished/boot.img,format=raw,index=0,media=disk \
  24. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  25. -drive file=finished/vend.img,format=raw,index=2,media=disk \
  26. -vga virtio
  27. run-uefi:
  28. @echo "Starting ArkOS Testing Window in QEMU (UEFI)..."
  29. @qemu-system-x86_64 \
  30. -bios /usr/share/edk2/x64/OVMF.4m.fd \
  31. -m 2048 \
  32. -smp 2 \
  33. -drive file=finished/boot.img,format=raw,index=0,media=disk \
  34. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  35. -drive file=finished/vend.img,format=raw,index=2,media=disk \
  36. -vga virtio \
  37. -enable-kvm 2>/dev/null || \
  38. qemu-system-x86_64 \
  39. -bios /usr/share/edk2/x64/OVMF.4m.fd \
  40. -m 2048 \
  41. -smp 2 \
  42. -drive file=finished/boot.img,format=raw,index=0,media=disk \
  43. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  44. -drive file=finished/vend.img,format=raw,index=2,media=disk \
  45. -vga virtio
  46. iso:
  47. @echo "Creating bootable hybrid ISO..."
  48. @mkdir -p out_staging/iso_root
  49. @cp finished/boot.img out_staging/iso_root/boot.img
  50. @cp out_staging/efi_part.img out_staging/iso_root/efi_part.img
  51. @xorriso -as mkisofs \
  52. -o finished/boot.iso \
  53. -b boot.img \
  54. -hard-disk-boot \
  55. -eltorito-alt-boot \
  56. -e efi_part.img \
  57. -no-emul-boot \
  58. -V "ArkOS" \
  59. out_staging/iso_root
  60. run-iso:
  61. @echo "Starting ArkOS Testing Window in QEMU (BIOS ISO)..."
  62. @dd if=/dev/zero of=finished/dummy.img bs=1M count=1 2>/dev/null
  63. @qemu-system-x86_64 \
  64. -m 2048 \
  65. -smp 2 \
  66. -cdrom finished/boot.iso \
  67. -drive file=finished/dummy.img,format=raw,index=0,media=disk \
  68. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  69. -drive file=finished/vend.img,format=raw,index=3,media=disk \
  70. -vga virtio \
  71. -enable-kvm 2>/dev/null || \
  72. qemu-system-x86_64 \
  73. -m 2048 \
  74. -smp 2 \
  75. -cdrom finished/boot.iso \
  76. -drive file=finished/dummy.img,format=raw,index=0,media=disk \
  77. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  78. -drive file=finished/vend.img,format=raw,index=3,media=disk \
  79. -vga virtio
  80. run-iso-uefi:
  81. @echo "Starting ArkOS Testing Window in QEMU (UEFI ISO)..."
  82. @dd if=/dev/zero of=finished/dummy.img bs=1M count=1 2>/dev/null
  83. @qemu-system-x86_64 \
  84. -bios /usr/share/edk2/x64/OVMF.4m.fd \
  85. -m 2048 \
  86. -smp 2 \
  87. -cdrom finished/boot.iso \
  88. -drive file=finished/dummy.img,format=raw,index=0,media=disk \
  89. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  90. -drive file=finished/vend.img,format=raw,index=3,media=disk \
  91. -vga virtio \
  92. -enable-kvm 2>/dev/null || \
  93. qemu-system-x86_64 \
  94. -bios /usr/share/edk2/x64/OVMF.4m.fd \
  95. -m 2048 \
  96. -smp 2 \
  97. -cdrom finished/boot.iso \
  98. -drive file=finished/dummy.img,format=raw,index=0,media=disk \
  99. -drive file=finished/sys.img,format=raw,index=1,media=disk \
  100. -drive file=finished/vend.img,format=raw,index=3,media=disk \
  101. -vga virtio
  102. clean:
  103. rm -rf out_staging finished
  104. # Extract securebuild key
  105. ARK_KEY := $(shell if [ -f vendor/verify/securebuild.ark ]; then grep "^ARK-OS-" vendor/verify/securebuild.ark | tr -d '[:space:]'; else echo "NO_KEY"; fi)
  106. # Compilation targets for ArkOS binaries
  107. out_staging/fb_helper.o: system/fb_helper.c
  108. gcc -c system/fb_helper.c -o out_staging/fb_helper.o
  109. out_staging/swift_splash: system/swift_splash.swift out_staging/fb_helper.o
  110. swiftc -O -static-executable system/swift_splash.swift out_staging/fb_helper.o -o out_staging/swift_splash
  111. out_staging/arkrt: arkrt/main.swift arkrt/KernelBridge.swift arkrt/CommandRouter.swift arkrt/IPC.swift
  112. swiftc -O -static-executable arkrt/main.swift arkrt/KernelBridge.swift arkrt/CommandRouter.swift arkrt/IPC.swift -o out_staging/arkrt
  113. out_staging/init: system/init.c vendor/verify/sha256.c
  114. gcc -static vendor/verify/sha256.c system/init.c -Ivendor/verify -DARK_KEY="\"$(ARK_KEY)\"" -o out_staging/init
  115. out_staging/bootloader.bin: boot/source/bootloader.asm
  116. nasm -f bin boot/source/bootloader.asm -o out_staging/bootloader.bin
  117. out_staging/stage2.bin: boot/source/stage2.asm
  118. nasm -f bin boot/source/stage2.asm -o out_staging/stage2.bin
  119. out_staging/BOOTX64.EFI: boot/source/bootloader.c
  120. gcc -I/usr/include/efi -I/usr/include/efi/x86_64 -I/usr/include/efi/protocol \
  121. -fno-stack-protector -fpic -fshort-wchar -mno-red-zone -DEFI_FUNCTION_WRAPPER \
  122. -c boot/source/bootloader.c -o out_staging/bootloader_uefi.o
  123. ld -nostdlib -znocombreloc -T /usr/lib/elf_x86_64_efi.lds -shared -Bsymbolic \
  124. /usr/lib/crt0-efi-x86_64.o out_staging/bootloader_uefi.o -o out_staging/bootloader_uefi.so \
  125. -lgnuefi -lefi -L/usr/lib
  126. objcopy -j .text -j .sdata -j .data -j .rodata -j .dynamic -j .dynsym -j .rel -j .rela -j .reloc -j .eh_frame \
  127. -O pei-x86-64 --subsystem 10 out_staging/bootloader_uefi.so out_staging/BOOTX64.EFI