From 2737037a417a97de8153ebc5e4556bdf38f765c6 Mon Sep 17 00:00:00 2001 From: Liming Gao Date: Thu, 17 Oct 2019 14:55:54 +0800 Subject: [PATCH] EmulatorPkg: Enable CLANG9 tool chain BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1603 1. Add WIN_HOST_BUILD macro check for CLANG9 tool chain build -p EmulatorPkg\EmulatorPkg.dsc -a IA32 -DWIN_HOST_BUILD=TRUE -t CLANG9 build -p EmulatorPkg\EmulatorPkg.dsc -a X64 -DWIN_HOST_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 Reviewed-by: Ray Ni --- EmulatorPkg/EmulatorPkg.dsc | 14 +++++++++++++- EmulatorPkg/Win/Host/WinHost.c | 8 ++++---- EmulatorPkg/Win/Host/WinHost.inf | 6 ++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc index 20f1187713..109685b062 100644 --- a/EmulatorPkg/EmulatorPkg.dsc +++ b/EmulatorPkg/EmulatorPkg.dsc @@ -237,9 +237,11 @@ [Components] !if "IA32" in $(ARCH) || "X64" in $(ARCH) - !if "MSFT" in $(FAMILY) + !if "MSFT" in $(FAMILY) || $(WIN_HOST_BUILD) == TRUE ## # Emulator, OS WIN application + # CLANG9 is cross OS tool chain. It depends on WIN_HOST_BUILD flag + # to build WinHost application. ## EmulatorPkg/Win/Host/WinHost.inf !else @@ -419,7 +421,17 @@ 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 + +!if $(WIN_HOST_BUILD) == TRUE + # + # CLANG9 tool chain depends on WIN_HOST_BUILD flag to generate the windows application. + # + 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 diff --git a/EmulatorPkg/Win/Host/WinHost.c b/EmulatorPkg/Win/Host/WinHost.c index 9aba3c8959..62a89f7617 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; // @@ -414,7 +414,7 @@ Returns: // Determine the first thread available to this process. // if (GetProcessAffinityMask (GetCurrentProcess (), &ProcessAffinityMask, &SystemAffinityMask)) { - LowBit = (INT32)LowBitSet32 (ProcessAffinityMask); + LowBit = (INT32)LowBitSet32 ((UINT32)ProcessAffinityMask); if (LowBit != -1) { // // Force the system to bind the process to a single thread to work 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.39.2