#!/bin/bash SCRIPT_ABS_FILENAME=`LC_ALL=en_US.ISO8859-1 perl -e 'use Cwd "abs_path";print abs_path(shift)' "${BASH_SOURCE[0]}"` SCRIPT_DIR=`dirname "$SCRIPT_ABS_FILENAME"` #SCRIPT_DIR="$(pwd)" # copy in terminal to be able to copy and paste command from this file OSTYPE=`uname -s` echo $OSTYPE #env #echo "$@" project_dir="$1" echo project_dir="$project_dir" executable="$2" echo executable="$executable" executable_name=$(basename "$executable") echo executable_name="$executable_name" executable_name_without_extension="${executable_name%.*}" echo executable_name_without_extension="$executable_name_without_extension" executable_path="$(dirname "$executable")" echo executable_path="$executable_path" executable_dirname="${executable_path##*/}" echo executable_dirname="$executable_dirname" cd "$SCRIPT_DIR" if [ "$OSTYPE" = "Linux" ] then : # todo fi set -x if [ "$OSTYPE" = "Darwin" ] then if pgrep qemu then killall qemu-system-x86_64 fi > ./serial0_qemu_out.log # empty file without erasing it. Useful for editor for refreshing and reloading. if ! [ -f "$SCRIPT_DIR"/disk_image_gpt.img ] then unzip -o "$SCRIPT_DIR"/disk_image_gpt.img.zip rm -rf "$SCRIPT_DIR"/__MACOSX fi hdiutil attach ./disk_image_gpt.img || exit 1 shopt -s nocasematch if [[ "$executable_name" == "CloverX64"* ]] then if [[ "$executable_dirname" == "DWARF" ]] then echo ditto "$project_dir"/"$(dirname "$executable")"/../../../../"$executable_name_without_extension".efi /Volumes/QEMU_EFI/EFI/CLOVER/"$executable_name_without_extension".efi ditto "$project_dir"/"$(dirname "$executable")"/../../../../"$executable_name_without_extension".efi /Volumes/QEMU_EFI/EFI/CLOVER/"$executable_name_without_extension".efi || exit 1 else echo ditto "$project_dir"/"$executable_path"/"$executable_name_without_extension".efi /Volumes/QEMU_EFI/EFI/CLOVER/"$executable_name_without_extension".efi ditto "$project_dir"/"$executable_path"/"$executable_name_without_extension".efi /Volumes/QEMU_EFI/EFI/CLOVER/"$executable_name_without_extension".efi || exit 1 fi else : # if it's a module, has to be copied in Drivers fi shopt -u nocasematch diskutil eject /Volumes/QEMU_EFI || exit 1 ./qemu_portable/qemu-system-x86_64 \ -L qemu_portable \ -m 2048 \ -cpu core2duo \ -bios bios.bin-1.13.0 \ -machine q35 \ -device VGA,vgamem_mb=64,edid=on,xres=1024,yres=768 \ -device ahci,id=ahi \ -drive format=raw,id=hda,file=./disk_image_gpt.img \ -usb \ -device usb-mouse,bus=usb-bus.0,port=2 \ -device usb-kbd,bus=usb-bus.0,port=1 \ -serial file:./serial0_qemu_out.log \ -nic none \ -gdb tcp::9000 & [[ $? -eq 0 ]] || exit 1 # -cdrom "/JiefLand/3.Infos/3.Infos-Mac/MacOs/11.0.20A5343j Big Sur/BigSurInstall.iso" \ count=1 timeout=60 image_base_str="CloverX64 : Image base = " getImageBase() { [ -f ./serial0_qemu_out.log ] || return 1 grep "$image_base_str" ./serial0_qemu_out.log return $? } while [ $count -le $timeout ] && ! getImageBase do sleep 1 count=$((count+1)) done if [ $count -ge $timeout ] then echo Cannot find "\"Clover : Image base = \"" in ./serial0_qemu_out.log after $timeout seconds exit 1 fi adr="$(grep "$image_base_str" ./serial0_qemu_out.log | awk '{printf "0x%x",$NF}')" echo adr="$adr" echo ovh.knudsen.jf.launch.vmware.efi.adr="$adr" exit 0 fi # Windows ??? #if [ "$OSTYPE" = "FreeBSD" ] #then #fi