Mike: Can we consider to parse INCLUDE env value and add those path to -I options as the first priority?
Thanks Liming > -----Original Message----- > From: Kinney, Michael D <michael.d.kin...@intel.com> > Sent: Thursday, January 30, 2020 8:46 AM > To: devel@edk2.groups.io > Cc: Feng, Bob C <bob.c.f...@intel.com>; Gao, Liming <liming....@intel.com> > Subject: [Patch] BaseTools/DscBuildData: Fix PCD autogen include file conflict > > https://bugzilla.tianocore.org/show_bug.cgi?id=2494 > > When using structured PCDs, a C application is auto generated > to fill in the structured PCD value. The C application uses > the standard include files <stdio.h>, <stdlib.h>, and <string.h>. > This C application also supports include paths from package DEC > files when a structured PCD declaration provides a <Packages> > list. The complete list of include paths are -I options for > include paths from package DEC files and the compiler's standard > include paths. > > -I include paths are higher priority than the standard include > paths. If the -I included paths from package DEC files contain > <stdio.h>, <stdlib.h>, or <string.h> the wrong include files are > used to compile the C application for the structured PCD value. > > Update GenerateByteArrayValue() to skip a package DEC include > paths that contain <stdio.h>, <stdlib.h>, or <string.h>. > > Build failures were observed when adding a structured PCD to > CryptoPkg. CryptoPkg contains <stdio.h>, <stdlib.h>, and > <string.h> in the path CryptoPkg/Library/Include to support > building Open SSL. The Library/Include path is listed as a > private include path in CryptoPkg.dec. Without this change, the > standard include files designed to support build OpenSLL are > used to build the structured PCD C application, and that build > fails. > > Other packages that provide a standard C lib or a gasket for > a subset of the standard C lib will run into this same issue > if they also define and use a Structured PCD. So this issue > is not limited to the CryptoPkg. > > Cc: Bob Feng <bob.c.f...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Signed-off-by: Michael D Kinney <michael.d.kin...@intel.com> > --- > .../Source/Python/Workspace/DscBuildData.py | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py > b/BaseTools/Source/Python/Workspace/DscBuildData.py > index c65a0dd346..be6688dc75 100644 > --- a/BaseTools/Source/Python/Workspace/DscBuildData.py > +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py > @@ -1,7 +1,7 @@ > ## @file > # This file is used to create a database used by build tool > # > -# Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR> > +# Copyright (c) 2008 - 2020, Intel Corporation. All rights reserved.<BR> > # (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -2667,6 +2667,22 @@ class DscBuildData(PlatformBuildClassObject): > for pkg in PcdDependDEC: > if pkg in PlatformInc: > for inc in PlatformInc[pkg]: > + # > + # Get list of files in potential -I include path > + # > + FileList = os.listdir (str(inc)) > + # > + # Skip -I include path if one of the include files > required > + # by PcdValueInit.c are present in the include paths > from > + # the DEC file. PcdValueInit.c must use the > standard include > + # files from the host compiler. > + # > + if 'stdio.h' in FileList: > + continue > + if 'stdlib.h' in FileList: > + continue > + if 'string.h' in FileList: > + continue > MakeApp += '-I' + str(inc) + ' ' > IncSearchList.append(inc) > MakeApp = MakeApp + '\n' > -- > 2.21.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#53635): https://edk2.groups.io/g/devel/message/53635 Mute This Topic: https://groups.io/mt/70261740/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-