public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: Alexander Smirnov <asmirnov@ilbers.de>, isar-users@googlegroups.com
Subject: Re: [PATCH v4 04/10] cross-compilation: Introduce variable switch
Date: Wed, 25 Jul 2018 08:56:41 +0200	[thread overview]
Message-ID: <7cbc4933-8852-e18c-9169-10a5dde6d5c6@web.de> (raw)
In-Reply-To: <20180724190618.19155-5-asmirnov@ilbers.de>

On 2018-07-24 21:06, Alexander Smirnov wrote:
> Add variable to switch from native to cross compilation.
> 
> Signed-off-by: Alexander Smirnov <asmirnov@ilbers.de>
> ---
>   meta-isar/conf/local.conf.sample            |  5 +++++
>   meta/classes/dpkg-base.bbclass              | 19 ++++++++++++++++---
>   meta/classes/dpkg-raw.bbclass               |  1 -
>   meta/classes/dpkg.bbclass                   |  4 +---
>   meta/recipes-kernel/linux-module/module.inc |  7 +++++++
>   meta/recipes-kernel/linux/linux-custom.inc  |  2 ++
>   6 files changed, 31 insertions(+), 7 deletions(-)
> 
> diff --git a/meta-isar/conf/local.conf.sample b/meta-isar/conf/local.conf.sample
> index 16ef488..27b43d1 100644
> --- a/meta-isar/conf/local.conf.sample
> +++ b/meta-isar/conf/local.conf.sample
> @@ -156,3 +156,8 @@ CONF_VERSION = "1"
>   #
>   # The default list of extra packages to be installed.
>   IMAGE_INSTALL = "example-hello example-raw example-module"
> +
> +#
> +# Enable cross-compilation support
> +# NOTE: this works only for stretch-armhf and stretch-amd64 targets for now.
> +ISAR_CROSS_COMPILE ?= "0"
> diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
> index 3234234..674c0b5 100644
> --- a/meta/classes/dpkg-base.bbclass
> +++ b/meta/classes/dpkg-base.bbclass
> @@ -1,6 +1,22 @@
>   # This software is a part of ISAR.
>   # Copyright (C) 2017 Siemens AG
>   
> +ISAR_CROSS_COMPILE ??= "0"
> +
> +# Add dependency from the correct buildchroot: host or target
> +python __anonymous() {
> +    mode = d.getVar('ISAR_CROSS_COMPILE', True)
> +    if mode == "0":
> +        dep = "buildchroot-target:do_build"
> +        rootfs = d.getVar('BUILDCHROOT_TARGET_DIR', True)
> +    else:
> +        dep = "buildchroot-host:do_build"
> +        rootfs = d.getVar('BUILDCHROOT_HOST_DIR', True)
> +
> +    d.setVarFlag('do_build', 'depends', dep)
> +    d.setVar('BUILDCHROOT_DIR', rootfs)
> +}
> +
>   do_adjust_git() {
>       if [ -f ${S}/.git/objects/info/alternates ]; then
>           sed -i ${S}/.git/objects/info/alternates \
> @@ -14,9 +30,6 @@ do_adjust_git[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}"
>   inherit patch
>   addtask patch after do_adjust_git before do_build
>   
> -# Add dependency from buildchroot creation
> -do_build[depends] = "buildchroot-target:do_build"
> -
>   # Add dependency between Isar recipes
>   DEPENDS ?= ""
>   do_build[deptask] = "do_deploy_deb"
> diff --git a/meta/classes/dpkg-raw.bbclass b/meta/classes/dpkg-raw.bbclass
> index 2f23eb7..28233ac 100644
> --- a/meta/classes/dpkg-raw.bbclass
> +++ b/meta/classes/dpkg-raw.bbclass
> @@ -7,7 +7,6 @@ DEBIAN_DEPENDS ?= ""
>   MAINTAINER ?= "FIXME Unknown maintainer"
>   
>   D = "${WORKDIR}/image/"
> -BUILDCHROOT_DIR = "${BUILDCHROOT_TARGET_DIR}"
>   
>   # Populate folder that will be picked up as package
>   do_install() {
> diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
> index 563b63c..ab70645 100644
> --- a/meta/classes/dpkg.bbclass
> +++ b/meta/classes/dpkg.bbclass
> @@ -3,10 +3,8 @@
>   
>   inherit dpkg-base
>   
> -BUILDCHROOT_DIR = "${BUILDCHROOT_TARGET_DIR}"
> -
>   # Build package from sources using build script
>   dpkg_runbuild() {
>       E="${@ bb.utils.export_proxies(d)}"
> -    sudo -E chroot ${BUILDCHROOT_DIR} /build.sh ${PP}/${PPS}
> +    sudo -E chroot ${BUILDCHROOT_DIR} /build.sh ${PP}/${PPS} ${DISTRO_ARCH}
>   }
> diff --git a/meta/recipes-kernel/linux-module/module.inc b/meta/recipes-kernel/linux-module/module.inc
> index 3075f44..8977668 100644
> --- a/meta/recipes-kernel/linux-module/module.inc
> +++ b/meta/recipes-kernel/linux-module/module.inc
> @@ -15,6 +15,13 @@ SRC_URI += "file://debian/"
>   
>   AUTOLOAD ?= "0"
>   
> +# Cross-compilation is not supported for default Debian kernels.
> +# For example, package with kernel headers for ARM:
> +#   linux-headers-armmp
> +# has hard dependencies from linux-compiler-gcc-4.8-arm, what
> +# conflicts with the host binaries.
> +ISAR_CROSS_COMPILE = "0"

This is not the right place to control this (thus, also patch 10 is 
wrong). This belongs into the recipe that pulls in module.inc - or not, 
depending on the overall setup.

If you enable crossbuild and also build the kernel from source, modules 
must be cross-built as well. If you use a prebuilt kernel with a header 
packages for the target arch, modules must be natively built. This 
cannot be decided at the level of this include.

In the context of isar, put the disabling into example-module.bb because 
we have no test case that builds a kernel from source and uses that 
example module. If we had, example-module.bb would have to have some

ISAR_CROSS_COMPILE_testmachine = "1"

for that target.

> +
>   inherit dpkg
>   
>   dpkg_runbuild_prepend() {
> diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
> index 1176b25..f7641ef 100644
> --- a/meta/recipes-kernel/linux/linux-custom.inc
> +++ b/meta/recipes-kernel/linux/linux-custom.inc
> @@ -20,6 +20,8 @@ python() {
>                                'linux-headers-' + kernel)
>   }
>   
> +ISAR_CROSS_COMPILE = "0"
> +

Same for this one: The recipe is cross-compatible (after patch 8), it's 
just that the user of these includes has to ensure that the whole 
ensemble is consistent.

Jan

>   inherit dpkg-base
>   
>   SRC_URI += "file://build-kernel.sh"
> 


  reply	other threads:[~2018-07-25  6:56 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-24 19:06 [PATCH v4 00/10] Add cross-compilation support Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 01/10] buildchroot: Add host buildchroot Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 02/10] isar-bootstrap-helper: Add target architecture for dpkg Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 03/10] build.sh: Add additional parameter Alexander Smirnov
2018-07-25  8:10   ` Henning Schild
2018-07-25  8:14   ` Henning Schild
2018-07-24 19:06 ` [PATCH v4 04/10] cross-compilation: Introduce variable switch Alexander Smirnov
2018-07-25  6:56   ` Jan Kiszka [this message]
2018-07-25  8:25   ` Henning Schild
2018-07-25 12:22     ` Jan Kiszka
2018-07-24 19:06 ` [PATCH v4 05/10] linux: Add ARM cross-compilation support Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 06/10] isar: Add ARM64 " Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 07/10] linux-module: Export ARCH and CROSS_COMPILE Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 08/10] linux: Drop gcc from dependencies Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 09/10] build.sh: Do not check deps in dpkg-buildpackage Alexander Smirnov
2018-07-24 19:07   ` Alexander Smirnov
2018-08-11 15:47   ` Jan Kiszka
2018-08-14 11:40     ` Jan Kiszka
2018-08-14 12:39       ` Alexander Smirnov
2018-07-24 19:06 ` [PATCH v4 10/10] linux-module: Enable cross-build for testing Alexander Smirnov
2018-07-24 19:07   ` Alexander Smirnov

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=7cbc4933-8852-e18c-9169-10a5dde6d5c6@web.de \
    --to=jan.kiszka@web.de \
    --cc=asmirnov@ilbers.de \
    --cc=isar-users@googlegroups.com \
    /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