[stgt] [PATCH 2/2] dynamically link libibverbs and librdma
Doron Shoham
dorons at Voltaire.COM
Thu Oct 23 13:18:53 CEST 2008
Hi Pete,
Below are my changes to your patch.
Please tell me if you are ok with it.
If you are good with my changes I think that it is very
important that this patch will be part of tgt.
Thanks,
Doron
Compile iscsi_rdma as a separate object that can be dynamically
loaded, if the system has the libraries to support it.
Signed-off-by: Doron Shoham <dorons at voltaire.com>
---
usr/Makefile | 28 +++++++++++++++++++---------
usr/iscsi/iscsi_rdma_load.c | 33 +++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 9 deletions(-)
create mode 100644 usr/iscsi/iscsi_rdma_load.c
diff --git a/usr/Makefile b/usr/Makefile
index fba86c0..39a1dbe 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -1,4 +1,6 @@
mandir = /usr/share/man
+libdir = /usr/lib64
+bindir = /usr/sbin
ifneq ($(IBMVIO),)
CFLAGS += -DIBMVIO -DUSE_KERNEL
@@ -15,9 +17,11 @@ TGTD_OBJS += bs_rdwr.o bs_aio.o
LIBS += -lcrypto
ifneq ($(ISCSI_RDMA),)
-CFLAGS += -DISCSI_RDMA
-TGTD_OBJS += iscsi/iscsi_rdma.o
-LIBS += -libverbs -lrdmacm
+ISER_SO := iscsi/iscsi_rdma.so
+ISER_OBJS += iscsi/iscsi_rdma.o
+ISER_LIBS += -libverbs -lrdmacm
+TGTD_OBJS += iscsi/iscsi_rdma_load.o
+TGTD_LDOPTS += -Wl,--export-dynamic -Wl,-rpath -Wl,/usr/lib64
endif
endif
@@ -66,10 +70,13 @@ MANPAGES = ../doc/manpages/tgtadm.8 ../doc/manpages/tgt-admin.8 \
TGTD_DEP = $(TGTD_OBJS:.o=.d)
.PHONY:all
-all: $(PROGRAMS)
+all: $(PROGRAMS) $(ISER_SO)
tgtd: $(TGTD_OBJS)
- $(CC) $^ -o $@ $(LIBS)
+ $(CC) $(TGTD_LDOPTS) $^ -o $@ $(LIBS)
+
+$(ISER_SO): $(ISER_OBJS)
+ $(CC) -shared -o $@ $^ $(ISER_LIBS)
-include $(TGTD_DEP)
@@ -93,9 +100,12 @@ dump_tape: dump_tape.o libssc.o libcrc32c.o
@$(CC) -MM $(CFLAGS) -MF $*.d -MT $*.o $*.c
.PHONY: install
-install: $(PROGRAMS) $(SCRIPTS) install_doc
- install -d -m 755 $(DESTDIR)/usr/sbin
- install -m 755 $(PROGRAMS) $(SCRIPTS) $(DESTDIR)/usr/sbin
+install: $(PROGRAMS) $(SCRIPTS) install_doc install_lib
+ install -d -m 755 $(DESTDIR)$(bindir)
+ install -m 755 $(PROGRAMS) $(SCRIPTS) $(DESTDIR)$(bindir)
+
+install_lib: $(ISER_SO)
+ install -m 755 $(ISER_SO) $(DESTDIR)$(libdir)
install_doc: $(MANPAGES)
install -d -m 755 $(DESTDIR)$(mandir)/man8
@@ -103,4 +113,4 @@ install_doc: $(MANPAGES)
.PHONY: clean
clean:
- rm -f *.[od] $(PROGRAMS) iscsi/*.[od] ibmvio/*.[od] fc/*.[od] fcoe/*.[od]
+ rm -f *.[od] $(PROGRAMS) iscsi/*.[od] ibmvio/*.[od] fc/*.[od] fcoe/*.[od] $(ISER_SO) $(ISER_OBJS)
diff --git a/usr/iscsi/iscsi_rdma_load.c b/usr/iscsi/iscsi_rdma_load.c
new file mode 100644
index 0000000..8f392d9
--- /dev/null
+++ b/usr/iscsi/iscsi_rdma_load.c
@@ -0,0 +1,33 @@
+/*
+ * Try to load RDMA transport, if libraries are available
+ *
+ * Copyright (C) 2008 Pete Wyckoff <pw at padd.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, version 2 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#include <stdio.h>
+#include <dlfcn.h>
+
+
+__attribute__((constructor)) static void iser_rdma_load(void)
+{
+ void *h;
+
+ h = dlopen("iscsi_rdma.so", RTLD_NOW);
+ if (!h)
+ fprintf(stderr, "%s: dlopen: %s\n", __func__, dlerror());
+}
+
--
1.5.3.6
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list