2
votes

I am trying to cross compile Valgrind on my Fedora VM in order to get it to run on a custom embedded Linux device (running Yacto with a Kinetis KL2x MCU w/ ARM Cortex M4 CPU). I have a QT IDE properly configured to cross compile and deploy QT projects to the device. I was wondering what the best route to cross compile a non QT application. I tried making a new project (in QT>New Project>Import Project>Import Existing Project) using an existing project (Valgrind source code @ http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2) and i keep getting this error:

17:20:46: Running steps for project valgrind...
17:20:46: Starting: "/usr/bin/make" all
make: *** No rule to make target `all'.  Stop.
17:20:46: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project valgrind (kit: ----)
When executing step "Make"
17:20:46: Elapsed time: 00:00.

and I am not sure how to address it. Is it possible to compile Valgrind just using the cross compiler itself (arm-poky-linux-gnueabi-g++)? Am I better off changing the makefile to use the cross compiler instead of gcc and then use scp to send the file to my device(if so which of the many different makefiles do i use?)? Or is there a better way that I am missing? The system doesn't have any package management tools or compilers of its own. Any help/ input will be GREATLY appreciated.

Errors while building recipe after cross compile environment setup:

[----@localhost valgrind]$ source /opt/poky/default/environment-setup-cortexa8hf-vfp-neon-poky-linux-gnueabi 
[----@localhost valgrind]$ bitbake -c build valgrind_3.12.0.bb 
Traceback (most recent call last):
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 553, in <module>
    main()
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 535, in main
    known_paths = addusersitepackages(known_paths)
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 266, in addusersitepackages
    user_site = getusersitepackages()
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 241, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 230, in getuserbase
    from sysconfig import get_config_var
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/sysconfig.py", line 10, in <module>
    'stdlib': '{base}/'+sys.lib+'/python{py_version_short}',
AttributeError: 'module' object has no attribute 'lib'
2

2 Answers

3
votes

An example of cross compiling valgrind with Yocto toolchain would be :

# setup workspace
mkdir workspace && cd workspace

# download Yocto sdk
wget http://gumstix-yocto.s3.amazonaws.com/sdk.sh

#Install it to workspace/sdk
./sdk.sh

source sdk/environment-setup-cortexa8hf-neon-poky-linux-gnueabi

# download valgrind tarball
wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2

# extract source
tar jxf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0

# this fix issue with unknown arm architecture (see http://stackoverflow.com/questions/29514706/cross-compiling-valgrind-for-arm)
sed -i -e "s#armv7#arm#g" configure

./configure --host=arm-poky-linux-gnueabi --prefix="$(pwd)/out"

make -j16

make install

Here, the installation directory is out, you can also install to ${SDKTARGETSYSROOT}/usr with --prefix="${SDKTARGETSYSROOT}/usr"

Check this link for the basic example of cross compile with Yocto SDK

2
votes

i think the easiest way is to build it in your yocto build environment (source poky/oe_init_build_env) and the build valgrind with

bitbake -c build valgrind

then look in the build folder tmp/work/"plattform"/valgrind/"version"/image/ for the files