mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-24 11:14:01 +00:00
硬盘支持(FAT32)
This commit is contained in:
72
cmake/ensure_disk_image.cmake
Normal file
72
cmake/ensure_disk_image.cmake
Normal file
@@ -0,0 +1,72 @@
|
||||
if(NOT DEFINED DISK_IMAGE OR "${DISK_IMAGE}" STREQUAL "")
|
||||
message(FATAL_ERROR "ensure_disk_image: DISK_IMAGE is required")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED DISK_MB OR "${DISK_MB}" STREQUAL "")
|
||||
set(DISK_MB 64)
|
||||
endif()
|
||||
|
||||
math(EXPR _disk_mb_int "${DISK_MB} + 0")
|
||||
if(_disk_mb_int LESS 4)
|
||||
set(_disk_mb_int 4)
|
||||
endif()
|
||||
|
||||
math(EXPR _disk_bytes "${_disk_mb_int} * 1024 * 1024")
|
||||
get_filename_component(_disk_dir "${DISK_IMAGE}" DIRECTORY)
|
||||
if(NOT EXISTS "${_disk_dir}")
|
||||
file(MAKE_DIRECTORY "${_disk_dir}")
|
||||
endif()
|
||||
|
||||
set(_need_create TRUE)
|
||||
if(EXISTS "${DISK_IMAGE}")
|
||||
file(SIZE "${DISK_IMAGE}" _disk_size_now)
|
||||
if(_disk_size_now GREATER_EQUAL _disk_bytes)
|
||||
set(_need_create FALSE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(_need_create)
|
||||
find_program(_python_exec NAMES python3 python py)
|
||||
if(_python_exec)
|
||||
execute_process(
|
||||
COMMAND "${_python_exec}" "-c" "import os,sys; p=sys.argv[1]; sz=int(sys.argv[2]); d=os.path.dirname(p); d and os.makedirs(d, exist_ok=True); f=open(p,'ab'); f.truncate(sz); f.close()"
|
||||
"${DISK_IMAGE}" "${_disk_bytes}"
|
||||
RESULT_VARIABLE _python_result
|
||||
OUTPUT_QUIET
|
||||
ERROR_QUIET
|
||||
)
|
||||
if(_python_result EQUAL 0)
|
||||
set(_need_create FALSE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(_need_create)
|
||||
find_program(_dd_exec NAMES dd)
|
||||
if(_dd_exec)
|
||||
execute_process(
|
||||
COMMAND "${_dd_exec}" "if=/dev/zero" "of=${DISK_IMAGE}" "bs=1M" "count=${_disk_mb_int}"
|
||||
RESULT_VARIABLE _dd_result
|
||||
OUTPUT_QUIET
|
||||
ERROR_QUIET
|
||||
)
|
||||
if(_dd_result EQUAL 0)
|
||||
set(_need_create FALSE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(_need_create)
|
||||
message(FATAL_ERROR "ensure_disk_image: failed to create disk image '${DISK_IMAGE}' (${_disk_mb_int}MB)")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${DISK_IMAGE}")
|
||||
message(FATAL_ERROR "ensure_disk_image: disk image missing after create '${DISK_IMAGE}'")
|
||||
endif()
|
||||
|
||||
file(SIZE "${DISK_IMAGE}" _disk_size_final)
|
||||
if(_disk_size_final LESS _disk_bytes)
|
||||
message(FATAL_ERROR "ensure_disk_image: disk image too small (${_disk_size_final} bytes), expected >= ${_disk_bytes}")
|
||||
endif()
|
||||
|
||||
message(STATUS "ensure_disk_image: ready '${DISK_IMAGE}' (${_disk_size_final} bytes)")
|
||||
Reference in New Issue
Block a user