configure 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #!/bin/sh
  2. DEFAULT_ARCH="x86_64"
  3. if [ "$OUT" = "" ]; then
  4. OUT="Makefile"
  5. fi
  6. printf "Configuring for %s...\n" "$OUT"
  7. event() {
  8. printf "$1... "
  9. }
  10. ARCH=${ARCH:-"$DEFAULT_ARCH"}
  11. # Define toolchain and QEMU/GDB settings for per architecture
  12. event "target architecture"
  13. echo "$ARCH"
  14. case "$ARCH" in
  15. x86_64)
  16. QEMU_EXECUTABLES="qemu-system-x86_64"
  17. GDB_EXECUTABLES="gdb x86_64-elf-gdb"
  18. : "${CROSS_COMPILE:=}"
  19. ;;
  20. riscv64)
  21. QEMU_EXECUTABLES="qemu-system-riscv64"
  22. GDB_EXECUTABLES="gdb riscv64-unknown-elf-gdb"
  23. : "${CROSS_COMPILE:=riscv64-unknown-elf-}"
  24. ;;
  25. aarch64)
  26. QEMU_EXECUTABLES="qemu-system-aarch64"
  27. GDB_EXECUTABLES="gdb aarch64-none-elf-gdb"
  28. : "${CROSS_COMPILE:=aarch64-none-elf-}"
  29. ;;
  30. *)
  31. echo "Unsupported ARCH: $ARCH"
  32. exit 1
  33. ;;
  34. esac
  35. if [ "$QEMU" = "" ]; then
  36. event "checking default qemu"
  37. QEMU="qemu-system-$ARCH"
  38. if $QEMU --version > /dev/null 2>&1; then
  39. QEMU="qemu-system-\$(ARCH)"
  40. break
  41. fi
  42. else
  43. event "checking given qemu"
  44. for item in $QEMU; do
  45. if $item --version > /dev/null 2>&1; then
  46. QEMU="$item"
  47. break
  48. fi
  49. done
  50. QEMU=""
  51. fi
  52. if [ "$QEMU" = "" ]; then
  53. echo "failed"
  54. exit 1
  55. fi
  56. echo "$QEMU"
  57. check_gdb_arch() {
  58. local item="$1"
  59. if $item --init-eval-command 'set arch' \
  60. --init-eval-command 'q' 2>&1 \
  61. | grep "$ARCH" >/dev/null 2>&1; then
  62. return 0
  63. else
  64. return 1
  65. fi
  66. }
  67. if [ "$GDB" = "" ]; then
  68. event "checking default gdb"
  69. if check_gdb_arch "$ARCH-elf-gdb"; then
  70. GDB="\$(ARCH)-elf-gdb"
  71. break
  72. fi
  73. else
  74. event 'checking given gdb'
  75. for item in $GDB; do
  76. if check_gdb_arch "$GDB"; then
  77. GDB="$item"
  78. break
  79. fi
  80. done
  81. GDB=""
  82. fi
  83. if [ "$GDB" = "" ]; then
  84. echo "failed"
  85. exit 1
  86. fi
  87. echo "$GDB"
  88. event "checking util-linux fdisk"
  89. if [ "$FDISK" = "" ]; then
  90. if ! which fdisk > /dev/null 2>&1; then
  91. echo "no"
  92. exit 1
  93. fi
  94. FDISK=`which fdisk`
  95. fi
  96. if ! $FDISK -v 2>&1 | grep util-linux > /dev/null 2>&1 ; then
  97. echo "no, fdisk is not from util-linux"
  98. exit 1
  99. else
  100. echo "$FDISK"
  101. fi
  102. event "checking mkfs tool"
  103. if ! which mkfs.fat > /dev/null 2>&1; then
  104. echo "no"
  105. exit 1
  106. else
  107. echo `which mkfs.fat`
  108. fi
  109. event "checking additional image"
  110. if [ "$IMG" = "" ]; then
  111. echo "no"
  112. else
  113. echo "$IMG"
  114. fi
  115. cp Makefile.src "$OUT"
  116. sed -i '' -e "s|##DEFAULT_ARCH##|$ARCH|" "$OUT" > /dev/null 2>&1
  117. sed -i '' -e "s|##GDB##|$GDB|" "$OUT" > /dev/null 2>&1
  118. sed -i '' -e "s|##QEMU##|$QEMU|" "$OUT" > /dev/null 2>&1
  119. sed -i '' -e "s|##FDISK##|$FDISK|" "$OUT" > /dev/null 2>&1
  120. sed -i '' -e "s|##IMAGE##|$IMG|" "$OUT" > /dev/null 2>&1
  121. exit 0