configure 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #!/bin/sh
  2. QEMU_EXECUTABLES="qemu-system-i386 qemu-system-x86_64"
  3. GDB_EXECUTABLES="gdb x86_64-elf-gdb"
  4. event() {
  5. printf "$1... "
  6. }
  7. # $1: OS NAME
  8. # $2: CROSS COMPILE FLAG
  9. generate_cross_compile_script() {
  10. cat > cross-compile.cmake <<EOF
  11. set(CMAKE_SYSTEM_NAME $1)
  12. set(TOOLCHAIN_PATH_AND_PREFIX "$2")
  13. set(CMAKE_C_COMPILER \${TOOLCHAIN_PATH_AND_PREFIX}gcc)
  14. set(CMAKE_CXX_COMPILER \${TOOLCHAIN_PATH_AND_PREFIX}c++)
  15. set(CMAKE_AR \${TOOLCHAIN_PATH_AND_PREFIX}ar)
  16. set(CMAKE_LINKER \${TOOLCHAIN_PATH_AND_PREFIX}ld)
  17. set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
  18. SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  19. # for libraries and headers in the target directories
  20. SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  21. SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  22. EOF
  23. }
  24. event "finding qemu"
  25. for item in $QEMU_EXECUTABLES; do
  26. if $item --version > /dev/null 2>&1; then
  27. QEMU="$item"
  28. break
  29. fi
  30. done
  31. if [ "$QEMU" = "" ]; then
  32. echo "failed"
  33. exit 1
  34. fi
  35. echo "$QEMU"
  36. event "finding gdb"
  37. for item in $GDB_EXECUTABLES; do
  38. if $item --version > /dev/null 2>&1; then
  39. GDB="$item"
  40. break
  41. fi
  42. done
  43. if [ "$GDB" = "" ]; then
  44. echo "failed"
  45. exit 1
  46. fi
  47. echo "$GDB"
  48. event "checking os type"
  49. OS=`uname`
  50. case "$OS" in
  51. "Linux")
  52. echo "Linux"
  53. ;;
  54. "Darwin")
  55. echo "macOS"
  56. ;;
  57. *)
  58. echo "unknown"
  59. exit 1
  60. ;;
  61. esac
  62. event "setting hardware acceleration type"
  63. case "$OS" in
  64. "Linux")
  65. echo "kvm"
  66. QEMU_ACCEL='-enable-kvm'
  67. ;;
  68. "Darwin")
  69. if [ "$QEMU" = "qemu-system-x86_64" ]; then
  70. echo "hvf"
  71. QEMU_ACCEL='-accel hvf'
  72. else
  73. echo "tcg"
  74. QEMU_ACCEL='-accel tcg'
  75. fi
  76. ;;
  77. esac
  78. event "checking cross compiling"
  79. if [ "$CROSS_COMPILE" != "" ]; then
  80. echo "yes"
  81. CROSS_COMPILE_FLAG='--toolchain cross-compile.cmake'
  82. generate_cross_compile_script "$OS" "$CROSS_COMPILE"
  83. else
  84. echo "no"
  85. CROSS_COMPILE_FLAG=
  86. fi
  87. event "checking mkfs tool"
  88. if ! which mkfs.fat > /dev/null 2>&1; then
  89. echo "no"
  90. exit 1
  91. else
  92. echo `which mkfs.fat`
  93. fi
  94. event "checking mtools"
  95. if ! which mcopy > /dev/null 2>&1; then
  96. echo "no"
  97. exit 1
  98. else
  99. echo `which mcopy`
  100. fi
  101. cp Makefile.src Makefile
  102. sed -i '' -e "s/##PLACEHOLDER_1##/$QEMU/" Makefile > /dev/null 2>&1
  103. sed -i '' -e "s/##PLACEHOLDER_2##/$GDB/" Makefile > /dev/null 2>&1
  104. sed -i '' -e "s/##PLACEHOLDER_3##/$QEMU_ACCEL/" Makefile > /dev/null 2>&1
  105. sed -i '' -e "s/##PLACEHOLDER_4##/$CROSS_COMPILE_FLAG/" Makefile > /dev/null 2>&1
  106. exit 0