From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR03-DB5-obe.outbound.protection.outlook.com (EUR03-DB5-obe.outbound.protection.outlook.com [40.107.4.41]) by mx.groups.io with SMTP id smtpd.web12.12525.1611335999253711027 for ; Fri, 22 Jan 2021 09:20:00 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=4mJ3Uv61; spf=pass (domain: arm.com, ip: 40.107.4.41, mailfrom: sami.mujawar@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Lq/ExCAAZIZJ4KKevi6PlTng0XB2pdSzCZcc6ul5gjw=; b=4mJ3Uv61Xjur3U6oB0vISLssRjq8PR/yKlqWAgdQlrR91a+TAFrUorRmIT95YMlTQy+pTYReqQXltE+ECuegzgebWlXWZt2iK0yBEid1aymnz7gmzinW42FDf8XL5eg08XJdD3+2Yy63y+2Q6uCGbFzp9BzayAETC/YHVF/ibas= Received: from MR2P264CA0084.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:32::24) by HE1PR0802MB2538.eurprd08.prod.outlook.com (2603:10a6:3:e1::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11; Fri, 22 Jan 2021 17:19:55 +0000 Received: from VE1EUR03FT047.eop-EUR03.prod.protection.outlook.com (2603:10a6:500:32:cafe::7f) by MR2P264CA0084.outlook.office365.com (2603:10a6:500:32::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.12 via Frontend Transport; Fri, 22 Jan 2021 17:19:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT047.mail.protection.outlook.com (10.152.19.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Fri, 22 Jan 2021 17:19:54 +0000 Received: ("Tessian outbound f362b81824dc:v71"); Fri, 22 Jan 2021 17:19:54 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: c9e21f5e16dac05e X-CR-MTA-TID: 64aa7808 Received: from dca04c3d82ae.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 360F9661-3368-4F45-8D4D-66E5CE059401.1; Fri, 22 Jan 2021 17:19:48 +0000 Received: from EUR03-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dca04c3d82ae.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 22 Jan 2021 17:19:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LlX7fyAYHxvySR5kaTeWtxsZU9y84+M/XqkaDl+UkSEjghjtSO2FRl+Ei8+hApdrymllEAHBONUwjOghURNzP6EVG9R/nBALMDUA7YyVbfuWeoeZ1JPJc+hUDGMxMlqTc97t1059Zrnxab2DR+e7d4ZYMw6wseJKkPxjCqxa78lO0r7xt+w7BaXdQA+MraxoubiLSJZhftTy2o+MGnOCOHXFxllkbBtgXgQ3fsXL/xD8bL3fikK4Jzal7ewkC5IvwpVwLj/qWEWCuD2/XUUHE0HMLfulP11esM9fQ6eQN4/tzY5q5ELqMWhU2tKm+b51jI/dhkldfvlg4aGwmDM79A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Lq/ExCAAZIZJ4KKevi6PlTng0XB2pdSzCZcc6ul5gjw=; b=IWRhHD2yE68zrHQLMRBzbT3EHLyTUwMepZzNLRqQXPrWZ1MHNOk6wAlu3BbLZcgtVadQscWNJFoVavFRe9qrajNLOSU1s0G61/yay0AIJFrE8T63g3fqv2N8FUbGs7/hbiXiBc1jQawz4FtdReyKlCD/hgHLqEoTFzK1M7r89aXLa/vKGwMeeC8saAID7vkovFHZLd4rDVwvM9jtaJz96HbscFRRAtKoTRwBHTR1pr2uPktCZY4PxA0BsEllVPYL46Ze+4IdazFuZ/hgPSMXr1mha3KD8xZy4q3e1uxNVmCldGwpxen0zHfcPqVKVteschjiIfDM60WcLE7vaktzhQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Lq/ExCAAZIZJ4KKevi6PlTng0XB2pdSzCZcc6ul5gjw=; b=4mJ3Uv61Xjur3U6oB0vISLssRjq8PR/yKlqWAgdQlrR91a+TAFrUorRmIT95YMlTQy+pTYReqQXltE+ECuegzgebWlXWZt2iK0yBEid1aymnz7gmzinW42FDf8XL5eg08XJdD3+2Yy63y+2Q6uCGbFzp9BzayAETC/YHVF/ibas= Received: from AM5PR0601CA0077.eurprd06.prod.outlook.com (2603:10a6:206::42) by VE1PR08MB5087.eurprd08.prod.outlook.com (2603:10a6:803:114::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.15; Fri, 22 Jan 2021 17:19:45 +0000 Received: from AM5EUR03FT042.eop-EUR03.prod.protection.outlook.com (2603:10a6:206:0:cafe::34) by AM5PR0601CA0077.outlook.office365.com (2603:10a6:206::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.12 via Frontend Transport; Fri, 22 Jan 2021 17:19:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; Received: from nebula.arm.com (40.67.248.234) by AM5EUR03FT042.mail.protection.outlook.com (10.152.17.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.3784.11 via Frontend Transport; Fri, 22 Jan 2021 17:19:45 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2044.4; Fri, 22 Jan 2021 17:19:42 +0000 Received: from E107187.Arm.com (10.57.3.168) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2044.4 via Frontend Transport; Fri, 22 Jan 2021 17:19:42 +0000 From: "Sami Mujawar" To: CC: Sami Mujawar , , , , , , , , , , Subject: [PATCH v1 1/2] ArmVirtPkg/PlatformCI: Add EDKII CI support for Kvmtool Date: Fri, 22 Jan 2021 17:19:40 +0000 Message-ID: <20210122171941.30724-2-sami.mujawar@arm.com> X-Mailer: git-send-email 2.11.0.windows.3 In-Reply-To: <20210122171941.30724-1-sami.mujawar@arm.com> References: <20210122171941.30724-1-sami.mujawar@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-Office365-Filtering-HT: Tenant X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dda02ea5-9a5d-4022-63d3-08d8bef9ef8b X-MS-TrafficTypeDiagnostic: VE1PR08MB5087:|HE1PR0802MB2538: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:439;OLM:439; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 4n377Iy8S0VZzvcmt7McYY27tZVi5QLfJsQH13yrn3+e5o1MAI89sYmb3dIqKQMG2rFxIkMJzIZVkEj3g4bGL6/jpKrGPVW8LES5EBpVuyPOo7Zr9b0WJjH+QmAaYjqyTMtCxXg194YWaKhifUHQdAbau/lX4LL8z8OjCZyHS6NgEKm8WWo4CeSlJhHKxzRtpzya4iCc3KfFjQfkJamfvBCwDZ8nPKqEAsh5ma/W+KAxaNCDOGxVnx+jPGK1W8tVoZvVHvC0pUxauGe9b/3mMKsKHEtCvy41XIJiTVV7ugv3gNtyXCzhRqZxJJuyeRRy9gjJiaF5mAXwzHhWG46/IU3nqQBtpnjuZPEc6yKXrZagiZIKS9x2AibS08TKCHcBnq3VwZJ7z0tJRZvVJNLMGuANJ6R11I95sJWES7SSOLy65IWDVUKz5HC5oC/hf4Ph1fOfl35+8VYuBBgq2XcEp0/t4nChFz2qi5UOt0HCpUB0Lst3GCmZ1YnJsMYL85BW X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(39850400004)(396003)(346002)(136003)(376002)(46966006)(26005)(6916009)(186003)(8936002)(86362001)(36756003)(8676002)(83380400001)(7696005)(2906002)(336012)(2616005)(70206006)(70586007)(82740400003)(356005)(81166007)(47076005)(82310400003)(1076003)(45080400002)(426003)(44832011)(478600001)(5660300002)(54906003)(4326008)(316002)(36610700001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5087 Return-Path: Sami.Mujawar@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 44ed514c-906c-4987-f690-08d8bef9e9ce X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fnD1y1cT28GCSvuw6d+HPD6yRlpE9j/X+2LzOpwJHitlbwNrouJa8fnMQ+ir43h0Z3wVBvDHGiXjLSQbYXEHBpTL7mZH83OfGAccRhhIorwvPfDEC1Wb0UrHm3ooWQJ7Pe8UWfZVHzn0xB8mBbOSqrMNP3XsPutJZYn+yGuR3zftzRnCt8guqfRWO9vjtqUBhCJOQRhFt/k/Vvm7lyhoZPiy/2npYiNfXRkDs182FHELJzDIUXk2K1LqOETlMjNc+FVMa8vsZXEzaHxIRgZOMq/U69Gja7OVS7YTY396rOPp8LO23e4vnpsyNazg5eoQassgayLV3BIKHaO++AAtw1pifKjmMsm7BEbbzj8l3F4ZimlaOxkhxtProeKk5Msr2+sdH+UrHPc5H4jOfWQqrTwobp9jgG1spvhIPSTptS8hbafTD0eUNURRQ+bEqrlYNG5ocySsGBm6H3tM/EhzSA== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(376002)(136003)(396003)(346002)(46966006)(2906002)(82740400003)(6916009)(4326008)(8676002)(81166007)(8936002)(82310400003)(83380400001)(86362001)(54906003)(44832011)(316002)(426003)(45080400002)(36756003)(5660300002)(7696005)(2616005)(47076005)(478600001)(1076003)(336012)(70586007)(70206006)(186003)(26005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jan 2021 17:19:54.6689 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dda02ea5-9a5d-4022-63d3-08d8bef9ef8b X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2538 Content-Type: text/plain Kvmtool is a virtual machine manager that can be used to launch guest partitions. ArmVirtPkg already has UEFI (virtual/guest) firmware support for Kvmtool guest. Therefore, update the Platform CI script to add support for building the Kvmtool firmware. Signed-off-by: Sami Mujawar --- ArmVirtPkg/PlatformCI/PlatformBuild.py | 132 +++++++++++--------- ArmVirtPkg/PlatformCI/ReadMe.md | 21 ++-- 2 files changed, 88 insertions(+), 65 deletions(-) diff --git a/ArmVirtPkg/PlatformCI/PlatformBuild.py b/ArmVirtPkg/PlatformCI/PlatformBuild.py index dff653e919eb42391fc56ec44b4043a75f79d162..473f7d58d15c3e26ef5a25e210cb679679b28131 100644 --- a/ArmVirtPkg/PlatformCI/PlatformBuild.py +++ b/ArmVirtPkg/PlatformCI/PlatformBuild.py @@ -2,6 +2,7 @@ # Script to Build ArmVirtPkg UEFI firmware # # Copyright (c) Microsoft Corporation. +# Copyright (c) 2021, Arm Limited. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent ## import os @@ -139,7 +140,8 @@ class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSetting The tuple should be (, ) ''' - return (os.path.join("ArmVirtPkg", "ArmVirtQemu.dsc"), {}) + return (os.path.join("ArmVirtPkg", "ArmVirtQemu.dsc"), + os.path.join("ArmVirtPkg", "ArmVirtKvmTool.dsc"), {}) # ####################################################################################### # @@ -150,11 +152,15 @@ class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSetting class PlatformBuilder(UefiBuilder, BuildSettingsManager): def __init__(self): UefiBuilder.__init__(self) + self.PlatformList = [os.path.join("ArmVirtPkg", "ArmVirtQemu.dsc"), + os.path.join("ArmVirtPkg", "ArmVirtKvmTool.dsc")] def AddCommandLineOptions(self, parserObj): ''' Add command line options to the argparser ''' parserObj.add_argument('-a', "--arch", dest="build_arch", type=str, default="AARCH64", help="Optional - Architecture to build. Default = AARCH64") + parserObj.add_argument('-d', "--dsc", dest="active_platform", type=str, default=self.PlatformList[0], + help="Optional - Platform to build. Default = " + self.PlatformList[0]) def RetrieveCommandLineOptions(self, args): ''' Retrieve command line options from the argparser ''' @@ -162,8 +168,12 @@ class PlatformBuilder(UefiBuilder, BuildSettingsManager): shell_environment.GetBuildVars().SetValue( "TARGET_ARCH", args.build_arch.upper(), "From CmdLine") - shell_environment.GetBuildVars().SetValue( - "ACTIVE_PLATFORM", "ArmVirtPkg/ArmVirtQemu.dsc", "From CmdLine") + if (args.active_platform == self.PlatformList[1]): + shell_environment.GetBuildVars().SetValue( + "ACTIVE_PLATFORM", self.PlatformList[1], "From CmdLine") + else: + shell_environment.GetBuildVars().SetValue( + "ACTIVE_PLATFORM", self.PlatformList[0], "From CmdLine") def GetWorkspaceRoot(self): ''' get WorkspacePath ''' @@ -207,9 +217,12 @@ class PlatformBuilder(UefiBuilder, BuildSettingsManager): def SetPlatformEnv(self): logging.debug("PlatformBuilder SetPlatformEnv") - self.env.SetValue("PRODUCT_NAME", "ArmVirtQemu", "Platform Hardcoded") self.env.SetValue("MAKE_STARTUP_NSH", "FALSE", "Default to false") self.env.SetValue("QEMU_HEADLESS", "FALSE", "Default to false") + if (self.env.GetValue("ACTIVE_PLATFORM") == self.PlatformList[1]): + self.env.SetValue("PRODUCT_NAME", "ArmVirtKvmtool", "Platform Hardcoded") + else: + self.env.SetValue("PRODUCT_NAME", "ArmVirtQemu", "Platform Hardcoded") return 0 def PlatformPreBuild(self): @@ -219,58 +232,61 @@ class PlatformBuilder(UefiBuilder, BuildSettingsManager): return 0 def FlashRomImage(self): - VirtualDrive = os.path.join(self.env.GetValue( - "BUILD_OUTPUT_BASE"), "VirtualDrive") - os.makedirs(VirtualDrive, exist_ok=True) - OutputPath_FV = os.path.join( - self.env.GetValue("BUILD_OUTPUT_BASE"), "FV") - Built_FV = os.path.join(OutputPath_FV, "QEMU_EFI.fd") - - # pad fd to 64mb - with open(Built_FV, "ab") as fvfile: - fvfile.seek(0, os.SEEK_END) - additional = b'\0' * ((64 * 1024 * 1024)-fvfile.tell()) - fvfile.write(additional) - - # QEMU must be on that path - - # Unique Command and Args parameters per ARCH - if (self.env.GetValue("TARGET_ARCH").upper() == "AARCH64"): - cmd = "qemu-system-aarch64" - args = "-M virt" - args += " -cpu cortex-a57" # emulate cpu - elif(self.env.GetValue("TARGET_ARCH").upper() == "ARM"): - cmd = "qemu-system-arm" - args = "-M virt" - args += " -cpu cortex-a15" # emulate cpu + if (self.env.GetValue("ACTIVE_PLATFORM") == self.PlatformList[1]): + return 0 else: - raise NotImplementedError() - - # Common Args - args += " -pflash " + Built_FV # path to fw - args += " -m 1024" # 1gb memory - # turn off network - args += " -net none" - # Serial messages out - args += " -serial stdio" - # Mount disk with startup.nsh - args += f" -drive file=fat:rw:{VirtualDrive},format=raw,media=disk" - - # Conditional Args - if (self.env.GetValue("QEMU_HEADLESS").upper() == "TRUE"): - args += " -display none" # no graphics - - if (self.env.GetValue("MAKE_STARTUP_NSH").upper() == "TRUE"): - f = open(os.path.join(VirtualDrive, "startup.nsh"), "w") - f.write("BOOT SUCCESS !!! \n") - # add commands here - f.write("reset -s\n") - f.close() - - ret = RunCmd(cmd, args) - - if ret == 0xc0000005: - # for some reason getting a c0000005 on successful return - return 0 - - return ret + VirtualDrive = os.path.join(self.env.GetValue( + "BUILD_OUTPUT_BASE"), "VirtualDrive") + os.makedirs(VirtualDrive, exist_ok=True) + OutputPath_FV = os.path.join( + self.env.GetValue("BUILD_OUTPUT_BASE"), "FV") + Built_FV = os.path.join(OutputPath_FV, "QEMU_EFI.fd") + + # pad fd to 64mb + with open(Built_FV, "ab") as fvfile: + fvfile.seek(0, os.SEEK_END) + additional = b'\0' * ((64 * 1024 * 1024)-fvfile.tell()) + fvfile.write(additional) + + # QEMU must be on that path + + # Unique Command and Args parameters per ARCH + if (self.env.GetValue("TARGET_ARCH").upper() == "AARCH64"): + cmd = "qemu-system-aarch64" + args = "-M virt" + args += " -cpu cortex-a57" # emulate cpu + elif(self.env.GetValue("TARGET_ARCH").upper() == "ARM"): + cmd = "qemu-system-arm" + args = "-M virt" + args += " -cpu cortex-a15" # emulate cpu + else: + raise NotImplementedError() + + # Common Args + args += " -pflash " + Built_FV # path to fw + args += " -m 1024" # 1gb memory + # turn off network + args += " -net none" + # Serial messages out + args += " -serial stdio" + # Mount disk with startup.nsh + args += f" -drive file=fat:rw:{VirtualDrive},format=raw,media=disk" + + # Conditional Args + if (self.env.GetValue("QEMU_HEADLESS").upper() == "TRUE"): + args += " -display none" # no graphics + + if (self.env.GetValue("MAKE_STARTUP_NSH").upper() == "TRUE"): + f = open(os.path.join(VirtualDrive, "startup.nsh"), "w") + f.write("BOOT SUCCESS !!! \n") + # add commands here + f.write("reset -s\n") + f.close() + + ret = RunCmd(cmd, args) + + if ret == 0xc0000005: + # for some reason getting a c0000005 on successful return + return 0 + + return ret diff --git a/ArmVirtPkg/PlatformCI/ReadMe.md b/ArmVirtPkg/PlatformCI/ReadMe.md index 7c11d925f59ede4717d4b210df9d2b97f755ebd8..98a3ca91f40c075bf1a2069edd99e9680a1252e9 100644 --- a/ArmVirtPkg/PlatformCI/ReadMe.md +++ b/ArmVirtPkg/PlatformCI/ReadMe.md @@ -6,13 +6,14 @@ to use the same Pytools based build infrastructure locally. ## Supported Configuration Details This solution for building and running ArmVirtPkg has only been validated with Ubuntu -18.04 and the GCC5 toolchain. Two different firmware builds are supported and are -described below. +18.04 and the GCC5 toolchain. The supported firmware builds are described below. -| Configuration name | Architecture | DSC File |Additional Flags | -| :---------- | :----- | :----- | :---- | -| AARCH64 | AARCH64 | ArmVirtQemu.dsc | None | -| ARM | ARM | ArmVirtQemu.dsc | None | +| Configuration name | Architecture | DSC File |Additional Flags | +| :---------- | :----- | :----- | :---- | +| AARCH64 | AARCH64 | ArmVirtQemu.dsc | None | +| ARM | ARM | ArmVirtQemu.dsc | None | +| AARCH64 | AARCH64 | ArmVirtKvmTool.dsc | None | +| ARM | ARM | ArmVirtKvmTool.dsc | None | ## EDK2 Developer environment @@ -79,7 +80,13 @@ Pytools build system. ``` - use `stuart_build -c ArmVirtPkg/PlatformCI/PlatformBuild.py -h` option to see additional - options like `--clean` + options like `--clean`, `--dsc`, etc. + + Example: The `--dsc` option can be used to specify the platform to build. + + ``` bash + stuart_build -c ArmVirtPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG= -a --dsc ArmVirtPkg/ArmVirtKvmTool.dsc + ``` 8. Running Emulator - You can add `--FlashRom` to the end of your build command and the emulator will run after the -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'