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
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
--- 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))))
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
--- 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 $@
|
||||
@@ -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
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user