From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by mx.groups.io with SMTP id smtpd.web11.7207.1573146408341780915 for ; Thu, 07 Nov 2019 09:06:48 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=gJbSm6vQ; spf=pass (domain: linaro.org, ip: 209.85.128.66, mailfrom: leif.lindholm@linaro.org) Received: by mail-wm1-f66.google.com with SMTP id q130so3285371wme.2 for ; Thu, 07 Nov 2019 09:06:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=DYGXpag1cI/K/pX4HSWjE+yn6bRZb3jJpos+igNmZpQ=; b=gJbSm6vQlP9P6ZjiBzV+axvUVn/CDP1Z2A8t+CG67ATPsYs7dypBzfpvAsRRCMffQZ 4W6VrF/nUBCaIe3eqfp/JDB1VP7klylE9UAvUKIrAsuycdq4CxcYLpNcswS9nDnTO9oC MkKG4wI8r89gSnsFvi7JvXCiuvdNr7R0xCLwJ5y5BzNoWdjAZvinNPVACaPE78eY6AS8 ECFl0fkGDv8N1yory0aV896KVskX5WNSsLvJarCVXVPsKZZXyrAkOOU2EmS9+/sopX5v Q+0VUue8ihpQyHGFeRPnoajvWJ2NcjWmFmE9lOAaAnGIOipsY5RJBxvoqYfaoozjlC8v 6x+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=DYGXpag1cI/K/pX4HSWjE+yn6bRZb3jJpos+igNmZpQ=; b=CqdBe7NGd3/ZMfbvRz98GLbx3nt2JKhoVaA/HLnZX8p6jNkU5zlsnv/BaWbasayz6D xZPWz6GYEGDiJWFY9c5dh7voSPd5ZbL2avHx9OgPFWFW6jc0v3cLLzlqCC4S2tXmMn2k B0ZlQdyb5+DdraUxJUOVKIOmg6ZlMUruEuTy5oj8jlukjO4eapX+DR5L2+20cWdWfu8c 1CPxuCRqaupSNR71i/IBmC8QG1NtWJzTrECikPFbHP9bfiDA93LIGDZBV4ZBXaufO+iA RlNXWlCDTCdbHV8udmhZvz2ncEiebq4ATYc40wrR/r+juaRVUa9mC02vaijKNu9qraOn D87g== X-Gm-Message-State: APjAAAUULqYp1qRlDkHSPZiopEAWQqbA7h9Ji7J/CtmSE5FHQwFisp2F R9G380inwm4UKh0X/GB9a/m+P4o5ugM= X-Google-Smtp-Source: APXvYqwrfe01fqtVfR9yHJI9PCsVJy4oV+sygKmA0ABCqlm9rpaGQB4lqZEqFDwkOHZD+5zm6/BqmA== X-Received: by 2002:a1c:bc56:: with SMTP id m83mr3824224wmf.11.1573146406496; Thu, 07 Nov 2019 09:06:46 -0800 (PST) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id j14sm2824641wrp.16.2019.11.07.09.06.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Nov 2019 09:06:45 -0800 (PST) Date: Thu, 7 Nov 2019 17:06:44 +0000 From: "Leif Lindholm" To: devel@edk2.groups.io, afish@apple.com, "Gao, Liming" Cc: "Ni, Ray" , Jordan Justen Subject: Re: [edk2-devel] [Patch v3 10/11] EmulatorPkg: Enable CLANG9 tool chain Message-ID: <20191107170644.GT16820@bivouac.eciton.net> References: <1571295356-11608-1-git-send-email-liming.gao@intel.com> <1571295356-11608-11-git-send-email-liming.gao@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C325BB0@SHSMSX104.ccr.corp.intel.com> <34BE6669-004C-48AD-A09D-FE1A8475ABE0@apple.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E51EC84@SHSMSX104.ccr.corp.intel.com> MIME-Version: 1.0 In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Hi Liming, I don't feel we can release the stable tag with the toolchain profile still holding this name. Do you have any comments? Best Regards, Leif On Fri, Oct 25, 2019 at 11:45:10AM -0700, Andrew Fish via Groups.Io wrote: > 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 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: afish@apple.com > > Sent: Friday, October 18, 2019 1:15 AM > > To: Ni, Ray > > Cc: Gao, Liming ; devel@edk2.groups.io; Justen, Jordan L > > 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 > 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 > > > > > > > -----Original Message----- > > From: Gao, Liming > > > Sent: Thursday, October 17, 2019 2:56 PM > > To: devel@edk2.groups.io > > Cc: Justen, Jordan L >; Andrew Fish > > >; Ni, Ray > > > 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 > > > Cc: Andrew Fish > > > Cc: Ray Ni > > > Signed-off-by: Liming Gao > > > --- > > 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 > > > > > > > > > >