Liming,

Correct, I believe it is not just Base.h but several other files. I plan to 
include the removal of __clang__ references in my patchset as well, since after 
the target change all the use of clang will be in GNU mode.

In addition to that, I believe that in GNU mode it should be also possible to 
support ARM and AARCH64 in CLANGPDB, but I would rather not work on this as I 
do not have the hardware for validation.

Best wishes,
Vitaly

> 6 февр. 2020 г., в 11:22, Gao, Liming <liming....@intel.com> написал(а):
> 
> Vitaly:
>   We also find _MSC_VER is defined in Windows, but not in Linux. Your 
> analysis explains it. When use i686-unknown-windows-gnu option, __GNUC__ 
> macro will be defined. If so, we don’t need to append the check for defined 
> (__clang__) in Base.h. And, this change can remove -fno-ms-extensions and 
> -fms-compatibility option. Then, CLANGPDB can keep the same behavior in 
> Windows/Linux/MacOs host OS.
>
> #if defined (__GNUC__) || defined (__clang__)
> è
> #if defined (__GNUC__)
>
> Thanks
> Liming
> From: devel@edk2.groups.io <mailto:devel@edk2.groups.io> 
> <devel@edk2.groups.io <mailto:devel@edk2.groups.io>> On Behalf Of Vitaly 
> Cheptsov via Groups.Io
> Sent: Thursday, February 6, 2020 8:17 AM
> To: Gao, Liming <liming....@intel.com <mailto:liming....@intel.com>>
> Cc: devel@edk2.groups.io <mailto:devel@edk2.groups.io>; Marvin Häuser 
> <marvin.haeu...@outlook.com <mailto:marvin.haeu...@outlook.com>>; Laszlo 
> Ersek <ler...@redhat.com <mailto:ler...@redhat.com>>; Kinney, Michael D 
> <michael.d.kin...@intel.com <mailto:michael.d.kin...@intel.com>>
> Subject: Re: [edk2-devel] [PATCH 0/1] Use _MSC_VER to determine MSVC compiler
>
> Liming,
>
> We performed the initial exploration of CLANGPDB toolchain issue on our end 
> and believe we can suggest a solid solution.
>
> In addition to all the issues I mentioned in the BZ[1] there are several more.
>
> 1. CLANGPDB uses -target x86_64-unknown-windows, and this basically means 
> different behaviour for Windows and other operating systems:
> - On Windows it will "attach" to installed Visual Studio and will gather the 
> parameters from this installation, i.e. it will define _MSC_VER to installed 
> Visual Studio version. For example, for me it is implicitly passing 
> -fms-compatibility-version=19.16.27026 and setting full triple to 
> x86_64-unknown-windows-msvc19.16.27026.
> - On Mac and Linux it will obviously not find Visual Studio, and as a result 
> the full triple will be x86_64-unknown-windows-msvc with _MSC_VER macro not 
> being defined.
>
> There basically is no control to it except -U_MSC_VER, which is ugly, as 
> different include directories, other defines will still happen between 
> installations.
>
> 2. EDK II relies on UINT32_MAX being a valid value for enum. This is not the 
> case in the specification, as it requires enum to be either INT32 or UINT32:
>
> Element of a standard ANSI C enum type declaration. Type INT32.or UINT32. 
> ANSI C does not define the size of sign of an enum so they should never be 
> used in structures. ANSI C integer promotion rules make INT32 or UINT32 
> interchangeable when passed as an argument to a function.
>
> However, since I am not positive that no existing code relies on this, it is 
> best to preserve the current behaviour. Supporting this is valid for GNU 
> flavour or as a Microsoft Extension. Disabling -fms-compatibility will result 
> in a compile error for enums having 0xFFFFFFFF values, like in Base.h.
>
> All in all, we believe that CLANGPDB simply has an overlook in the -target 
> argument due to a misconsideration of the clang triple implementation. 
> Normally for target only 3 words are provided, but for Windows it is crucial 
> to have 4, as there are different drivers with different automatics. To 
> resolve the problem, we should use GNU targets i686-unknown-windows-gnu and 
> x86_64-unknown-windows-gnu. This is basically the only and the least hurtful 
> solution, as using MSVC mode will define _MSC_EXTENSIONS, which already 
> breaks many places and will require a heavy codebase refactoring, and 
> randomly define _MSC_VER and use Visual Studio headers and configuration, 
> which makes reproducible builds on different operating systems questionable 
> if not impossible.
> 
> 
> I will submit another patch that will replace this one later this week. In 
> addition to GNU targets I additionally pass -nostdlib and -nostdlibinc so 
> that a freestanding target is used and only builtin headers are accessible 
> (like stdint.h, stddef.h, and stdbool.h). This is not required but an extra 
> safety measure. Our initial validation of the changes found no issues with 
> our projects. We also performed building of most common EDK II packages like 
> CryptoPkg, MdePkg, and MdeModulePkg. While the change is fairly minor, I will 
> still request others to perform a brief check of their packages in case they 
> want to use CLANGPDB. For a quick test I include the diff of the patch 
> beforehand.
>
> Best wishes,
> Vitaly
>
> [1] https://bugzilla.tianocore.org/show_bug.cgi?id=2397 
> <https://bugzilla.tianocore.org/show_bug.cgi?id=2397>
>
>
> 
> 
> 4 февр. 2020 г., в 09:56, Gao, Liming <liming....@intel.com 
> <mailto:liming....@intel.com>> написал(а):
>
> Vitaly:
>   Yes. I think we should have better solution in OpenSSL to support EDK2 
> usage. But, this is a long term solution. For now, I will try the solution to 
> remove -fms-compatibility option in CLANGPDB tool chain.
>
> Thanks
> Liming
> From: vit9696 <vit9...@protonmail.com <mailto:vit9...@protonmail.com>> 
> Sent: Monday, February 3, 2020 7:29 PM
> To: Gao, Liming <liming....@intel.com <mailto:liming....@intel.com>>; 
> devel@edk2.groups.io <mailto:devel@edk2.groups.io>; Marvin Häuser 
> <marvin.haeu...@outlook.com <mailto:marvin.haeu...@outlook.com>>
> Subject: RE: [edk2-devel] [PATCH 0/1] Use _MSC_VER to determine MSVC compiler
>
> Liming,
>
> I believe it is reasonable to fix OpenSSL, but most likely it is faster to 
> address EDK II code at first. In future we should still stick to _MSC_VER, 
> but for now just ensuring that any toolchain by MSVC does not define 
> _MSC_EXTENSIONS should work too.
>
> I believe that -fms-compatibility option is not needed for CLANGPDB, as 
> CLANGPDB is literally using clang, and that worked fine before in CLANG38 and 
> XCODE5. We may still have to update some preprocessor conditions to include 
> __clang__ near __GNUC__ if __GNUC__ is left undefined even when we remove 
> -fms-compatibility, but that sounds fine for me.
>
> We will investigate that on our own and submit a new patch, but help from 
> other parties is strongly appreciated. We mostly use XCODE5 and are not well 
> aware of other platforms.
>
> Best wishes,
> Vitaly
>
> On Mon, Feb 3, 2020 at 11:00, Gao, Liming <liming....@intel.com 
> <mailto:liming....@intel.com>> wrote:
> Vitaly:
> This change will cause CryptoPkg openssl build failure, because 
> OpensslLib.inf undefines _MSC_VER macro to make sure openssl source code be 
> built in edk2 project without using MS VS functions.
> 
> Now, I have no good solution to fix this issue. One way is to use 
> defined(_MSC_EXTENSIONS) && !defined(__clang__), another way is to 
> investigate whether we can remove -fms-compatibility option in CLANGPDB.
> 
> Thanks
> Liming
> > -----Original Message-----
> > From: devel@edk2.groups.io <mailto:devel@edk2.groups.io> 
> > <devel@edk2.groups.io <mailto:devel@edk2.groups.io>> On Behalf Of Vitaly 
> > Cheptsov via Groups.Io
> > Sent: Saturday, February 1, 2020 5:17 AM
> > To: devel@edk2.groups.io <mailto:devel@edk2.groups.io>
> > Subject: [edk2-devel] [PATCH 0/1] Use _MSC_VER to determine MSVC compiler
> >
> > Patch details are explained in 
> > https://bugzilla.tianocore.org/show_bug.cgi?id=2397 
> > <https://bugzilla.tianocore.org/show_bug.cgi?id=2397>.
> > We request this to be merged in edk2-stable202002.
> >
> > Vitaly Cheptsov (1):
> > MdePkg: Use _MSC_VER to determine MSVC compiler
> >
> > MdePkg/Include/AArch64/ProcessorBind.h | 2 +-
> > MdePkg/Include/Arm/ProcessorBind.h | 8 ++++----
> > MdePkg/Include/Base.h | 10 +++++-----
> > MdePkg/Include/Ia32/ProcessorBind.h | 6 +++---
> > MdePkg/Include/X64/ProcessorBind.h | 6 +++---
> > 5 files changed, 16 insertions(+), 16 deletions(-)
> >
> > --
> > 2.21.1 (Apple Git-122.3)
> >
> >
> > -=-=-=-=-=-=
> > Groups.io <http://groups.io/> Links: You receive all messages sent to this 
> > group.
> >
> > View/Reply Online (#53623): https://edk2.groups.io/g/devel/message/53623 
> > <https://edk2.groups.io/g/devel/message/53623>
> > Mute This Topic: https://groups.io/mt/70882954/1759384 
> > <https://groups.io/mt/70882954/1759384>
> > Group Owner: devel+ow...@edk2.groups.io <mailto:devel+ow...@edk2.groups.io>
> > Unsubscribe: https://edk2.groups.io/g/devel/unsub 
> > <https://edk2.groups.io/g/devel/unsub> [liming....@intel.com 
> > <mailto:liming....@intel.com>]
> > -=-=-=-=-=-=
> 
>
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#53860): https://edk2.groups.io/g/devel/message/53860
Mute This Topic: https://groups.io/mt/70882954/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to