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

Ferruh Yigit ferruh.yigit at intel.com
Fri Jun 10 13:06:35 CEST 2016


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


More information about the dev mailing list