Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v4 4/7] package/amd-catalyst: Add AMD proprietary graphic stack support
Date: Sat, 6 Aug 2016 00:00:04 +0200	[thread overview]
Message-ID: <20160805220004.GB6074@free.fr> (raw)
In-Reply-To: <1470408840-1509-5-git-send-email-romain.perier@free-electrons.com>

Romain, All,

On 2016-08-05 16:53 +0200, Romain Perier spake thusly:
> This commits adds support for the AMD Catalyst Linux driver 15.9
> (15.201.1151). It includes the fglrx kernel module with various fixes
> to make it work with at least Linux kernel 4.4 LTS, the userspace OpenGL
> stack and the xorg driver module.
> 
> Signed-off-by: Romain Perier <romain.perier@free-electrons.com>
> ---
> 
> Changes in v4:
>  - Remove prompt for patching MODULE_LICENSE on the fly in the kernel module,
>    we included a patch for removing code which depends on GPL symbols instead.

Indeed, much better. We'll have to trust the Gentoo guys that they did
not simply and blindly copy the corresponding kernel code...

[--SNIP--]
> diff --git a/package/amd-catalyst/Config.in b/package/amd-catalyst/Config.in
> new file mode 100644
> index 0000000..c3c531c
> --- /dev/null
> +++ b/package/amd-catalyst/Config.in
> @@ -0,0 +1,49 @@
> +comment "amd-catalyst needs a glibc toolchain"
> +	depends on BR2_i386 || BR2_x86_64
> +	depends on !BR2_TOOLCHAIN_USES_GLIBC
> +
> +config BR2_PACKAGE_AMD_CATALYST
> +	bool "amd-catalyst"
> +	depends on BR2_i386 || BR2_x86_64
> +	depends on BR2_TOOLCHAIN_USES_GLIBC
> +	help
> +	  The binary-only driver blob for AMD cards.
> +	  This driver supports AMD Radeon HD 5xxx and newer graphics
> +	  cards.
> +
> +	  http://www.amd.com/
> +
> +if BR2_PACKAGE_AMD_CATALYST
> +
> +comment "amd-catalyst needs a modular Xorg <= 1.17"

Not really, it's only the X.org driver that needs it:

    comment "amd-catalyst X.org drivers needs a modular Xorg server <= 1.17"

> +	depends on !BR2_PACKAGE_XORG7 || !BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR || !BR2_PACKAGE_XSERVER_XORG_SERVER_VIDEODRV_ABI_19

Please split long lines when they are > ~80 chars:

    depends on !BR2_PACKAGE_XORG7 \
            || !BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR \
            || !BR2_PACKAGE_XSERVER_XORG_SERVER_VIDEODRV_ABI_19

> +config BR2_PACKAGE_AMD_CATALYST_XORG
> +	bool "X.org drivers"
> +	default y
> +	depends on BR2_PACKAGE_XORG7
> +	depends on BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
> +	depends on BR2_PACKAGE_XSERVER_XORG_SERVER_VIDEODRV_ABI_19
> +	select BR2_PACKAGE_XSERVER_XORG_SERVER_AIGLX
> +	select BR2_PACKAGE_ACPID # runtime
> +	# This package does not have standard GL headers
> +	select BR2_PACKAGE_MESA3D_HEADERS
> +	select BR2_PACKAGE_XLIB_LIBX11
> +	select BR2_PACKAGE_XLIB_LIBXEXT
> +	select BR2_PACKAGE_XLIB_LIBXCOMPOSITE

You select those three libs, but you do not depend on them at build
time. I suspect because they are only a runtime dependency, like acpid,
right?

In which case, please state so, and group runtime dependencies together.

> +	select BR2_PACKAGE_HAS_LIBGL
> +
> +if BR2_PACKAGE_AMD_CATALYST_XORG
> +
> +config BR2_PACKAGE_PROVIDES_LIBGL
> +	default "amd-catalyst"
> +
> +endif
> +
> +config BR2_PACKAGE_AMD_CATALYST_MODULE
> +	bool "fglrx kernel module"
> +	depends on BR2_LINUX_KERNEL
> +	help
> +	  Builds and install the fglrx kernel module

We usually also add a comment:

    comment "amd-catalyst kernel module needs a kernel to be built"
        depends on !BR2_LINUX_KERNEL

> +endif # BR2_PACKAGE_AMD_CATALYST
[--SNIP--]
> diff --git a/package/amd-catalyst/amd-catalyst.mk b/package/amd-catalyst/amd-catalyst.mk
> new file mode 100644
> index 0000000..cda8e75
> --- /dev/null
> +++ b/package/amd-catalyst/amd-catalyst.mk
> @@ -0,0 +1,114 @@
> +################################################################################
> +#
> +# amd-catalyst
> +#
> +################################################################################
> +
> +AMD_CATALYST_VERSION = 15.9
> +AMD_CATALYST_VERBOSE_VER = 15.201.1151
> +AMD_CATALYST_SITE = http://www2.ati.com/drivers/linux
> +AMD_CATALYST_DL_OPTS = --referer='http://support.amd.com/en-us/kb-articles/Pages/latest-linux-beta-driver.aspx'

I've just tried with:

    --referrer='http://support.amd.com/'

and it is enough to trick the server into delivering the archive.

> +AMD_CATALYST_SOURCE = amd-catalyst-$(AMD_CATALYST_VERSION)-linux-installer-$(AMD_CATALYST_VERBOSE_VER)-x86.x86_64.zip

Just out of curiosity: I've seen that there are other drivers; at least
I could see (and DL) radeon-crimson-15.12-15.302-151217a-297685e.zip.

Do you have an idea how different the GPUs are, if Catalyst is suposed
to suport the whole range, if we could also add radeon-crimson as
another package (later!), how they all play together? ;-)

> +AMD_CATALYST_ARCH_DIR = $(@D)/arch/x86$(AMD_CATALYST_SUFFIX)

Given that AMD_CATALYST_ARCH_DIR is only ever used to construct the path
$(AMD_CATALYST_ARCH_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX) maybe
it should directly refer to that path, so you don't have to repeat it
again and again, and that would make the commands a little bit shorter.

[--SNIP--]
> +ifeq ($(BR2_PACKAGE_AMD_CATALYST_MODULE),y)
> +AMD_CATALYST_MODULE_SUBDIRS = common/lib/modules/fglrx/build_mod/2.6.x
> +AMD_CATALYST_MODULE_MAKE_OPTS =  \
> +	CFLAGS_MODULE="-DCOMPAT_ALLOC_USER_SPACE=arch_compat_alloc_user_space"
> +
> +define AMD_CATALYST_CONFIGURE_CMDS

Like you did for the userland stuff, I'd have made that a "separate" (by
lack of better word) macro, and called it from the reall _CONFIGURE_CMDS
outside of the module conditional:

    define AMD_CATALYST_PREPARE_MODULE
        blabla
    endef

and below, with the other traditional Buildroot macros:

    define AMD_CATALYST_CONFIGURE_CMDS
        $(AMD_CATALYST_PREPARE_MODULE)
    endef

This is purely cosmetics in this case, granted, as you don't have
anything else to configure, but makes the file look more coherent.

> +	# The Makefile expects to have source in the folder 2.6.x
> +	cp $(@D)/common/lib/modules/fglrx/build_mod/*.{c,h} \
> +		$(@D)/common/lib/modules/fglrx/build_mod/2.6.x
> +	# This static lib is required during the link
> +	cp $(@D)/arch/x86$(AMD_CATALYST_SUFFIX)/lib/modules/fglrx/build_mod/libfglrx_ip.a \
> +		$(@D)/common/lib/modules/fglrx/build_mod/2.6.x
> +endef
> +
> +$(eval $(kernel-module))
> +endif
> +
> +ifeq ($(BR2_PACKAGE_AMD_CATALYST_XORG), y)
> +
> +AMD_CATALYST_DEPENDENCIES += mesa3d-headers

I was gonna comment that they are not really a build dependency of this
package, as it provides only pre-built libraries.

However, the headers are needed by any package that wants to use libgl,
so they need to be installed bedfore any user of it, so the only way is
to have amd-catalyst depend on them, even if it does not them for
itself.

Maybe this would warrant a little comment?

> +AMD_CATALYST_PROVIDES = libgl
> +AMD_CATALYST_XPIC_DIR = $(@D)/xpic$(if $(BR2_x86_64),_64a)

Given that AMD_CATALYST_XPIC_DIR is only ever used to construct the path
$(AMD_CATALYST_XPIC_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX) , maybe
it should directly refer to that path, so you don't have to repeat it
again and again, and that would make the commands a little bit shorter.

;-)

> +define AMD_CATALYST_INSTALL_GL_LIBS
> +	$(INSTALL) -m 0644 $(AMD_CATALYST_ARCH_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX)/fglrx/fglrx-libGL.so.1.2 \
> +		$(1)/usr/lib
> +	ln -sf fglrx-libGL.so.1.2 $(1)/usr/lib/libGL.so.1.2
> +	ln -sf fglrx-libGL.so.1.2 $(1)/usr/lib/libGL.so.1
> +	ln -sf fglrx-libGL.so.1.2 $(1)/usr/lib/libGL.so
> +endef
> +
> +define AMD_CATALYST_INSTALL_STAGING_XORG
> +	$(call AMD_CATALYST_INSTALL_GL_LIBS,$(STAGING_DIR))
> +	$(INSTALL) -D -m 0644 package/amd-catalyst/gl.pc \
> +		$(STAGING_DIR)/usr/lib/pkgconfig/gl.pc
> +endef
> +
> +AMD_CATALYST_XORG_DRIVERS_FILES = modules/amdxmm.so \
> +	modules/drivers/fglrx_drv.so \
> +	modules/linux/libfglrxdrm.so
> +
> +define AMD_CATALYST_INSTALL_XORG
> +# Xorg drivers

Please indent comment inside a macro at the same level you indent the
code. Valid for below as well.

> +	$(foreach f,$(AMD_CATALYST_XORG_DRIVERS_FILES), \
> +		$(INSTALL) -D -m 0755 $(AMD_CATALYST_XPIC_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX)/$(f) \
> +		$(TARGET_DIR)/usr/lib/xorg/$(f)
> +	)
> +
> +# Xorg is not able to detect the driver automatically
> +	$(INSTALL) -D -m 0644 package/amd-catalyst/20-fglrx.conf \
> +		$(TARGET_DIR)/etc/X11/xorg.conf.d/20-fglrx.conf
> +
> +
> +# Common files: containing binary profiles about GPUs,
> +# required by the fglrx_drv xorg driver
> +	$(INSTALL) -d $(TARGET_DIR)/etc/ati
> + 	$(INSTALL) -m 0644 $(@D)/common/etc/ati/* $(TARGET_DIR)/etc/ati/
> +
> +# DRI and GLX xorg modules: by default DRI is activated,
> +# these modules are required by the fglrx_drv.so xorg driver
> +	$(INSTALL) -D -m 0644 $(AMD_CATALYST_ARCH_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX)/modules/dri/fglrx_dri.so \
> +		$(TARGET_DIR)/usr/lib/dri/fglrx_dri.so

This comes from the Xorg's 'modules' sub-dir, but is installed in
another location. Is that intended? Why should it not go into
$(TARGET_DIR)/usr/lib/xorg/modules/ ?

> +	$(INSTALL) -D -m 0644 $(AMD_CATALYST_XPIC_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX)/modules/extensions/fglrx/fglrx-libglx.so \
> +		$(TARGET_DIR)/usr/lib/xorg/modules/extensions/libglx.so
> +	$(INSTALL) -D -m 0644 $(AMD_CATALYST_XPIC_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX)/modules/glesx.so \
> +		$(TARGET_DIR)/usr/lib/xorg/modules/glesx.so

Maybe glesx could go in the AMD_CATALYST_XORG_DRIVERS_FILES since it
follows the same layout, no?

fglrx-libglx is not following this layout, so it has to have its own
separate command, indeed. Sigh.... :-(

> +# Userspace GL libraries, also runtime dependency of most of the cmdline tools
> +	$(INSTALL) -m 0644 $(AMD_CATALYST_ARCH_DIR)/usr/X11R6/lib$(AMD_CATALYST_LIB_SUFFIX)/*.so \
> +		$(TARGET_DIR)/usr/lib/
> +	$(call AMD_CATALYST_INSTALL_GL_LIBS,$(TARGET_DIR))
> +
> +# Runtime depedency required by libfglrxdrm.so

*dependency

> +	$(INSTALL) -m 0644 $(AMD_CATALYST_ARCH_DIR)/usr/lib$(AMD_CATALYST_LIB_SUFFIX)/libatiuki.so.1.0 \
> +		$(TARGET_DIR)/usr/lib/
> +	ln -sf libatiuki.so.1.0 \
> +		$(TARGET_DIR)/usr/lib/libatiuki.so.1

Whithout checking, that's because the SONAME of the library is
libatiuki.so.1, right? If so, why not installing it directly as its
SONAME rather than have an unncessary symlink?

Regards,
Yann E. MORIN.

> +endef
> +
> +endif
> +
> +define AMD_CATALYST_INSTALL_STAGING_CMDS
> +	$(call AMD_CATALYST_INSTALL_STAGING_XORG)
> +endef
> +
> +define AMD_CATALYST_INSTALL_TARGET_CMDS
> +	$(call AMD_CATALYST_INSTALL_XORG)
> +endef
> +
> +$(eval $(generic-package))

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

  reply	other threads:[~2016-08-05 22:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-05 14:53 [Buildroot] [PATCH v4 0/7] Add support for AMD Catalyst graphics driver Romain Perier
2016-08-05 14:53 ` [Buildroot] [PATCH v4 1/7] support/download: Add support to pass options directly to downloaders Romain Perier
2016-08-05 15:54   ` Yann E. MORIN
2016-08-05 14:53 ` [Buildroot] [PATCH v4 2/7] pkg-download: Allow packages to pass generic options to download methods Romain Perier
2016-08-05 14:53 ` [Buildroot] [PATCH v4 3/7] docs/manual: Document the variable $(PKG)_DL_OPTS Romain Perier
2016-08-05 14:53 ` [Buildroot] [PATCH v4 4/7] package/amd-catalyst: Add AMD proprietary graphic stack support Romain Perier
2016-08-05 22:00   ` Yann E. MORIN [this message]
2016-08-05 14:53 ` [Buildroot] [PATCH v4 5/7] package/amd-catalyst: Add AMD cmdline tools Romain Perier
2016-08-05 22:20   ` Yann E. MORIN
2016-08-05 22:32   ` Yann E. MORIN
2016-08-05 14:53 ` [Buildroot] [PATCH v4 6/7] package/amd-catalyst: Add support AMD CCCLE Romain Perier
2016-08-05 22:28   ` Yann E. MORIN
2016-08-05 14:54 ` [Buildroot] [PATCH v4 7/7] package/amd-catalyst: Add support for OpenCL Romain Perier
2016-08-05 22:47   ` Yann E. MORIN

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160805220004.GB6074@free.fr \
    --to=yann.morin.1998@free.fr \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox