ati_unfree: Towards using ati unfree 32bit binary libs

Changed files
+38 -26
nixos
modules
hardware
video
pkgs
os-specific
linux
ati-drivers
+1 -1
nixos/modules/hardware/video/ati.nix
···
{ name = "fglrx"; modules = [ ati_x11 ]; libPath = [ "${ati_x11}/lib" ]; };
hardware.opengl.package = ati_x11;
-
#hardware.opengl.package32 = pkgs_i686.linuxPackages.ati_x11.override { libsOnly = true; kernel = null; };
+
hardware.opengl.package32 = pkgs_i686.linuxPackages.ati_drivers_x11.override { libsOnly = true; kernel = null; };
environment.systemPackages = [ ati_x11 ];
+24 -12
pkgs/os-specific/linux/ati-drivers/builder.sh
···
eval "$patchPhase"
+
case "$system" in
+
x86_64-linux)
+
arch=x86_64
+
lib_arch=lib64
+
DIR_DEPENDING_ON_XORG_VERSION=xpic_64a
+
;;
+
i686-linux)
+
arch=x86
+
lib_arch=lib
+
DIR_DEPENDING_ON_XORG_VERSION=xpic
+
;;
+
*) exit 1;;
+
esac
+
+
if test -z "$libsOnly"; then
kernelVersion=$(cd ${kernel}/lib/modules && ls)
kernelBuild=$(echo ${kernel}/lib/modules/$kernelVersion/build)
linuxsources=$(echo ${kernel}/lib/modules/$kernelVersion/source)
···
setModVersions
CC=gcc
MODULE=fglrx
-
case "$system" in
-
x86_64-linux)
-
arch=x86_64
-
lib_arch=lib64
-
;;
-
i686-linux)
-
arch=x86
-
lib_arch=lib
-
;;
-
*) exit 1;;
-
esac
LIBIP_PREFIX=$TMP/arch/$arch/lib/modules/fglrx/build_mod
[ -d $LIBIP_PREFIX ]
GCC_MAJOR="`gcc --version | grep -o -e ") ." | head -1 | cut -d " " -f 2`"
···
cd $TMP
}
+
fi
+
{ # install
mkdir -p $out/lib/xorg
···
# what are those files used for?
cp -r common/etc $out
-
DIR_DEPENDING_ON_XORG_VERSION=xpic_64a
cp -r $DIR_DEPENDING_ON_XORG_VERSION/usr/X11R6/$lib_arch/* $out/lib/xorg
+
# install kernel module
+
if test -z "$libsOnly"; then
t=$out/lib/modules/${kernelVersion}/kernel/drivers/misc
mkdir -p $t
cp ./common/lib/modules/fglrx/build_mod/2.6.x/fglrx.ko $t
+
fi
# should this be installed at all?
# its used by the example fglrx_gamma only
···
patchelf --set-rpath $gcc/$lib_arch $out/lib/libatiadlxx.so
}
+
if test -z "$libsOnly"; then
+
{ # build samples
mkdir -p $out/bin
···
rm -fr $out/lib/modules/fglrx # don't think those .a files are needed. They cause failure of the mod
}
+
+
fi
for p in $extraDRIlibs; do
for lib in $p/lib/*.so*; do
+13 -13
pkgs/os-specific/linux/ati-drivers/default.nix
···
-
{ stdenv, fetchurl, kernel, xlibs, which, imake
+
{ stdenv, fetchurl, kernel ? null, xlibs, which, imake
, mesa # for fgl_glxgears
, libXxf86vm, xf86vidmodeproto # for fglrx_gamma
, xorg, makeWrapper, glibc, patchelf
, unzip
+
, # Whether to build the libraries only (i.e. not the kernel module or
+
# driver utils). Used to support 32-bit binaries on 64-bit
+
# Linux.
+
libsOnly ? false
}:
+
assert (!libsOnly) -> kernel != null;
+
# If you want to use a different Xorg version probably
# DIR_DEPENDING_ON_XORG_VERSION in builder.sh has to be adopted (?)
# make sure libglx.so of ati is used. xorg.xorgserver does provide it as well
···
# There is one issue left:
# /usr/lib/dri/fglrx_dri.so must point to /run/opengl-driver/lib/fglrx_dri.so
-
assert stdenv.system == "x86_64-linux";
+
with stdenv.lib;
stdenv.mkDerivation {
-
name = "ati-drivers-14.4-${kernel.version}";
+
name = "ati-drivers-14.4" + (optionalString (!libsOnly) "-${kernel.version}");
builder = ./builder.sh;
···
mesa
];
-
kernel = kernel.dev;
+
inherit libsOnly;
+
+
kernel = if libsOnly then null else kernel.dev;
inherit glibc /* glibc only used for setting interpreter */;
···
homepage = http://support.amd.com/us/gpudownload/Pages/index.aspx;
license = licenses.unfree;
maintainers = with maintainers; [marcweber offline];
-
platforms = [ "x86_64-linux" ];
+
platforms = platforms.linux;
hydraPlatforms = [];
};
-
-
# moved assertions here because the name is evaluated when the NixOS manual is generated
-
# Don't make that fail - fail lazily when a users tries to build this derivation only
-
dummy =
-
# assert xorg.xorgserver.name == "xorg-server-1.7.5";
-
assert stdenv.system == "x86_64-linux"; # i686-linux should work as well - however I didn't test it.
-
null;
-
}