* [PATCH v1 0/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
@ 2019-06-04 15:41 Roman Agafonov
2019-06-04 15:41 ` [PATCH v1 1/1] " Roman Agafonov
0 siblings, 1 reply; 7+ messages in thread
From: Roman Agafonov @ 2019-06-04 15:41 UTC (permalink / raw)
To: devel@edk2.groups.io; +Cc: Bob Feng, Liming Gao, Yonghong Zhu
This patch removes /WHOLEARCHIVE flag from VS2017 toolchain configuration
to reduce the size of resulting binaries.
GitHub branch: https://github.com/pcfist/edk2/tree/fix_vs2017_linker_config
Roman Agafonov (1):
BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
BaseTools/Conf/tools_def.template | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Signed-off-by: Roman Agafonov <roman.agafonov@aquantia.com>
--
2.9.0.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
2019-06-04 15:41 [PATCH v1 0/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain Roman Agafonov
@ 2019-06-04 15:41 ` Roman Agafonov
2019-06-04 15:54 ` Liming Gao
0 siblings, 1 reply; 7+ messages in thread
From: Roman Agafonov @ 2019-06-04 15:41 UTC (permalink / raw)
To: devel@edk2.groups.io; +Cc: Bob Feng, Liming Gao, Yonghong Zhu
I have noticed the resulting binaries are about twice as large when
using VS2017 toolchain compared to the ones built with VS2015. It appears
this is caused by /WHOLEARCHIVE linker flag used by this toolchain. This
flag was previously removed from VS2015 toolchain due to compatibility
issues. I believe it should not be used with VS2017 as well.
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Signed-off-by: Roman Agafonov <roman.agafonov@aquantia.com>
---
BaseTools/Conf/tools_def.template | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
index 26a2cf604f74..482a526f3052 100755
--- a/BaseTools/Conf/tools_def.template
+++ b/BaseTools/Conf/tools_def.template
@@ -1545,7 +1545,7 @@ NOOPT_VS2015x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF
*_VS2017_*_APP_FLAGS = /nologo /E /TC
*_VS2017_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h
*_VS2017_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h
-*_VS2017_*_DLINK2_FLAGS = /WHOLEARCHIVE
+*_VS2017_*_DLINK2_FLAGS =
*_VS2017_*_ASM16_PATH = DEF(VS2017_BIN_IA32)\ml.exe
##################
--
2.9.0.windows.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
2019-06-04 15:41 ` [PATCH v1 1/1] " Roman Agafonov
@ 2019-06-04 15:54 ` Liming Gao
2019-06-04 17:20 ` Roman Agafonov
0 siblings, 1 reply; 7+ messages in thread
From: Liming Gao @ 2019-06-04 15:54 UTC (permalink / raw)
To: Roman Agafonov, devel@edk2.groups.io; +Cc: Feng, Bob C, Zhu, Yonghong
Can you show the size data with VS2017 and VS2015 for the same code?
Thanks
Liming
> -----Original Message-----
> From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> Sent: Tuesday, June 4, 2019 11:41 PM
> To: devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> Subject: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> I have noticed the resulting binaries are about twice as large when
> using VS2017 toolchain compared to the ones built with VS2015. It appears
> this is caused by /WHOLEARCHIVE linker flag used by this toolchain. This
> flag was previously removed from VS2015 toolchain due to compatibility
> issues. I believe it should not be used with VS2017 as well.
>
> Cc: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> Signed-off-by: Roman Agafonov <roman.agafonov@aquantia.com>
> ---
> BaseTools/Conf/tools_def.template | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
> index 26a2cf604f74..482a526f3052 100755
> --- a/BaseTools/Conf/tools_def.template
> +++ b/BaseTools/Conf/tools_def.template
> @@ -1545,7 +1545,7 @@ NOOPT_VS2015x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF
> *_VS2017_*_APP_FLAGS = /nologo /E /TC
> *_VS2017_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h
> *_VS2017_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h
> -*_VS2017_*_DLINK2_FLAGS = /WHOLEARCHIVE
> +*_VS2017_*_DLINK2_FLAGS =
> *_VS2017_*_ASM16_PATH = DEF(VS2017_BIN_IA32)\ml.exe
>
> ##################
> --
> 2.9.0.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
2019-06-04 15:54 ` Liming Gao
@ 2019-06-04 17:20 ` Roman Agafonov
2019-06-05 15:47 ` Liming Gao
0 siblings, 1 reply; 7+ messages in thread
From: Roman Agafonov @ 2019-06-04 17:20 UTC (permalink / raw)
To: Gao, Liming, devel@edk2.groups.io; +Cc: Feng, Bob C, Zhu, Yonghong
Hi Liming,
Sure. Here is what I get after building our NIC driver binary with VS2015x86 and VS2017 toolchains:
pcfist@pcfist-pc:/mnt/c/src/uefi/udk2018$ du -h Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
36K Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi
68K Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
Best regards,
Roman
From: Gao, Liming <liming.gao@intel.com>
Sent: Tuesday, June 4, 2019 6:54 PM
To: Roman Agafonov; devel@edk2.groups.io
Cc: Feng, Bob C; Zhu, Yonghong
Subject: RE: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
Can you show the size data with VS2017 and VS2015 for the same code?
Thanks
Liming
> -----Original Message-----
> From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> Sent: Tuesday, June 4, 2019 11:41 PM
> To: devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> Subject: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> I have noticed the resulting binaries are about twice as large when
> using VS2017 toolchain compared to the ones built with VS2015. It appears
> this is caused by /WHOLEARCHIVE linker flag used by this toolchain. This
> flag was previously removed from VS2015 toolchain due to compatibility
> issues. I believe it should not be used with VS2017 as well.
>
> Cc: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> Signed-off-by: Roman Agafonov <roman.agafonov@aquantia.com>
> ---
> BaseTools/Conf/tools_def.template | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
> index 26a2cf604f74..482a526f3052 100755
> --- a/BaseTools/Conf/tools_def.template
> +++ b/BaseTools/Conf/tools_def.template
> @@ -1545,7 +1545,7 @@ NOOPT_VS2015x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF
> *_VS2017_*_APP_FLAGS = /nologo /E /TC
> *_VS2017_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h
> *_VS2017_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h
> -*_VS2017_*_DLINK2_FLAGS = /WHOLEARCHIVE
> +*_VS2017_*_DLINK2_FLAGS =
> *_VS2017_*_ASM16_PATH = DEF(VS2017_BIN_IA32)\ml.exe
>
> ##################
> --
> 2.9.0.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
2019-06-04 17:20 ` Roman Agafonov
@ 2019-06-05 15:47 ` Liming Gao
2019-06-06 12:20 ` Roman Agafonov
0 siblings, 1 reply; 7+ messages in thread
From: Liming Gao @ 2019-06-05 15:47 UTC (permalink / raw)
To: Roman Agafonov, devel@edk2.groups.io; +Cc: Feng, Bob C, Zhu, Yonghong
I build edk2 OVMF with VS2015 and VS2017. Their image size are almost same. Have you the additional options to disable the optimization? In fact, /GL option will remove the unused function and logic.
> -----Original Message-----
> From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> Sent: Wednesday, June 5, 2019 1:21 AM
> To: Gao, Liming <liming.gao@intel.com>; devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> Subject: Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> Hi Liming,
>
> Sure. Here is what I get after building our NIC driver binary with VS2015x86 and VS2017 toolchains:
>
> pcfist@pcfist-pc:/mnt/c/src/uefi/udk2018$ du -h Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi
> Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
> 36K Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi
> 68K Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
>
> Best regards,
> Roman
>
> From: Gao, Liming <liming.gao@intel.com>
> Sent: Tuesday, June 4, 2019 6:54 PM
> To: Roman Agafonov; devel@edk2.groups.io
> Cc: Feng, Bob C; Zhu, Yonghong
> Subject: RE: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> Can you show the size data with VS2017 and VS2015 for the same code?
>
> Thanks
> Liming
> > -----Original Message-----
> > From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> > Sent: Tuesday, June 4, 2019 11:41 PM
> > To: devel@edk2.groups.io
> > Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> > Subject: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
> >
> > I have noticed the resulting binaries are about twice as large when
> > using VS2017 toolchain compared to the ones built with VS2015. It appears
> > this is caused by /WHOLEARCHIVE linker flag used by this toolchain. This
> > flag was previously removed from VS2015 toolchain due to compatibility
> > issues. I believe it should not be used with VS2017 as well.
> >
> > Cc: Bob Feng <bob.c.feng@intel.com>
> > Cc: Liming Gao <liming.gao@intel.com>
> > Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> > Signed-off-by: Roman Agafonov <roman.agafonov@aquantia.com>
> > ---
> > BaseTools/Conf/tools_def.template | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
> > index 26a2cf604f74..482a526f3052 100755
> > --- a/BaseTools/Conf/tools_def.template
> > +++ b/BaseTools/Conf/tools_def.template
> > @@ -1545,7 +1545,7 @@ NOOPT_VS2015x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF
> > *_VS2017_*_APP_FLAGS = /nologo /E /TC
> > *_VS2017_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h
> > *_VS2017_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h
> > -*_VS2017_*_DLINK2_FLAGS = /WHOLEARCHIVE
> > +*_VS2017_*_DLINK2_FLAGS =
> > *_VS2017_*_ASM16_PATH = DEF(VS2017_BIN_IA32)\ml.exe
> >
> > ##################
> > --
> > 2.9.0.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
2019-06-05 15:47 ` Liming Gao
@ 2019-06-06 12:20 ` Roman Agafonov
2019-06-06 14:06 ` Liming Gao
0 siblings, 1 reply; 7+ messages in thread
From: Roman Agafonov @ 2019-06-06 12:20 UTC (permalink / raw)
To: Gao, Liming, devel@edk2.groups.io; +Cc: Feng, Bob C, Zhu, Yonghong
Hi Liming,
I don't have any custom options except a few ones to disable compiler warnings. AFAIK /GL is a compiler, not linker option, and it is used by EDK Visual Studio toolchains by default.
Of course, the results may vary from project to project. There difference may not be that big in all cases. Please try building some other package and compare the results. For example, this is what I get for OptionRomPkg compiled with two different toolchains. As you can see, the difference in size is abnormal.
pcfist@pcfist-pc:/mnt/c/src/UEFI/UDK2018/Build/OptionRomPkg$ ls -psh1 RELEASE_VS2017/X64 RELEASE_VS2015x86/X64
RELEASE_VS2015x86/X64:
total 212K
20K AtapiPassThruDxe.efi
24K AtapiPassThruDxe.rom
28K Ax88772b.efi
24K Ax88772.efi
12K BltLibSample.efi
24K CirrusLogic5430Dxe.efi
12K CirrusLogic5430Dxe.rom
24K FtdiUsbSerialDxe.efi
0 MdePkg/
0 OptionRomPkg/
8.0K TOOLS_DEF.X64
36K UndiRuntimeDxe.efi
RELEASE_VS2017/X64:
total 424K
56K AtapiPassThruDxe.efi
56K AtapiPassThruDxe.rom
60K Ax88772b.efi
24K Ax88772.efi
12K BltLibSample.efi
56K CirrusLogic5430Dxe.efi
28K CirrusLogic5430Dxe.rom
56K FtdiUsbSerialDxe.efi
0 MdePkg/
0 OptionRomPkg/
8.0K TOOLS_DEF.X64
68K UndiRuntimeDxe.efi
When comparing the .map files using difftool, I see a lot of unused functions from edk2 libraries (such as UefiDevicePathLib etc.) being included in the resulting executable, thus increasing its size. This is exactly what /WHOLEARCHIVE flag is intended for. My point here is whether this behavior is really desired, and given the fact that WHOLEARCHIVE had been removed from VS2015 toolchain previously, I don't see a reason to use it with VS2017 too.
Best regards,
Roman
From: Gao, Liming <liming.gao@intel.com>
Sent: Wednesday, June 5, 2019 6:47 PM
To: Roman Agafonov; devel@edk2.groups.io
Cc: Feng, Bob C; Zhu, Yonghong
Subject: RE: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
I build edk2 OVMF with VS2015 and VS2017. Their image size are almost same. Have you the additional options to disable the optimization? In fact, /GL option will remove the unused function and logic.
> -----Original Message-----
> From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> Sent: Wednesday, June 5, 2019 1:21 AM
> To: Gao, Liming <liming.gao@intel.com>; devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> Subject: Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> Hi Liming,
>
> Sure. Here is what I get after building our NIC driver binary with VS2015x86 and VS2017 toolchains:
>
> pcfist@pcfist-pc:/mnt/c/src/uefi/udk2018$ du -h Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi
> Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
> 36K Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi
> 68K Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
>
> Best regards,
> Roman
>
> From: Gao, Liming <liming.gao@intel.com>
> Sent: Tuesday, June 4, 2019 6:54 PM
> To: Roman Agafonov; devel@edk2.groups.io
> Cc: Feng, Bob C; Zhu, Yonghong
> Subject: RE: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> Can you show the size data with VS2017 and VS2015 for the same code?
>
> Thanks
> Liming
> > -----Original Message-----
> > From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> > Sent: Tuesday, June 4, 2019 11:41 PM
> > To: devel@edk2.groups.io
> > Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> > Subject: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
> >
> > I have noticed the resulting binaries are about twice as large when
> > using VS2017 toolchain compared to the ones built with VS2015. It appears
> > this is caused by /WHOLEARCHIVE linker flag used by this toolchain. This
> > flag was previously removed from VS2015 toolchain due to compatibility
> > issues. I believe it should not be used with VS2017 as well.
> >
> > Cc: Bob Feng <bob.c.feng@intel.com>
> > Cc: Liming Gao <liming.gao@intel.com>
> > Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> > Signed-off-by: Roman Agafonov <roman.agafonov@aquantia.com>
> > ---
> > BaseTools/Conf/tools_def.template | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
> > index 26a2cf604f74..482a526f3052 100755
> > --- a/BaseTools/Conf/tools_def.template
> > +++ b/BaseTools/Conf/tools_def.template
> > @@ -1545,7 +1545,7 @@ NOOPT_VS2015x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF
> > *_VS2017_*_APP_FLAGS = /nologo /E /TC
> > *_VS2017_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h
> > *_VS2017_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h
> > -*_VS2017_*_DLINK2_FLAGS = /WHOLEARCHIVE
> > +*_VS2017_*_DLINK2_FLAGS =
> > *_VS2017_*_ASM16_PATH = DEF(VS2017_BIN_IA32)\ml.exe
> >
> > ##################
> > --
> > 2.9.0.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
2019-06-06 12:20 ` Roman Agafonov
@ 2019-06-06 14:06 ` Liming Gao
0 siblings, 0 replies; 7+ messages in thread
From: Liming Gao @ 2019-06-06 14:06 UTC (permalink / raw)
To: Roman Agafonov, devel@edk2.groups.io
Cc: Feng, Bob C, Zhu, Yonghong, Gao, Liming
Roman:
Below is my data. There is no big difference for their image size. My VS2017 version 15.9, VS2015 version 14.0. And, /GL is the global optimization compiler option. /LTCG is the linker option for the whole-program optimization. /WHOLEARCHIVE will force to link all obj files. It is helpful to detect the duplicated functions or the missing functions. But, /LTCG can do the global optimization to remove unused ones. Then, the final image should be the similar./WHOLEARCHIVE has some issue in VS2015. So, it is not enabled in VS2015.
edk2 git version 20d2e5a125
edk2-platform git version 892766538f, now OptionRomPkg is in edk2-platforms
Directory of D:\AllPkg\Build\OptionRomPkg\RELEASE_VS2015x86\X64
06/06/2019 09:44 PM <DIR> .
06/06/2019 09:44 PM <DIR> ..
06/06/2019 09:44 PM 20,512 AtapiPassThruDxe.efi
06/06/2019 09:44 PM 20,992 AtapiPassThruDxe.rom
06/06/2019 09:44 PM 23,040 Ax88772.efi
06/06/2019 09:44 PM 26,464 Ax88772b.efi
06/06/2019 09:44 PM 10,208 BltLibSample.efi
06/06/2019 09:44 PM 21,376 CirrusLogic5430Dxe.efi
06/06/2019 09:44 PM 11,264 CirrusLogic5430Dxe.rom
06/06/2019 09:44 PM 21,664 FtdiUsbSerialDxe.efi
06/06/2019 09:44 PM <DIR> MdePkg
06/06/2019 09:44 PM <DIR> OptionRomPkg
06/06/2019 09:44 PM 6,685 TOOLS_DEF.X64
06/06/2019 09:44 PM 34,688 UndiRuntimeDxe.efi
Directory of D:\AllPkg\Build\OptionRomPkg\RELEASE_VS2017\X64
06/06/2019 09:41 PM <DIR> .
06/06/2019 09:41 PM <DIR> ..
06/06/2019 09:41 PM 20,864 AtapiPassThruDxe.efi
06/06/2019 09:41 PM 20,992 AtapiPassThruDxe.rom
06/06/2019 09:41 PM 23,360 Ax88772.efi
06/06/2019 09:41 PM 26,944 Ax88772b.efi
06/06/2019 09:41 PM 10,528 BltLibSample.efi
06/06/2019 09:41 PM 21,792 CirrusLogic5430Dxe.efi
06/06/2019 09:41 PM 11,264 CirrusLogic5430Dxe.rom
06/06/2019 09:41 PM 22,080 FtdiUsbSerialDxe.efi
06/06/2019 09:41 PM <DIR> MdePkg
06/06/2019 09:41 PM <DIR> OptionRomPkg
06/06/2019 09:41 PM 7,129 TOOLS_DEF.X64
06/06/2019 09:41 PM 35,104 UndiRuntimeDxe.efi
Thanks
Liming
> -----Original Message-----
> From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> Sent: Thursday, June 6, 2019 8:20 PM
> To: Gao, Liming <liming.gao@intel.com>; devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> Subject: Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> Hi Liming,
>
> I don't have any custom options except a few ones to disable compiler warnings. AFAIK /GL is a compiler, not linker option, and it is used
> by EDK Visual Studio toolchains by default.
>
> Of course, the results may vary from project to project. There difference may not be that big in all cases. Please try building some other
> package and compare the results. For example, this is what I get for OptionRomPkg compiled with two different toolchains. As you can see,
> the difference in size is abnormal.
>
> pcfist@pcfist-pc:/mnt/c/src/UEFI/UDK2018/Build/OptionRomPkg$ ls -psh1 RELEASE_VS2017/X64 RELEASE_VS2015x86/X64
> RELEASE_VS2015x86/X64:
> total 212K
> 20K AtapiPassThruDxe.efi
> 24K AtapiPassThruDxe.rom
> 28K Ax88772b.efi
> 24K Ax88772.efi
> 12K BltLibSample.efi
> 24K CirrusLogic5430Dxe.efi
> 12K CirrusLogic5430Dxe.rom
> 24K FtdiUsbSerialDxe.efi
> 0 MdePkg/
> 0 OptionRomPkg/
> 8.0K TOOLS_DEF.X64
> 36K UndiRuntimeDxe.efi
>
> RELEASE_VS2017/X64:
> total 424K
> 56K AtapiPassThruDxe.efi
> 56K AtapiPassThruDxe.rom
> 60K Ax88772b.efi
> 24K Ax88772.efi
> 12K BltLibSample.efi
> 56K CirrusLogic5430Dxe.efi
> 28K CirrusLogic5430Dxe.rom
> 56K FtdiUsbSerialDxe.efi
> 0 MdePkg/
> 0 OptionRomPkg/
> 8.0K TOOLS_DEF.X64
> 68K UndiRuntimeDxe.efi
>
> When comparing the .map files using difftool, I see a lot of unused functions from edk2 libraries (such as UefiDevicePathLib etc.) being
> included in the resulting executable, thus increasing its size. This is exactly what /WHOLEARCHIVE flag is intended for. My point here is
> whether this behavior is really desired, and given the fact that WHOLEARCHIVE had been removed from VS2015 toolchain previously, I
> don't see a reason to use it with VS2017 too.
>
> Best regards,
> Roman
>
>
> From: Gao, Liming <liming.gao@intel.com>
> Sent: Wednesday, June 5, 2019 6:47 PM
> To: Roman Agafonov; devel@edk2.groups.io
> Cc: Feng, Bob C; Zhu, Yonghong
> Subject: RE: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
>
> I build edk2 OVMF with VS2015 and VS2017. Their image size are almost same. Have you the additional options to disable the
> optimization? In fact, /GL option will remove the unused function and logic.
>
> > -----Original Message-----
> > From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> > Sent: Wednesday, June 5, 2019 1:21 AM
> > To: Gao, Liming <liming.gao@intel.com>; devel@edk2.groups.io
> > Cc: Feng, Bob C <bob.c.feng@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> > Subject: Re: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
> >
> > Hi Liming,
> >
> > Sure. Here is what I get after building our NIC driver binary with VS2015x86 and VS2017 toolchains:
> >
> > pcfist@pcfist-pc:/mnt/c/src/uefi/udk2018$ du -h Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi
> > Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
> > 36K Build/xgbe_atl/RELEASE_VS2015x86/X64/xgbe_atl.efi
> > 68K Build/xgbe_atl/RELEASE_VS2017/X64/xgbe_atl.efi
> >
> > Best regards,
> > Roman
> >
> > From: Gao, Liming <liming.gao@intel.com>
> > Sent: Tuesday, June 4, 2019 6:54 PM
> > To: Roman Agafonov; devel@edk2.groups.io
> > Cc: Feng, Bob C; Zhu, Yonghong
> > Subject: RE: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
> >
> > Can you show the size data with VS2017 and VS2015 for the same code?
> >
> > Thanks
> > Liming
> > > -----Original Message-----
> > > From: Roman Agafonov [mailto:Roman.Agafonov@aquantia.com]
> > > Sent: Tuesday, June 4, 2019 11:41 PM
> > > To: devel@edk2.groups.io
> > > Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
> > > Subject: [PATCH v1 1/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain
> > >
> > > I have noticed the resulting binaries are about twice as large when
> > > using VS2017 toolchain compared to the ones built with VS2015. It appears
> > > this is caused by /WHOLEARCHIVE linker flag used by this toolchain. This
> > > flag was previously removed from VS2015 toolchain due to compatibility
> > > issues. I believe it should not be used with VS2017 as well.
> > >
> > > Cc: Bob Feng <bob.c.feng@intel.com>
> > > Cc: Liming Gao <liming.gao@intel.com>
> > > Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> > > Signed-off-by: Roman Agafonov <roman.agafonov@aquantia.com>
> > > ---
> > > BaseTools/Conf/tools_def.template | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
> > > index 26a2cf604f74..482a526f3052 100755
> > > --- a/BaseTools/Conf/tools_def.template
> > > +++ b/BaseTools/Conf/tools_def.template
> > > @@ -1545,7 +1545,7 @@ NOOPT_VS2015x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF
> > > *_VS2017_*_APP_FLAGS = /nologo /E /TC
> > > *_VS2017_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h
> > > *_VS2017_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h
> > > -*_VS2017_*_DLINK2_FLAGS = /WHOLEARCHIVE
> > > +*_VS2017_*_DLINK2_FLAGS =
> > > *_VS2017_*_ASM16_PATH = DEF(VS2017_BIN_IA32)\ml.exe
> > >
> > > ##################
> > > --
> > > 2.9.0.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-06-06 14:06 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-04 15:41 [PATCH v1 0/1] BaseTools: don't use WHOLEARCHIVE linker flag for VS2017 toolchain Roman Agafonov
2019-06-04 15:41 ` [PATCH v1 1/1] " Roman Agafonov
2019-06-04 15:54 ` Liming Gao
2019-06-04 17:20 ` Roman Agafonov
2019-06-05 15:47 ` Liming Gao
2019-06-06 12:20 ` Roman Agafonov
2019-06-06 14:06 ` Liming Gao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox