Skip to contentSkip to conversation

libfsl*: fix install path + update conf opts

PATCH Superseded Gary Bisson 2 participants 10 messages Oct 29, 2015 – Nov 9, 2015

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

cover libfsl*: fix install path + update conf opts

Hi all,

I meant to do this series for a long time:
http://patchwork.ozlabs.org/patch/409684/

I tried to split what Jeff offered into separate patches.

Some are taking care of the install path that was causing troubles to gst-fsl-plugins at runtime since we don't use ldconfig.

The other patches enable some missing configure options (hard float and vpu) as pointed by Jeff.

Here is the defconfig that has been used to test those patches:
BR2_arm=y
BR2_cortex_a9=y
BR2_ARM_EABIHF=y
BR2_ARM_ENABLE_NEON=y
BR2_ARM_FPU_NEON=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1"
BR2_ROOTFS_POST_BUILD_SCRIPT="board/boundarydevices/nitrogen6x/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/linux-imx6/tarball/d7a412b/linux-imx6-d7a412b.tar.gz" BR2_LINUX_KERNEL_DEFCONFIG="boundary"
BR2_LINUX_KERNEL_ZIMAGE=y
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-nit6xlite imx6dl-nitrogen6_vm imx6dl-nitrogen6x imx6q-nitrogen6x imx6q-nitrogen6_max imx6q-sabrelite" BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_ALSACONF=y
BR2_PACKAGE_ALSA_UTILS_AMIDI=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_ALSA_UTILS_APLAYMIDI=y
BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST=y
BR2_PACKAGE_GSTREAMER=y
BR2_PACKAGE_GST_PLUGINS_BASE_PLUGIN_AUDIOTESTSRC=y
BR2_PACKAGE_GST_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC=y
BR2_PACKAGE_GST_PLUGINS_BASE_PLUGIN_ALSA=y
BR2_PACKAGE_GST_PLUGINS_GOOD=y
BR2_PACKAGE_GST_PLUGINS_GOOD_PLUGIN_AUTODETECT=y
BR2_PACKAGE_GST_PLUGINS_GOOD_PLUGIN_DEBUGUTILS=y
BR2_PACKAGE_GST_PLUGINS_GOOD_PLUGIN_FLV=y
BR2_PACKAGE_GST_PLUGINS_GOOD_PLUGIN_ID3DEMUX=y
BR2_PACKAGE_GST_PLUGINS_GOOD_PLUGIN_MATROSKA=y
BR2_PACKAGE_GST_PLUGINS_GOOD_PLUGIN_VIDEOBOX=y
BR2_PACKAGE_GST_PLUGINS_GOOD_PLUGIN_V4L2=y
BR2_PACKAGE_GST_FSL_PLUGINS=y
BR2_PACKAGE_GSTREAMER1=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORATE=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOTESTSRC=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ENCODING=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOCONVERT=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_GIO=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_SUBPARSE=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TCP=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC=y
BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA=y
BR2_PACKAGE_GST1_PLUGINS_GOOD=y
BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUDIOPARSERS=y
BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUTODETECT=y
BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DEBUGUTILS=y
BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLV=y
BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ID3DEMUX=y
BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MATROSKA=y
BR2_PACKAGE_GST1_IMX=y
BR2_PACKAGE_STRACE=y
BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q=y
BR2_PACKAGE_IMX_GPU_VIV=y
BR2_PACKAGE_IMX_GPU_VIV_APITRACE=y
BR2_PACKAGE_IMX_GPU_VIV_EXAMPLES=y
BR2_PACKAGE_IMX_GPU_VIV_GMEM_INFO=y
BR2_PACKAGE_FONTCONFIG=y
BR2_PACKAGE_IPERF3=y
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_RSYNC=y
BR2_PACKAGE_HOST_MKE2IMG=y
BR2_PACKAGE_HOST_UBOOT_TOOLS=y

I'll detail on each patch what has been done.

Regards,
Gary

Gary Bisson (4):
libfslcodec: add install hooks to fix libraries path
libfslcodec: add missing configure options
libfslparser: add install hooks to fix libraries path
libfslparser: add missing configure options

 package/libfslcodec/libfslcodec.mk   | 24 ++++++++++++++++++++++++
 package/libfslparser/libfslparser.mk | 12 ++++++++++++
 2 files changed, 36 insertions(+)
Signature · 1 line
2.6.1
#1 lore raw

PATCH 1/4 libfslcodec: add install hooks to fix libraries path

By default, all the libraries are installed under /usr/lib/imx-mm which causes problems at runtime.

The hooks are inspired from the mechanism used in the Yocto recipe:
https://github.com/Freescale/meta-fsl-arm/blob/fido/recipes-
multimedia/libfslcodec/libfslcodec.inc

This has been tested implicitely by running Gstreamer without any special setup (no ld.so.conf nor LD_LIBRARY_PATH modification):

 # gst-launch-0.10 playbin uri=file:///root/tears_of_steel_1080p.webm
 # gst-launch-0.10 audiotestsrc ! mfw_mp3encoder ! fakesink
 # gst-launch-1.0 playbin uri=file:///root/tears_of_steel_1080p.webm

---

Here are the dependencies the pipelines above are testing:

$ for i in `find target/usr/lib/gstreamer*/*`; do readelf -d $i | grep NEEDED | grep lib_ && echo "($i)"; done
 0x00000001 (NEEDED)                     Shared library: [lib_nb_amr_dec_arm9_elinux.so.2]
 0x00000001 (NEEDED)                     Shared library: [lib_wb_amr_dec_arm9_elinux.so.2]
(target/usr/lib/gstreamer-0.10/libmfw_gst_amrdec.so)
 0x00000001 (NEEDED)                     Shared library: [lib_peq_arm11_elinux.so.1.fhw]
(target/usr/lib/gstreamer-0.10/libmfw_gst_audio_pp.so)
 0x00000001 (NEEDED)                     Shared library: [lib_mp3_enc_arm12_elinux.so.2]
(target/usr/lib/gstreamer-0.10/libmfw_gst_mp3enc.so)
 0x00000001 (NEEDED)                     Shared library: [lib_mp3_enc_arm12_elinux.so.2]
(target/usr/lib/gstreamer-1.0/libgstimxaudio.so)

Note that I added a staging install hook as well because otherwise the gst1-imx plugin doesn't find lib_mp3_enc_arm12_elinux.so at build time.

Not to copy the same library twice I decided to go with a symlink. Let me know if that's acceptable.

Regards,
Gary

---
 package/libfslcodec/libfslcodec.mk | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
package/libfslcodec/libfslcodec.mk +16 -0
index 473d662..4d8fd18 100644
@@ -20,4 +20,20 @@ endef
 # FIXME The Makefile installs both the arm9 and arm11 versions of the
 # libraries, but we only need one of them.
 
+# do the symlink in staging area as some packages like gst-fsl-plugins is
+# looking for libraries in imx-mm whereas gst1-imx doesn't
+define LIBFSLCODEC_FIXUP_STAGING_PATH
+	find $(STAGING_DIR)/usr/lib/imx-mm -mindepth 2 -maxdepth 2 -not -type d \
+		-exec ln -fs {} $(STAGING_DIR)/usr/lib \;
+endef
+LIBFSLCODEC_POST_INSTALL_STAGING_HOOKS += LIBFSLCODEC_FIXUP_STAGING_PATH
+
+# no need to symlink in target image, just move libraries around
+define LIBFSLCODEC_FIXUP_TARGET_PATH
+	find $(TARGET_DIR)/usr/lib/imx-mm -mindepth 2 -maxdepth 2 -not -type d \
+		-exec mv {} $(TARGET_DIR)/usr/lib \;
+	rm -fr $(TARGET_DIR)/usr/lib/imx-mm
+endef
+LIBFSLCODEC_POST_INSTALL_TARGET_HOOKS += LIBFSLCODEC_FIXUP_TARGET_PATH
+
 $(eval $(autotools-package))
Signature · 1 line
2.6.1
#2 lore raw

PATCH 2/4 libfslcodec: add missing configure options

In reply to Gary Bisson

Enable VPU and hard float support when the proper configuration is setup. BR2_ARM_EABIHF=y
BR2_PACKAGE_IMX_VPU=y

See Yocto equivalent:
https://github.com/Freescale/meta-fsl-arm/blob/fido/recipes-
multimedia/libfslcodec/libfslcodec.inc

Tested with the Linaro ARM 2014.09 toolchain.

---

Thanks to those options, I could see that:
- lib_jpeg_dec_arm11_elinux_novpu.so isn't copied
- lib_peq_arm11_elinux.so.1.fhw is copied instead of the fsw version

Regards,
Gary

---
 package/libfslcodec/libfslcodec.mk | 8 ++++++++
 1 file changed, 8 insertions(+)
package/libfslcodec/libfslcodec.mk +8 -0
index 4d8fd18..ae68bdd 100644
@@ -13,6 +13,14 @@ LIBFSLCODEC_LICENSE = Freescale Semiconductor Software License Agreement, BSD-3c
 LIBFSLCODEC_LICENSE_FILES = EULA COPYING
 LIBFSLCODEC_REDISTRIBUTE = NO
 
+ifeq ($(BR2_ARM_EABIHF),y)
+LIBFSLCODEC_CONF_OPTS += --enable-fhw
+endif
+
+ifeq ($(BR2_PACKAGE_IMX_VPU),y)
+LIBFSLCODEC_CONF_OPTS += --enable-vpu
+endif
+
 define LIBFSLCODEC_EXTRACT_CMDS
 	$(call FREESCALE_IMX_EXTRACT_HELPER,$(DL_DIR)/$(LIBFSLCODEC_SOURCE))
 endef
Signature · 1 line
2.6.1
#3 lore raw

PATCH 3/4 libfslparser: add install hooks to fix libraries path

In reply to Gary Bisson

By default, all the libraries are installed under /usr/lib/imx-mm which causes problems at runtime.

This has been tested implicitely by running Gstreamer without any special setup (no ld.so.conf nor LD_LIBRARY_PATH modification):

 # gst-launch-0.10 playbin uri=file:///root/tears_of_steel_1080p.webm
 # gst-launch-0.10 audiotestsrc ! mfw_mp3encoder ! fakesink

---

I'm actually not sure if libfslparser is needed at all. I couldn't find a library depending on any of the one from the package. But Yocto still has depency on the package for gst-fsl-plugins:
https://github.com/Freescale/meta-fsl-arm/blob/fido/recipes-multimedia/gstreamer/gst-fsl-plugin.inc#L9

Regards,
Gary

---
 package/libfslparser/libfslparser.mk | 8 ++++++++
 1 file changed, 8 insertions(+)
package/libfslparser/libfslparser.mk +8 -0
index 2b53d62..aa02f19 100644
@@ -20,4 +20,12 @@ endef
 # The Makefile installs several versions of the libraries, but we only
 # need one of them, depending on the platform.
 
+# no need to symlink in target image, just move libraries around
+define LIBFSLPARSER_FIXUP_TARGET_PATH
+	find $(TARGET_DIR)/usr/lib/imx-mm -mindepth 2 -maxdepth 2 -not -type d \
+		-exec mv {} $(TARGET_DIR)/usr/lib \;
+	rm -fr $(TARGET_DIR)/usr/lib/imx-mm
+endef
+LIBFSLPARSER_POST_INSTALL_TARGET_HOOKS += LIBFSLPARSER_FIXUP_TARGET_PATH
+
 $(eval $(autotools-package))
Signature · 1 line
2.6.1
#4 lore raw

PATCH 3/4 libfslparser: add install hooks to fix libraries path

Hello Garry,

On Thursday 29 October 2015 21:06:51 Gary Bisson wrote:
[...]

Quoted 4 lines

b/package/libfslparser/libfslparser.mk index 2b53d62..aa02f19 100644

package/libfslparser/libfslparser.mk endef · line 29

Quoted 10 lines
package/libfslparser/libfslparser.mk +7 -0
@@ -20,4 +20,12 @@ endef
 # The Makefile installs several versions of the libraries, but we only 
 # need one of them, depending on the platform.
 
+# no need to symlink in target image, just move libraries around
+define LIBFSLPARSER_FIXUP_TARGET_PATH
+	find $(TARGET_DIR)/usr/lib/imx-mm -mindepth 2 -maxdepth 2 -not -type d \ 
+		-exec mv {} $(TARGET_DIR)/usr/lib \;
+	rm -fr $(TARGET_DIR)/usr/lib/imx-mm
+endef
+LIBFSLPARSER_POST_INSTALL_TARGET_HOOKS += LIBFSLPARSER_FIXUP_TARGET_PATH 

A POST_INSTALL_STAGING_HOOKS is not necessary for libfslparser?

Regards,

Signature · 3 lines
J?r?me Pouiller, Sysmic
Embedded Linux specialist
http://www.sysmic.fr
#5 lore raw

PATCH 3/4 libfslparser: add install hooks to fix libraries path

Hi Jerome,

Quoted 12 lines · J?r?me Pouiller

Hello Garry,

On Thursday 29 October 2015 21:06:51 Gary Bisson wrote:
[...]

Quoted 7 lines

b/package/libfslparser/libfslparser.mk index 2b53d62..aa02f19 100644

package/libfslparser/libfslparser.mk +0 -0
@@ -20,4 +20,12 @@ endef
 # The Makefile installs several versions of the libraries, but we only
 # need one of them, depending on the platform.
 
Quoted 8 lines

package/libfslparser/libfslparser.mk endef · line 29

Quoted 7 lines
package/libfslparser/libfslparser.mk +7 -0
+# no need to symlink in target image, just move libraries around
+define LIBFSLPARSER_FIXUP_TARGET_PATH
+     find $(TARGET_DIR)/usr/lib/imx-mm -mindepth 2 -maxdepth 2 -not -type d \
+             -exec mv {} $(TARGET_DIR)/usr/lib \;
+     rm -fr $(TARGET_DIR)/usr/lib/imx-mm
+endef
+LIBFSLPARSER_POST_INSTALL_TARGET_HOOKS += LIBFSLPARSER_FIXUP_TARGET_PATH

A POST_INSTALL_STAGING_HOOKS is not necessary for libfslparser?

No, libfslparser is only needed by gst-fsl-plugins which looks for the libs at the right location at build time (usr/lib/imx-mm).

The staging hook is needed for libfslcodec since it is used by both gst-fsl-plugins and gst1-imx (not looking at the imx-mm path at build time).

Although it might have been more consistent to have the staging hook in both, I chose to reduce the patch as much as possible. Plus I'm not sure people will like my symlink approach in the staging directory.

Regards,
Gary

#6 lore raw

PATCH 3/4 libfslparser: add install hooks to fix libraries path

Quoted 3 lines · On Friday 30 October 2015 11:36:21 Gary Bisson wrote:

Hi Jerome,

On Fri, Oct 30, 2015 at 11:27 AM, J?r?me Pouiller <[email protected]>

wrote:
[...]

Quoted 5 lines
Quoted 1 line

A POST_INSTALL_STAGING_HOOKS is not necessary for libfslparser?

No, libfslparser is only needed by gst-fsl-plugins which looks for the libs at the right location at build time (usr/lib/imx-mm).

Quoted 7 lines

The staging hook is needed for libfslcodec since it is used by both gst-fsl-plugins and gst1-imx (not looking at the imx-mm path at build time).

Although it might have been more consistent to have the staging hook in both, I chose to reduce the patch as much as possible. Plus I'm not sure people will like my symlink approach in the staging directory.

IMHO, target/ should be a subset of staging/ (even if today, this is far from the case). So, I would prefer to also create symlinks in staging/.

Regards,

Signature · 3 lines
J?r?me Pouiller, Sysmic
Embedded Linux specialist
http://www.sysmic.fr
#7 lore raw

PATCH 3/4 libfslparser: add install hooks to fix libraries path

Hi J?r?me,

Quoted 15 lines · J?r?me Pouiller
Quoted 3 lines · On Friday 30 October 2015 11:36:21 Gary Bisson wrote:

Hi Jerome,

On Fri, Oct 30, 2015 at 11:27 AM, J?r?me Pouiller <[email protected]>

wrote:
[...]

Quoted 9 lines
Quoted 1 line

A POST_INSTALL_STAGING_HOOKS is not necessary for libfslparser?

No, libfslparser is only needed by gst-fsl-plugins which looks for the libs at the right location at build time (usr/lib/imx-mm).

The staging hook is needed for libfslcodec since it is used by both gst-fsl-plugins and gst1-imx (not looking at the imx-mm path at build time).

Quoted 5 lines
Quoted 3 lines

Although it might have been more consistent to have the staging hook in both, I chose to reduce the patch as much as possible. Plus I'm not sure people will like my symlink approach in the staging directory.

IMHO, target/ should be a subset of staging/ (even if today, this is far from the case). So, I would prefer to also create symlinks in staging/.

So I'm ok with adding the symlinks to the fslparser staging as well. But if we'd really like to have target as a subset of staging, shouldn't we use symlinks for the target too?

Regards,
Gary

#8 lore raw

PATCH 3/4 libfslparser: add install hooks to fix libraries path

Quoted 3 lines · On Sunday 08 November 2015 17:08:43 Gary Bisson wrote:

Hi J?r?me,

On Fri, Oct 30, 2015 at 11:43 AM, J?r?me Pouiller <[email protected]>

Quoted 1 line · wrote:
Quoted 1 line · On Friday 30 October 2015 11:36:21 Gary Bisson wrote:

[...]

Quoted 11 lines
Quoted 8 lines
Quoted 5 lines

Although it might have been more consistent to have the staging hook
in both, I chose to reduce the patch as much as possible. Plus I'm not sure people will like my symlink approach in the staging directory.>

IMHO, target/ should be a subset of staging/ (even if today, this is far from the case). So, I would prefer to also create symlinks in staging/.

So I'm ok with adding the symlinks to the fslparser staging as well. But if we'd really like to have target as a subset of staging, shouldn't we use symlinks for the target too?

Sure, I am in favor to use symlinks for target/ also.

BR,

Signature · 3 lines
J?r?me Pouiller, Sysmic
Embedded Linux specialist
http://www.sysmic.fr
#9 lore raw

PATCH 4/4 libfslparser: add missing configure options

In reply to Gary Bisson

Enable hard float support when the proper configuration is setup. BR2_ARM_EABIHF=y

See Yocto equivalent:
https://github.com/Freescale/meta-fsl-arm/blob/fido/recipes-
multimedia/libfslparser/libfslparser.inc

Tested with Linaro ARM 2014.09 toolchain.

---

Thanks to those options, I could see that libraries from copied from release/lib/yocto/hw instead of release/lib/yocto/sw.

Regards,
Gary

---
 package/libfslparser/libfslparser.mk | 4 ++++
 1 file changed, 4 insertions(+)
package/libfslparser/libfslparser.mk +4 -0
index aa02f19..e34e78d 100644
@@ -13,6 +13,10 @@ LIBFSLPARSER_LICENSE = Freescale Semiconductor Software License Agreement
 LIBFSLPARSER_LICENSE_FILES = EULA COPYING
 LIBFSLPARSER_REDISTRIBUTE = NO
 
+ifeq ($(BR2_ARM_EABIHF),y)
+LIBFSLPARSER_CONF_OPTS += --enable-fhw
+endif
+
 define LIBFSLPARSER_EXTRACT_CMDS
 	$(call FREESCALE_IMX_EXTRACT_HELPER,$(DL_DIR)/$(LIBFSLPARSER_SOURCE))
 endef
Signature · 1 line
2.6.1