7962ce312d
SPDK uses constructor functions for registration functionality in several different areas - RPCs, bdev modules, event tracing, etc. Since these functions are not explicitly referenced, the linker will remove these constructor functions from the linked application unless their library is included using the --whole-archive linker option. SPDK has tried to minimize the number of libraries linked with --whole-archive to only those that are necessary. But there are still a lot of exceptions that we need to work around. The benefit to trying to restrict it is minimal - for example, an nvmf_tgt binary built before this patch is 4746320 bytes on my system, but linking all of the libraries with --whole-archive only increases it to 4784080 bytes - a difference of less than 1%. Note that DPDK also links all libraries with --whole-archive by default. This will also simplify some upcoming changes around shared library dependencies - we will be able to blindly use --whole-archive when linking the shared library as well. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Iab0dbbace06a3d15c835491e55683ab4cf9e53fe Reviewed-on: https://review.gerrithub.io/432917 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>