Unverified Commit b57aa882 authored by Aidan Gauland's avatar Aidan Gauland
Browse files

libXNVCtrl: build shared library

The libXNVCtrl library is used by several programs in nixpkgs to get
Nvidia GPU stats, and they all load the library dynamically, but the
libXNVCtrl package only builds a static library.  There is no build flag
to enable this, so we have to patch the Makefile to produce a shared
library.

Based on a patch by @negativo17 for Fedora.
https://github.com/negativo17/nvidia-settings/blob/master/nvidia-settings-libXNVCtrl.patch
parent bfb7a882
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
--- a/src/libXNVCtrl/Makefile
+++ b/src/libXNVCtrl/Makefile
@@ -33,6 +33,8 @@
 
 LIBXNVCTRL = libXNVCtrl.a
 
+LIBXNVCTRL_SHARED = $(OUTPUTDIR)/libXNVCtrl.so
+
 LIBXNVCTRL_PROGRAM_NAME = "libXNVCtrl"
 
 LIBXNVCTRL_VERSION := $(NVIDIA_VERSION)
@@ -62,6 +64,12 @@
 $(LIBXNVCTRL) : $(OBJS)
 	$(AR) ru $@ $(OBJS)
 
+$(LIBXNVCTRL_SHARED): $(LIBXNVCTRL_OBJ)
+	$(RM) $@ $@.*
+	$(CC) -shared -Wl,-soname=$(@F).0 -o $@.0.0.0 $(LDFLAGS) $^ -lXext -lX11
+	ln -s $(@F).0.0.0 $@.0
+	ln -s $(@F).0 $@
+
 # define the rule to build each object file
 $(foreach src,$(SRC),$(eval $(call DEFINE_OBJECT_RULE,TARGET,$(src))))
 
+21 −0
Original line number Diff line number Diff line
--- a/src/libXNVCtrl/xnvctrl.mk
+++ b/src/libXNVCtrl/xnvctrl.mk
@@ -39,6 +39,8 @@
 
 LIBXNVCTRL = $(OUTPUTDIR)/libXNVCtrl.a
 
+LIBXNVCTRL_SHARED = $(OUTPUTDIR)/libXNVCtrl.so
+
 LIBXNVCTRL_SRC = $(XNVCTRL_DIR)/NVCtrl.c
 
 LIBXNVCTRL_OBJ = $(call BUILD_OBJECT_LIST,$(LIBXNVCTRL_SRC))
@@ -47,3 +49,9 @@
 
 $(LIBXNVCTRL) : $(LIBXNVCTRL_OBJ)
 	$(call quiet_cmd,AR) ru $@ $(LIBXNVCTRL_OBJ)
+
+$(LIBXNVCTRL_SHARED): $(LIBXNVCTRL_OBJ)
+	$(RM) $@ $@.*
+	$(CC) -shared -Wl,-soname=$(@F).0 -o $@.0.0.0 $(LDFLAGS) $^ -lXext -lX11
+	ln -s $(@F).0.0.0 $@.0
+	ln -s $(@F).0 $@
+9 −0
Original line number Diff line number Diff line
@@ -43,6 +43,14 @@ let

    makeFlags = [
      "OUTPUTDIR=." # src/libXNVCtrl
      "libXNVCtrl.a"
      "libXNVCtrl.so"
    ];

    patches = [
      # Patch the Makefile to also produce a shared library.
      (if lib.versionOlder nvidia_x11.settingsVersion "400" then ./libxnvctrl-build-shared-3xx.patch
      else ./libxnvctrl-build-shared.patch)
    ];

    installPhase = ''
@@ -52,6 +60,7 @@ let
      cp libXNVCtrl.a $out/lib
      cp NVCtrl.h     $out/include/NVCtrl
      cp NVCtrlLib.h  $out/include/NVCtrl
      cp -P libXNVCtrl.so* $out/lib
    '';
  };