Browse Source

chore(configure): check and set FDISK_BIN

greatbridf 2 years ago
parent
commit
2eafad4b65
3 changed files with 25 additions and 2 deletions
  1. 5 1
      CMakeLists.txt
  2. 19 1
      configure
  3. 1 0
      cross-compile.cmake

+ 5 - 1
CMakeLists.txt

@@ -44,6 +44,10 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O")
 endif()
 
+if (FDISK_BIN STREQUAL "")
+    set(FDISK_BIN fdisk)
+endif()
+
 set(KERNEL_MAIN_SOURCES src/fs/fat.cpp
                         src/kernel_main.c
                         src/kernel/errno.c
@@ -134,7 +138,7 @@ add_custom_target(boot.img
     COMMAND dd if=mbr.bin of=boot.img
     COMMAND cat mbr_hole.bin >> boot.img
     COMMAND dd if=/dev/zero of=boot.img bs=`expr 512 \\* 1024 \\* 1024` count=0 seek=1
-    COMMAND sh -c \"echo n\; echo\; echo\; echo\; echo\; echo a\; echo w\" | fdisk boot.img
+    COMMAND sh -c \"echo n\; echo\; echo\; echo\; echo\; echo a\; echo w\" | ${FDISK_BIN} boot.img
     COMMAND mkfs.fat --offset=2048 -v -n SYSTEM boot.img
     COMMAND mcopy -i boot.img@@1M ${CMAKE_SOURCE_DIR}/user-space-program/build/hello-world.out ::hello.out
     COMMAND mcopy -i boot.img@@1M ${CMAKE_SOURCE_DIR}/user-space-program/build/interrupt-test.out ::int.out

+ 19 - 1
configure

@@ -8,6 +8,7 @@ event() {
 
 # $1: OS NAME
 # $2: CROSS COMPILE FLAG
+# $3: FDISK_BIN
 generate_cross_compile_script() {
 cat > cross-compile.cmake <<EOF
 set(CMAKE_SYSTEM_NAME $1)
@@ -24,6 +25,7 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
 # for libraries and headers in the target directories
 SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
 SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+SET(FDISK_BIN $3)
 EOF
 }
 
@@ -85,11 +87,27 @@ case "$OS" in
         ;;
 esac
 
+event "checking util-linux fdisk"
+if [ "$CROSS_COMPILE" = "" -o "$FDISK_BIN" = "" ]; then
+    if ! which fdisk > /dev/null 2>&1; then
+        echo "no"
+        exit 1
+    fi
+    FDISK_BIN=`which fdisk`
+fi
+
+if ! $FDISK_BIN -v 2>&1 | grep util-linux > /dev/null 2>&1 ; then
+    echo "no"
+    exit 1
+else
+    echo "$FDISK_BIN"
+fi
+
 event "checking cross compiling"
 if [ "$CROSS_COMPILE" != "" ]; then
     echo "yes"
     CROSS_COMPILE_FLAG='--toolchain cross-compile.cmake'
-    generate_cross_compile_script "$OS" "$CROSS_COMPILE"
+    generate_cross_compile_script "$OS" "$CROSS_COMPILE" "$FDISK_BIN"
 else
     echo "no"
     CROSS_COMPILE_FLAG=

+ 1 - 0
cross-compile.cmake

@@ -12,3 +12,4 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
 # for libraries and headers in the target directories
 SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
 SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+SET(FDISK_BIN /usr/local/Cellar/util-linux/2.38_1/sbin/fdisk)