[Buildroot] [PATCH 1/2] package/gcnano-binaries: new package

Thomas Petazzoni thomas.petazzoni at bootlin.com
Wed Nov 6 22:08:31 UTC 2019


Hello Jens,

Thanks for your contribution! I suppose you're the person I met last
week during the Embedded Linux Conference Europe in Lyon, who asked me
about submitting this gcnano-binaries package ?

In any case, glad to see this package being contributed.

On Wed,  6 Nov 2019 16:56:10 +0100
Jens Kleintje <scooby22 at web.de> wrote:

> New package which provides the driver and binary blob libraries for the
> STM32MP157 vivante gcnano gpu.
> The precompiled libaries depends on wayland and libdrm.
> Since the github repo has no releases/tags we use the standard git method
> with explicit SHA.

We need your Signed-off-by line here.

> ---
>  package/Config.in                            |  1 +
>  package/gcnano-binaries/gcnano-binaries.hash |  2 +
>  package/gcnano-binaries/gcnano-binaries.mk   | 87 ++++++++++++++++++++

You forgot to include the package/gcnano-binaries/Config.in file in
your patch, so we cannot review the full package.

Also, please add an entry in the DEVELOPERS file for this new package.

> diff --git a/package/gcnano-binaries/gcnano-binaries.hash b/package/gcnano-binaries/gcnano-binaries.hash
> new file mode 100644
> index 0000000000..fae7e56deb
> --- /dev/null
> +++ b/package/gcnano-binaries/gcnano-binaries.hash
> @@ -0,0 +1,2 @@
> +sha256 19f3fe4e83ec95fd2ecb70d5cb03c7b00a13357966a9b6e56b59e5788c550c88  gcnano-binaries-c01642ed5e18cf09ecd905af193e935cb3be95ed.tar.gz
> +sha256 7d209718473d18f69f75adb7caf9cb5d4b0a31da068756aa011bea617de3dc57  EULA
> diff --git a/package/gcnano-binaries/gcnano-binaries.mk b/package/gcnano-binaries/gcnano-binaries.mk
> new file mode 100644
> index 0000000000..806abd7840
> --- /dev/null
> +++ b/package/gcnano-binaries/gcnano-binaries.mk
> @@ -0,0 +1,87 @@
> +################################################################################
> +#
> +# VIVANTE GCNANO BINARIES
> +#
> +################################################################################
> +
> +
> +GCNANO_BINARIES_FILE_VERSION = 6.2.4.p4
> +GCNANO_BINARIES_VERSION = c01642ed5e18cf09ecd905af193e935cb3be95ed
> +GCNANO_BINARIES_SITE = https://github.com/STMicroelectronics/gcnano-binaries.git
> +GCNANO_BINARIES_SITE_METHOD = git

Please use the "github" helper macro:

GCNANO_BINARIES_VERSION = c01642ed5e18cf09ecd905af193e935cb3be95ed
GCNANO_BINARIES_SITE = $(call github,STMicroelectronics,gcnano-binaries,$(GCNANO_BINARIES_VERSION))

and remove the _SITE_METHOD variable.

> +
> +GCNANO_BINARIES_LICENSE = MIT, Vivante End User Software License Terms
> +GCNANO_BINARIES_LICENSE_FILES = EULA
> +GCNANO_BINARIES_REDISTRIBUTE = NO
> +
> +GCNANO_BINARIES_DEPENDENCIES = linux wayland libdrm
> +
> +GCNANO_BINARIES_INSTALL_STAGING = YES
> +
> +GCNANO_BINARIES_PROVIDES = libegl libgles
> +
> +define GCNANO_BINARIES_EXTRACT_HELPER
> +        awk 'BEGIN      { start = 0; } \
> +             /^EOEULA/  { start = 0; } \
> +                        { if (start) print; } \
> +             /<<EOEULA/ { start = 1; }' \
> +            $(1) > $(@D)/EULA
> +        cd $(@D) && sh $(1) --auto-accept
> +        find $(@D)/$(basename $(notdir $(1))) -mindepth 1 -maxdepth 1 -exec mv {} $(@D) \;
> +        rmdir $(@D)/$(basename $(notdir $(1)))
> +endef
> +
> +
> +define GCNANO_BINARIES_EXTRACT_CMDS
> +gzip -d -c $(GCNANO_BINARIES_DL_DIR)/gcnano-binaries-$(GCNANO_BINARIES_VERSION).tar.gz | tar --strip-components=1 -C $(@D) -xf -
> +tar --strip-components=1 -xJf $(@D)/gcnano-driver-$(GCNANO_BINARIES_FILE_VERSION).tar.xz -C $(@D)

These two lines look like the default extract commands, so why are you
doing this ? Just because you need to call the
GCNANO_BINARIES_EXTRACT_HELPER ?

If so, then you don't need that, simply do:

GCNANO_BINARIES_POST_EXTRACT_HOOKS += GCNANO_BINARIES_EXTRACT_HELPER

and in GCNANO_BINARIES_EXTRACT_HELPER, instead of using $(1), just use
$(@D)/gcnano-userland-multi-$(GCNANO_BINARIES_FILE_VERSION)-20190626.bin
directly.

Also, could you add a comment on top of GCNANO_BINARIES_EXTRACT_HELPER
to explain what it does, because it is not obvious.

> +$(call GCNANO_BINARIES_EXTRACT_HELPER,$(@D)/gcnano-userland-multi-$(GCNANO_BINARIES_FILE_VERSION)-20190626.bin)
> +endef
> +
> +GCNANO_BINARIES_MODULE_MAKE_OPTS = \
> +	KERNEL_DIR=$(LINUX_DIR) \
> +	SOC_PLATFORM=st-st\

Space before \

> +	AQROOT=$(@D)\

Ditto.

> +	DEBUG=0
> +
> +define GCNANO_BINARIES_INSTALL_STAGING_CMDS
> +	cp $(@D)/usr/lib/pkgconfig/* $(STAGING_DIR)/usr/lib/pkgconfig/
> +	cp -r $(@D)/usr/lib/* $(STAGING_DIR)/usr/lib/
> +	cd $(STAGING_DIR)/usr/lib; \
> +	ln -sf gbm_viv.6.2.4.multi.release.so gbm_viv.so; \
> +	ln -sf libEGL.6.2.4.multi.release.so libEGL.so; \
> +	ln -sf libEGL.so libEGL.so.1; \
> +	ln -sf libGAL.6.2.4.multi.release.so libGAL.so; \
> +	ln -sf libgbm.6.2.4.multi.release.so libgbm.so; \
> +	ln -sf libgbm.so libgbm.so.1; \
> +	ln -sf libGLESv1_CM.6.2.4.multi.release.so libGLESv1_CM.so; \
> +	ln -sf libGLESv2.6.2.4.multi.release.so libGLESv2.so; \
> +	ln -sf libGLESv2.so libGLESv2.so.2; \
> +	ln -sf libGLSLC.6.2.4.multi.release.so libGLSLC.so; \
> +	ln -sf libOpenVG.6.2.4.multi.release.so libOpenVG.so; \
> +	ln -sf libVSC.6.2.4.multi.release.so libVSC.so
> +	rm -f $(STAGING_DIR)/usr/lib/pkgconfig/wayland-egl.pc

Why are you removing this .pc file ?

> +	cp -r $(@D)/usr/include/* $(STAGING_DIR)/usr/include/
> +endef
> +
> +GCNANO_BINARIES_POST_INSTALL_TARGET_HOOKS += GCNANO_BINARIES_COPY_LIBS

I am not sure why you are using a
GCNANO_BINARIES_POST_INSTALL_TARGET_HOOKS. Why not simply rename
GCNANO_BINARIES_COPY_LIBS to GCNANO_BINARIES_INSTALL_TARGET_CMDS.

> +define GCNANO_BINARIES_COPY_LIBS
> +	cp -r $(@D)/usr/lib/* $(TARGET_DIR)/usr/lib/
> +	cd $(TARGET_DIR)/usr/lib; \
> +	ln -sf gbm_viv.6.2.4.multi.release.so gbm_viv.so; \
> +	ln -sf libEGL.6.2.4.multi.release.so libEGL.so; \
> +	ln -sf libEGL.so libEGL.so.1; \
> +	ln -sf libGAL.6.2.4.multi.release.so libGAL.so; \
> +	ln -sf libgbm.6.2.4.multi.release.so libgbm.so; \
> +	ln -sf libgbm.so libgbm.so.1; \
> +	ln -sf libGLESv1_CM.6.2.4.multi.release.so libGLESv1_CM.so; \
> +	ln -sf libGLESv2.6.2.4.multi.release.so libGLESv2.so; \
> +	ln -sf libGLESv2.so libGLESv2.so.2; \
> +	ln -sf libGLSLC.6.2.4.multi.release.so libGLSLC.so; \
> +	ln -sf libOpenVG.6.2.4.multi.release.so libOpenVG.so; \
> +	ln -sf libVSC.6.2.4.multi.release.so libVSC.so;
> +endef

The long list of symlinks to be created is not nice, but I don't really
see a nicer solution to achieve the same. Perhaps one thing that could
be done is to factorize stuff a bit:

define GCNANO_BINARIES_INSTALL
	cp $(@D)/usr/lib/pkgconfig/* $(1)/usr/lib/pkgconfig/
	cp -r $(@D)/usr/lib/* $(1)/usr/lib/
	cd $(1)/usr/lib; \
	ln -sf gbm_viv.6.2.4.multi.release.so gbm_viv.so; \
	ln -sf libEGL.6.2.4.multi.release.so libEGL.so; \
	ln -sf libEGL.so libEGL.so.1; \
	ln -sf libGAL.6.2.4.multi.release.so libGAL.so; \
	ln -sf libgbm.6.2.4.multi.release.so libgbm.so; \
	ln -sf libgbm.so libgbm.so.1; \
	ln -sf libGLESv1_CM.6.2.4.multi.release.so libGLESv1_CM.so; \
	ln -sf libGLESv2.6.2.4.multi.release.so libGLESv2.so; \
	ln -sf libGLESv2.so libGLESv2.so.2; \
	ln -sf libGLSLC.6.2.4.multi.release.so libGLSLC.so; \
	ln -sf libOpenVG.6.2.4.multi.release.so libOpenVG.so; \
	ln -sf libVSC.6.2.4.multi.release.so libVSC.so
	rm -f $(1)/usr/lib/pkgconfig/wayland-egl.pc
	cp -r $(@D)/usr/include/* $(1)/usr/include/
endef

And then:

define GCNANO_BINARIES_INSTALL_STAGING_CMDS
	$(call GCNANO_BINARIES_INSTALL,$(STAGING_DIR))
endef

define GCNANO_BINARIES_INSTALL_TARGET_CMDS
	$(call GCNANO_BINARIES_INSTALL,$(TARGET_DIR))
endef

Note: it is perfectly fine to install header files and .pc files to
$(TARGET_DIR), they anyway get cleaned up later in the build.

Could you rework your patch to take into account those comments ?

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


More information about the buildroot mailing list