From 1e6b69f4b19785738bf0277683b31752dbf8c94c Mon Sep 17 00:00:00 2001 From: vit9696 Date: Thu, 2 May 2019 23:37:50 +0300 Subject: [PATCH] OpenCoreNvram: Add version information --- Docs/Configuration.pdf | Bin 270176 -> 270541 bytes Docs/Configuration.tex | 7 +++ Include/OpenCore.h | 21 +++++++- OpenCorePkg.dsc | 18 +++---- Platform/OpenCore/OpenCoreNvram.c | 77 ++++++++++++++++++++++++++++++ 5 files changed, 113 insertions(+), 10 deletions(-) diff --git a/Docs/Configuration.pdf b/Docs/Configuration.pdf index 7c969d5df549e40f8e1203af9aacfb796a414902..e40907c623226e0fc71730cbefdaf761f6d7976b 100644 GIT binary patch delta 19313 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 Qf`-ElrL?qcu(ncv0D`z #include #include +#include +#include #include #include -#define OPEN_CORE_VERSION L"0.1" +/** + OpenCore version reported to log and NVRAM. + OPEN_CORE_VERSION must follow X.Y.Z format, where X.Y.Z are single digits. +**/ +#define OPEN_CORE_VERSION "0.0.1" + +/** + OpenCore build type reported to log and NVRAM. +**/ +#if defined (OC_RELEASE_TARGET) +#define OPEN_CORE_TARGET "REL" ///< Release. +#elif defined (OC_DEBUG_TARGET) +#define OPEN_CORE_TARGET "DBG" ///< Debug with compiler optimisations. +#elif defined (OC_NOOPT_TARGET) +#define OPEN_CORE_TARGET "NPT" ///< Debug with no compiler optimisations. +#else +#define OPEN_CORE_TARGET "UNK" ///< This one should not happen in public builds. +#endif #define OPEN_CORE_IMAGE_PATH L"EFI\\OC\\OpenCore.efi" diff --git a/OpenCorePkg.dsc b/OpenCorePkg.dsc index 703ce7e8..962cc804 100755 --- a/OpenCorePkg.dsc +++ b/OpenCorePkg.dsc @@ -108,12 +108,12 @@ # While there are no PCDs as of now, there at least are some custom macros. DEFINE OCPKG_BUILD_OPTIONS_GEN = -D DISABLE_NEW_DEPRECATED_INTERFACES $(OCPKG_BUILD_OPTIONS) - GCC:DEBUG_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - GCC:NOOPT_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - GCC:RELEASE_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - MSFT:DEBUG_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - MSFT:NOOPT_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - MSFT:RELEASE_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - XCODE:DEBUG_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - XCODE:NOOPT_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - XCODE:RELEASE_*_*_CC_FLAGS = -flto $(OCPKG_BUILD_OPTIONS_GEN) + GCC:DEBUG_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_DEBUG_TARGET + GCC:NOOPT_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_NOOPT_TARGET + GCC:RELEASE_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_RELEASE_TARGET + MSFT:DEBUG_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_DEBUG_TARGET + MSFT:NOOPT_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_NOOPT_TARGET + MSFT:RELEASE_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_RELEASE_TARGET + XCODE:DEBUG_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_DEBUG_TARGET + XCODE:NOOPT_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) -D OC_NOOPT_TARGET + XCODE:RELEASE_*_*_CC_FLAGS = -flto $(OCPKG_BUILD_OPTIONS_GEN) -D OC_RELEASE_TARGET diff --git a/Platform/OpenCore/OpenCoreNvram.c b/Platform/OpenCore/OpenCoreNvram.c index cda725b3..0b3aee54 100644 --- a/Platform/OpenCore/OpenCoreNvram.c +++ b/Platform/OpenCore/OpenCoreNvram.c @@ -14,6 +14,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include +#include + #include #include #include @@ -23,6 +25,79 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include +// +// Force the assertions in case we forget about them. +// +OC_GLOBAL_STATIC_ASSERT ( + L_STR_LEN (OPEN_CORE_VERSION) == 5, + "OPEN_CORE_VERSION must follow X.Y.Z format, where X.Y.Z are single digits." + ); + +OC_GLOBAL_STATIC_ASSERT ( + L_STR_LEN (OPEN_CORE_TARGET) == 3, + "OPEN_CORE_TARGET must XYZ format, where XYZ is build target." + ); + +STATIC CHAR8 mOpenCoreVersion[] = { + /* [0] = */ OPEN_CORE_TARGET[0], + /* [1] = */ OPEN_CORE_TARGET[1], + /* [2] = */ OPEN_CORE_TARGET[2], + /* [3] = */ '-', + /* [4] = */ OPEN_CORE_VERSION[0], + /* [5] = */ OPEN_CORE_VERSION[2], + /* [6] = */ OPEN_CORE_VERSION[4], + /* [7] = */ '-', + /* [8] = */ __DATE__[7], + /* [9] = */ __DATE__[8], + /* [10] = */ __DATE__[9], + /* [11] = */ __DATE__[10], + /* [12] = */ '-', + /* [13] = */ 'M', + /* [14] = */ 'M', + /* [15] = */ '-', + /* [16] = */ 'D', + /* [17] = */ 'D', + /* [18] = */ '\0' +}; + +STATIC +VOID +OcReportVersion ( + VOID + ) +{ + UINT32 Month; + + Month = + (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n') ? 1 : + (__DATE__[0] == 'F' && __DATE__[2] == 'e' && __DATE__[2] == 'b') ? 2 : + (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r') ? 3 : + (__DATE__[0] == 'A' && __DATE__[1] == 'p' && __DATE__[2] == 'r') ? 4 : + (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y') ? 5 : + (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n') ? 6 : + (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l') ? 7 : + (__DATE__[0] == 'A' && __DATE__[1] == 'u' && __DATE__[2] == 'g') ? 8 : + (__DATE__[0] == 'S' && __DATE__[1] == 'e' && __DATE__[2] == 'p') ? 9 : + (__DATE__[0] == 'O' && __DATE__[1] == 'c' && __DATE__[2] == 't') ? 10 : + (__DATE__[0] == 'N' && __DATE__[1] == 'o' && __DATE__[2] == 'v') ? 11 : + (__DATE__[0] == 'D' && __DATE__[1] == 'e' && __DATE__[2] == 'c') ? 12 : 0; + + mOpenCoreVersion[13] = Month < 10 ? '0' : '1'; + mOpenCoreVersion[14] = '0' + (Month % 10); + mOpenCoreVersion[16] = __DATE__[4] >= '0' ? __DATE__[4] : '0'; + mOpenCoreVersion[17] = __DATE__[5]; + + DEBUG ((DEBUG_INFO, "OC: Current version is %a\n", mOpenCoreVersion)); + + gRT->SetVariable ( + OC_VERSION_VARIABLE_NAME, + &gOcVendorVariableGuid, + OPEN_CORE_NVRAM_ATTR, + sizeof (mOpenCoreVersion), + &mOpenCoreVersion[0] + ); +} + VOID OcLoadNvramSupport ( IN OC_GLOBAL_CONFIG *Config @@ -143,4 +218,6 @@ OcLoadNvramSupport ( FreePool (UnicodeVariableName); } } + + OcReportVersion (); } -- GitLab