Re: 回复: [PATCH v2 1/1] MdePkg/Include: Use DEBUG_FILE_PATH to specify debug file path.


Guomin Jiang
 

Hi Liming,

It's just an example for downstream developer how to use DEBUG_FILE_PATH.
If the developer prefer the original ASSERT, nothing need to do.

Now, we have an option to avoid the random file path at least.
Another benefit is that we can save flash size when we developing new feature using debug mode.

You can also see we have done the similar thing for __LINE__ from DebugLib.h file.
83 #ifdef DEBUG_LINE_NUMBER
84 #else
85 #define DEBUG_LINE_NUMBER __LINE__
86 #endif

Thanks
Guomin

-----Original Message-----
From: gaoliming <gaoliming@byosoft.com.cn>
Sent: Thursday, April 21, 2022 9:22 AM
To: Jiang, Guomin <guomin.jiang@intel.com>; devel@edk2.groups.io
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Liu, Zhiguang
<zhiguang.liu@intel.com>
Subject: 回复: [edk2-devel] 回复: [PATCH v2 1/1] MdePkg/Include: Use
DEBUG_FILE_PATH to specify debug file path.

Guomin:
gEfiCallerBaseName is the module base name, not source file name. It can
verify the build reproduce, but it can't provide the same functionality to
_FILE_.

Thanks
Liming
-----邮件原件-----
发件人: Jiang, Guomin <guomin.jiang@intel.com>
发送时间: 2022年4月20日 16:58
收件人: Gao, Liming <gaoliming@byosoft.com.cn>; devel@edk2.groups.io
抄送: Kinney, Michael D <michael.d.kinney@intel.com>; Liu, Zhiguang
<zhiguang.liu@intel.com>
主题: RE: [edk2-devel] 回复: [PATCH v2 1/1] MdePkg/Include: Use
DEBUG_FILE_PATH to specify debug file path.

Hi Liming,

I just add ```-D DEBUG_FILE_PATH=gEfiCallerBaseName``` to BuildOptions

Thanks
Guomin

-----Original Message-----
From: gaoliming <gaoliming@byosoft.com.cn>
Sent: Sunday, April 17, 2022 11:21 AM
To: Jiang, Guomin <guomin.jiang@intel.com>; devel@edk2.groups.io
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Liu, Zhiguang
<zhiguang.liu@intel.com>
Subject: 回复: [edk2-devel] 回复: [PATCH v2 1/1] MdePkg/Include: Use
DEBUG_FILE_PATH to specify debug file path.

Guomin:
I understand the purpose. But, I don't see the complete solution
to configure DEBUG_FILE_PATH for every source file in order to meet
with the debug image reproducible builds. Have you verified this
solution with the
real
DEBUG_FILE_PATH for every source file? Or, you just set
DEBUG_FILE_PATH to the same value for the different source file?

Thanks
Liming
-----邮件原件-----
发件人: Jiang, Guomin <guomin.jiang@intel.com>
发送时间: 2022年4月13日 13:43
收件人: devel@edk2.groups.io; Gao, Liming
<gaoliming@byosoft.com.cn>
抄送: Kinney, Michael D <michael.d.kinney@intel.com>; Liu, Zhiguang
<zhiguang.liu@intel.com>
主题: RE: [edk2-devel] 回复: [PATCH v2 1/1] MdePkg/Include: Use
DEBUG_FILE_PATH to specify debug file path.

Hi Liming,

Below is the detail why need this change. If you only care usage.
Please jump to "How to use it" directly.

Why need:
1. Replication build is not new, you can refer
https://reproducible-builds.org for detail 2. The benefit is that
1) make sure the same commit generate same binary so we can sure
that it is not modified by anyone 2) store the binary in the repo
without concern of different binary with same code.

What's barrier in EDK2 implement?
1. Very depend on Toolchain(for example VS, GCC, CLANG). Different
toolchain have different feature set and different toolchain
version have different feature set.
2. Deploy new toolchain need big effort, include but not limit
deploy it in CI CD system, update toolchain, size concern, feature
change, etc

What's the change:
1. The change want to address one issue that we encounter in
replication
build: the ASSERT in EDK2 will be different in different environment.
For
example: file path, back slash or forward slash, etc

How to use it:
1. If you want to keep current ASSERT string format. No action is
required and the change keep back compatible 2. If you want to
customize the ASSERT string format. You can use additional tool to
generate PATH and define macro in BuildOptions or tools_def.

Note:
1. Replication build need many effort: 1) address the pdb path, 2)
address the timestamp, etc 2. This change is not target for
resolving all issue in replication build 3. I think it is a small
step toward space even though it haven't fix every thing.

Thank
Guomin

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
gaoliming
Sent: Wednesday, April 13, 2022 9:03 AM
To: Jiang, Guomin <guomin.jiang@intel.com>; devel@edk2.groups.io
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Liu,
Zhiguang <zhiguang.liu@intel.com>
Subject: [edk2-devel] 回复: [PATCH v2 1/1] MdePkg/Include: Use
DEBUG_FILE_PATH to specify debug file path.

Guomin:
Can you introduce DEBUG_FILE_PATH usage? If the developer
wants
to
enable this feature, how configure DEBUG_FILE_PATH?

Thanks
Liming
-----邮件原件-----
发件人: Guomin Jiang <guomin.jiang@intel.com>
发送时间: 2022年4月12日 18:25
收件人: devel@edk2.groups.io
抄送: Michael D Kinney <michael.d.kinney@intel.com>; Liming Gao
<gaoliming@byosoft.com.cn>; Zhiguang Liu
<zhiguang.liu@intel.com>
主题: [PATCH v2 1/1] MdePkg/Include: Use DEBUG_FILE_PATH to
specify
debug file path.

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3840

Use DEBUG_FILE_PATH to control ASSERT path

Motivation and Goal:
1. Make replication build more easy and less toolchain dependency
2.
Consume the ASSERT string easy for downstream 3. Make code
more
clear

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Signed-off-by: Guomin Jiang <guomin.jiang@intel.com>
---
MdePkg/Include/Library/DebugLib.h | 34
+++++++++++++++++++++----------
1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/MdePkg/Include/Library/DebugLib.h
b/MdePkg/Include/Library/DebugLib.h
index 8d3d08638d73..a76a268a00b6 100644
--- a/MdePkg/Include/Library/DebugLib.h
+++ b/MdePkg/Include/Library/DebugLib.h
@@ -8,7 +8,7 @@
of size reduction when compiler optimization is disabled.
If MDEPKG_NDEBUG is
defined, then debug and assert related macros wrapped by it
are the NULL implementations.

-Copyright (c) 2006 - 2020, Intel Corporation. All rights
reserved.<BR>
+Copyright (c) 2006 - 2022, Intel Corporation. All rights
+reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/
@@ -85,6 +85,26 @@ SPDX-License-Identifier:
BSD-2-Clause-Patent #define DEBUG_LINE_NUMBER __LINE__
#endif

+//
+// Source file path.
+// Default is use the __FILE__ macro value provided by compiler.
+The
__FILE__
+// mapping can be overriden by predefining DEBUG_FILE_PATH //
+// Defining DEBUG_FILE_PATH to a fixed value is useful when
+comparing
builds
+// across machine or configuration with different slash or path file.
+//
+#ifndef DEBUG_FILE_PATH
+#define DEBUG_FILE_PATH __FILE__ #endif
+
+//
+// Use below override to keep CLANG specific behavior // #if
+defined
+(__clang__) && defined (__FILE_NAME__)
+ #undef DEBUG_FILE_PATH
+#define DEBUG_FILE_PATH __FILE_NAME__ #endif
+
/**
Macro that converts a Boolean expression to a
Null-terminated ASCII string.

@@ -337,17 +357,9 @@ UnitTestDebugAssert (
IN CONST CHAR8 *Description
);

- #if defined (__clang__) && defined (__FILE_NAME__) -#define
_ASSERT(Expression) UnitTestDebugAssert (__FILE_NAME__,
DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
- #else
-#define _ASSERT(Expression) UnitTestDebugAssert (__FILE__,
DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
- #endif
+#define _ASSERT(Expression) UnitTestDebugAssert
(DEBUG_FILE_PATH,
DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
#else
- #if defined (__clang__) && defined (__FILE_NAME__) -#define
_ASSERT(Expression) DebugAssert (__FILE_NAME__,
DEBUG_LINE_NUMBER,
DEBUG_EXPRESSION_STRING (Expression))
- #else
-#define _ASSERT(Expression) DebugAssert (__FILE__,
DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
- #endif
+#define _ASSERT(Expression) DebugAssert (DEBUG_FILE_PATH,
DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
#endif

/**
--
2.35.1.windows.2





Join devel@edk2.groups.io to automatically receive all group messages.