diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index 84c47615b4..8fda57f08b 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -588,10 +588,7 @@ AddTargetVariableToScript $(script) : makebootable ; AddTargetVariableToScript $(script) : rc ; AddTargetVariableToScript $(script) : resattr ; AddTargetVariableToScript $(script) : unzip ; -#AddTargetVariableToScript $(script) : $(HAIKU_IMAGE) : imagePath ; - # causes a cyclic dependency -AddVariableToScript $(script) : imagePath - : [ FDirName $(HAIKU_IMAGE_DIR) $(HAIKU_IMAGE_NAME) ] ; +AddTargetVariableToScript $(script) : vmdkheader ; AddVariableToScript $(script) : sourceDirsToCopy : $(HAIKU_INSTALL_SOURCE_DIRS) ; @@ -607,12 +604,10 @@ CreateHaikuImageCopyFilesScript $(HAIKU_IMAGE_COPY_FILES_SCRIPT) ; CreateHaikuImageUnzipFilesScript $(HAIKU_IMAGE_UNZIP_FILES_SCRIPT) ; # Convenience wrapper rule around BuildHaikuImage. -rule _BuildHaikuImage +rule _BuildHaikuImage image : isImage : isVMwareImage { - # _BuildHaikuImage : ; + # _BuildHaikuImage : : ; # - local image = $(1) ; - local isImage = $(2) ; # build the image # HAIKU_IMAGE_EARLY_USER_SCRIPTS, HAIKU_IMAGE_LATE_USER_SCRIPTS can be @@ -625,6 +620,7 @@ rule _BuildHaikuImage $(HAIKU_IMAGE_UNZIP_FILES_SCRIPT) $(HAIKU_IMAGE_LATE_USER_SCRIPTS) : $(isImage) + : $(isVMwareImage) ; # remove the scripts we have generated @@ -641,18 +637,17 @@ _BuildHaikuImage $(HAIKU_IMAGE) : true ; NotFile haiku-image ; Depends haiku-image : $(HAIKU_IMAGE) ; + # install Haiku into a directory NotFile install-haiku ; _BuildHaikuImage install-haiku : 0 ; -#pragma mark - Build The VMWare Image - +# build the VMware image HAIKU_VMWARE_IMAGE_NAME ?= haiku.vmdk ; HAIKU_VMWARE_IMAGE ?= $(HAIKU_VMWARE_IMAGE_NAME) ; MakeLocate $(HAIKU_VMWARE_IMAGE) : $(HAIKU_IMAGE_DIR) ; -BuildVMWareImage $(HAIKU_VMWARE_IMAGE) : $(HAIKU_IMAGE) - : $(HAIKU_IMAGE_SIZE) ; +_BuildHaikuImage $(HAIKU_VMWARE_IMAGE) : true : true ; NotFile haiku-vmware-image ; Depends haiku-vmware-image : $(HAIKU_VMWARE_IMAGE) ; diff --git a/build/jam/ImageRules b/build/jam/ImageRules index cc231b7fbc..1c79ebb153 100644 --- a/build/jam/ImageRules +++ b/build/jam/ImageRules @@ -624,9 +624,9 @@ rule CreateHaikuImageUnzipFilesScript script CreateContainerUnzipFilesScript $(HAIKU_IMAGE_CONTAINER_NAME) : $(script) ; } -rule BuildHaikuImage haikuImage : scripts : isImage +rule BuildHaikuImage haikuImage : scripts : isImage : isVMwareImage { - # BuildHaikuImage : : ; + # BuildHaikuImage : : : ; if $(isImage) = 1 || $(isImage) = true { IS_IMAGE on $(haikuImage) = 1 ; @@ -634,6 +634,12 @@ rule BuildHaikuImage haikuImage : scripts : isImage IS_IMAGE on $(haikuImage) = "" ; } + if $(isVMwareImage) = 1 || $(isVMwareImage) = true { + IS_VMWARE_IMAGE on $(haikuImage) = 1 ; + } else { + IS_VMWARE_IMAGE on $(haikuImage) = "" ; + } + local mainScript = build_haiku_image ; SEARCH on $(mainScript) = [ FDirName $(HAIKU_TOP) build scripts ] ; @@ -643,7 +649,9 @@ rule BuildHaikuImage haikuImage : scripts : isImage actions BuildHaikuImage1 { + export imagePath="$(1)" export isImage="$(IS_IMAGE)" + export isVMwareImage="$(IS_VMWARE_IMAGE)" $(2[1]) $(2[2-]) } diff --git a/build/scripts/build_haiku_image b/build/scripts/build_haiku_image index 6a03fd623a..bf286954da 100755 --- a/build/scripts/build_haiku_image +++ b/build/scripts/build_haiku_image @@ -12,6 +12,7 @@ # sourceDirsToCopy # updateOnly # dontClearImage +# isVMwareImage # # bfsShell # copyattr @@ -20,6 +21,7 @@ # resattr # rc # unzip +# vmdkheader # if [ $# -gt 0 ]; then . $1 @@ -93,15 +95,30 @@ unzipFile() # create the image and mount it if [ $isImage ]; then echo + + imageOffsetFlags= + if [ $isVMwareImage ]; then + imageOffsetFlags="--start-offset 65536" + fi + if [ ! $updateOnly ]; then echo "Creating image ..." - if [ ! -e $imagePath -o ! "$dontClearImage" ]; then - dd if=/dev/zero of=$imagePath bs=1048576 count=$imageSize + + ddFlags= + if [ $isVMwareImage ]; then + rm -f $imagePath + $vmdkheader -h 64k -i${imageSize}M $imagePath || exit 1 + ddFlags="conv=notrunc oflag=append" + dontClearImage= fi - $bfsShell --initialize $imagePath Haiku - $makebootable $imagePath + + if [ ! -e $imagePath -o ! "$dontClearImage" ]; then + dd if=/dev/zero of=$imagePath bs=1048576 count=$imageSize $ddFlags + fi + $bfsShell --initialize $imageOffsetFlags $imagePath Haiku + $makebootable $imageOffsetFlags $imagePath fi - $bfsShell -n $imagePath > /dev/null & + $bfsShell -n $imageOffsetFlags $imagePath > /dev/null & sleep 1 fi