From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web12.5312.1588072967869009649 for ; Tue, 28 Apr 2020 04:22:48 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=dpOAz+4R; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: liming.gao@intel.com) IronPort-SDR: uULlG++uXEl0By7MuJxSlTLAHZecnYxd8hihy/ZRzb0ZrCkLiVuqyVqTSqeOSv9TpO0DL69GAd Q0zhI4DwqMag== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Apr 2020 04:22:47 -0700 IronPort-SDR: pPsM69Jsl5MEQXzb/U6PpFzevYfPEPeKbbbuwZAXrZxNzFO1dvTaA1YVQ8FyFD7S9gSDxyC+Pb td/bXaqxPlTQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,327,1583222400"; d="scan'208";a="282111783" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga004.fm.intel.com with ESMTP; 28 Apr 2020 04:22:47 -0700 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 28 Apr 2020 04:22:47 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by fmsmsx116.amr.corp.intel.com (10.18.116.20) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 28 Apr 2020 04:22:46 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.102) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 28 Apr 2020 04:22:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lBJRQDd3IQFAaz9+ZjMJiGhTFsE9Y4VDPgOWuNbkIoFfT3zj4dvs3a5KVsRPiDlJtS+tte2dNm6Qr6Lu2JHpWLzoMnEPve02EZir57mM2qN0vv+aWEeCoQoib12erVbAxE02idNJmwQKKXhVsrn3+kXnUQWUm7yMwiqtLSwvoUUSCRW8QLxJUpg0fW/p0DFpd7zlQG742mkUTvxo4k6AMiRmdprN+n/oJJ+h79jbILtZ/Cd1m+V4dDVqsgtuEh/Iy+yFvmOZIGJTx0l/1BlBrBu7PxYvjqaevEI2jF/X/c6alpAHH8w2C6xqs0w74Ryj4UWDr5ouS8JuEmYl8YkOvA== 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=pvyHRkO53nUQuyAvaQdZi1nrI6pXpYeZoaYKw4iYlbc=; b=QzIhxXoHRXaxmndlUNlKAV3w5UEVa8J3TX7Zt+djshAXgsKm10aAeZuoo7aZY0F8cgsv3/umKi0m6gMCYZ6sEjJ0l49T57K6ZLTxwkgszViHP1Xy57Z7ojOvc+UGQcqOisd2PD0kkBq2XxpYeMdRlu4SMnu32wu50VqAAlbkwmGQYm6y/xrak1qu4RZQ6ZgJQiJU6FJFUk4Nb+vOsMokik3pjT2RvQWfGvG5TSJRMxCWRIcJmOWJiVPYgrnl/7r6LWAYSSgpborjhthACAwukr1uN3As9JGoWfUz+YEKFrt+LDpFq81iPLZ5Kcdm9UQ6tKtKUHjCdU9A5/1KaAf19A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pvyHRkO53nUQuyAvaQdZi1nrI6pXpYeZoaYKw4iYlbc=; b=dpOAz+4RQ86URhdvU/Olj65u75GXB6i6Bj6/n+T0B8CE26jgfJKLllbhe2S7atCrXkVQziadcITaN7RVsQid8Q46rcC01sHM0eEBzKHSOba82tz4V6gjjsK5bTSu1npYsIRVl1jWcs8OQtkjKXtzb19T5ynK+bL1zg96zhngOus= Received: from BN6PR11MB3972.namprd11.prod.outlook.com (2603:10b6:405:7f::11) by BN6PR11MB3985.namprd11.prod.outlook.com (2603:10b6:405:7b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.22; Tue, 28 Apr 2020 11:22:43 +0000 Received: from BN6PR11MB3972.namprd11.prod.outlook.com ([fe80::4dcc:bc5c:def:9ae9]) by BN6PR11MB3972.namprd11.prod.outlook.com ([fe80::4dcc:bc5c:def:9ae9%5]) with mapi id 15.20.2937.023; Tue, 28 Apr 2020 11:22:43 +0000 From: "Liming Gao" To: "devel@edk2.groups.io" , "michael.kubacki@outlook.com" CC: "Justen, Jordan L" , Andrew Fish , "Ni, Ray" , "Gao, Liming" Subject: Re: [edk2-devel] [PATCH v3 3/7] EmulatorPkg: Add Platform CI and configuration for Core CI Thread-Topic: [edk2-devel] [PATCH v3 3/7] EmulatorPkg: Add Platform CI and configuration for Core CI Thread-Index: AQHWGn/Vb9RxuTA9Ukue+0ZevOc926iOZ97g Date: Tue, 28 Apr 2020 11:22:42 +0000 Message-ID: References: <20200424213108.19888-1-michael.kubacki@outlook.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.2.0.6 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [134.191.221.115] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f5fe5344-b444-41b8-bfa7-08d7eb667878 x-ms-traffictypediagnostic: BN6PR11MB3985: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4303; x-forefront-prvs: 0387D64A71 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN6PR11MB3972.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(346002)(136003)(396003)(366004)(376002)(39860400002)(76116006)(8676002)(316002)(107886003)(45080400002)(478600001)(966005)(110136005)(33656002)(9686003)(86362001)(5660300002)(8936002)(81156014)(30864003)(54906003)(6506007)(66556008)(66476007)(26005)(55016002)(66946007)(4326008)(71200400001)(2906002)(19627235002)(7696005)(66446008)(64756008)(186003)(53546011)(52536014)(579004)(559001)(460985005);DIR:OUT;SFP:1102; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LZagEFANn66bRChF4C56OYfSPLgAg19u0ZICCRQln0rT3Ge+ojXgQ9YTql7KHNWAOzZvw+fJrFeHAaKsLEOazGBzXwgQU+xjA07MnRI5Rb4D/vjpZjCbC73xngEYO0wd2wqp8yIfE46fbOEiWeiq3NPolRkvKeUnLiaPfeusrl/s/AviNPMGPid8ScjGqsPTeI3HaBUWQXJKxH3OWN8Tgo47+bzf+ebcdNxuOQUyoMMrCoN6XNmhHGEv/H8ZdGru5ZvllGNCkGTBIGh73WrA+BvSG5FixGvBM/Ipqfie3oq87R39MRSV+9jYvpTGHZRBQu4p2j3KcQFSRJQEzPJubqBwi4wnTPIVdJhoaavZzw7xptozQ70o4N+XZBNs1MEY/4K9zkyIrXq5ElNUdgoLAXlzj4YyxMWKw5/2S+HINl+Tj6ip6lxepMdiaNLrHyc/8Dn6MkN1dgQebsjpL6Ljqf2xno3Afbez4qyjnGJ5QrdKxG4uTdjVAhI4PmvWmu+tHsbjfJ9haNkP4nT+L74DVVyQKyq1Gg1CosJ5QFib9lRKMpxkNH88Lj+lHUtzvRGa x-ms-exchange-antispam-messagedata: T4Bs/nJNLz2q6qu6JUKieUetPaexnbBQUdcx+Ks4+fbLA9WagqVwK8C6HNslcEzbPMeyFIEKkIk40kDCG4uUgE2d0vngmhPSOZQgGUuuGXRMlHjAE89rGLbPINyGD2klpJT3Y9L4kgTJX4+y8h6Y+98aby0QvjMPARo6EuwNDc5DYoJgngHiz1t0UCt8v9+6i9SRvr4Mr//aRvJiYby8DkGqC9LYBxj7/Oe8ZchQK2KIZKyBInX6v+66ENxbuhiM9DvGmKiSa3/YgRJZnn+VB34H/zhAHmqStwJ4nKuFnlbkywe19ckpamUUCtIip9rGavsIaN6SPAPLME2yHbLl5eyZqGiV9E712uEwsJwUI7P/jsddktiblcpYtU0qgo0vNIZHnY4dzDI0AwojA2dmV1nhKySVO5/rWSgnDK2+PkJ193j5A0RK5CUtwWb1Abhdy7cqrQA/XpamXUUYHoN2v7mlquiqVZx5xnXHYFPk3awz79j8lUipJt6QRGlF9ehXCvK7WYSkeCp7bfH4w/uFXlPR90Mq/+8bpqbiuM+n8by/EexJmC8ZHqL8jt/WYILV+2Us1lcQLFn9f0cWKteugOm11yNTd8KrRgxBohys+J6BBjblHA0HJPeeWFvtrUtWMDl++sbtVzViqoe2n6z3nBFb0DZRSVeHig3EPAUrHAhrDRnykcVw8MmNCLZuXsU/VJs1wwu0MhW7Tuj1XZIKWa5Cvjax4t6EiONDUU9+4xBdatj6kC9eE6klm6fzrfpIJ0HMg7qIhAFihNd1MIxzQoNlruIa/IVGe3my+PQOibnURu5XN570+ox+tH6wTmeH MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: f5fe5344-b444-41b8-bfa7-08d7eb667878 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Apr 2020 11:22:43.3347 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ZRDnt5SOrg0U9wELUBCtDlY7FiyqvPbX5+g/a4h8cAda8iFh2LWIQk8ygGcoiTBS2bvqw1YcxKZNLrb3tcsSrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR11MB3985 Return-Path: liming.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I and Ray have replied this patch on version 2. Seemly, this version miss i= t.=20 Please add Acked-by: Ray Ni , Reviewed-by: Liming Gao https://edk2.groups.io/g/devel/message/57743 Thanks Liming > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Michael K= ubacki > Sent: Saturday, April 25, 2020 5:31 AM > To: devel@edk2.groups.io > Cc: Justen, Jordan L ; Andrew Fish ; Ni, Ray > Subject: [edk2-devel] [PATCH v3 3/7] EmulatorPkg: Add Platform CI and co= nfiguration for Core CI >=20 > From: Sean Brogan >=20 > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D2570 >=20 > Add new Azure Pipeline definitions to build and run EmulatorPkg with: > * Ubuntu GCC5 > * Windows VS2019 > Add PyTool based build of EmulatorPkg > Add EmulatorPkg.ci.yaml for Core CI > Add ReadMe.md for details and instructions >=20 > Cc: Jordan Justen > Cc: Andrew Fish > Cc: Ray Ni > Signed-off-by: Sean Brogan > Signed-off-by: Michael Kubacki > Reviewed-by: Shenglei Zhang > Reviewed-by: Bret Barkelew > --- > EmulatorPkg/EmulatorPkg.ci.yaml | 85 ++++++ > EmulatorPkg/PlatformCI/.azurepipelines/Ubuntu-GCC5.yml | 95 +++++++ > EmulatorPkg/PlatformCI/.azurepipelines/Windows-VS2019.yml | 85 ++++++ > EmulatorPkg/PlatformCI/PlatformBuild.py | 272 +++++++= +++++++++++++ > EmulatorPkg/PlatformCI/ReadMe.md | 128 +++++++= ++ > 5 files changed, 665 insertions(+) >=20 > diff --git a/EmulatorPkg/EmulatorPkg.ci.yaml b/EmulatorPkg/EmulatorPkg.c= i.yaml > new file mode 100644 > index 000000000000..81f81780ec76 > --- /dev/null > +++ b/EmulatorPkg/EmulatorPkg.ci.yaml > @@ -0,0 +1,85 @@ > +## @file > +# Core CI configuration for EmulatorPkg > +# > +# EmulatorPkg is part of Platform Ci for builds so this is only > +# used for code analysis. > +# > +# Copyright (c) Microsoft Corporation > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > +{ > + ## options defined .pytool/Plugin/CompilerPlugin > + "CompilerPlugin": { > + "DscPath": "" # Don't support this test > + }, > + > + ## options defined .pytool/Plugin/HostUnitTestCompilerPlugin > + "HostUnitTestCompilerPlugin": { > + "DscPath": "" # Don't support this test > + }, > + > + ## options defined .pytool/Plugin/CharEncodingCheck > + "CharEncodingCheck": { > + "IgnoreFiles": [] > + }, > + > + ## options defined .pytool/Plugin/DependencyCheck > + "DependencyCheck": { > + "AcceptableDependencies": [ > + # For this platform all packages are allowed??? > + "MdePkg/MdePkg.dec", > + "MdeModulePkg/MdeModulePkg.dec", > + "EmulatorPkg/EmulatorPkg.dec", > + "NetworkPkg/NetworkPkg.dec", > + "EmbeddedPkg/EmbeddedPkg.dec", ## is this one OK?? > + ], > + # For host based unit tests > + "AcceptableDependencies-HOST_APPLICATION":[ > + "UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec" > + ], > + # For UEFI shell based apps > + "AcceptableDependencies-UEFI_APPLICATION":[], > + "IgnoreInf": [] > + }, > + > + ## options defined .pytool/Plugin/DscCompleteCheck > + "DscCompleteCheck": { > + "IgnoreInf": [""], > + "DscPath": "" # Don't support this test > + }, > + > + ## options defined .pytool/Plugin/HostUnitTestDscCompleteCheck > + "HostUnitTestDscCompleteCheck": { > + "IgnoreInf": [""], > + "DscPath": "" # Don't support this test > + }, > + > + ## options defined .pytool/Plugin/GuidCheck > + "GuidCheck": { > + "IgnoreGuidName": [], > + "IgnoreGuidValue": [], > + "IgnoreFoldersAndFiles": [], > + "IgnoreDuplicates": [], > + }, > + > + ## options defined .pytool/Plugin/LibraryClassCheck > + "LibraryClassCheck": { > + "IgnoreHeaderFile": [] > + }, > + > + ## options defined .pytool/Plugin/SpellCheck > + "SpellCheck": { > + "AuditOnly": True, # Fails right now with over 270 er= rors > + "IgnoreFiles": [], # use gitignore syntax to ignore e= rrors in matching files > + "ExtendWords": [ > + "setjump", > + "plong", > + "lparam", > + "lpdword", > + "lpthread", > + "lresult", > + ], # words to extend to the dictionary for this packa= ge > + "IgnoreStandardPaths": [], # Standard Plugin defined paths th= at should be ignore > + "AdditionalIncludePaths": [] # Additional paths to spell check = (wildcards supported) > + } > +} > diff --git a/EmulatorPkg/PlatformCI/.azurepipelines/Ubuntu-GCC5.yml b/Em= ulatorPkg/PlatformCI/.azurepipelines/Ubuntu-GCC5.yml > new file mode 100644 > index 000000000000..12ef8226ff54 > --- /dev/null > +++ b/EmulatorPkg/PlatformCI/.azurepipelines/Ubuntu-GCC5.yml > @@ -0,0 +1,95 @@ > +## @file > +# Azure Pipeline build file for building a platform. > +# > +# Platform: EmulatorPkg > +# OS: Ubuntu > +# Toolchain: GCC5 > +# > +# Copyright (c) Microsoft Corporation. > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > +trigger: > + - master > +pr: > + - master > +jobs: > + - job: Platform_CI > + variables: > + package: 'EmulatorPkg' > + vm_image: 'ubuntu-latest' > + should_run: false > + run_flags: "MAKE_STARTUP_NSH=3DTRUE" > + > + #Use matrix to speed up the build process > + strategy: > + matrix: > + EmulatorPkg_X64_DEBUG: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "X64" > + Build.Flags: "" > + Build.Target: "DEBUG" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_X64_RELEASE: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "X64" > + Build.Flags: "" > + Build.Target: "RELEASE" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_X64_NOOPT: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "X64" > + Build.Flags: "" > + Build.Target: "NOOPT" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_IA32_DEBUG: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "IA32" > + Build.Flags: "" > + Build.Target: "DEBUG" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_IA32_RELEASE: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "IA32" > + Build.Flags: "" > + Build.Target: "RELEASE" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_IA32_NOOPT: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "IA32" > + Build.Flags: "" > + Build.Target: "NOOPT" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + > + workspace: > + clean: all > + > + pool: > + vmImage: $(vm_image) > + > + steps: > + - template: ../../../.azurepipelines/templates/platform-build-run-s= teps.yml > + parameters: > + tool_chain_tag: GCC5 > + build_pkg: $(package) > + build_target: $(Build.Target) > + build_arch: $(Build.Arch) > + build_file: $(Build.File) > + build_flags: $(Build.Flags) > + run_flags: $(Run.Flags) > + # Add steps to install some IA32 only dependencies > + extra_install_step: > + - bash: sudo dpkg --add-architecture i386 > + displayName: Add i386 to dpkg > + condition: and(gt(variables.pkg_count, 0), eq(variables['Buil= d.Arch'], 'IA32'), succeeded()) > + - bash: sudo apt-get update > + displayName: do apt-get update > + condition: and(gt(variables.pkg_count, 0), eq(variables['Buil= d.Arch'], 'IA32'), succeeded()) > + - bash: sudo apt-get install libc6-dev:i386 libx11-dev:i386 lib= xext-dev:i386 lib32gcc-7-dev > + displayName: Add additional i386 packages > + condition: and(gt(variables.pkg_count, 0), eq(variables['Buil= d.Arch'], 'IA32'), succeeded()) > diff --git a/EmulatorPkg/PlatformCI/.azurepipelines/Windows-VS2019.yml b= /EmulatorPkg/PlatformCI/.azurepipelines/Windows- > VS2019.yml > new file mode 100644 > index 000000000000..a5baf4b6064b > --- /dev/null > +++ b/EmulatorPkg/PlatformCI/.azurepipelines/Windows-VS2019.yml > @@ -0,0 +1,85 @@ > +## @file > +# Azure Pipeline build file for building a platform. > +# > +# Platform: EMULATORPKG > +# OS: Windows > +# Toolchain: VS2019 > +# > +# Copyright (c) Microsoft Corporation. > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > +trigger: > + - master > +pr: > + - master > + > +jobs: > + - job: Platform_CI > + variables: > + package: 'EmulatorPkg' > + vm_image: 'windows-latest' > + should_run: true > + run_flags: "MAKE_STARTUP_NSH=3DTRUE" > + > + #Use matrix to speed up the build process > + strategy: > + matrix: > + EmulatorPkg_X64_DEBUG: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "X64" > + Build.Flags: "" > + Build.Target: "DEBUG" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_X64_RELEASE: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "X64" > + Build.Flags: "" > + Build.Target: "RELEASE" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_X64_NOOPT: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "X64" > + Build.Flags: "" > + Build.Target: "NOOPT" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_IA32_DEBUG: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "IA32 " > + Build.Flags: "" > + Build.Target: "DEBUG" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_IA32_RELEASE: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "IA32 " > + Build.Flags: "" > + Build.Target: "RELEASE" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + EmulatorPkg_IA32_NOOPT: > + Build.File: "$(package)/PlatformCI/PlatformBuild.py" > + Build.Arch: "IA32 " > + Build.Flags: "" > + Build.Target: "NOOPT" > + Run.Flags: $(run_flags) > + Run: $(should_run) > + > + workspace: > + clean: all > + > + pool: > + vmImage: $(vm_image) > + > + steps: > + - template: ../../../.azurepipelines/templates/platform-build-run-s= teps.yml > + parameters: > + tool_chain_tag: VS2019 > + build_pkg: $(package) > + build_target: $(Build.Target) > + build_arch: $(Build.Arch) > + build_file: $(Build.File) > + build_flags: $(Build.Flags) > + run_flags: $(Run.Flags) > diff --git a/EmulatorPkg/PlatformCI/PlatformBuild.py b/EmulatorPkg/Platf= ormCI/PlatformBuild.py > new file mode 100644 > index 000000000000..6defbf6ef148 > --- /dev/null > +++ b/EmulatorPkg/PlatformCI/PlatformBuild.py > @@ -0,0 +1,272 @@ > +# @file > +# Script to Build EmulatorPkg UEFI firmware > +# > +# Copyright (c) Microsoft Corporation. > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > +import os > +import logging > +import io > + > +from edk2toolext.environment import shell_environment > +from edk2toolext.environment.uefi_build import UefiBuilder > +from edk2toolext.invocables.edk2_platform_build import BuildSettingsMan= ager > +from edk2toolext.invocables.edk2_setup import SetupSettingsManager, Req= uiredSubmodule > +from edk2toolext.invocables.edk2_update import UpdateSettingsManager > +from edk2toolext.invocables.edk2_pr_eval import PrEvalSettingsManager > +from edk2toollib.utility_functions import RunCmd > +from edk2toollib.utility_functions import GetHostInfo > + > +# #####################################################################= ################## # > +# Common Configuration = # > +# #####################################################################= ################## # > + > + > +class CommonPlatform(): > + ''' Common settings for this platform. Define static data here and= use > + for the different parts of stuart > + ''' > + PackagesSupported =3D ("EmulatorPkg",) > + ArchSupported =3D ("X64", "IA32") > + TargetsSupported =3D ("DEBUG", "RELEASE", "NOOPT") > + Scopes =3D ('emulatorpkg', 'edk2-build') > + WorkspaceRoot =3D os.path.realpath(os.path.join( > + os.path.dirname(os.path.abspath(__file__)), "..", "..")) > + > + # #################################################################= ###################### # > + # Configuration for Update & Setup = # > + # #################################################################= ###################### # > + > + > +class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEv= alSettingsManager): > + > + def GetPackagesSupported(self): > + ''' return iterable of edk2 packages supported by this build. > + These should be edk2 workspace relative paths ''' > + return CommonPlatform.PackagesSupported > + > + def GetArchitecturesSupported(self): > + ''' return iterable of edk2 architectures supported by this bui= ld ''' > + return CommonPlatform.ArchSupported > + > + def GetTargetsSupported(self): > + ''' return iterable of edk2 target tags supported by this build= ''' > + return CommonPlatform.TargetsSupported > + > + def GetRequiredSubmodules(self): > + ''' return iterable containing RequiredSubmodule objects. > + If no RequiredSubmodules return an empty iterable > + ''' > + rs =3D [] > + # intentionally declare this one with recursive false to avoid = overhead > + rs.append(RequiredSubmodule( > + "CryptoPkg/Library/OpensslLib/openssl", False)) > + > + # To avoid maintenance of this file for every new submodule > + # lets just parse the .gitmodules and add each if not already i= n list. > + # The GetRequiredSubmodules is designed to allow a build to opt= imize > + # the desired submodules but it isn't necessary for this reposi= tory. > + result =3D io.StringIO() > + ret =3D RunCmd("git", "config --file .gitmodules --get-regexp p= ath", workingdir=3Dself.GetWorkspaceRoot(), outstream=3Dresult) > + # Cmd output is expected to look like: > + # submodule.CryptoPkg/Library/OpensslLib/openssl.path CryptoPkg= /Library/OpensslLib/openssl > + # submodule.SoftFloat.path ArmPkg/Library/ArmSoftFloatLib/berke= ley-softfloat-3 > + if ret =3D=3D 0: > + for line in result.getvalue().splitlines(): > + _, _, path =3D line.partition(" ") > + if path is not None: > + if path not in [x.path for x in rs]: > + rs.append(RequiredSubmodule(path, True)) # add = it with recursive since we don't know > + return rs > + > + def SetArchitectures(self, list_of_requested_architectures): > + ''' Confirm the requests architecture list is valid and configu= re SettingsManager > + to run only the requested architectures. > + > + Raise Exception if a list_of_requested_architectures is not sup= ported > + ''' > + unsupported =3D set(list_of_requested_architectures) - \ > + set(self.GetArchitecturesSupported()) > + if(len(unsupported) > 0): > + errorString =3D ( > + "Unsupported Architecture Requested: " + " ".join(unsup= ported)) > + logging.critical(errorString) > + raise Exception(errorString) > + self.ActualArchitectures =3D list_of_requested_architectures > + > + def GetWorkspaceRoot(self): > + ''' get WorkspacePath ''' > + return CommonPlatform.WorkspaceRoot > + > + def GetActiveScopes(self): > + ''' return tuple containing scopes that should be active for th= is process ''' > + return CommonPlatform.Scopes > + > + def FilterPackagesToTest(self, changedFilesList: list, potentialPac= kagesList: list) -> list: > + ''' Filter other cases that this package should be built > + based on changed files. This should cover things that can't > + be detected as dependencies. ''' > + build_these_packages =3D [] > + possible_packages =3D potentialPackagesList.copy() > + for f in changedFilesList: > + # BaseTools files that might change the build > + if "BaseTools" in f: > + if os.path.splitext(f) not in [".txt", ".md"]: > + build_these_packages =3D possible_packages > + break > + # if the azure pipeline platform template file changed > + if "platform-build-run-steps.yml" in f: > + build_these_packages =3D possible_packages > + break > + return build_these_packages > + > + def GetPlatformDscAndConfig(self) -> tuple: > + ''' If a platform desires to provide its DSC then Policy 4 will= evaluate if > + any of the changes will be built in the dsc. > + > + The tuple should be (, ) > + ''' > + return (os.path.join("EmulatorPkg", "EmulatorPkg.dsc"), {}) > + > + # #################################################################= ###################### # > + # Actual Configuration for Platform Build = # > + # #################################################################= ###################### # > + > + > +class PlatformBuilder(UefiBuilder, BuildSettingsManager): > + def __init__(self): > + UefiBuilder.__init__(self) > + > + def AddCommandLineOptions(self, parserObj): > + ''' Add command line options to the argparser ''' > + parserObj.add_argument('-a', "--arch", dest=3D"build_arch", typ= e=3Dstr, default=3D"X64", > + help=3D"Optional - architecture to build= . IA32 will use IA32 for Pei & Dxe. " > + "X64 will use X64 for both PEI and DXE."= ) > + > + def RetrieveCommandLineOptions(self, args): > + ''' Retrieve command line options from the argparser ''' > + > + shell_environment.GetBuildVars().SetValue( > + "TARGET_ARCH", args.build_arch.upper(), "From CmdLine") > + shell_environment.GetBuildVars().SetValue( > + "ACTIVE_PLATFORM", "EmulatorPkg/EmulatorPkg.dsc", "From Cmd= Line") > + > + def GetWorkspaceRoot(self): > + ''' get WorkspacePath ''' > + return CommonPlatform.WorkspaceRoot > + > + def GetPackagesPath(self): > + ''' Return a list of workspace relative paths that should be ma= pped as edk2 PackagesPath ''' > + return () > + > + def GetActiveScopes(self): > + ''' return tuple containing scopes that should be active for th= is process ''' > + return CommonPlatform.Scopes > + > + def GetName(self): > + ''' Get the name of the repo, platform, or product being build = ''' > + ''' Used for naming the log file, among others ''' > + > + # check the startup nsh flag and if set then rename the log fil= e. > + # this helps in CI so we don't overwrite the build log since ru= nning > + # uses the stuart_build command. > + if(shell_environment.GetBuildVars().GetValue("MAKE_STARTUP_NSH"= , "FALSE") =3D=3D "TRUE"): > + return "EmulatorPkg_With_Run" > + return "EmulatorPkg" > + > + def GetLoggingLevel(self, loggerType): > + ''' Get the logging level for a given type > + base =3D=3D lowest logging level supported > + con =3D=3D Screen logging > + txt =3D=3D plain text file logging > + md =3D=3D markdown file logging > + ''' > + return logging.DEBUG > + > + def SetPlatformEnv(self): > + logging.debug("PlatformBuilder SetPlatformEnv") > + self.env.SetValue("PRODUCT_NAME", "EmulatorPkg", "Platform Hard= coded") > + self.env.SetValue("TOOL_CHAIN_TAG", "VS2019", "Default Toolchai= n") > + > + # Add support for using the correct Platform Headers, tools, an= d Libs based on emulator architecture > + # requested to be built when building VS2019 or VS2017 > + if self.env.GetValue("TOOL_CHAIN_TAG") =3D=3D "VS2019" or self.= env.GetValue("TOOL_CHAIN_TAG") =3D=3D "VS2017": > + key =3D self.env.GetValue("TOOL_CHAIN_TAG") + "_HOST" > + if self.env.GetValue("TARGET_ARCH") =3D=3D "IA32": > + shell_environment.ShellEnvironment().set_shell_var(key,= "x86") > + elif self.env.GetValue("TARGET_ARCH") =3D=3D "X64": > + shell_environment.ShellEnvironment().set_shell_var(key,= "x64") > + > + # Add support for using the correct Platform Headers, tools, an= d Libs based on emulator architecture > + # requested to be built when building on linux. > + if GetHostInfo().os.upper() =3D=3D "LINUX": > + self.ConfigureLinuxDLinkPath() > + > + if GetHostInfo().os.upper() =3D=3D "WINDOWS": > + self.env.SetValue("BLD_*_WIN_HOST_BUILD", "TRUE", > + "Trigger Windows host build") > + > + self.env.SetValue("MAKE_STARTUP_NSH", "FALSE", "Default to fals= e") > + > + # I don't see what this does but it is in build.sh > + key =3D "BLD_*_BUILD_" + self.env.GetValue("TARGET_ARCH") > + self.env.SetValue(key, "TRUE", "match script in build.sh") > + return 0 > + > + def PlatformPreBuild(self): > + return 0 > + > + def PlatformPostBuild(self): > + return 0 > + > + def FlashRomImage(self): > + ''' Use the FlashRom Function to run the emulator. This gives = an easy stuart command line to > + activate the emulator. ''' > + > + OutputPath =3D os.path.join(self.env.GetValue( > + "BUILD_OUTPUT_BASE"), self.env.GetValue("TARGET_ARCH")) > + > + if (self.env.GetValue("MAKE_STARTUP_NSH") =3D=3D "TRUE"): > + f =3D open(os.path.join(OutputPath, "startup.nsh"), "w") > + f.write("BOOT SUCCESS !!! \n") > + # add commands here > + f.write("reset\n") > + f.close() > + > + if GetHostInfo().os.upper() =3D=3D "WINDOWS": > + cmd =3D "WinHost.exe" > + elif GetHostInfo().os.upper() =3D=3D "LINUX": > + cmd =3D "./Host" > + else: > + logging.critical("Unsupported Host") > + return -1 > + return RunCmd(cmd, "", workingdir=3DOutputPath) > + > + def ConfigureLinuxDLinkPath(self): > + ''' > + logic copied from build.sh to setup the correct libraries > + ''' > + if self.env.GetValue("TARGET_ARCH") =3D=3D "IA32": > + LIB_NAMES =3D ["ld-linux.so.2", "libdl.so.2 crt1.o", "crti.= o crtn.o"] > + LIB_SEARCH_PATHS =3D ["/usr/lib/i386-linux-gnu", > + "/usr/lib32", "/lib32", "/usr/lib", "/l= ib"] > + elif self.env.GetValue("TARGET_ARCH") =3D=3D "X64": > + LIB_NAMES =3D ["ld-linux-x86-64.so.2", > + "libdl.so.2", "crt1.o", "crti.o", "crtn.o"] > + LIB_SEARCH_PATHS =3D ["/usr/lib/x86_64-linux-gnu", > + "/usr/lib64", "/lib64", "/usr/lib", "/l= ib"] > + > + HOST_DLINK_PATHS =3D "" > + for lname in LIB_NAMES: > + logging.debug(f"Looking for {lname}") > + for dname in LIB_SEARCH_PATHS: > + logging.debug(f"In {dname}") > + if os.path.isfile(os.path.join(dname, lname)): > + logging.debug(f"Found {lname} in {dname}") > + HOST_DLINK_PATHS +=3D os.path.join( > + os.path.join(dname, lname)) + os.pathsep > + break > + HOST_DLINK_PATHS =3D HOST_DLINK_PATHS.rstrip(os.pathsep) > + logging.critical(f"Setting HOST_DLINK_PATHS to {HOST_DLINK_PATH= S}") > + shell_environment.ShellEnvironment().set_shell_var( > + "HOST_DLINK_PATHS", HOST_DLINK_PATHS) > diff --git a/EmulatorPkg/PlatformCI/ReadMe.md b/EmulatorPkg/PlatformCI/R= eadMe.md > new file mode 100644 > index 000000000000..c51838ec1aa7 > --- /dev/null > +++ b/EmulatorPkg/PlatformCI/ReadMe.md > @@ -0,0 +1,128 @@ > +# EmulatorPkg - Platform CI > + > +This ReadMe.md describes the Azure DevOps based Platform CI for Emulato= rPkg and how > +to use the same Pytools based build infrastructure locally. > + > +## Supported Configuration Details > + > +This solution for building and running EmulatorPkg has only been valida= ted with Windows 10 > +with VS2019 and Ubuntu 18.04 with GCC5 toolchain. Two different firmwar= e builds are > +supported and are described below. > + > +| Configuration name | Architectures | DSC File |Addi= tional Flags | > +| :---- | :----- | :---- | :--= -- | > +| IA32 | IA32 | EmulatorPkg.dsc | Non= e | > +| X64 | X64 | EmulatorPkg.dsc | Non= e | > + > +## EDK2 Developer environment > + > +- [Python 3.8.x - Download & Install](https://www.python.org/downloads/= ) > +- [GIT - Download & Install](https://git-scm.com/download/) > +- [Edk2 Source](https://github.com/tianocore/edk2) > +- For building Basetools and other host applications > + > + ``` bash > + sudo apt-get update > + sudo apt-get install gcc g++ make uuid-dev > + ``` > + > +- For building ARCH IA32 on X64 Ubuntu 18.04 LTS these steps where need= ed. > + > + ``` bash > + sudo dpkg --add-architecture i386 > + sudo apt-get update > + sudo apt-get install libc6-dev:i386 libx11-dev:i386 libxext-dev:i386 = lib32gcc-7-dev > + ``` > + > +Note: edksetup, Submodule initialization and manual installation of NAS= M, iASL, or > +the required cross-compiler toolchains are **not** required, this is ha= ndled by the > +Pytools build system. > + > +## Building with Pytools for EmulatorPkg > + > +1. [Optional] Create a Python Virtual Environment - generally once per = workspace > + > + ``` bash > + python -m venv > + ``` > + > +2. [Optional] Activate Virtual Environment - each time new shell opened > + - Linux > + > + ```bash > + source /bin/activate > + ``` > + > + - Windows > + > + ``` bash > + /Scripts/activate.bat > + ``` > + > +3. Install Pytools - generally once per virtual env or whenever pip-req= uirements.txt changes > + > + ``` bash > + pip install --upgrade -r pip-requirements.txt > + ``` > + > +4. Initialize & Update Submodules - only when submodules updated > + > + ``` bash > + stuart_setup -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_= TAG=3D -a > + ``` > + > +5. Initialize & Update Dependencies - only as needed when ext_deps chan= ge > + > + ``` bash > + stuart_update -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN= _TAG=3D -a > + ``` > + > +6. Compile the basetools if necessary - only when basetools C source fi= les change > + > + ``` bash > + python BaseTools/Edk2ToolsBuild.py -t > + ``` > + > +7. Compile Firmware > + > + ``` bash > + stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_= TAG=3D -a > + ``` > + > + - use `stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py -h` = option to see additional > + options like `--clean` > + > +8. Running Emulator > + - You can add `--FlashRom` to the end of your build command and the= emulator will run after the > + build is complete. > + - or use the `--FlashOnly` feature to just run the emulator. > + > + ``` bash > + stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAI= N_TAG=3D -a -- > FlashOnly > + ``` > + > +### Notes > + > +1. Configuring *ACTIVE_PLATFORM* and *TARGET_ARCH* in Conf/target.txt i= s **not** required. This > + environment is set by PlatformBuild.py based upon the `[-a ]` parameter. > + > +**NOTE:** Logging the execution output will be in the normal stuart log= as well as to your console. > + > +### Custom Build Options > + > +**MAKE_STARTUP_NSH=3DTRUE** will output a *startup.nsh* file to the loc= ation mapped as fs0. This is > +used in CI in combination with the `--FlashOnly` feature to run the Emu= lator to the UEFI shell and then execute > +the contents of *startup.nsh*. > + > +### Passing Build Defines > + > +To pass build defines through _stuart_build_, prepend `BLD_*_`to the de= fine name and pass it on the > +command-line. _stuart_build_ currently requires values to be assigned, = so add an`=3D1` suffix for bare defines. > +For example, to enable the IP6 Network Stack, the stuart_build command-= line would be: > + > +`stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py BLD_*_NETWORK_= IP6_ENABLE=3D1` > + > +## References > + > +- [Installing and using Pytools](https://github.com/tianocore/edk2-pyto= ol-extensions/blob/master/docs/using.md#installing) > +- More on [python virtual environments](https://docs.python.org/3/libra= ry/venv.html) > -- > 2.16.3.windows.1 >=20 >=20 >=20