diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c1b791..be94583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## [6.2.6] + +### Fixed + - Windows: fix print specifiers + - Support Stdlib logging in UEFI builds + +### Changed + - Windows: migrate to VS2022 + - Refactor package structure and file paths for UEFI build consistency + ## [6.2.5] ### Fixed diff --git a/CMakePresets.json b/CMakePresets.json index 87e78f7..d66a895 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -4,9 +4,9 @@ { "name": "base64", "displayName": "Windows x86-64 base", - "description": "Build x86-64 Release, VS2019", + "description": "Build x86-64 Release, VS2022", "hidden": true, - "generator": "Visual Studio 16 2019", + "generator": "Visual Studio 17 2022", "architecture": { "value": "x64", "strategy": "set" @@ -19,9 +19,9 @@ { "name": "base32", "displayName": "Windows x86 base", - "description": "Build x86 Release, VS2019", + "description": "Build x86 Release, VS2022", "hidden": true, - "generator": "Visual Studio 16 2019", + "generator": "Visual Studio 17 2022", "architecture": { "value": "Win32", "strategy": "set" @@ -34,7 +34,7 @@ { "name": "Release32Static", "displayName": "Windows x86 Release Static", - "description": "Build x86 Release, VS2019", + "description": "Build x86 Release, VS2022", "inherits": "base32", "binaryDir": "${sourceDir}/Release", "cacheVariables": { @@ -45,7 +45,7 @@ { "name": "Release32", "displayName": "Windows x86 Release", - "description": "Build x86 Release, VS2019", + "description": "Build x86 Release, VS2022", "inherits": "base32", "binaryDir": "${sourceDir}/Release", "cacheVariables": { @@ -55,7 +55,7 @@ { "name": "Release64", "displayName": "Windows x86-64 Release", - "description": "Build x86-64 Release, VS2019", + "description": "Build x86-64 Release, VS2022", "inherits": "base64", "binaryDir": "${sourceDir}/Release", "cacheVariables": { @@ -65,7 +65,7 @@ { "name": "Release64Static", "displayName": "Windows x86-64 Release Static", - "description": "Build x86-64 Release, VS2019", + "description": "Build x86-64 Release, VS2022", "inherits": "base64", "binaryDir": "${sourceDir}/Release", "cacheVariables": { @@ -76,7 +76,7 @@ { "name": "Release64AllStatic", "displayName": "Windows x86-64 Release Static", - "description": "Build x86-64 Release, VS2019", + "description": "Build x86-64 Release, VS2022", "inherits": "base64", "binaryDir": "${sourceDir}/Release", "cacheVariables": { @@ -89,7 +89,7 @@ { "name": "Debug64All", "displayName": "Windows x86-64 Debug All", - "description": "Build x86-64 Debug, VS2019, including test and samples", + "description": "Build x86-64 Debug, VS2022, including test and samples", "inherits": "base64", "binaryDir": "${sourceDir}/Debug", "cacheVariables": { @@ -101,7 +101,7 @@ { "name": "Debug64AllStatic", "displayName": "Windows x86-64 Debug Static All", - "description": "Build x86-64 Debug, VS2019, including test and samples", + "description": "Build x86-64 Debug, VS2022, including test and samples", "inherits": "base64", "binaryDir": "${sourceDir}/Debug", "cacheVariables": { diff --git a/MeTeePkg/MeTeePkg.dec.in b/MeTeePkg/MeTeePkg.dec.in index ddfe10c..8ed1eb8 100644 --- a/MeTeePkg/MeTeePkg.dec.in +++ b/MeTeePkg/MeTeePkg.dec.in @@ -8,11 +8,11 @@ PACKAGE_VERSION = 0.1 [Includes] - @METEE_INCLUDE_RELPATH@ + Include [LibraryClasses] ## @libraryclass Provides MeTee interface functions - MeTeeLib|include/metee.h + MeTeeLib|Include/metee.h [Guids] gMeTeePkgTokenSpaceGuid = { 0x8e6a6715, 0x9abc, 0x4043, { 0x88, 0xef, 0x9e, 0x39, 0xc6, 0xf6, 0x3e, 0x0f }} diff --git a/MeTeePkg/MeTeePkg.dsc.in b/MeTeePkg/MeTeePkg.dsc.in index bfb5f94..5f9fc79 100644 --- a/MeTeePkg/MeTeePkg.dsc.in +++ b/MeTeePkg/MeTeePkg.dsc.in @@ -27,6 +27,7 @@ BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf UefiLib|MdePkg/Library/UefiLib/UefiLib.inf +LibC|StdLib/LibC/LibC.inf DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf @@ -36,10 +37,10 @@ PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf -MeTeeLib|MeTeePkg/MeTeeLibrary/MeTeeLibrary.inf +MeTeeLib|MeTeePkg/Library/MeTeeLibrary/MeTeeLibrary.inf [Components] -MeTeePkg/MeTeeLibrary/MeTeeLibrary.inf +MeTeePkg/Library/MeTeeLibrary/MeTeeLibrary.inf @METEE_SAMPLES@ diff --git a/README.md b/README.md index 8081359..aa39317 100644 --- a/README.md +++ b/README.md @@ -11,15 +11,15 @@ ME TEE library uses CMake for both Linux and Windows builds. ### Windows -From the "Developer Command Prompt for VS 2019" with C compiler and CMake component installed: +From the "Developer Command Prompt for VS 2022" with C compiler and CMake component installed: 1. Go to sources directory: `cd ` 2. Create `build` directory: `mkdir build` -3. Run `cmake -G "Visual Studio 16 2019" -A ` from the `build` directory (best to set *build_arch* to Win32) +3. Run `cmake -G "Visual Studio 17 2022" -A ` from the `build` directory (best to set *build_arch* to Win32) 4. Run `cmake --build . --config Release --target package -j ` from the `build` directory to build an archive with all executables and libraries, *nproc* is the number of parallel threads in compilation, best to set to number of processor threads available By default, CMake links with dynamic runtime (/MD), set BUILD_MSVC_RUNTIME_STATIC to ON to link with static runtime (/MT): -`cmake -G "Visual Studio 16 2019" -A -DBUILD_MSVC_RUNTIME_STATIC=ON ` +`cmake -G "Visual Studio 17 2022" -A -DBUILD_MSVC_RUNTIME_STATIC=ON ` ### Linux @@ -47,13 +47,13 @@ ninja -v -C build/ ### Windows Visual Studio In order to use Visual Studio project meson requires to run under Visual Studio Command Prompt. -In case of Visual Studio 2019, you can use either *"x64 Native Tools Command Prompt for VS 2019"* +In case of Visual Studio 2022, you can use either *"x64 Native Tools Command Prompt for VS 2022"* or under powershell enter VisualStudio DevShell and then just continue with the [general setup](#general-setup) #### Powershell example setting: ```powershell - $installPath = &"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version 16.0 -property installationpath + $installPath = &"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version 17.0 -property installationpath Import-Module (Join-Path $installPath "Common7\Tools\Microsoft.VisualStudio.DevShell.dll") Enter-VsDevShell -VsInstallPath $installPath -SkipAutomaticLocation ``` diff --git a/VERSION b/VERSION index a6534bb..09d22fa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.2.5 +6.2.6 diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index e917896..c332424 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -15,9 +15,18 @@ target_link_libraries(metee-gsc metee) install(TARGETS metee-gsc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) if(EFI) - configure_file ( + set(_metee_gsc_stage "${CMAKE_BINARY_DIR}/MeTeePkg/Samples/MeTeeGsc") + configure_file( + "${PROJECT_SOURCE_DIR}/metee_gsc.c" + "${_metee_gsc_stage}/metee_gsc.c" COPYONLY + ) + configure_file( + "${PROJECT_SOURCE_DIR}/MeTeeGscMain.c" + "${_metee_gsc_stage}/MeTeeGscMain.c" COPYONLY + ) + configure_file( "${PROJECT_SOURCE_DIR}/MeTeeGsc.inf.in" - "${CMAKE_BINARY_DIR}/MeTeePkg/Samples/MeTeeGsc/MeTeeGsc.inf" + "${_metee_gsc_stage}/MeTeeGsc.inf" ) endif(EFI) @@ -38,9 +47,18 @@ target_link_libraries(metee-basic metee) install(TARGETS metee-basic RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) if(EFI) - configure_file ( + set(_metee_basic_stage "${CMAKE_BINARY_DIR}/MeTeePkg/Samples/MeTeeBasic") + configure_file( + "${PROJECT_SOURCE_DIR}/metee_basic.c" + "${_metee_basic_stage}/metee_basic.c" COPYONLY + ) + configure_file( + "${PROJECT_SOURCE_DIR}/MeTeeBasicMain.c" + "${_metee_basic_stage}/MeTeeBasicMain.c" COPYONLY + ) + configure_file( "${PROJECT_SOURCE_DIR}/MeTeeBasic.inf.in" - "${CMAKE_BINARY_DIR}/MeTeePkg/Samples/MeTeeBasic/MeTeeBasic.inf" + "${_metee_basic_stage}/MeTeeBasic.inf" ) endif(EFI) diff --git a/samples/MeTeeBasic.inf.in b/samples/MeTeeBasic.inf.in index a563eb1..55e116e 100644 --- a/samples/MeTeeBasic.inf.in +++ b/samples/MeTeeBasic.inf.in @@ -10,8 +10,8 @@ ENTRY_POINT = UefiMain [Sources] - ../samples/metee_basic.c - ../samples/MeTeeBasicMain.c + metee_basic.c + MeTeeBasicMain.c [Packages] MdePkg/MdePkg.dec diff --git a/samples/MeTeeGsc.inf.in b/samples/MeTeeGsc.inf.in index 8cab8df..d3df02d 100644 --- a/samples/MeTeeGsc.inf.in +++ b/samples/MeTeeGsc.inf.in @@ -10,8 +10,8 @@ ENTRY_POINT = UefiMain [Sources] - ../samples/metee_gsc.c - ../samples/MeTeeGscMain.c + metee_gsc.c + MeTeeGscMain.c [Packages] MdePkg/MdePkg.dec diff --git a/src/Windows/metee_winhelpers.c b/src/Windows/metee_winhelpers.c index 3d3977e..ada3999 100644 --- a/src/Windows/metee_winhelpers.c +++ b/src/Windows/metee_winhelpers.c @@ -83,7 +83,7 @@ TEESTATUS BeginOverlappedInternal(IN TEE_OPERATION operation, IN PTEEHANDLE hand if (ERROR_IO_PENDING != err) { status = Win32ErrorToTee(err); - ERRPRINT(handle, "Error in ReadFile/Write, error: %d\n", err); + ERRPRINT(handle, "Error in ReadFile/Write, error: %lu\n", err); } else { DBGPRINT(handle, "Pending in ReadFile/Write\n"); @@ -132,7 +132,7 @@ TEESTATUS EndOverlapped(IN PTEEHANDLE handle, IN EVENTHANDLE evt, IN DWORD milli err = GetLastError(); status = Win32ErrorToTee(err); - ERRPRINT(handle, "WaitForSingleObject reported error: %d\n", err); + ERRPRINT(handle, "WaitForSingleObject reported error: %lu\n", err); goto Cleanup; } @@ -140,7 +140,7 @@ TEESTATUS EndOverlapped(IN PTEEHANDLE handle, IN EVENTHANDLE evt, IN DWORD milli if (!GetOverlappedResult(impl_handle->handle, evt, pBytesTransferred, TRUE)) { err = GetLastError(); status = Win32ErrorToTee(err); - ERRPRINT(handle, "Error in GetOverlappedResult, error: %d\n", err); + ERRPRINT(handle, "Error in GetOverlappedResult, error: %lu\n", err); goto Cleanup; } @@ -198,7 +198,7 @@ TEESTATUS GetDevicePath(IN PTEEHANDLE handle, IN LPCGUID InterfaceGuid, if (deviceInterfaceListLength <= 1) { status = TEE_DEVICE_NOT_FOUND; - ERRPRINT(handle, "SetupDiGetClassDevs returned status %d\n", GetLastError()); + ERRPRINT(handle, "No device interfaces found (list length: %lu)\n", deviceInterfaceListLength); goto Cleanup; } @@ -304,20 +304,20 @@ TEESTATUS GetDeviceKind(IN PTEEHANDLE handle, IN OUT OPTIONAL char *kind, IN OUT prop_size = MAX_PATH; cr = CM_Get_Device_Interface_PropertyW(device_path_w, &DEVPKEY_Device_InstanceId, &prop_type, (PBYTE)instance_id, &prop_size, 0); if (cr != CR_SUCCESS) { - ERRPRINT(handle, "CM_Get_Device_Interface_Property: %d\n", cr); + ERRPRINT(handle, "CM_Get_Device_Interface_Property: %lu\n", cr); status = TEE_INTERNAL_ERROR; goto Cleanup; } if (DEVPROP_TYPE_STRING != prop_type) { - ERRPRINT(handle, "Invalid property type %d\n", prop_type); + ERRPRINT(handle, "Invalid property type %lu\n", prop_type); status = TEE_INTERNAL_ERROR; goto Cleanup; } cr = CM_Locate_DevNodeW(&devInstHandle, &instance_id[0], CM_LOCATE_DEVNODE_NORMAL); if (cr != CR_SUCCESS) { - ERRPRINT(handle, "CM_Locate_DevNode: %d\n", cr); + ERRPRINT(handle, "CM_Locate_DevNode: %lu\n", cr); status = TEE_INTERNAL_ERROR; goto Cleanup; } @@ -330,7 +330,7 @@ TEESTATUS GetDeviceKind(IN PTEEHANDLE handle, IN OUT OPTIONAL char *kind, IN OUT goto Cleanup; } if (cr != CR_BUFFER_SMALL) { - ERRPRINT(handle, "CM_Get_DevNode_Property: %d %d\n", cr, prop_size); + ERRPRINT(handle, "CM_Get_DevNode_Property: %lu %lu\n", cr, prop_size); status = TEE_INTERNAL_ERROR; goto Cleanup; } @@ -342,12 +342,12 @@ TEESTATUS GetDeviceKind(IN PTEEHANDLE handle, IN OUT OPTIONAL char *kind, IN OUT } cr = CM_Get_DevNode_PropertyW(devInstHandle, &DEVPKEY_TeedriverKindString, &prop_type, (PBYTE)kind_w, &prop_size, 0); if (cr != CR_SUCCESS) { - ERRPRINT(handle, "CM_Get_DevNode_Property: %d %d\n", cr, prop_size); + ERRPRINT(handle, "CM_Get_DevNode_Property: %lu %lu\n", cr, prop_size); status = TEE_INTERNAL_ERROR; goto Cleanup; } if (*kindSize < prop_size) { - ERRPRINT(handle, "Insufficient buffer %d %d\n", *kindSize, prop_size); + ERRPRINT(handle, "Insufficient buffer %zu %lu\n", *kindSize, prop_size); *kindSize = prop_size; status = TEE_INSUFFICIENT_BUFFER; goto Cleanup; @@ -401,7 +401,7 @@ TEESTATUS SendIOCTL(IN PTEEHANDLE handle, IN EVENTHANDLE evt, IN DWORD ioControl err = GetLastError(); // it's ok to get an error here, because it's overlapped if (ERROR_IO_PENDING != err) { - ERRPRINT(handle, "Error in DeviceIoControl, error: %d\n", err); + ERRPRINT(handle, "Error in DeviceIoControl, error: %lu\n", err); status = Win32ErrorToTee(err); goto Cleanup; } @@ -410,7 +410,7 @@ TEESTATUS SendIOCTL(IN PTEEHANDLE handle, IN EVENTHANDLE evt, IN DWORD ioControl if (!GetOverlappedResult(impl_handle->handle, evt, pBytesRetuned, TRUE)) { err = GetLastError(); - ERRPRINT(handle, "Error in GetOverlappedResult, error: %d\n", err); + ERRPRINT(handle, "Error in GetOverlappedResult, error: %lu\n", err); status = Win32ErrorToTee(err); goto Cleanup; } diff --git a/src/uefi/MeTeeLibrary.inf.in b/src/uefi/MeTeeLibrary.inf.in index 01062ad..7b393dc 100644 --- a/src/uefi/MeTeeLibrary.inf.in +++ b/src/uefi/MeTeeLibrary.inf.in @@ -16,13 +16,14 @@ @TEE_SOURCES_MULTILINE@ [BuildOptions] - MSFT:*_*_*_CC_FLAGS = /GS- /D EFI /U _WIN32 /W4 /WX - GCC:*_*_*_CC_FLAGS = -D EFI + MSFT:*_*_*_CC_FLAGS = /GS- /D EFI /U _WIN32 /W4 /WX@METEE_EFI_STDLIB_MSFT_CC_FLAG@ + GCC:*_*_*_CC_FLAGS = -D EFI@METEE_EFI_STDLIB_CC_FLAG@ [Packages] MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec StdLib/StdLib.dec + MeTeePkg/MeTeePkg.dec [LibraryClasses] UefiLib @@ -31,6 +32,7 @@ BaseMemoryLib IoLib PciSegmentLib +@METEE_EFI_STDLIB_LIBRARY_CLASS@ [Protocols] gEfiPciRootBridgeIoProtocolGuid diff --git a/src/uefi/metee_efi.c b/src/uefi/metee_efi.c index 572ce90..ad23003 100644 --- a/src/uefi/metee_efi.c +++ b/src/uefi/metee_efi.c @@ -132,14 +132,18 @@ HwInfoGfxCsc( void CallbackPrintHelper(IN PTEEHANDLE handle, bool is_error, const char* args, ...) { char msg[DEBUG_MSG_LEN + 1]; - VA_LIST varl; - VA_START(varl, args); #ifdef METEE_EFI_STDLIB_SUPPORT - vsnprintf(msg, DEBUG_MSG_LEN, args, varl); + /* stdio.h vsnprintf requires a native C va_list, not EDK2 VA_LIST */ + va_list varl; + va_start(varl, args); + vsnprintf(msg, DEBUG_MSG_LEN, args, varl); + va_end(varl); #else + VA_LIST varl; + VA_START(varl, args); AsciiVSPrint(msg, DEBUG_MSG_LEN, args, varl); -#endif VA_END(varl); +#endif handle->log_callback2(is_error, msg); } diff --git a/uefi.cmake b/uefi.cmake index 10d84b5..8c8586a 100644 --- a/uefi.cmake +++ b/uefi.cmake @@ -8,19 +8,62 @@ set(TEE_SOURCES ${PROJECT_SOURCE_DIR}/src/uefi/heci_core.c ) -set(TEE_HEADERS +# Private headers live next to the library sources inside the staged package. +set(TEE_PRIVATE_HEADERS ${PROJECT_SOURCE_DIR}/include/helpers.h - ${PROJECT_SOURCE_DIR}/include/metee.h ${PROJECT_SOURCE_DIR}/src/uefi/heci_efi.h ${PROJECT_SOURCE_DIR}/src/uefi/metee_efi.h ${PROJECT_SOURCE_DIR}/src/uefi/pci_utils.h ${PROJECT_SOURCE_DIR}/src/uefi/heci_core.h ) +# Public headers live under MeTeePkg/Include and are exported via the DEC. +set(TEE_PUBLIC_HEADERS + ${PROJECT_SOURCE_DIR}/include/metee.h +) + +option(METEE_EFI_STDLIB_SUPPORT "Include for vsnprintf in EFI build" OFF) +if(METEE_EFI_STDLIB_SUPPORT) + set(METEE_EFI_STDLIB_CC_FLAG " -D METEE_EFI_STDLIB_SUPPORT") + set(METEE_EFI_STDLIB_MSFT_CC_FLAG " /D METEE_EFI_STDLIB_SUPPORT") + set(METEE_EFI_STDLIB_LIBRARY_CLASS " LibC") +else() + set(METEE_EFI_STDLIB_CC_FLAG "") + set(METEE_EFI_STDLIB_MSFT_CC_FLAG "") + set(METEE_EFI_STDLIB_LIBRARY_CLASS "") +endif() + add_library(${PROJECT_NAME} ${TEE_SOURCES}) -string(REPLACE ";" "\n" TEE_SOURCES_MULTILINE "${TEE_SOURCES}") -string(REPLACE ";" "\n" TEE_HEADERS_MULTILINE "${TEE_HEADERS}") +# Stage a self-contained EDK2 package under ${PROJECT_BINARY_DIR}/MeTeePkg so +# the tree can be copied verbatim into any EDK2 workspace. All INF/DEC/DSC +# references use only package-relative paths; source files are colocated with +# the INF that owns them. +set(METEE_UEFI_PKG_DIR "${PROJECT_BINARY_DIR}/MeTeePkg") +set(METEE_UEFI_LIB_DIR "${METEE_UEFI_PKG_DIR}/Library/MeTeeLibrary") +set(METEE_UEFI_INC_DIR "${METEE_UEFI_PKG_DIR}/Include") + +set(_tee_inf_headers "") +foreach(_hdr ${TEE_PRIVATE_HEADERS}) + get_filename_component(_name "${_hdr}" NAME) + configure_file("${_hdr}" "${METEE_UEFI_LIB_DIR}/${_name}" COPYONLY) + list(APPEND _tee_inf_headers " ${_name}") +endforeach() + +set(_tee_inf_sources "") +foreach(_src ${TEE_SOURCES}) + get_filename_component(_name "${_src}" NAME) + configure_file("${_src}" "${METEE_UEFI_LIB_DIR}/${_name}" COPYONLY) + list(APPEND _tee_inf_sources " ${_name}") +endforeach() + +foreach(_pub ${TEE_PUBLIC_HEADERS}) + get_filename_component(_name "${_pub}" NAME) + configure_file("${_pub}" "${METEE_UEFI_INC_DIR}/${_name}" COPYONLY) +endforeach() + +string(REPLACE ";" "\n" TEE_HEADERS_MULTILINE "${_tee_inf_headers}") +string(REPLACE ";" "\n" TEE_SOURCES_MULTILINE "${_tee_inf_sources}") if(BUILD_SAMPLES) set(METEE_SAMPLES_LIST @@ -31,19 +74,17 @@ if(BUILD_SAMPLES) string(REPLACE ";" "\n" METEE_SAMPLES "${METEE_SAMPLES_LIST}") endif(BUILD_SAMPLES) -configure_file ( +configure_file( "${PROJECT_SOURCE_DIR}/src/uefi/MeTeeLibrary.inf.in" - "${PROJECT_BINARY_DIR}/MeTeePkg/MeTeeLibrary/MeTeeLibrary.inf" + "${METEE_UEFI_LIB_DIR}/MeTeeLibrary.inf" ) -file(RELATIVE_PATH METEE_INCLUDE_RELPATH "${PROJECT_BINARY_DIR}/MeTeePkg" "${PROJECT_SOURCE_DIR}/include" ) - -configure_file ( +configure_file( "${PROJECT_SOURCE_DIR}/MeTeePkg/MeTeePkg.dec.in" - "${PROJECT_BINARY_DIR}/MeTeePkg/MeTeePkg.dec" + "${METEE_UEFI_PKG_DIR}/MeTeePkg.dec" ) -configure_file ( +configure_file( "${PROJECT_SOURCE_DIR}/MeTeePkg/MeTeePkg.dsc.in" - "${PROJECT_BINARY_DIR}/MeTeePkg/MeTeePkg.dsc" + "${METEE_UEFI_PKG_DIR}/MeTeePkg.dsc" ) \ No newline at end of file