Debian Toolchain installation: Difference between revisions
(create sysroot: split into 'use a script' and 'manually') |
No edit summary |
||
Line 4: | Line 4: | ||
--> {{PageHeader|Debian toolchain installation for out of Debian builds}} {{DocImage|category1=Debian|category2={{#var:HARDWARE_NAME}}}} __toc__ | --> {{PageHeader|Debian toolchain installation for out of Debian builds}} {{DocImage|category1=Debian|category2={{#var:HARDWARE_NAME}}}} __toc__ | ||
= | = Prerequisites = | ||
Please follow steps 2 & 4 of the {{Varlink|Debian_Build_Release_Stage|{{#var:RELEASE_LINK}}|Build Debian from source code}} guide, to setup a Debian build environment. | |||
= Obtain the toolchain = | |||
The toolchain can be downloaded by running the following: | |||
$ cd {{#var:BUILD_FOLDER}} | |||
$ {{#var:BUILD_SCRIPT}} -c deploy | |||
This will download the toolchain '''{{#var:TOOLCHAIN}}''' (or a newer version), which can be found at ''{{#var:BUILD_FOLDER}}/toolchain''. | |||
= Create a sysroot for user space cross-compilation = | = Create a sysroot for user space cross-compilation = | ||
A sysroot is basically a scaled-downed version of the target file system to be used on the host for cross-compilation of user space applications. | A sysroot is basically a scaled-downed version of the target file system to be used on the host for cross-compilation of user space applications. | ||
Revision as of 16:41, 8 June 2023
This page is using the default release mx8m-debian-bullseye-5.4-2.1.x-v1.4.
To view this page for a specific Variscite SoM and software release, please follow these steps:
- Visit variwiki.com
- Select your SoM
- Select the software release
Prerequisites
Please follow steps 2 & 4 of the Build Debian from source code guide, to setup a Debian build environment.
Obtain the toolchain
The toolchain can be downloaded by running the following:
$ cd ~/debian_imx8mq-var-dart_debian_bullseye $ MACHINE=imx8mq-var-dart ./var_make_debian.sh -c deploy
This will download the toolchain gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu (or a newer version), which can be found at ~/debian_imx8mq-var-dart_debian_bullseye/toolchain.
Create a sysroot for user space cross-compilation
A sysroot is basically a scaled-downed version of the target file system to be used on the host for cross-compilation of user space applications.
In the following we will show how to create the sysroot using a script, pre-shipped with the Debian archive, or manually. In any case, we would need a full Debian rootfs first, please refer to Setup and build Debian to learn how to build it. Once the rootfs have been built, it should be present at ~/debian_imx8mq-var-dart_debian_bullseye/rootfs. From this point, follow one of the upcoming sections.
- The Debian build script uses debootstrap to create a minimal Debian Bullseye system and adds the BSP support. Please consider installing extra (dev-)packages to your Debian file system as per your needs.
To do this, follow the Adding Debian packages guide to learn how to add packages to the rootfs. - Keeping the sysroot in sync with the rootfs of the target is recommended to avoid misalignments. Whenever a change has been made to the rootfs, please consider creating a new sysroot as described.
Use the script to create the sysroot
The script to create the sysroot is located at ~/debian_imx8mq-var-dart_debian_bullseye/variscite/scripts:
$ cd ~/debian_imx8mq-var-dart_debian_bullseye $ sudo MACHINE=imx8m-var-dart ./variscite/scripts/make-sysroot.sh
Manual step-by-step to create the sysroot
First, create a temporary copy of the origin rootfs:
$ cd ~/debian_imx8mq-var-dart_debian_bullseye $ mkdir -p tmp/rootfs $ sudo cp -ar rootfs/. tmp/rootfs
Next, we need to convert all absolute links to relative ones. The following approach will use the tools chroot and symlinks.
- chroot along with QEMU emulates a target access on the rootfs, please see chroot docs for more information
- symlinks can convert absolute paths to relative ones within a file system, please see symlinks docs for more information
Chroot to the rootfs with the following commands:
$ export ROOTFS_BASE=tmp/rootfs $ sudo cp variscite/qemu_64bit/qemu-aarch64-static ${ROOTFS_BASE}/usr/bin/qemu-aarch64-static $ sudo mount -o bind /proc ${ROOTFS_BASE}/proc $ sudo mount -o bind /dev ${ROOTFS_BASE}/dev $ sudo mount -o bind /sys ${ROOTFS_BASE}/sys $ sudo mount -o bind /dev/pts ${ROOTFS_BASE}/dev/pts $ sudo chroot $ROOTFS_BASE
Once entered, we can now install symlinks and convert the links:
# apt-get install -y symlinks # symlinks -cr /
and exit:
# exit
Then we need to clean up the mounts (previously needed to chroot):
$ sudo umount ${ROOTFS_BASE}/dev/pts $ sudo umount ${ROOTFS_BASE}/sys $ sudo umount ${ROOTFS_BASE}/dev $ sudo umount ${ROOTFS_BASE}/proc
Finally, create the sysroot target folder:
$ mkdir -p toolchain/sysroot $ mkdir -p toolchain/sysroot/usr
And copy a minimal required set of the modified origin rootfs to it.
The minimal required set includes:
- /lib: Libraries for programming and packages
- /usr/lib: Libraries for programming and packages
- /usr/include: Directory for standard include files
$ cp -ar tmp/rootfs/lib toolchain/sysroot/ $ cp -ar tmp/rootfs/usr/lib toolchain/sysroot/usr $ cp -ar tmp/rootfs/usr/include toolchain/sysroot/usr
To clean up, delete the temporary rootfs:
$ sudo rm -rf tmp/rootfs
The Debian sysroot is now located at ~/debian_imx8mq-var-dart_debian_bullseye/toolchain/sysroot and can be used to cross-compile your user space applications on the host.