From 9db4b1d801624a00591b7aafd426d6dd23547443 Mon Sep 17 00:00:00 2001 From: Gustavo Alvarez <462213+sl1pkn07@users.noreply.github.com> Date: Mon, 8 Apr 2019 18:16:54 +0200 Subject: Add pkgconfig file (#190) --- src/Makefile | 28 ++++++++++++++++++++++++---- src/nccl.pc.in | 10 ++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100755 src/nccl.pc.in diff --git a/src/Makefile b/src/Makefile index 2d32dca..b5baa29 100644 --- a/src/Makefile +++ b/src/Makefile @@ -17,16 +17,20 @@ LIBSRCFILES := init.cc channel.cc bootstrap.cc transport.cc enqueue.cc \ ##### lib files LIBNAME := libnccl.so STATICLIBNAME := libnccl_static.a +##### pkgconfig files +PKGCONFIGFILE := nccl.pc ##### dirs BUILDDIR ?= $(abspath ../build) INCDIR := $(BUILDDIR)/include LIBDIR := $(BUILDDIR)/lib OBJDIR := $(BUILDDIR)/obj +PKGDIR := $(BUILDDIR)/lib/pkgconfig ##### target files INCTARGETS := $(INCEXPORTS:%=$(INCDIR)/%) LIBSONAME := $(LIBNAME:%=%.$(NCCL_MAJOR)) LIBTARGET := $(LIBNAME:%=%.$(NCCL_MAJOR).$(NCCL_MINOR).$(NCCL_PATCH)) STATICLIBTARGET := $(STATICLIBNAME) +PKGTARGET := $(PKGCONFIGFILE) LIBOBJ := $(LIBSRCFILES:%.cc=$(OBJDIR)/%.o) DEPFILES := $(LIBOBJ:%.o=%.d) LDFLAGS += -L${CUDA_LIB} -lcudart_static -lpthread -lrt -ldl @@ -36,7 +40,7 @@ DEVICELIB := $(BUILDDIR)/obj/collectives/device/colldevice.a ##### rules build : lib staticlib -lib : $(INCTARGETS) $(LIBDIR)/$(LIBTARGET) +lib : $(INCTARGETS) $(LIBDIR)/$(LIBTARGET) $(PKGDIR)/$(PKGTARGET) staticlib : $(LIBDIR)/$(STATICLIBTARGET) @@ -53,7 +57,7 @@ $(INCDIR)/nccl.h : nccl.h.in # NCCL_VERSION(X,Y,Z) ((X) * 1000 + (Y) * 100 + (Z)) @$(eval NCCL_VERSION := $(shell printf "%d%d%02d" $(NCCL_MAJOR) $(NCCL_MINOR) $(NCCL_PATCH))) mkdir -p $(INCDIR) - printf "Generating %-35s > %s\n" $< $@ + @printf "Generating %-35s > %s\n" $< $@ sed -e "s/\$${nccl:Major}/$(NCCL_MAJOR)/g" \ -e "s/\$${nccl:Minor}/$(NCCL_MINOR)/g" \ -e "s/\$${nccl:Patch}/$(NCCL_PATCH)/g" \ @@ -77,6 +81,15 @@ $(LIBDIR)/$(STATICLIBTARGET): $(LIBOBJ) $(DEVICELIB) ar cr $@ $(LIBOBJ) $(TMP)/*.o rm -Rf $(TMP) +$(PKGDIR)/nccl.pc : nccl.pc.in + mkdir -p $(PKGDIR) + @printf "Generating %-35s > %s\n" $< $@ + sed -e 's|$${nccl:Prefix}|\$(PREFIX)|g' \ + -e "s/\$${nccl:Major}/$(NCCL_MAJOR)/g" \ + -e "s/\$${nccl:Minor}/$(NCCL_MINOR)/g" \ + -e "s/\$${nccl:Patch}/$(NCCL_PATCH)/g" \ + $< > $@ + $(INCDIR)/%.h : %.h @printf "Grabbing %-35s > %s\n" $< $@ mkdir -p $(INCDIR) @@ -87,6 +100,11 @@ $(INCDIR)/nccl_%.h : include/nccl_%.h mkdir -p $(INCDIR) cp -f $< $@ +$(PKGDIR)/%.pc : %.pc + @printf "Grabbing %-35s > %s\n" $< $@ + mkdir -p $(PKGDIR) + cp -f $< $@ + $(OBJDIR)/%.o : %.cc @printf "Compiling %-35s > %s\n" $< $@ mkdir -p `dirname $@` @@ -98,13 +116,15 @@ $(OBJDIR)/%.o : %.cc @rm -f $(@:%.o=%.d.tmp) clean : - rm -rf ${INCDIR} ${LIBDIR} ${OBJDIR} + rm -rf ${INCDIR} ${LIBDIR} ${PKGDIR} ${OBJDIR} $(MAKE) -C collectives/device clean install : lib mkdir -p $(PREFIX)/lib + mkdir -p $(PREFIX)/lib/pkgconfig mkdir -p $(PREFIX)/include - cp -P -v $(BUILDDIR)/lib/* $(PREFIX)/lib/ + cp -P -v $(BUILDDIR)/lib/lib* $(PREFIX)/lib/ + cp -P -v $(BUILDDIR)/lib/pkgconfig/* $(PREFIX)/lib/pkgconfig/ cp -v $(BUILDDIR)/include/* $(PREFIX)/include/ FILESTOFORMAT := $(shell find . -name ".\#*" -prune -o \( -name "*.cc" -o -name "*.h" \) -print | grep -v -E 'ibvwrap.h|nvmlwrap.h|nccl.h') diff --git a/src/nccl.pc.in b/src/nccl.pc.in new file mode 100755 index 0000000..0d98494 --- /dev/null +++ b/src/nccl.pc.in @@ -0,0 +1,10 @@ +prefix=${nccl:Prefix} +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: nccl +Description: Optimized primitives for collective multi-GPU communication +Version: ${nccl:Major}.${nccl:Minor}.${nccl:Patch} +Libs: -L${libdir} -lnccl +Cflags: -I${includedir} -- cgit v1.2.3