Skip to content

Commit

Permalink
Merge pull request #6741 from naveenrajm7/qemu-args
Browse files Browse the repository at this point in the history
scripting: add qemu additional arguments
  • Loading branch information
osy authored Nov 21, 2024
2 parents 6093498 + f101cce commit 8a35d03
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
10 changes: 10 additions & 0 deletions Scripting/UTM.sdef
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,11 @@
description="List of serial configuration.">
<type type="qemu serial configuration" list="yes"/>
</property>

<property name="qemu additional arguments" code="QeAd"
description="List of qemu arguments.">
<type type="qemu argument" list="yes"/>
</property>
</record-type>

<enumeration name="qemu directory share mode" code="QeSm" description="Method for sharing directory in QEMU.">
Expand Down Expand Up @@ -553,6 +558,11 @@
description="The port number to listen on when the interface is a TCP server."/>
</record-type>

<record-type name="qemu argument" code="QeAr" description="QEMU argument configuration.">
<property name="argument string" code="ArSt" type="text"
description="The QEMU argument as a string."/>
</record-type>

<record-type name="apple configuration" code="ApCf" description="Apple virtual machine configuration.">
<property name="name" code="pnam" type="text"
description="Virtual machine name."/>
Expand Down
25 changes: 25 additions & 0 deletions Scripting/UTMScriptingConfigImpl.swift
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ extension UTMScriptingConfigImpl {
"drives": config.drives.map({ serializeQemuDriveExisting($0) }),
"networkInterfaces": config.networks.enumerated().map({ serializeQemuNetwork($1, index: $0) }),
"serialPorts": config.serials.enumerated().map({ serializeQemuSerial($1, index: $0) }),
"qemuAdditionalArguments": config.qemu.additionalArguments.map({ serializeQemuAdditionalArgument($0)}),
]
}

Expand Down Expand Up @@ -188,6 +189,14 @@ extension UTMScriptingConfigImpl {
]
}

private func serializeQemuAdditionalArgument(_ argument: QEMUArgument) -> [AnyHashable: Any] {
var serializedArgument: [AnyHashable: Any] = [
"argumentString": argument.string
]

return serializedArgument
}

private func serializeAppleConfiguration(_ config: UTMAppleConfiguration) -> [AnyHashable : Any] {
[
"name": config.information.name,
Expand Down Expand Up @@ -338,6 +347,9 @@ extension UTMScriptingConfigImpl {
if let serialPorts = record["serialPorts"] as? [[AnyHashable : Any]] {
try updateQemuSerials(from: serialPorts)
}
if let qemuAdditionalArguments = record["qemuAdditionalArguments"] as? [[AnyHashable: Any]] {
try updateQemuAdditionalArguments(from: qemuAdditionalArguments)
}
}

private func parseQemuDriveInterface(_ value: AEKeyword?) -> QEMUDriveInterface? {
Expand Down Expand Up @@ -500,6 +512,19 @@ extension UTMScriptingConfigImpl {
}
}

private func updateQemuAdditionalArguments(from records: [[AnyHashable: Any]]) throws {
let config = config as! UTMQemuConfiguration
let additionalArguments = records.compactMap { record -> QEMUArgument? in
guard let argumentString = record["argumentString"] as? String else { return nil }
var argument = QEMUArgument(argumentString)

return argument
}
// Update entire additional arguments with new one.
config.qemu.additionalArguments = additionalArguments
}


private func updateAppleConfiguration(from record: [AnyHashable : Any]) throws {
let config = config as! UTMAppleConfiguration
if let name = record["name"] as? String, !name.isEmpty {
Expand Down

0 comments on commit 8a35d03

Please sign in to comment.