From: "Michael D Kinney" <michael.d.kinney@intel.com>
To: devel@edk2.groups.io
Cc: Zailiang Sun <zailiang.sun@intel.com>,
Yi Qian <yi.qian@intel.com>, Gary Lin <glin@suse.com>
Subject: [edk2-platforms Patch V2 5/5] Vlv2Tbl2DevicePkg: Convert BAT/sh Build scripts to Python
Date: Thu, 18 Jul 2019 23:02:47 -0700 [thread overview]
Message-ID: <20190719060247.10132-6-michael.d.kinney@intel.com> (raw)
In-Reply-To: <20190719060247.10132-1-michael.d.kinney@intel.com>
Convert Build_IFWI and bld_vlv BAT/sh scripts to OS
independent python script PeBuild.py. This script
generates the BiosId file. Standard EDK II build
commands are used to build FW images and capsules.
* Sample VS2015x86 commands for IA32/X64 and DEBUG/RELEASE
build -a IA32 -a X64 -t VS2015x86 -p Vlv2TbltDevicePkg\PlatformPkgX64.dsc
build -a IA32 -a X64 -t VS2015x86 -p Vlv2TbltDevicePkg\PlatformPkgX64.dsc
build -a IA32 -t VS2015x86 -p Vlv2TbltDevicePkg\PlatformPkgIA32.dsc
build -a IA32 -t VS2015x86 -p Vlv2TbltDevicePkg\PlatformPkgIA32.dsc
* Sample GCC5 commands for IA32/X64 and DEBUG/RELEASE
build -a IA32 -a X64 -n 5 -t GCC5 -p Vlv2TbltDevicePkg/PlatformPkgX64.dsc
build -a IA32 -a X64 -n 5 -t GCC5 -p Vlv2TbltDevicePkg/PlatformPkgX64.dsc
build -a IA32 -n 5 -t GCC5 -p Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
build -a IA32 -n 5 -t GCC5 -p Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Cc: Gary Lin <glin@suse.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Intel/Vlv2TbltDevicePkg/Build_IFWI.bat | 118 ------
.../Intel/Vlv2TbltDevicePkg/Build_IFWI.sh | 100 -----
.../Vlv2TbltDevicePkg/PlatformCapsule.fdf | 48 ---
.../Vlv2TbltDevicePkg/PlatformCapsuleIA32.dsc | 39 --
.../Vlv2TbltDevicePkg/PlatformCapsuleX64.dsc | 39 --
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 30 +-
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 13 +-
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 13 +-
Platform/Intel/Vlv2TbltDevicePkg/PreBuild.py | 348 ++++++++++++++++++
Platform/Intel/Vlv2TbltDevicePkg/Readme.md | 62 ++--
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat | 303 ---------------
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh | 222 -----------
12 files changed, 432 insertions(+), 903 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
delete mode 100755 Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.sh
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsule.fdf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleIA32.dsc
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleX64.dsc
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PreBuild.py
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
delete mode 100755 Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat b/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
deleted file mode 100644
index f65aa61f4a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
+++ /dev/null
@@ -1,118 +0,0 @@
-@REM @file
-@REM Windows batch file to build BIOS ROM
-@REM
-@REM Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
-@REM SPDX-License-Identifier: BSD-2-Clause-Patent
-@REM
-
-@echo off
-
-SetLocal EnableDelayedExpansion EnableExtensions
-
-:: Assign initial values
-set exitCode=0
-set "Build_Flags= "
-set PLATFORM_PACKAGE=Vlv2TbltDevicePkg
-
-set PLATFORM_PATH=%WORKSPACE%
-if not exist %PLATFORM_PATH%\%PLATFORM_PACKAGE% (
- if defined PACKAGES_PATH (
- for %%i IN (%PACKAGES_PATH%) DO (
- if exist %%~fi\%PLATFORM_PACKAGE% (
- set PLATFORM_PATH=%%~fi
- goto PlatformPackageFound
- )
- )
- ) else (
- echo.
- echo !!! ERROR !!! Cannot find %PLATFORM_PACKAGE% !!!
- echo.
- goto Exit
- )
-)
-:PlatformPackageFound
-
-:: Parse Optional arguments
-:OptLoop
-if /i "%~1"=="/?" goto Usage
-
-if /i "%~1"=="/l" (
- set Build_Flags=%Build_Flags% /l
- shift
- goto OptLoop
-)
-if /i "%~1"=="/y" (
- set Build_Flags=%Build_Flags% /y
- shift
- goto OptLoop
-)
-if /i "%~1"=="/m" (
- set Build_Flags=%Build_Flags% /m
- shift
- goto OptLoop
-)
-if /i "%~1" == "/c" (
- set Build_Flags=%Build_Flags% /c
- shift
- goto OptLoop
-)
-if /i "%~1"=="/x64" (
- set Build_Flags=%Build_Flags% /x64
- shift
- goto OptLoop
-)
-if /i "%~1"=="/IA32" (
- set Build_Flags=%Build_Flags% /IA32
- shift
- goto OptLoop
-)
-
-:: Require 2 input parameters
-if "%~2"=="" goto Usage
-
-:: Assign required arguments
-set Platform_Type=%~1
-set Build_Target=%~2
-
-:: Build BIOS
-echo ======================================================================
-echo Build_IFWI: Calling BIOS build Script...
-
-call %PLATFORM_PATH%\%PLATFORM_PACKAGE%\bld_vlv.bat %Build_Flags% %Platform_Type% %Build_Target%
-
-if %ERRORLEVEL% NEQ 0 (
- echo echo -- Error Building BIOS & echo.
- set exitCode=1
- goto exit
-)
-echo.
-echo Finished Building BIOS.
-goto Exit
-
-:Usage
-echo Script to build BIOS firmware and stitch the entire IFWI.
-echo.
-echo Usage: Build_IFWI.bat [options] PlatformType BuildTarget
-echo.
-echo /c CleanAll
-echo /l Generate build log file
-echo /y Generate build report file
-echo /m Enable multi-processor build
-echo /IA32 Set Arch to IA32 (default: X64)
-echo /X64 Set Arch to X64 (default: X64)
-echo.
-echo Platform Types: MNW2
-echo Build Targets: Debug, Release (default: Debug)
-echo.
-echo Examples:
-echo Build_IFWI.bat MNW2 debug : X64 Debug build for MinnowMax
-echo Build_IFWI.bat /IA32 MNW2 release : IA32 Release build for MinnowMax
-echo.
-set exitCode=1
-
-:Exit
-@REM CD to platform package.
-cd %PLATFORM_PATH%
-exit /b %exitCode%
-
-EndLocal
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.sh b/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.sh
deleted file mode 100755
index 153c8c5fae..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.sh
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env bash
-##**********************************************************************
-## Function define
-##**********************************************************************
-function Usage ( ) {
- echo
- echo "Script to build BIOS firmware and stitch the entire IFWI."
- echo
- echo "Usage: Build_IFWI.sh [options] PlatformType BuildTarget"
- echo
- echo " /c CleanAll"
- echo " /l Generate build log file"
- echo " /y Generate build report file"
- echo " /m Enable multi-processor build"
- echo " /IA32 Set Arch to IA32 (default: X64)"
- echo " /X64 Set Arch to X64 (default: X64)"
- echo
- echo " Platform Types: MNW2"
- echo " Build Targets: Debug, Release (default: Debug)"
- echo
- echo "Examples:"
- echo " Build_IFWI.sh MNW2 debug : X64 Debug build for MinnowMax"
- echo " Build_IFWI.sh /IA32 MNW2 release : IA32 Release build for MinnowMax"
- echo
- exit 0
-}
-
-set -e
-
-## Assign initial values
-exitCode=0
-Build_Flags=
-
-## Check whether WORKSPACE is set or not
-if [[ -z "$WORKSPACE" ]]; then
- echo "Please export WORKSPACE before running Build_IFWI.sh"
- echo "See the details in Readme.md"
- exit 1
-fi
-
-## Create $WORKSPACE/Conf if necessary
-if [ ! -d $WORKSPACE/Conf ]; then
- mkdir $WORKSPACE/Conf
-fi
-
-## Parse Optional arguments
-if [ "$1" == "/?" ]; then
- Usage
-fi
-
-for (( i=1; i<=$#; ))
- do
- if [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/L" ]; then
- Build_Flags="$Build_Flags /l"
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/Y" ]; then
- Build_Flags="$Build_Flags /y"
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/M" ]; then
- Build_Flags="$Build_Flags /m"
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/C" ]; then
- Build_Flags="$Build_Flags /c"
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/X64" ]; then
- Build_Flags="$Build_Flags /x64"
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/IA32" ]; then
- Build_Flags="$Build_Flags /IA32"
- shift
- else
- break
- fi
- done
-
-## Require 2 input parameters
-if [ "$2" == "" ]; then
- Usage
-fi
-
-## Assign required arguments
-Platform_Type=$1
-Build_Target=$2
-
-## Build BIOS
-echo "======================================================================"
-echo "Build_IFWI: Calling BIOS build Script..."
-. bld_vlv.sh $Build_Flags $Platform_Type $Build_Target
-
-echo
-echo Finished Building BIOS.
-
-## Start Integration process
-echo ======================================================================
-echo Skip "Build_IFWI: Calling IFWI Stitching Script..."
-
-echo
-echo Build_IFWI is finished.
-echo The final IFWI file is located in Stitch
-echo ======================================================================
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsule.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsule.fdf
deleted file mode 100644
index d8b0074d6a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsule.fdf
+++ /dev/null
@@ -1,48 +0,0 @@
-## @file
-# FDF file of Platform capsule.
-#
-# Copyright (c) 2016 - 2019, Intel Corporation.
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[FV.SystemFirmwareUpdateCargo]
-FvAlignment = 16
-ERASE_POLARITY = 1
-MEMORY_MAPPED = TRUE
-STICKY_WRITE = TRUE
-LOCK_CAP = TRUE
-LOCK_STATUS = TRUE
-WRITE_DISABLED_CAP = TRUE
-WRITE_ENABLED_CAP = TRUE
-WRITE_STATUS = TRUE
-WRITE_LOCK_CAP = TRUE
-WRITE_LOCK_STATUS = TRUE
-READ_DISABLED_CAP = TRUE
-READ_ENABLED_CAP = TRUE
-READ_STATUS = TRUE
-READ_LOCK_CAP = TRUE
-READ_LOCK_STATUS = TRUE
-
-FILE RAW = AF9C9EB2-12AD-4D3E-A4D4-96F6C9966215 { # PcdEdkiiSystemFirmwareFileGuid
- $(WORKSPACE)/$(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/FV/Vlv.ROM
- }
-
-[FmpPayload.FmpPayloadSystemFirmwareRsa2048]
-IMAGE_HEADER_INIT_VERSION = 0x02
-IMAGE_TYPE_ID = 4096267b-da0a-42eb-b5eb-fef31d207cb4 # PcdSystemFmpCapsuleImageTypeIdGuid
-IMAGE_INDEX = 0x1
-HARDWARE_INSTANCE = 0x0
-MONOTONIC_COUNT = 0x2
-CERTIFICATE_GUID = A7717414-C616-4977-9420-844712A735BF # RSA2048SHA256
-
-FILE DATA = $(WORKSPACE)/$(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/FV/SYSTEMFIRMWAREUPDATECARGO.Fv
-
-[Capsule.Vlv2Rec]
-CAPSULE_GUID = 6dcbd5ed-e82d-4c44-bda1-7194199ad92a # gEfiFmpCapsuleGuid
-CAPSULE_FLAGS = PersistAcrossReset,InitiateReset
-CAPSULE_HEADER_SIZE = 0x20
-CAPSULE_HEADER_INIT_VERSION = 0x1
-
-FMP_PAYLOAD = FmpPayloadSystemFirmwareRsa2048
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleIA32.dsc
deleted file mode 100644
index 246347b8fa..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleIA32.dsc
+++ /dev/null
@@ -1,39 +0,0 @@
-#/** @file
-# Platform capsule description.
-#
-# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-#**/
-
-[Defines]
- PLATFORM_NAME = Vlv2TbltDevicePkg
- PLATFORM_GUID = EE87F258-6ECC-4415-B1D8-23771BEE26E7
- PLATFORM_VERSION = 0.1
- FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformCapsule.fdf
- OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkgIA32
- SUPPORTED_ARCHITECTURES = IA32|X64
- BUILD_TARGETS = DEBUG|RELEASE
- SKUID_IDENTIFIER = DEFAULT
- POSTBUILD = python Vlv2TbltDevicePkg/Feature/Capsule/GenerateCapsule/GenCapsuleAll.py
-
-###################################################################################################
-#
-# Components Section - list of the modules and components that will be processed by compilation
-# tools and the EDK II tools to generate PE32/PE32+/Coff image files.
-#
-# Note: The EDK II DSC file is not used to specify how compiled binary images get placed
-# into firmware volume images. This section is just a list of modules to compile from
-# source into UEFI-compliant binaries.
-# It is the FDF file that contains information on combining binary files into firmware
-# volume images, whose concept is beyond UEFI and is described in PI specification.
-# Binary modules do not need to be listed in this section, as they should be
-# specified in the FDF file. For example: Shell binary, FAT binary (Fat.efi),
-# Logo (Logo.bmp), and etc.
-# There may also be modules listed in this section that are not required in the FDF file,
-# When a module listed here is excluded from FDF file, then UEFI-compliant binary will be
-# generated for it, but the binary will not be put into any firmware volume.
-#
-###################################################################################################
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleX64.dsc
deleted file mode 100644
index 68bde30f83..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCapsuleX64.dsc
+++ /dev/null
@@ -1,39 +0,0 @@
-#/** @file
-# Platform capsule description.
-#
-# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-#**/
-
-[Defines]
- PLATFORM_NAME = Vlv2TbltDevicePkg
- PLATFORM_GUID = EE87F258-6ECC-4415-B1D8-23771BEE26E7
- PLATFORM_VERSION = 0.1
- FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformCapsule.fdf
- OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkgX64
- SUPPORTED_ARCHITECTURES = IA32|X64
- BUILD_TARGETS = DEBUG|RELEASE
- SKUID_IDENTIFIER = DEFAULT
- POSTBUILD = python Vlv2TbltDevicePkg/Feature/Capsule/GenerateCapsule/GenCapsuleAll.py
-
-###################################################################################################
-#
-# Components Section - list of the modules and components that will be processed by compilation
-# tools and the EDK II tools to generate PE32/PE32+/Coff image files.
-#
-# Note: The EDK II DSC file is not used to specify how compiled binary images get placed
-# into firmware volume images. This section is just a list of modules to compile from
-# source into UEFI-compliant binaries.
-# It is the FDF file that contains information on combining binary files into firmware
-# volume images, whose concept is beyond UEFI and is described in PI specification.
-# Binary modules do not need to be listed in this section, as they should be
-# specified in the FDF file. For example: Shell binary, FAT binary (Fat.efi),
-# Logo (Logo.bmp), and etc.
-# There may also be modules listed in this section that are not required in the FDF file,
-# When a module listed here is excluded from FDF file, then UEFI-compliant binary will be
-# generated for it, but the binary will not be put into any firmware volume.
-#
-###################################################################################################
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index e958c1ebf2..48058b663a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -711,9 +711,8 @@ [FV.FVMAIN_COMPACT]
!endif
}
-[FV.SETUP_DATA]
-BlockSize = $(FLASH_BLOCK_SIZE)
-#NumBlocks = 0x10
+!if $(RECOVERY_ENABLE)
+[FV.SystemFirmwareUpdateCargo]
FvAlignment = 16
ERASE_POLARITY = 1
MEMORY_MAPPED = TRUE
@@ -731,6 +730,31 @@ [FV.SETUP_DATA]
READ_LOCK_CAP = TRUE
READ_LOCK_STATUS = TRUE
+FILE RAW = AF9C9EB2-12AD-4D3E-A4D4-96F6C9966215 { # PcdEdkiiSystemFirmwareFileGuid
+ FD = Vlv
+# $(WORKSPACE)/$(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/FV/Vlv.fd
+ }
+
+[FmpPayload.FmpPayloadSystemFirmwareRsa2048]
+IMAGE_HEADER_INIT_VERSION = 0x02
+IMAGE_TYPE_ID = 4096267b-da0a-42eb-b5eb-fef31d207cb4 # PcdSystemFmpCapsuleImageTypeIdGuid
+IMAGE_INDEX = 0x1
+HARDWARE_INSTANCE = 0x0
+MONOTONIC_COUNT = 0x2
+CERTIFICATE_GUID = A7717414-C616-4977-9420-844712A735BF # RSA2048SHA256
+
+FV = SystemFirmwareUpdateCargo
+#FILE DATA = $(WORKSPACE)/$(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/FV/SYSTEMFIRMWAREUPDATECARGO.Fv
+
+[Capsule.Vlv2Rec]
+CAPSULE_GUID = 6dcbd5ed-e82d-4c44-bda1-7194199ad92a # gEfiFmpCapsuleGuid
+CAPSULE_FLAGS = PersistAcrossReset,InitiateReset
+CAPSULE_HEADER_SIZE = 0x20
+CAPSULE_HEADER_INIT_VERSION = 0x1
+
+FMP_PAYLOAD = FmpPayloadSystemFirmwareRsa2048
+!endif
+
################################################################################
#
# Rules are use with the [FV] section's module INF type to define
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 121ebc9eee..5149dd5aa4 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -23,6 +23,8 @@ [Defines]
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
VPD_TOOL_GUID = 8C3D856A-9BE6-468E-850A-24F7A8D38E08
+ PREBUILD = python Vlv2TbltDevicePkg/PreBuild.py
+ POSTBUILD = python Vlv2TbltDevicePkg/Feature/Capsule/GenerateCapsule/GenCapsuleAll.py
DEFINE RC_BINARY_RELEASE = TRUE
#
@@ -213,7 +215,7 @@ [LibraryClasses.common]
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
!endif
- BiosIdLib|BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.inf
+ BiosIdLib|BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.inf
StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
@@ -242,6 +244,10 @@ [LibraryClasses.common]
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
+!if $(RECOVERY_ENABLE)
+ EdkiiSystemCapsuleLib|SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.inf
+!endif
+
[LibraryClasses.IA32.SEC]
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -718,11 +724,10 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
-
-[PcdsDynamicExDefault.X64.DEFAULT]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid|{GUID("$(FMP_MINNOW_MAX_SYSTEM)")}|VOID*|0x10
!if $(RECOVERY_ENABLE)
+ gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor|{0x0}|VOID*|0x100
gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareFileGuid|{GUID("AF9C9EB2-12AD-4D3E-A4D4-96F6C9966215")}|VOID*|0x10
- gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid|{GUID("4096267b-da0a-42eb-b5eb-fef31d207cb4")}|VOID*|0x10
!endif
[PcdsDynamicExVpd.common.DEFAULT]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index 3e4087f919..466512242c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -23,6 +23,8 @@ [Defines]
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
VPD_TOOL_GUID = 8C3D856A-9BE6-468E-850A-24F7A8D38E08
+ PREBUILD = python Vlv2TbltDevicePkg/PreBuild.py
+ POSTBUILD = python Vlv2TbltDevicePkg/Feature/Capsule/GenerateCapsule/GenCapsuleAll.py
DEFINE RC_BINARY_RELEASE = TRUE
#
@@ -215,7 +217,7 @@ [LibraryClasses.common]
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
!endif
- BiosIdLib|BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.inf
+ BiosIdLib|BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.inf
StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
@@ -244,6 +246,10 @@ [LibraryClasses.common]
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
+!if $(RECOVERY_ENABLE)
+ EdkiiSystemCapsuleLib|SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.inf
+!endif
+
[LibraryClasses.IA32.SEC]
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -720,11 +726,10 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
-
-[PcdsDynamicExDefault.X64.DEFAULT]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid|{GUID("$(FMP_MINNOW_MAX_SYSTEM)")}|VOID*|0x10
!if $(RECOVERY_ENABLE)
+ gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor|{0x0}|VOID*|0x100
gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareFileGuid|{GUID("AF9C9EB2-12AD-4D3E-A4D4-96F6C9966215")}|VOID*|0x10
- gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid|{GUID("4096267b-da0a-42eb-b5eb-fef31d207cb4")}|VOID*|0x10
!endif
[PcdsDynamicExVpd.common.DEFAULT]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PreBuild.py b/Platform/Intel/Vlv2TbltDevicePkg/PreBuild.py
new file mode 100644
index 0000000000..220515c809
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PreBuild.py
@@ -0,0 +1,348 @@
+## @file
+# PreBuild operations for Vlv2TbltDevicePkg
+#
+# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+'''
+PreBuild
+'''
+
+import os
+import sys
+import argparse
+import subprocess
+import glob
+import shutil
+import struct
+import datetime
+
+#
+# Globals for help information
+#
+__prog__ = 'PreBuild'
+__copyright__ = 'Copyright (c) 2019, Intel Corporation. All rights reserved.'
+__description__ = 'Vlv2Tbl2DevicePkg pre-build operations.\n'
+
+#
+# Globals
+#
+gWorkspace = ''
+gBaseToolsPath = ''
+gArgs = None
+
+def LogAlways(Message):
+ sys.stdout.write (__prog__ + ': ' + Message + '\n')
+ sys.stdout.flush()
+
+def Log(Message):
+ global gArgs
+ if not gArgs.Verbose:
+ return
+ sys.stdout.write (__prog__ + ': ' + Message + '\n')
+ sys.stdout.flush()
+
+def Error(Message, ExitValue=1):
+ sys.stderr.write (__prog__ + ': ERROR: ' + Message + '\n')
+ sys.exit (ExitValue)
+
+def RelativePath(target):
+ global gWorkspace
+ Log('RelativePath' + target)
+ return os.path.relpath (target, gWorkspace)
+
+def NormalizePath(target):
+ if isinstance(target, tuple):
+ return os.path.normpath (os.path.join (*target))
+ else:
+ return os.path.normpath (target)
+
+def RemoveFile(target):
+ target = NormalizePath(target)
+ if not target or target == os.pathsep:
+ Error ('RemoveFile() invalid target')
+ if os.path.exists(target):
+ os.remove (target)
+ Log ('remove %s' % (RelativePath (target)))
+
+def RemoveDirectory(target):
+ target = NormalizePath(target)
+ if not target or target == os.pathsep:
+ Error ('RemoveDirectory() invalid target')
+ if os.path.exists(target):
+ Log ('rmdir %s' % (RelativePath (target)))
+ shutil.rmtree(target)
+
+def CreateDirectory(target):
+ target = NormalizePath(target)
+ if not os.path.exists(target):
+ Log ('mkdir %s' % (RelativePath (target)))
+ os.makedirs (target)
+
+def Copy(src, dst):
+ src = NormalizePath(src)
+ dst = NormalizePath(dst)
+ for File in glob.glob(src):
+ Log ('copy %s -> %s' % (RelativePath (File), RelativePath (dst)))
+ shutil.copy (File, dst)
+
+def GenCapsuleDevice (BaseName, PayloadFileName, Guid, Version, Lsv, CapsulesPath, CapsulesSubDir):
+ global gBaseToolsPath
+ LogAlways ('Generate Capsule: {0} {1:08x} {2:08x} {3}'.format (Guid, Version, Lsv, PayloadFileName))
+
+ VersionString = '.'.join([str(ord(x)) for x in struct.pack('>I', Version).decode()])
+
+ FmpCapsuleFile = NormalizePath ((CapsulesPath, CapsulesSubDir, BaseName + '.' + VersionString + '.cap'))
+ Command = GenerateCapsuleCommand.format (
+ FMP_CAPSULE_GUID = Guid,
+ FMP_CAPSULE_VERSION = Version,
+ FMP_CAPSULE_LSV = Lsv,
+ BASE_TOOLS_PATH = gBaseToolsPath,
+ FMP_CAPSULE_FILE = FmpCapsuleFile,
+ FMP_CAPSULE_PAYLOAD = PayloadFileName
+ )
+ Command = ' '.join(Command.splitlines()).strip()
+ if gArgs.Verbose:
+ Command = Command + ' -v'
+
+ Log (Command)
+
+ Process = subprocess.Popen(Command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+ ProcessOutput = Process.communicate()
+
+ if Process.returncode == 0:
+ Log (ProcessOutput[0].decode())
+ else:
+ LogAlways (Command)
+ LogAlways (ProcessOutput[0].decode())
+ Error ('GenerateCapsule returned an error')
+
+ Copy (PayloadFileName, (CapsulesPath, 'firmware.bin'))
+ MetaInfoXml = MetaInfoXmlTemplate
+ MetaInfoXml = MetaInfoXml.replace ('FMP_CAPSULE_GUID', Guid)
+ MetaInfoXml = MetaInfoXml.replace ('FMP_CAPSULE_BASE_NAME', BaseName)
+ MetaInfoXml = MetaInfoXml.replace ('FMP_CAPSULE_VERSION_DECIMAL', str(Version))
+ MetaInfoXml = MetaInfoXml.replace ('FMP_CAPSULE_STRING', VersionString)
+ MetaInfoXml = MetaInfoXml.replace ('FMP_CAPSULE_DATE', str(datetime.date.today()))
+ f = open (NormalizePath ((CapsulesPath, 'firmware.metainfo.xml')), 'w')
+ f.write(MetaInfoXml)
+ f.close()
+
+ f = open (NormalizePath ((CapsulesPath, 'Lvfs.ddf')), 'w')
+ f.write(LvfsDdfTemplate)
+ f.close()
+
+ if sys.platform == "win32":
+ Command = 'makecab /f ' + NormalizePath ((CapsulesPath, 'Lvfs.ddf'))
+ else:
+ Command = 'gcab --create firmware.cab firmware.bin firmware.metainfo.xml'
+ Log (Command)
+
+ Process = subprocess.Popen(Command, cwd=CapsulesPath, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+ ProcessOutput = Process.communicate()
+
+ if Process.returncode == 0:
+ Log (ProcessOutput[0].decode())
+ else:
+ LogAlways (Command)
+ LogAlways (ProcessOutput[0].decode())
+ Error ('GenerateCapsule returned an error')
+
+ FmpCabinetFile = NormalizePath ((CapsulesPath, CapsulesSubDir, BaseName + '.' + VersionString + '.cab'))
+
+ Copy ((CapsulesPath, 'firmware.cab'), FmpCabinetFile)
+
+ RemoveFile ((CapsulesPath, 'firmware.cab'))
+ RemoveFile ((CapsulesPath, 'setup.inf'))
+ RemoveFile ((CapsulesPath, 'setup.rpt'))
+ RemoveFile ((CapsulesPath, 'Lvfs.ddf'))
+ RemoveFile ((CapsulesPath, 'firmware.metainfo.xml'))
+ RemoveFile ((CapsulesPath, 'firmware.bin'))
+
+BiosIdTemplate = '''
+BOARD_ID = MNW2MAX
+BOARD_REV = $BOARD_REV
+BOARD_EXT = $ARCH
+VERSION_MAJOR = 0090
+BUILD_TYPE = $BUILD_TYPE
+VERSION_MINOR = 01
+'''
+
+
+if __name__ == '__main__':
+ #
+ # Create command line argument parser object
+ #
+ parser = argparse.ArgumentParser (
+ prog = __prog__,
+ description = __description__ + __copyright__,
+ conflict_handler = 'resolve'
+ )
+ parser.add_argument (
+ '-a', '--arch', dest = 'Arch', nargs = '+', action = 'append',
+ required = True,
+ help = '''ARCHS is one of list: IA32, X64, IPF, ARM, AARCH64 or EBC,
+ which overrides target.txt's TARGET_ARCH definition. To
+ specify more archs, please repeat this option.'''
+ )
+ parser.add_argument (
+ '-t', '--tagname', dest = 'ToolChain', required = True,
+ help = '''Using the Tool Chain Tagname to build the platform,
+ overriding target.txt's TOOL_CHAIN_TAG definition.'''
+ )
+ parser.add_argument (
+ '-p', '--platform', dest = 'PlatformFile', required = True,
+ help = '''Build the platform specified by the DSC file name argument,
+ overriding target.txt's ACTIVE_PLATFORM definition.'''
+ )
+ parser.add_argument (
+ '-b', '--buildtarget', dest = 'BuildTarget', required = True,
+ help = '''Using the TARGET to build the platform, overriding
+ target.txt's TARGET definition.'''
+ )
+ parser.add_argument (
+ '--conf=', dest = 'ConfDirectory', required = True,
+ help = '''Specify the customized Conf directory.'''
+ )
+ parser.add_argument (
+ '-D', '--define', dest = 'Define', nargs='*', action = 'append',
+ help = '''Macro: "Name [= Value]".'''
+ )
+ parser.add_argument (
+ '-v', '--verbose', dest = 'Verbose', action = 'store_true',
+ help = '''Turn on verbose output with informational messages printed'''
+ )
+ parser.add_argument (
+ '--package', dest = 'Package', nargs = '*', action = 'append',
+ help = '''The directory name of a package of tests to copy'''
+ )
+
+ #
+ # Parse command line arguments
+ #
+ gArgs, remaining = parser.parse_known_args()
+ gArgs.BuildType = 'all'
+ for BuildType in ['all', 'fds', 'genc', 'genmake', 'clean', 'cleanall', 'modules', 'libraries', 'run']:
+ if BuildType in remaining:
+ gArgs.BuildType = BuildType
+ remaining.remove(BuildType)
+ break
+ gArgs.Remaining = ' '.join(remaining)
+
+ #
+ # Get WORKSPACE environment variable
+ #
+ try:
+ gWorkspace = os.environ['WORKSPACE']
+ except:
+ Error ('WORKSPACE environment variable not set')
+
+ #
+ # Get PACKAGES_PATH and generate prioritized list of paths
+ #
+ PathList = [gWorkspace]
+ try:
+ PathList += os.environ['PACKAGES_PATH'].split(os.pathsep)
+ except:
+ pass
+
+ #
+ # Determine full path to BaseTools
+ #
+ Vlv2Tbl2DevicePkgPath = ''
+ for Path in PathList:
+ if gBaseToolsPath == '':
+ if os.path.exists (os.path.join (Path, 'BaseTools')):
+ gBaseToolsPath = os.path.join (Path, 'BaseTools')
+ if Vlv2Tbl2DevicePkgPath == '':
+ if os.path.exists (os.path.join (Path, 'Vlv2TbltDevicePkg')):
+ Vlv2Tbl2DevicePkgPath = os.path.join (Path, 'Vlv2TbltDevicePkg')
+ if gBaseToolsPath == '':
+ Error ('Can not find BaseTools in WORKSPACE or PACKAGES_PATH')
+ if Vlv2Tbl2DevicePkgPath == '':
+ Error ('Can not find Vlv2Tbl2DevicePkg in WORKSPACE or PACKAGES_PATH')
+
+ #
+ # Parse OUTPUT_DIRECTORY from DSC file
+ #
+ for Path in PathList:
+ if os.path.exists (os.path.join (Path, gArgs.PlatformFile)):
+ Dsc = open (os.path.join (Path, gArgs.PlatformFile), 'r').readlines()
+ break
+ for Line in Dsc:
+ if Line.strip().startswith('OUTPUT_DIRECTORY'):
+ OutputDirectory = Line.strip().split('=')[1].strip()
+ break
+
+ #
+ # Determine full paths to EDK II build directory, EDK II build output
+ # directory and the CPU arch of the UEFI phase.
+ #
+ CommandDir = os.path.dirname(sys.argv[0])
+ EdkiiBuildDir = os.path.join (gWorkspace, OutputDirectory)
+ EdkiiBuildOutput = os.path.join (EdkiiBuildDir, gArgs.BuildTarget + '_' + gArgs.ToolChain)
+ UefiArch = gArgs.Arch[0][0]
+ if len (gArgs.Arch) > 1:
+ if ['X64'] in gArgs.Arch:
+ UefiArch = 'X64'
+
+ if gArgs.BuildType == 'run':
+ Error ("'run' target not supported")
+ if gArgs.BuildType == 'clean':
+ sys.exit (0)
+
+ #
+ # Create output directories to put BiosId files
+ #
+ try:
+ CreateDirectory ((gWorkspace, 'Build'))
+ except:
+ pass
+ try:
+ CreateDirectory ((EdkiiBuildDir))
+ except:
+ pass
+ try:
+ CreateDirectory ((EdkiiBuildOutput))
+ except:
+ pass
+
+ #
+ # Generate BiosId files
+ #
+ BiosId = BiosIdTemplate
+ if sys.platform == "win32":
+ # Built from a Windows Host OS
+ BiosId = BiosId.replace ('$BOARD_REV', 'W')
+ else:
+ # Built from a Linux/Unix/Mac Host OS
+ BiosId = BiosId.replace ('$BOARD_REV', 'L')
+ if UefiArch == 'X64':
+ BiosId = BiosId.replace ('$ARCH', 'X64')
+ else:
+ BiosId = BiosId.replace ('$ARCH', 'I32')
+ BiosId = BiosId.replace ('$BUILD_TYPE', gArgs.BuildTarget[0])
+
+ BiosIdFileName = NormalizePath ((EdkiiBuildOutput, 'BiosId.env'))
+ f = open (BiosIdFileName, 'w')
+ f.write(BiosId)
+ f.close()
+
+ Command = 'python ' + NormalizePath ((Vlv2Tbl2DevicePkgPath, '../Tools/GenBiosId/GenBiosId.py'))
+ Command = Command + ' -i ' + BiosIdFileName
+ Command = Command + ' -o ' + NormalizePath ((EdkiiBuildOutput, 'BiosId.bin'))
+ Command = Command + ' -ot ' + NormalizePath ((EdkiiBuildOutput, 'BiosId.txt'))
+
+ LogAlways (Command)
+
+ Process = subprocess.Popen(Command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+ ProcessOutput = Process.communicate()
+
+ if Process.returncode == 0:
+ Log (ProcessOutput[0].decode())
+ else:
+ LogAlways (Command)
+ LogAlways (ProcessOutput[0].decode())
+ Error ('GenBiosId returned an error')
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Readme.md b/Platform/Intel/Vlv2TbltDevicePkg/Readme.md
index 97180ef7af..b52c23fdec 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Readme.md
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Readme.md
@@ -57,12 +57,15 @@ powershell Expand-Archive nasm-2.13.03-win64.zip .
set WORKSPACE=%CD%
set PACKAGES_PATH=%WORKSPACE%\edk2;%WORKSPACE%\edk2-platforms\Silicon\Intel;%WORKSPACE%\edk2-platforms\Platform\Intel;%WORKSPACE%\edk2-non-osi\Silicon\Intel
+set EDK_TOOLS_PATH=%WORKSPACE%\edk2\BaseTools
path=%path%;%WORKSPACE%\openssl-1.0.2r-x64_86-win64
set NASM_PREFIX=%WORKSPACE%\nasm-2.13.03\
-cd edk2-platforms\Platform\Intel\Vlv2TbltDevicePkg
+cd %WORKSPACE%\edk2
-Build_IFWI.bat /m MNW2 Debug
+edksetup.bat Rebuild
+
+build -a IA32 -a X64 -n 5 -t VS2015x86 -b DEBUG -p Vlv2TbltDevicePkg\PlatformPkgX64.dsc
```
Once all the code and tools are downloaded and installed, only the following
@@ -72,8 +75,14 @@ directory used to install the source and binaries.
```
set WORKSPACE=%CD%
set PACKAGES_PATH=%WORKSPACE%\edk2;%WORKSPACE%\edk2-platforms\Silicon\Intel;%WORKSPACE%\edk2-platforms\Platform\Intel;%WORKSPACE%\edk2-non-osi\Silicon\Intel
+set EDK_TOOLS_PATH=%WORKSPACE%\edk2\BaseTools
path=%path%;%WORKSPACE%\openssl-1.0.2r-x64_86-win64
set NASM_PREFIX=%WORKSPACE%\nasm-2.13.03\
+
+cd %WORKSPACE%\edk2
+
+edksetup.bat Rebuild
+
```
Once the environment is setup, the MinnowBoard MAX firmware and capsules can be
@@ -82,39 +91,43 @@ rebuilt using the following commands.
* Build X64 Debug Image with report file
```
-cd edk2-platforms\Platform\Intel\Vlv2TbltDevicePkg
-Build_IFWI.bat /m /y MNW2 Debug
+build -a IA32 -a X64 -n 5 -t VS2015x86 -b DEBUG -p Vlv2TbltDevicePkg\PlatformPkgX64.dsc -y Vlv.report
```
* Build X64 Release Image with build log
```
-cd edk2-platforms\Platform\Intel\Vlv2TbltDevicePkg
-Build_IFWI.bat /m /l MNW2 Release
+build -a IA32 -a X64 -n 5 -t VS2015x86 -b RELEASE Vlv2TbltDevicePkg\PlatformPkgX64.dsc -j Vlv.log
```
* Build IA32 Debug Image
```
-cd edk2-platforms\Platform\Intel\Vlv2TbltDevicePkg
-Build_IFWI.bat /m /IA32 MNW2 Debug
+build -a IA32 -n 5 -t VS2015x86 -b DEBUG -p Vlv2TbltDevicePkg\PlatformPkgIA32.dsc
```
The generated firmware image is the build output directory below WORKSPACE. For
exampple, the X64 Debug Image is at:
-`Build\Vlv2TbltDevicePkg\DEBUG_VS2015x86\FV\Vlv.ROM`
+`Build\Vlv2TbltDevicePkgX64\DEBUG_VS2015x86\FV\Vlv.fd`
And the IA32 Release image is at:
-`Build\Vlv2TbltDevicePkgIA32\RELEASE_VS2015x86\FV\Vlv.ROM`
+`Build\Vlv2TbltDevicePkgIA32\RELEASE_VS2015x86\FV\Vlv.fd`
The X64 CapsuleApp and generated UEFI Capsules are in the directory
-`Build\Vlv2TbltDevicePkg\Capsules`
+`Build\Vlv2TbltDevicePkgX64\Capsules`
# Linux Pre-requisites
+* git
+* python
+* iasl
+* nasm
+* openssl
+* gcab
+
# Download and Build MinnowMax using Linux/GCC
Run the script below from an empty directory. The script clones the EDK II
@@ -132,10 +145,12 @@ git clone https://github.com/tianocore/edk2-platforms.git
git clone https://github.com/tianocore/edk2-non-osi.git
export WORKSPACE=$PWD
+export PACKAGES_PATH=$WORKSPACE/edk2;$WORKSPACE/edk2-platforms/Silicon/Intel;$WORKSPACE/edk2-platforms/Platform/Intel;$WORKSPACE/edk2-non-osi/Silicon/Intel
+cd $WORKSPACE/edk2
-cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
+. edksetup.sh BaseTools Rebuild
-./Build_IFWI.sh /m MNW2 Debug
+build -a IA32 -a X64 -n 5 -t GCC5 -b DEBUG -p Vlv2TbltDevicePkg/PlatformPkgX64.dsc
```
Once all the code is downloaded and installed, only the following commands are
@@ -144,6 +159,10 @@ install the source and binaries.
```
export WORKSPACE=$PWD/edk2
+export PACKAGES_PATH=$WORKSPACE/edk2;$WORKSPACE/edk2-platforms/Silicon/Intel;$WORKSPACE/edk2-platforms/Platform/Intel;$WORKSPACE/edk2-non-osi/Silicon/Intel
+cd $WORKSPACE/edk2
+
+. edksetup.sh BaseTools Rebuild
```
Once the environment is setup, the MinnowBoard MAX firmware and capsules can be
@@ -152,36 +171,33 @@ rebuilt using the following commands.
* Build X64 Debug Image with report file
```
-cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
-./Build_IFWI.sh /m /y MNW2 Debug
+build -a IA32 -a X64 -n 5 -t GCC5 -b DEBUG -p Vlv2TbltDevicePkg/PlatformPkgX64.dsc -y Vlv.report
```
* Build X64 Release Image with build log
```
-cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
-./Build_IFWI.sh /m /l MNW2 Release
+build -a IA32 -a X64 -n 5 -t GCC5 -b RELEASE -p Vlv2TbltDevicePkg/PlatformPkgX64.dsc -j Vlv.log
```
* Build IA32 Debug Image
```
-cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
-./Build_IFWI.sh /m /IA32 MNW2 Debug
+build -a IA32 -n 5 -t GCC5 -b DEBUG -p Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
```
The generated firmware image is the build output directory below WORKSPACE. For
exampple, the X64 Debug Image is at:
-`Build/Vlv2TbltDevicePkg/DEBUG_GCC5/FV/Vlv.ROM`
+`Build/Vlv2TbltDevicePkgX64/DEBUG_GCC5/FV/Vlv.fd`
And the IA32 Release image is at:
-`Build/Vlv2TbltDevicePkgIA32/RELEASE_GCC5/FV/Vlv.ROM`
+`Build/Vlv2TbltDevicePkgIA32/RELEASE_GCC5/FV/Vlv.fd`
The X64 CapsuleApp and generated UEFI Capsules are in the directory
-`Build/Vlv2TbltDevicePkg/Capsules`
+`Build/Vlv2TbltDevicePkgX64/Capsules`
# Use DediProg to update FLASH image on a MinnowBoard MAX Target
@@ -192,7 +208,7 @@ The X64 CapsuleApp and generated UEFI Capsules are in the directory
* Boot MinnowBoard MAX to the Boot Manager
* Boot the `EFI Internal Shell` boot option
* Mount the USB FLASH Drive (usually `FS1`)
-* Use `cd` command to go to `Capsules/TestCert` directory
+* Use `cd` command to go to `Capsules/TestCert_*` directory
* Run the following command to apply all four capsules
```
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
deleted file mode 100644
index fb634c490c..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
+++ /dev/null
@@ -1,303 +0,0 @@
-@REM @file
-@REM Windows batch file to build BIOS ROM
-@REM
-@REM Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
-@REM SPDX-License-Identifier: BSD-2-Clause-Patent
-@REM
-
-@echo off
-setlocal EnableDelayedExpansion EnableExtensions
-echo.
-echo %date% %time%
-echo.
-
-::**********************************************************************
-:: Initial Setup
-::**********************************************************************
-if %WORKSPACE:~-1%==\ set WORKSPACE=%WORKSPACE:~0,-1%
-set /a build_threads=1
-set "Build_Flags= "
-set exitCode=0
-set Arch=X64
-set GenLog=FALSE
-set GenReport=FALSE
-set Clean=FALSE
-set PLATFORM_NAME=Vlv2TbltDevicePkg
-
-::**********************************************************************
-:: Detect full path to the edk2 repo
-::**********************************************************************
-set CORE_PATH=%WORKSPACE%
-if not exist %CORE_PATH%\edksetup.bat (
- if defined PACKAGES_PATH (
- for %%i IN (%PACKAGES_PATH%) DO (
- if exist %%~fi\edksetup.bat (
- set CORE_PATH=%%~fi
- goto CorePathFound
- )
- )
- ) else (
- echo.
- echo !!! ERROR !!! Cannot find edksetup.bat !!!
- echo.
- goto BldFail
- )
-)
-:CorePathFound
-
-::**********************************************************************
-:: Detect full path to the Vlv2TbltDevicePkg
-::**********************************************************************
-set PLATFORM_PACKAGE=%WORKSPACE%\%PLATFORM_NAME%
-if not exist %PLATFORM_PACKAGE% (
- if defined PACKAGES_PATH (
- for %%i IN (%PACKAGES_PATH%) DO (
- if exist %%~fi\%PLATFORM_NAME% (
- set PLATFORM_PACKAGE=%%~fi\%PLATFORM_NAME%
- goto PlatformPackageFound
- )
- )
- ) else (
- echo.
- echo !!! ERROR !!! Cannot find %PLATFORM_NAME% !!!
- echo.
- goto BldFail
- )
-)
-:PlatformPackageFound
-
-cd %CORE_PATH%
-
-::**********************************************************************
-:: Run edksetup.bat and make sure tools are up to date
-::**********************************************************************
-
-call %CORE_PATH%\edksetup.bat Rebuild
-@echo off
-
-::**********************************************************************
-:: Parse command line arguments
-::**********************************************************************
-
-:: Optional arguments
-:OptLoop
-if /i "%~1"=="/?" goto Usage
-
-if /i "%~1"=="/l" (
- set GenLog=TRUE
- shift
- goto OptLoop
-)
-if /i "%~1"=="/y" (
- set GenReport=TRUE
- shift
- goto OptLoop
-)
-if /i "%~1"=="/m" (
- if defined NUMBER_OF_PROCESSORS (
- set /a build_threads=%NUMBER_OF_PROCESSORS%+1
- )
- shift
- goto OptLoop
-)
-if /i "%~1" == "/c" (
- set Clean=TRUE
- shift
- goto OptLoop
-)
-
-if /i "%~1"=="/x64" (
- set Arch=X64
- shift
- goto OptLoop
-)
-if /i "%~1"=="/IA32" (
- set Arch=IA32
- shift
- goto OptLoop
-)
-
-:: Required argument(s)
-if "%~1"=="" goto Usage
-
-if /i "%~2" == "RELEASE" (
- set target=RELEASE
-) else (
- set target=DEBUG
-)
-
-::**********************************************************************
-:: Detect TOOL_CHAIN_TAG
-::**********************************************************************
-
-echo.
-echo Setting the Build environment for VS2015/VS2013/VS2012/VS2010/VS2008...
-if defined VS140COMNTOOLS (
- if not defined VSINSTALLDIR call "%VS140COMNTOOLS%\vsvars32.bat"
- if /I "%VS140COMNTOOLS%" == "C:\Program Files\Microsoft Visual Studio 14.0\Common7\Tools\" (
- set TOOL_CHAIN_TAG=VS2015
- ) else (
- set TOOL_CHAIN_TAG=VS2015x86
- )
-) else if defined VS120COMNTOOLS (
- if not defined VSINSTALLDIR call "%VS120COMNTOOLS%\vsvars32.bat"
- if /I "%VS120COMNTOOLS%" == "C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\" (
- set TOOL_CHAIN_TAG=VS2013
- ) else (
- set TOOL_CHAIN_TAG=VS2013x86
- )
-) else if defined VS110COMNTOOLS (
- if not defined VSINSTALLDIR call "%VS110COMNTOOLS%\vsvars32.bat"
- if /I "%VS110COMNTOOLS%" == "C:\Program Files\Microsoft Visual Studio 11.0\Common7\Tools\" (
- set TOOL_CHAIN_TAG=VS2012
- ) else (
- set TOOL_CHAIN_TAG=VS2012x86
- )
-) else if defined VS100COMNTOOLS (
- if not defined VSINSTALLDIR call "%VS100COMNTOOLS%\vsvars32.bat"
- if /I "%VS100COMNTOOLS%" == "C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\" (
- set TOOL_CHAIN_TAG=VS2010
- ) else (
- set TOOL_CHAIN_TAG=VS2010x86
- )
-) else if defined VS90COMNTOOLS (
- if not defined VSINSTALLDIR call "%VS90COMNTOOLS%\vsvars32.bat"
- if /I "%VS90COMNTOOLS%" == "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\" (
- set TOOL_CHAIN_TAG=VS2008
- ) else (
- set TOOL_CHAIN_TAG=VS2008x86
- )
-) else (
- echo --ERROR: VS2015/VS2013/VS2012/VS2010/VS2008 not installed correctly. VS140COMNTOOLS/VS120COMNTOOLS/VS110COMNTOOLS/VS100COMNTOOLS/VS90COMNTOOLS not defined ^^!
- echo.
- goto :BldFail
-)
-
-::**********************************************************************
-:: Generate BUILD_PATH and make sure the directory exists
-::**********************************************************************
-
-echo Ensuring correct build directory is present
-if not exist %WORKSPACE%\Build mkdir %WORKSPACE%\Build
-if not exist %WORKSPACE%\Build\%PLATFORM_NAME%%Arch% mkdir %WORKSPACE%\Build\%PLATFORM_NAME%%Arch%
-set BUILD_PATH=%WORKSPACE%\Build\%PLATFORM_NAME%%Arch%\%TARGET%_%TOOL_CHAIN_TAG%
-if not exist %BUILD_PATH% mkdir %BUILD_PATH%
-
-::**********************************************************************
-:: Check for clean operation
-::**********************************************************************
-
-if "%Clean%"=="TRUE" (
- echo Removing previous build files ...
- if exist %BUILD_PATH% (
- rmdir /s/q %BUILD_PATH%
- )
- if exist %WORKSPACE%\Conf\.cache (
- rmdir /s/q %WORKSPACE%\Conf\.cache
- )
- echo.
- goto :Exit
-)
-
-::**********************************************************************
-:: Generate Build_Flags
-::**********************************************************************
-
-set Build_Flags=%Build_Flags% -b %TARGET%
-if "%Arch%"=="IA32" (
- set Build_Flags=%Build_Flags% -a IA32
-) else if "%Arch%"=="X64" (
- set Build_Flags=%Build_Flags% -a IA32 -a X64
-)
-set Build_Flags=%Build_Flags% -t %TOOL_CHAIN_TAG%
-set Build_Flags=%Build_Flags% -n %build_threads%
-set Capsule_Build_Flags=%Build_Flags%
-set Build_Flags=%Build_Flags% -p %PLATFORM_PACKAGE%/PlatformPkg%Arch%.dsc
-if "%GenLog%"=="TRUE" (
- set Build_Flags=%Build_Flags% -j %BUILD_PATH%\%PLATFORM_NAME%.log
-)
-if "%GenReport%"=="TRUE" (
- set Build_Flags=%Build_Flags% -y %BUILD_PATH%\%PLATFORM_NAME%.report
-)
-
-::**********************************************************************
-:: Generate BIOS ID
-::**********************************************************************
-
-echo BOARD_ID = MNW2MAX > %BUILD_PATH%/BiosId.env
-echo BOARD_REV = W >> %BUILD_PATH%/BiosId.env
-if "%Arch%"=="IA32" (
- echo BOARD_EXT = I32 >> %BUILD_PATH%/BiosId.env
-)
-if "%Arch%"=="X64" (
- echo BOARD_EXT = X64 >> %BUILD_PATH%/BiosId.env
-)
-echo VERSION_MAJOR = 0090 >> %BUILD_PATH%/BiosId.env
-if "%TARGET%"=="DEBUG" (
- echo BUILD_TYPE = D >> %BUILD_PATH%/BiosId.env
-)
-if "%TARGET%"=="RELEASE" (
- echo BUILD_TYPE = R >> %BUILD_PATH%/BiosId.env
-)
-echo VERSION_MINOR = 01 >> %BUILD_PATH%/BiosId.env
-
-%WORKSPACE%\edk2-platforms\Platform\Intel\Tools\GenBiosId\GenBiosId.py -i %BUILD_PATH%/BiosId.env -o %BUILD_PATH%/BiosId.bin -ot %BUILD_PATH%/BiosId.txt
-
-::**********************************************************************
-:: Build BIOS
-::**********************************************************************
-
-echo.
-echo Invoking EDK2 build...
-echo build %Build_Flags%
-
-call build %Build_Flags%
-
-if %ERRORLEVEL% NEQ 0 goto BldFail
-
-copy %BUILD_PATH%\FV\VLV.fd %BUILD_PATH%\FV\Vlv.ROM
-
-::**********************************************************************
-:: Build Capsules
-::**********************************************************************
-echo Invoking EDK2 build for capsules...
-echo build %Capsule_Build_Flags% -p %PLATFORM_PACKAGE%\PlatformCapsule%Arch%.dsc
-call build %Capsule_Build_Flags% -p %PLATFORM_PACKAGE%\PlatformCapsule%Arch%.dsc
-
-goto Exit
-
-:Usage
-echo.
-echo ***************************************************************************
-echo Build BIOS rom for VLV platforms.
-echo.
-echo Usage: bld_vlv.bat [options] PlatformType [Build Target]
-echo.
-echo /c CleanAll
-echo /l Generate build log file
-echo /y Generate build report file
-echo /m Enable multi-processor build
-echo /IA32 Set Arch to IA32 (default: X64)
-echo /X64 Set Arch to X64 (default: X64)
-echo.
-echo Platform Types: MNW2
-echo Build Targets: Debug, Release (default: Debug)
-echo.
-echo Examples:
-echo bld_vlv.bat MNW2 : X64 Debug build for MinnowMax
-echo bld_vlv.bat /IA32 MNW2 release : IA32 Release build for MinnowMax
-echo.
-echo ***************************************************************************
-set exitCode=1
-goto Exit
-
-:BldFail
-set exitCode=1
-echo -- Error: EDKII BIOS Build has failed!
-echo See EDK2.log for more details
-
-:Exit
-echo %date% %time%
-exit /b %exitCode%
-
-EndLocal
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
deleted file mode 100755
index c8db91c6dc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/usr/bin/env bash
-##**********************************************************************
-## Function define
-##**********************************************************************
-function Usage() {
- echo
- echo "***************************************************************************"
- echo "Build BIOS rom for VLV platforms."
- echo
- echo "Usage: bld_vlv.sh [options] PlatformType [Build Target]"
- echo
- echo " /c CleanAll"
- echo " /l Generate build log file"
- echo " /y Generate build report file"
- echo " /m Enable multi-processor build"
- echo " /IA32 Set Arch to IA32 (default: X64)"
- echo " /X64 Set Arch to X64 (default: X64)"
- echo
- echo " Platform Types: MNW2"
- echo " Build Targets: Debug, Release (default: Debug)"
- echo
- echo "Examples:"
- echo " bld_vlv.sh MNW2 : X64 Debug build for MinnowMax"
- echo " bld_vlv.sh /IA32 MNW2 release : IA32 Release build for MinnowMax"
- echo "***************************************************************************"
- exit 0
-}
-
-set -e
-
-cd ..
-echo -e $(date)
-##**********************************************************************
-## Initial Setup
-##**********************************************************************
-#build_threads=($NUMBER_OF_PROCESSORS)+1
-Build_Flags=
-exitCode=0
-build_threads=1
-Arch=X64
-GenLog=FALSE
-GenReport=FALSE
-Clean=FALSE
-
-
-export CORE_PATH=$WORKSPACE/edk2
-export PLATFORM_PATH=$WORKSPACE/edk2-platforms/Platform/Intel/
-export SILICON_PATH=$WORKSPACE/edk2-platforms/Silicon/Intel/
-export BINARY_PATH=$WORKSPACE/edk2-non-osi/Silicon/Intel/
-export PACKAGES_PATH=$PLATFORM_PATH:$SILICON_PATH:$BINARY_PATH:$CORE_PATH
-
-## Setup EDK environment. Edksetup puts new copies of target.txt, tools_def.txt, build_rule.txt in WorkSpace\Conf
-## Also run edksetup as soon as possible to avoid it from changing environment variables we're overriding
-cd $CORE_PATH
-. edksetup.sh BaseTools
-make -C BaseTools
-
-## Define platform specific environment variables.
-PLATFORM_NAME=Vlv2TbltDevicePkg
-PLATFORM_PACKAGE=Vlv2TbltDevicePkg
-PLATFORM_PKG_PATH=$PLATFORM_PATH/$PLATFORM_PACKAGE
-
-cd $PLATFORM_PKG_PATH
-
-##**********************************************************************
-## Parse command line arguments
-##**********************************************************************
-
-## Optional arguments
-for (( i=1; i<=$#; ))
- do
- if [ "$1" == "/?" ]; then
- Usage
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/L" ]; then
- GenLog=TRUE
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/Y" ]; then
- GenReport=TRUE
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/M" ]; then
- build_threads=8
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/C" ]; then
- Clean=TRUE
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/X64" ]; then
- Arch=X64
- shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/IA32" ]; then
- Arch=IA32
- shift
- else
- break
- fi
- done
-
-## Required argument(s)
-if [ "$2" == "" ]; then
- Usage
-fi
-
-echo "Setting $1 platform configuration and BIOS ID..."
-
-if [ "$(echo $2 | tr 'a-z' 'A-Z')" == "RELEASE" ]; then
- export TARGET=RELEASE
-else
- export TARGET=DEBUG
-fi
-
-##**********************************************************************
-## Detect TOOL_CHAIN_TAG
-##**********************************************************************
-gcc_version=$(gcc -v 2>&1 | tail -1 | awk '{print $3}')
-case $gcc_version in
- [1-3].*|4.[0-7].*)
- echo MNW2 requires GCC4.8 or later
- exit 1
- ;;
- 4.8.*)
- export TOOL_CHAIN_TAG=GCC48
- ;;
- 4.9.*|6.[0-2].*)
- export TOOL_CHAIN_TAG=GCC49
- ;;
- *)
- export TOOL_CHAIN_TAG=GCC5
- ;;
-esac
-
-##**********************************************************************
-## Generate $BUILD_PATH and make sure the directory exists
-##**********************************************************************
-if [ ! -d ${WORKSPACE}/Build ]; then
- mkdir ${WORKSPACE}/Build
-fi
-
-if [ ! -d ${WORKSPACE}/Build/${PLATFORM_NAME}${Arch} ]; then
- mkdir ${WORKSPACE}/Build/${PLATFORM_NAME}${Arch}
-fi
-BUILD_PATH=${WORKSPACE}/Build/${PLATFORM_NAME}${Arch}/${TARGET}_${TOOL_CHAIN_TAG}
-
-if [ ! -d $BUILD_PATH ]; then
- mkdir $BUILD_PATH
-fi
-
-##**********************************************************************
-## Check for clean operation
-##**********************************************************************
-if [ $Clean == "TRUE" ]; then
- echo Removing previous build files ...
- if [ -d ${BUILD_PATH} ]; then
- rm -r ${BUILD_PATH}
- fi
- if [ -d ${WORKSPACE}/Conf/.cache ]; then
- rm -r ${WORKSPACE}/Conf/.cache
- fi
- exit 0
-fi
-
-##**********************************************************************
-## Generate Build_Flags
-##**********************************************************************
-
-Build_Flags="$Build_Flags -b $TARGET"
-if [ $Arch == "IA32" ]; then
- Build_Flags="$Build_Flags -a IA32"
-else
- Build_Flags="$Build_Flags -a IA32 -a X64"
-fi
-Build_Flags="$Build_Flags -t $TOOL_CHAIN_TAG"
-Build_Flags="$Build_Flags -n $build_threads"
-Capsule_Build_Flags="$Build_Flags"
-Build_Flags="$Build_Flags -p ${PLATFORM_PKG_PATH}/PlatformPkg${Arch}.dsc"
-if [ $GenLog == "TRUE" ]; then
- Build_Flags="$Build_Flags -j ${BUILD_PATH}/${PLATFORM_NAME}.log"
-fi
-if [ $GenReport == "TRUE" ]; then
- Build_Flags="$Build_Flags -y ${BUILD_PATH}/${PLATFORM_NAME}.report"
-fi
-
-##**********************************************************************
-## Generate BIOS ID
-##**********************************************************************
-
-echo BOARD_ID = MNW2MAX > $BUILD_PATH/BiosId.env
-echo BOARD_REV = L >> $BUILD_PATH/BiosId.env
-if [ $Arch == "IA32" ]; then
- echo BOARD_EXT = I32 >> $BUILD_PATH/BiosId.env
-fi
-if [ $Arch == "X64" ]; then
- echo BOARD_EXT = X64 >> $BUILD_PATH/BiosId.env
-fi
-echo VERSION_MAJOR = 0090 >> $BUILD_PATH/BiosId.env
-if [ $TARGET == "DEBUG" ]; then
- echo BUILD_TYPE = D >> $BUILD_PATH/BiosId.env
-fi
-if [ $TARGET == "RELEASE" ]; then
- echo BUILD_TYPE = R >> $BUILD_PATH/BiosId.env
-fi
-echo VERSION_MINOR = 01 >> $BUILD_PATH/BiosId.env
-
-python $WORKSPACE/edk2-platforms/Platform/Intel/Tools/GenBiosId/GenBiosId.py -i $BUILD_PATH/BiosId.env -o $BUILD_PATH/BiosId.bin -ot $BUILD_PATH/BiosId.txt
-
-##**********************************************************************
-## Build BIOS
-##**********************************************************************
-echo "Invoking EDK2 build..."
-echo build $Build_Flags
-build $Build_Flags
-
-cp -f $BUILD_PATH/FV/VLV.fd $BUILD_PATH/FV/Vlv.ROM
-
-##**********************************************************************
-## Build Capsules
-##**********************************************************************
-echo "Invoking EDK2 build for capsules..."
-echo build $Capsule_Build_Flags -p $PLATFORM_PKG_PATH/PlatformCapsule${Arch}.dsc
-build $Capsule_Build_Flags -p $PLATFORM_PKG_PATH/PlatformCapsule${Arch}.dsc
-
-echo
-echo -------------------- The EDKII BIOS build has successfully completed. --------------------
-echo
--
2.21.0.windows.1
next prev parent reply other threads:[~2019-07-19 6:02 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-19 6:02 [edk2-platforms Patch V2 0/5] Vlv2Tbl2DevicePkg: Remove Linux/Windows differences Michael D Kinney
2019-07-19 6:02 ` [edk2-platforms Patch V2 1/5] Vlv2TbltDevicePkg/PlatformPei: Add boot mode detection Michael D Kinney
2019-07-19 6:02 ` [edk2-platforms Patch V2 2/5] Vlv2TbltDevicePkg: Convert use of FCE tool to Structured PCD Michael D Kinney
2019-07-19 6:02 ` [edk2-platforms Patch V2 3/5] Vlv2TbltDevicePkg: Remove Linux/GCC specific DSC/FDF files Michael D Kinney
2019-07-19 6:02 ` [edk2-platforms Patch V2 4/5] Vlv2TbltDevicePkg: Convert BAT/sh Capsule scripts to Python Michael D Kinney
2019-07-19 6:02 ` Michael D Kinney [this message]
2019-07-22 4:08 ` [edk2-devel] [edk2-platforms Patch V2 5/5] Vlv2Tbl2DevicePkg: Convert BAT/sh Build " Gary Lin
2019-07-22 17:24 ` Michael D Kinney
2019-07-19 6:42 ` [edk2-devel] [edk2-platforms Patch V2 0/5] Vlv2Tbl2DevicePkg: Remove Linux/Windows differences Liming Gao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190719060247.10132-6-michael.d.kinney@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox