[dpdk-dev] [PATCH 2/2] mk: reduce scope of whole-archive to pmd libraries

2016-06-10 Thread Ferruh Yigit
On 6/10/2016 1:21 PM, Thomas Monjalon wrote:
> 2016-06-10 12:06, Ferruh Yigit:
>> On 6/10/2016 11:18 AM, Thomas Monjalon wrote:
>>> 2016-06-10 10:57, Ferruh Yigit:
 On 6/10/2016 10:03 AM, Thomas Monjalon wrote:
> 2016-05-27 17:48, Ferruh Yigit:
>> --whole-archive argument only required for pmd libraries, and currently
>> it covers more libraries. Reducing scope of the argument to pmd
>> libraries slightly reduce final application size.
>
> In my understanding, --whole-archive is required for static libraries used
> by plugins:
>   http://dpdk.org/commit/20afd76a
 Right, required for static libraries. But more than used by plugins,
 required for plugin to work.

> If we want to restrict it, I would say it must be around EAL, ring,
> mbuf, mempool, ethdev, cryptodev, etc.
>

 We should restrict to plugins. What happens is, since there is no direct
 call to PMDs from application, PMD code is not included into final
 application. To force PMDs to be included into final binary,
 --whole-archive is required.

 But --whole-archive is not required for other libraries, and just cause
 unnecessary increase in binary size.
>>>
>>> Yes it is necessary for other libraries, otherwise some symbols needed by
>>> plugins won't be available.
>>> Example:
>>> In function `rte_pmd_af_packet_devuninit':
>>> rte_eth_af_packet.c:(.text+0x8bf): undefined reference to 
>>> `rte_eth_dev_allocated'
>>> rte_eth_af_packet.c:(.text+0x930): undefined reference to 
>>> `rte_eth_dev_release_port'
>>>
>> If there is a direct call to that API, linker should include required
>> object file into final binary, --whole-archive shouldn't be required for
>> this.
>>
>> What is special for PMD's is there are not directly called, but
>> initialized using constructors.
>>
>> How are you getting above compilation error?
> 
> The error was generated with your patch on top of others I'm going to send.
> I suggest to continue the discussion/review based on the v2 coming soon.
> 

I have quickly checked v2, you are getting this compiler error because
--start-group/--end-group removed, so pmd not able to resolve the
references. And you are working around this by adding all object of
library unconditionally (--whole-archive). I will comment more of v2 patch.

Thanks,
ferruh


[dpdk-dev] [PATCH 2/2] mk: reduce scope of whole-archive to pmd libraries

2016-06-10 Thread Thomas Monjalon
2016-06-10 12:06, Ferruh Yigit:
> On 6/10/2016 11:18 AM, Thomas Monjalon wrote:
> > 2016-06-10 10:57, Ferruh Yigit:
> >> On 6/10/2016 10:03 AM, Thomas Monjalon wrote:
> >>> 2016-05-27 17:48, Ferruh Yigit:
>  --whole-archive argument only required for pmd libraries, and currently
>  it covers more libraries. Reducing scope of the argument to pmd
>  libraries slightly reduce final application size.
> >>>
> >>> In my understanding, --whole-archive is required for static libraries used
> >>> by plugins:
> >>>   http://dpdk.org/commit/20afd76a
> >> Right, required for static libraries. But more than used by plugins,
> >> required for plugin to work.
> >>
> >>> If we want to restrict it, I would say it must be around EAL, ring,
> >>> mbuf, mempool, ethdev, cryptodev, etc.
> >>>
> >>
> >> We should restrict to plugins. What happens is, since there is no direct
> >> call to PMDs from application, PMD code is not included into final
> >> application. To force PMDs to be included into final binary,
> >> --whole-archive is required.
> >>
> >> But --whole-archive is not required for other libraries, and just cause
> >> unnecessary increase in binary size.
> > 
> > Yes it is necessary for other libraries, otherwise some symbols needed by
> > plugins won't be available.
> > Example:
> > In function `rte_pmd_af_packet_devuninit':
> > rte_eth_af_packet.c:(.text+0x8bf): undefined reference to 
> > `rte_eth_dev_allocated'
> > rte_eth_af_packet.c:(.text+0x930): undefined reference to 
> > `rte_eth_dev_release_port'
> > 
> If there is a direct call to that API, linker should include required
> object file into final binary, --whole-archive shouldn't be required for
> this.
> 
> What is special for PMD's is there are not directly called, but
> initialized using constructors.
> 
> How are you getting above compilation error?

The error was generated with your patch on top of others I'm going to send.
I suggest to continue the discussion/review based on the v2 coming soon.


[dpdk-dev] [PATCH 2/2] mk: reduce scope of whole-archive to pmd libraries

2016-06-10 Thread Thomas Monjalon
2016-06-10 10:57, Ferruh Yigit:
> On 6/10/2016 10:03 AM, Thomas Monjalon wrote:
> > 2016-05-27 17:48, Ferruh Yigit:
> >> --whole-archive argument only required for pmd libraries, and currently
> >> it covers more libraries. Reducing scope of the argument to pmd
> >> libraries slightly reduce final application size.
> > 
> > In my understanding, --whole-archive is required for static libraries used
> > by plugins:
> > http://dpdk.org/commit/20afd76a
> Right, required for static libraries. But more than used by plugins,
> required for plugin to work.
> 
> > If we want to restrict it, I would say it must be around EAL, ring,
> > mbuf, mempool, ethdev, cryptodev, etc.
> > 
> 
> We should restrict to plugins. What happens is, since there is no direct
> call to PMDs from application, PMD code is not included into final
> application. To force PMDs to be included into final binary,
> --whole-archive is required.
> 
> But --whole-archive is not required for other libraries, and just cause
> unnecessary increase in binary size.

Yes it is necessary for other libraries, otherwise some symbols needed by
plugins won't be available.
Example:
In function `rte_pmd_af_packet_devuninit':
rte_eth_af_packet.c:(.text+0x8bf): undefined reference to 
`rte_eth_dev_allocated'
rte_eth_af_packet.c:(.text+0x930): undefined reference to 
`rte_eth_dev_release_port'



[dpdk-dev] [PATCH 2/2] mk: reduce scope of whole-archive to pmd libraries

2016-06-10 Thread Ferruh Yigit
On 6/10/2016 11:18 AM, Thomas Monjalon wrote:
> 2016-06-10 10:57, Ferruh Yigit:
>> On 6/10/2016 10:03 AM, Thomas Monjalon wrote:
>>> 2016-05-27 17:48, Ferruh Yigit:
 --whole-archive argument only required for pmd libraries, and currently
 it covers more libraries. Reducing scope of the argument to pmd
 libraries slightly reduce final application size.
>>>
>>> In my understanding, --whole-archive is required for static libraries used
>>> by plugins:
>>> http://dpdk.org/commit/20afd76a
>> Right, required for static libraries. But more than used by plugins,
>> required for plugin to work.
>>
>>> If we want to restrict it, I would say it must be around EAL, ring,
>>> mbuf, mempool, ethdev, cryptodev, etc.
>>>
>>
>> We should restrict to plugins. What happens is, since there is no direct
>> call to PMDs from application, PMD code is not included into final
>> application. To force PMDs to be included into final binary,
>> --whole-archive is required.
>>
>> But --whole-archive is not required for other libraries, and just cause
>> unnecessary increase in binary size.
> 
> Yes it is necessary for other libraries, otherwise some symbols needed by
> plugins won't be available.
> Example:
> In function `rte_pmd_af_packet_devuninit':
> rte_eth_af_packet.c:(.text+0x8bf): undefined reference to 
> `rte_eth_dev_allocated'
> rte_eth_af_packet.c:(.text+0x930): undefined reference to 
> `rte_eth_dev_release_port'
> 
If there is a direct call to that API, linker should include required
object file into final binary, --whole-archive shouldn't be required for
this.

What is special for PMD's is there are not directly called, but
initialized using constructors.

How are you getting above compilation error?

Thanks,
ferruh


[dpdk-dev] [PATCH 2/2] mk: reduce scope of whole-archive to pmd libraries

2016-06-10 Thread Thomas Monjalon
2016-05-27 17:48, Ferruh Yigit:
> --whole-archive argument only required for pmd libraries, and currently
> it covers more libraries. Reducing scope of the argument to pmd
> libraries slightly reduce final application size.

In my understanding, --whole-archive is required for static libraries used
by plugins:
http://dpdk.org/commit/20afd76a

If we want to restrict it, I would say it must be around EAL, ring,
mbuf, mempool, ethdev, cryptodev, etc.



[dpdk-dev] [PATCH 2/2] mk: reduce scope of whole-archive to pmd libraries

2016-05-27 Thread Ferruh Yigit
--whole-archive argument only required for pmd libraries, and currently
it covers more libraries. Reducing scope of the argument to pmd
libraries slightly reduce final application size.

Signed-off-by: Ferruh Yigit 
---
 mk/rte.app.mk | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index e12226c..8bfe240 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -57,7 +57,6 @@ _LDLIBS-y += -L$(RTE_SDK_BIN)/lib
 # Order is important: from higher level to lower level
 #

-_LDLIBS-y += --whole-archive
 _LDLIBS-y += --start-group

 _LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR)+= -lrte_distributor
@@ -129,6 +128,8 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)+= 
-lrte_pmd_xenvirt
 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
 # plugins (link only if static libraries)

+_LDLIBS-y += --whole-archive
+
 _LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD)+= -lrte_pmd_vmxnet3_uio
 _LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += -lrte_pmd_virtio
 _LDLIBS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD)  += -lrte_pmd_bnx2x
@@ -174,11 +175,12 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST)  += 
-lrte_pmd_vhost

 endif # $(CONFIG_RTE_LIBRTE_VHOST)

+_LDLIBS-y += --no-whole-archive
+
 endif # ! $(CONFIG_RTE_BUILD_SHARED_LIB)

 _LDLIBS-y += $(EXECENV_LDLIBS)
 _LDLIBS-y += --end-group
-_LDLIBS-y += --no-whole-archive

 LDLIBS += $(_LDLIBS-y) $(CPU_LDLIBS) $(EXTRA_LDLIBS)

-- 
2.5.5