Commit 880a1426 authored by Jim Harris's avatar Jim Harris
Browse files

Revert "build: link all static libs with --whole-archive"



There was an implicit merge conflict between this patch
and e956be96 which added NVMe/TCP support including adding
"sock" as an nvme.libtest.mk depdendency.

This reverts commit 7962ce31.

Change-Id: Ie7e58e89128f28080a986e12cd014de7df4752e5
Signed-off-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-on: https://review.gerrithub.io/434103


Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 66e620d8
Loading
Loading
Loading
Loading
+31 −8
Original line number Diff line number Diff line
@@ -31,22 +31,45 @@
#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

# Event subsystems only export constructor functions, so wrap these
# in whole-archive linker args
SPDK_FILTER_LIB_LIST = $(filter event_%,$(SPDK_LIB_LIST))

# RPC libraries only export constructor functions, so these need to be treated
#  separately and wrapped in whole-archive linker args
SPDK_FILTER_LIB_LIST += $(filter %_rpc,$(SPDK_LIB_LIST))

# Currently some libraries contain their respective RPC methods
#  rather than breaking them out into separate libraries.  So we must also include
#  these directories in the RPC library list.
SPDK_FILTER_LIB_LIST += $(filter iscsi,$(SPDK_LIB_LIST))
SPDK_FILTER_LIB_LIST += $(filter nbd,$(SPDK_LIB_LIST))
SPDK_FILTER_LIB_LIST += $(filter net,$(SPDK_LIB_LIST))
SPDK_FILTER_LIB_LIST += $(filter vhost,$(SPDK_LIB_LIST))
SPDK_FILTER_LIB_LIST += $(filter scsi,$(SPDK_LIB_LIST))

# The unit test mock wrappers need to be wrapped in whole-archive so they don't get
# automatically removed with LTO.
SPDK_FILTER_LIB_LIST += $(filter ut_mock,$(SPDK_LIB_LIST))

SPDK_WHOLE_ARCHIVE_LIB_LIST = $(SPDK_FILTER_LIB_LIST)
SPDK_REMAINING_LIB_LIST = $(filter-out $(SPDK_WHOLE_ARCHIVE_LIB_LIST),$(SPDK_LIB_LIST))

SPDK_LIB_FILES = $(call spdk_lib_list_to_static_libs,$(SPDK_LIB_LIST))
SPDK_LIB_LINKER_ARGS = \
	-L$(SPDK_ROOT_DIR)/build/lib \
	-Wl,--whole-archive \
	$(SPDK_LIB_LIST:%=-lspdk_%) \
	-Wl,--no-whole-archive
	$(SPDK_WHOLE_ARCHIVE_LIB_LIST:%=-lspdk_%) \
	-Wl,--no-whole-archive \
	$(SPDK_REMAINING_LIB_LIST:%=-lspdk_%)

# This is primarily used for unit tests to ensure they link when shared library
# build is enabled.  Shared libraries can't get their mock implementation from
# the unit test file.  Note that even for unittests, we must include the mock
# library with whole-archive, to keep its functions from getting stripped out
# when LTO is enabled.
# the unit test file.
SPDK_STATIC_LIB_LINKER_ARGS = \
	$(SPDK_LIB_LIST:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.a) \
	-Wl,--whole-archive \
	$(SPDK_ROOT_DIR)/build/lib/libspdk_ut_mock.a \
	-Wl,--no-whole-archive
	$(SPDK_WHOLE_ARCHIVE_LIB_LIST:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.a) \
	-Wl,--no-whole-archive \
	$(SPDK_REMAINING_LIB_LIST:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.a)

install: all
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ C_SRCS = $(TEST_FILE)
CFLAGS += -I$(SPDK_ROOT_DIR)/lib
CFLAGS += -I$(SPDK_ROOT_DIR)/test

SPDK_LIB_LIST += thread util log sock
SPDK_LIB_LIST += thread util log ut_mock sock

LIBS += -lcunit $(SPDK_STATIC_LIB_LINKER_ARGS)