> On Nov 7, 2019, at 12:37 PM, Leif Lindholm <leif.lindh...@linaro.org> wrote:
> 
> Hi Andrew,
> 
> Yeah, I'm pretty easy with regards to what we change it to.
> Although if we're bikeshedding, I would prefer not using _ in the
> toolchain profile name.
> 
> I'm ... optimistic ... it won't break any of my existing scripts, but
> since the build system uses it as a
> <toolchain profile>_<architecture>_<build target> separator, it would
> be nice if we didn't risk confusion there.
> 
> (I would be totally happy with PECLANG, CLANGPE, PDBCLANG, CLANGPDB or
> something along those lines.)
> 

Leif,

Sorry the _ is muscle  memory. I like adding the PDB part as the clang debugger 
does not support PDB for 1st class debugging. 

Thanks,

Andrew Fish

> Regards,
> 
> Leif
> 
> On Thu, Nov 07, 2019 at 11:54:04AM -0600, Andrew Fish wrote:
>> Leif,
>> 
>> I think I proposed CLANG_PDB or CLANG_PECOFF. I seem to like CLANG_PDB as 
>> assuming the PDE debugging experience is awesome/exists on Linux and macOS 
>> is not a given. 
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
>>> On Nov 7, 2019, at 11:19 AM, Leif Lindholm <leif.lindh...@linaro.org> wrote:
>>> 
>>> Oops, sorry, missed this in search.
>>> 
>>> On Wed, Oct 30, 2019 at 03:43:44PM +0000, Liming Gao wrote:
>>>> Andrew:
>>>> 
>>>> I prefer to keep short CLANG9 as the tool chain name. I add wiki
>>>> page
>>>> https://github.com/tianocore/tianocore.github.io/wiki/CLANG9-Tools-Chain
>>>> to introduce it.
>>> 
>>> Why should users be expected to go and read documentation in order to
>>> learn that fundamental and incompatible changes to output and debug
>>> format has been made as part of what looks like a simple version bump?
>>> 
>>>> And, we have CLANG38 tool chain. It generates ELF
>>>> image and DWARF debug symbol format. It can work with LLVM 9.0
>>>> release. Current tool chain tag name includes compiler name and
>>>> version. There is no specific info in the tool chain name. The
>>>> developer can get the more tool chain information from wiki page.
>>> 
>>> We aleady have the problem that people think they need to use GCC5 to
>>> build EDK2 since that is the highest named GCC toolchain profile.
>>> 
>>> Let's not make this situation *worse* by setting up a multidimensional
>>> feature matrix, based off random numerical values.
>>> 
>>> So say that we next have a pressing need to create a new toolchain
>>> profile for clang 10, using the old ELF mechanism. Are you then
>>> suggesting we set up a table on said wiki page where people have to go
>>> and look up what the object and debug formats are for each CLANG##
>>> toolchain profile?
>>> 
>>> And what if you then end up needing to do the same for the PDB
>>> flavour?
>>> 
>>>> CLANG9 is designed to support Emulator for Windows host only.
>>> 
>>> Which is why it makes no sense to name it as a successor of
>>> CLANG38.
>>> 
>>>> CLANG38 may be used for Emulator in Linux or Mac. I don’t
>>>> try it before.
>>>> 
>>>> CLANG9 goal is to align the same compiler in the different host
>>>> development environment. It can replace VS or GCC compiler. On
>>>> Windows Host, I verify VS debugger for the source level debug. On
>>>> Linux host, I have not verified llvm debugger. I will investigate
>>>> the debugger solution for OVMF in Linux host.
>>> 
>>> We are not asking you to throw out this toolchain profile.
>>> 
>>> We are saying that since the functionality it provides is completely
>>> unrelated to that of CLANG38, it should not be named in a way that
>>> suggests it is merely a revision update.
>>> 
>>> /
>>>   Leif
>>> 
>>>> Thanks
>>>> Liming
>>>> From: af...@apple.com <af...@apple.com>
>>>> Sent: Saturday, October 26, 2019 2:45 AM
>>>> To: devel@edk2.groups.io; Gao, Liming <liming....@intel.com>
>>>> Cc: Ni, Ray <ray...@intel.com>; Justen, Jordan L 
>>>> <jordan.l.jus...@intel.com>
>>>> Subject: Re: [edk2-devel] [Patch v3 10/11] EmulatorPkg: Enable CLANG9 tool 
>>>> chain
>>>> 
>>>> Liming,
>>>> 
>>>> Sorry I missed this mail. Thanks for the info! I was doing some research 
>>>> into this too and now I think I finally understand. I think the name for 
>>>> the tool chain really confused me and we should think about changing the 
>>>> name.
>>>> 
>>>> From what I understand CLANG9 means produce PE/COFF directly and used the 
>>>> PDB debugging format. I see from the llvm site that the linker can produce 
>>>> PDB directly as you mention. This all makes sense to me now as LLVM tries 
>>>> to make it easy to be a drop in replacement for VC++ or GCC. So this tool 
>>>> chain is designed to be able to cross build a "Windows App" on a Linux or 
>>>> macOS. It also looks like the llvm debugger, lldb, is lagging in its 
>>>> support for PDB based debugging.
>>>> 
>>>> 
>>>> Anyway I think Leif and I agree the toolchain name is very confusing. I'd 
>>>> rather see it called CLANG9_WIN or CLANG_PDB.
>>>> 
>>>> 
>>>> On Oct 18, 2019, at 7:27 AM, Liming Gao 
>>>> <liming....@intel.com<mailto:liming....@intel.com>> wrote:
>>>> 
>>>> Andrew:
>>>> Here is the cover letter on CLANG9 introduction. 
>>>> https://edk2.groups.io/g/devel/message/49157
>>>> 
>>>> 1)      Yes. CLANG9 tool chain is added to directly generate PE/COFF image 
>>>> (EFI image).
>>>> This tool chain uses LLVM clang C compiler and lld linker, generates 
>>>> PE/COFF
>>>> image and PDB compatible debug symbol format. Now, it supports IA32/X64 
>>>> Archs.
>>>> LLVM clang C compiler and lld linker are the standalone tool set. They 
>>>> don’t depend other lib to generate PE/COFF image.
>>>> 
>>>> 2)      Yes. CLANG9 is the cross OS tool chain. It can work on 
>>>> Windows/Linux/Mac host OS.
>>>> LLVM LLD linker uses Windows style arguments. I verify CLANG9 for Ovmf3264 
>>>> in Windows/Linux host OS.
>>>> 
>>>> 
>>>> On Linux can you source level debug Ovmf?
>>>> 
>>>> 
>>>> 3)     This patch enables WinHost in Windows. It doesn’t enable UnixHost. 
>>>> Now, EmulatorPkg with CLANG9 only works on Windows Host.
>>>> This patch can make other modules pass build in Windows/Linux/Mac only if 
>>>> LLVM9 tool set is installed.
>>>> But, the generated image may not work on Linux/Mac. I agree below linker 
>>>> flags are specific to windows host.
>>>> So, I suggest to add the conditional statement of $(WIN_HOST_BUILD) == 
>>>> TRUE for them.
>>>> 
>>>> 
>>>> For the EmulatorPkg the Host is a native App for that OS you build on, but 
>>>> it seems like CLANG9 is targeted to build Windows Apps. I'm not sure  but 
>>>> you might be able to override all the linker commands to build a native 
>>>> app, or just use the system linker for the Host?
>>>> 
>>>> I'm not sure how well debugging will work mixing PDB and DWARF symbol 
>>>> formats?
>>>> 
>>>> Thanks,
>>>> 
>>>> Andrew Fish
>>>> 
>>>> 
>>>> 
>>>> !if $(WIN_HOST_BUILD) == TRUE
>>>> GCC:*_CLANG9_*_DLINK_FLAGS     = /ALIGN:4096 /FILEALIGN:4096 
>>>> /SUBSYSTEM:CONSOLE
>>>> GCC:DEBUG_CLANG9_*_DLINK_FLAGS = 
>>>> /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
>>>> GCC:NOOPT_CLANG9_*_DLINK_FLAGS = 
>>>> /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
>>>> !endif
>>>> 
>>>> Thanks
>>>> Liming
>>>> From: af...@apple.com<mailto:af...@apple.com> 
>>>> <af...@apple.com<mailto:af...@apple.com>>
>>>> Sent: Friday, October 18, 2019 1:15 AM
>>>> To: Ni, Ray <ray...@intel.com<mailto:ray...@intel.com>>
>>>> Cc: Gao, Liming <liming....@intel.com<mailto:liming....@intel.com>>; 
>>>> devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Justen, Jordan L 
>>>> <jordan.l.jus...@intel.com<mailto:jordan.l.jus...@intel.com>>
>>>> Subject: Re: [Patch v3 10/11] EmulatorPkg: Enable CLANG9 tool chain
>>>> 
>>>> Ray,
>>>> 
>>>> Sorry I'm coming a little late to this and I'm confused. I have some 
>>>> questions?
>>>> 1) Does CLANG9 imply CLANGPE?
>>>> 2) Does CLANGPE work on Linux and macOS? Can you pass the Windows style 
>>>> arguments to CLANGPE linker on Linux and macOS?
>>>> 3) For the EmulatorPkg don't you have the extra requirement that compiler 
>>>> needs a standard C lib (or platform specific libs) to function?
>>>>      a) GCC:*_CLANG9_*_DLINK_FLAGS in EmulatorPkg.dsc seems to imply the 
>>>> Linux and macOS systems will have a Windows SKD dir and a lot of Windows 
>>>> DLLs? Does all that come when you install CLANG9 when you install it on 
>>>> Linux or macOS?
>>>> 
>>>> 
>>>> 
>>>> So I guess I'm asking is the linker really the same for CLANG9 on all 
>>>> systems? I guess the answer could be yes, but it seems the C lib for the 
>>>> Host App is still an App for that OS and is OS dependent?
>>>> 
>>>> 
>>>> 
>>>> Sorry if I'm missing something fundamental and this is a dumb question.
>>>> 
>>>> 
>>>> 
>>>> Thanks,
>>>> 
>>>> 
>>>> 
>>>> Andrew Fish
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> On Oct 17, 2019, at 12:27 AM, Ni, Ray 
>>>> <ray...@intel.com<mailto:ray...@intel.com>> wrote:
>>>> 
>>>> Liming,
>>>> Emulator is using a generic SEC module. The host specific module is called 
>>>> "Host".
>>>> So I prefer to change the macro to "WIN_HOST_BUILD", with this change, 
>>>> Reviewed-by: Ray Ni <ray...@intel.com<mailto:ray...@intel.com>>
>>>> 
>>>> 
>>>> 
>>>> -----Original Message-----
>>>> From: Gao, Liming <liming....@intel.com<mailto:liming....@intel.com>>
>>>> Sent: Thursday, October 17, 2019 2:56 PM
>>>> To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
>>>> Cc: Justen, Jordan L 
>>>> <jordan.l.jus...@intel.com<mailto:jordan.l.jus...@intel.com>>; Andrew Fish
>>>> <af...@apple.com<mailto:af...@apple.com>>; Ni, Ray 
>>>> <ray...@intel.com<mailto:ray...@intel.com>>
>>>> Subject: [Patch v3 10/11] EmulatorPkg: Enable CLANG9 tool chain
>>>> 
>>>> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1603
>>>> 1. Add WIN_SEC_BUILD macro check for CLANG9 tool chain build -p
>>>> EmulatorPkg\EmulatorPkg.dsc -a IA32 -DWIN_SEC_BUILD=TRUE -t CLANG9
>>>> build -p EmulatorPkg\EmulatorPkg.dsc -a X64 -DWIN_SEC_BUILD=TRUE -t
>>>> CLANG9 2. Append CLANG CC and LINK flags to generate windows HOST.
>>>> 3. Fix WinHost issue to call GetProcessAffinityMask() API.
>>>> The input parameter should be UINTN pointer instead of UINT32 pointer.
>>>> 
>>>> Cc: Jordan Justen 
>>>> <jordan.l.jus...@intel.com<mailto:jordan.l.jus...@intel.com>>
>>>> Cc: Andrew Fish <af...@apple.com<mailto:af...@apple.com>>
>>>> Cc: Ray Ni <ray...@intel.com<mailto:ray...@intel.com>>
>>>> Signed-off-by: Liming Gao 
>>>> <liming....@intel.com<mailto:liming....@intel.com>>
>>>> ---
>>>> EmulatorPkg/Win/Host/WinHost.c   | 6 +++---
>>>> EmulatorPkg/EmulatorPkg.dsc      | 7 ++++++-
>>>> EmulatorPkg/Win/Host/WinHost.inf | 6 ++++++
>>>> 3 files changed, 15 insertions(+), 4 deletions(-)
>>>> 
>>>> diff --git a/EmulatorPkg/Win/Host/WinHost.c
>>>> b/EmulatorPkg/Win/Host/WinHost.c index 9aba3c8959..e40ce32548 100644
>>>> --- a/EmulatorPkg/Win/Host/WinHost.c
>>>> +++ b/EmulatorPkg/Win/Host/WinHost.c
>>>> @@ -356,7 +356,7 @@ Returns:
>>>> INTN
>>>> EFIAPI
>>>> main (
>>>> -  IN  INTN  Argc,
>>>> +  IN  INT  Argc,
>>>> IN  CHAR8 **Argv,
>>>> IN  CHAR8 **Envp
>>>> )
>>>> @@ -391,8 +391,8 @@ Returns:
>>>> VOID                  *SecFile;
>>>> CHAR16                *MemorySizeStr;
>>>> CHAR16                *FirmwareVolumesStr;
>>>> -  UINT32                ProcessAffinityMask;
>>>> -  UINT32                SystemAffinityMask;
>>>> +  UINTN                 ProcessAffinityMask;
>>>> +  UINTN                 SystemAffinityMask;
>>>> INT32                 LowBit;
>>>> 
>>>> //
>>>> diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc
>>>> index 20f1187713..72532f5daf 100644
>>>> --- a/EmulatorPkg/EmulatorPkg.dsc
>>>> +++ b/EmulatorPkg/EmulatorPkg.dsc
>>>> @@ -237,9 +237,10 @@
>>>> 
>>>> [Components]
>>>> !if "IA32" in $(ARCH) || "X64" in $(ARCH)
>>>> -  !if "MSFT" in $(FAMILY)
>>>> +  !if "MSFT" in $(FAMILY) || $(WIN_SEC_BUILD) == TRUE
>>>>   ##
>>>>   #  Emulator, OS WIN application
>>>> +    #  CLANG9 is cross OS tool chain. It depends on WIN_SEC_BUILD macro.
>>>>   ##
>>>>   EmulatorPkg/Win/Host/WinHost.inf
>>>> !else
>>>> @@ -419,7 +420,11 @@
>>>> 
>>>> MSFT:DEBUG_*_*_CC_FLAGS = /Od /Oy-
>>>> MSFT:NOOPT_*_*_CC_FLAGS = /Od /Oy-
>>>> +  GCC:DEBUG_CLANG9_*_CC_FLAGS =-O0 -Wno-unused-command-line-
>>>> argument
>>>> + -Wno-incompatible-pointer-types -Wno-enum-conversion
>>>> + -Wno-incompatible-pointer-types -Wno-sometimes-uninitialized
>>>> + -Wno-constant-conversion -Wno-main-return-type
>>>> 
>>>> MSFT:*_*_*_DLINK_FLAGS     = /ALIGN:4096 /FILEALIGN:4096
>>>> /SUBSYSTEM:CONSOLE
>>>> MSFT:DEBUG_*_*_DLINK_FLAGS =
>>>> /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
>>>> MSFT:NOOPT_*_*_DLINK_FLAGS =
>>>> /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
>>>> +  GCC:*_CLANG9_*_DLINK_FLAGS     = /ALIGN:4096 /FILEALIGN:4096
>>>> /SUBSYSTEM:CONSOLE
>>>> +  GCC:DEBUG_CLANG9_*_DLINK_FLAGS =
>>>> + /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
>>>> + GCC:NOOPT_CLANG9_*_DLINK_FLAGS =
>>>> + /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
>>>> diff --git a/EmulatorPkg/Win/Host/WinHost.inf
>>>> b/EmulatorPkg/Win/Host/WinHost.inf
>>>> index 631d5a6470..1adca10d79 100644
>>>> --- a/EmulatorPkg/Win/Host/WinHost.inf
>>>> +++ b/EmulatorPkg/Win/Host/WinHost.inf
>>>> @@ -95,3 +95,9 @@
>>>> MSFT:*_VS2017_X64_DLINK_FLAGS      =
>>>> /LIBPATH:"%VCToolsInstallDir%lib\x64"
>>>> /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64"
>>>> /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64"
>>>> /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP
>>>> /OPT:REF /DEBUG /MACHINE:AMD64 /LTCG Kernel32.lib MSVCRTD.lib
>>>> vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib
>>>> MSFT:*_*_X64_ASM_FLAGS            == /nologo /W3 /WX /c /Cx /Zd /W0 /Zi
>>>> MSFT:*_*_X64_ASMLINK_FLAGS        == /link /nologo
>>>> +
>>>> +  GCC:*_CLANG9_X64_DLINK_FLAGS ==
>>>> /out:"$(BIN_DIR)\$(BASE_NAME).exe" /base:0x10000000
>>>> /pdb:"$(BIN_DIR)\$(BASE_NAME).pdb"
>>>> /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64"
>>>> /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64"
>>>> /LIBPATH:"%VCToolsInstallDir%lib\x64"   /NOLOGO /SUBSYSTEM:CONSOLE
>>>> /NODEFAULTLIB /IGNORE:4086  /OPT:REF /DEBUG /MACHINE:AMD64
>>>> Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib
>>>> Winmm.lib Advapi32.lib /lldmap
>>>> /EXPORT:InitializeDriver=_ModuleEntryPoint
>>>> +  GCC:*_CLANG9_X64_CC_FLAGS == -m64 -g -fshort-wchar
>>>> + -fno-strict-aliasing -Wall -c -include AutoGen.h -D
>>>> + _CRT_SECURE_NO_WARNINGS -Wnonportable-include-path  -D UNICODE
>>>> -D
>>>> + _CRT_SECURE_NO_DEPRECATE
>>>> +
>>>> +  GCC:*_CLANG9_IA32_DLINK_FLAGS ==
>>>> /out:"$(BIN_DIR)\$(BASE_NAME).exe" /base:0x10000000
>>>> /pdb:"$(BIN_DIR)\$(BASE_NAME).pdb"
>>>> /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x86"
>>>> /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x86"
>>>> /LIBPATH:"%VCToolsInstallDir%ib\x86"   /NOLOGO /SUBSYSTEM:CONSOLE
>>>> /NODEFAULTLIB /IGNORE:4086  /OPT:REF /DEBUG /MACHINE:I386
>>>> Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib
>>>> Winmm.lib Advapi32.lib /lldmap
>>>> /EXPORT:InitializeDriver=_ModuleEntryPoint
>>>> +  GCC:*_CLANG9_IA32_CC_FLAGS == -m32 -g -fshort-wchar
>>>> + -fno-strict-aliasing -Wall -c -include AutoGen.h -D
>>>> + _CRT_SECURE_NO_WARNINGS -Wnonportable-include-path  -D UNICODE
>>>> -D
>>>> + _CRT_SECURE_NO_DEPRECATE
>>>> --
>>>> 2.13.0.windows.1
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>> 


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

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

Reply via email to