[PATCH 1/1] sandbox: allow cross-compiling sandbox

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Feb 9 18:52:59 CET 2021


On 09.02.21 16:25, Simon Glass wrote:
> Hi Heinrich,
>
> On Mon, 8 Feb 2021 at 23:26, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> Am 9. Februar 2021 05:29:43 MEZ schrieb Simon Glass <sjg at chromium.org>:
>>> Hi Heinrich,
>>>
>>> On Mon, 8 Feb 2021 at 15:06, Heinrich Schuchardt <xypron.glpk at gmx.de>
>>> wrote:
>>>>
>>>> UEFI test files like helloworld.efi require an architecture specific
>>>> PE-COFF header.
>>>
>>> architecture-specific
>>>
>>>>
>>>> For non-sandbox the PE-COFF header is chosen by the target
>>> architecture.
>>>> For the sandbox we use the host architecture. This is not helpful for
>>> cross
>>>> compiling. Allow specifying the target architecture of the sandbox
>>> via
>>>> environment variable MK_ARCH, e.g.
>>>
>>> What exactly is the target arch? Is the the one that sandbox is
>>> running on, or something else?
>>
>> It is the architecture that the binary can be run on
>
> You mean the sandbox binary. So it means that the sandbox binary runs
> natively on the machine it is being built on?

The target architecture in cross-compiling is the machine where the
binary is run. E.g. I build an ARM binary on a an RISC-V machine. Then
ARM is the target architecture and RISC-V is the host architecture.

I can only run that binary on an ARM machine or using QEMU.

> Or are you saying you
> want to support building a 32-bit x86 sandbox binary on a 64-bit ARM
> machine, for example?

That would be a use case for this patch.

>
> Absent any cross-compiling,I think we should auto-detect it if
> possible, like other programs do.

I will give it a try. Takahiro already made a suggestion.

Best regards

Heinrich

>
>>
>>
>>
>>>
>>>>
>>>>     make sandbox_defconfig NO_SDL=1
>>>>     CROSS_COMPILE=aarch64-linux-gnu- NO_SDL=1 MK_ARCH=aarch64 make
>>>>
>>>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>>>> ---
>>>>  Makefile             |  2 +-
>>>>  doc/arch/sandbox.rst | 14 ++++++++++++++
>>>>  2 files changed, 15 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/Makefile b/Makefile
>>>> index 23dd11f723..286e5148ae 100644
>>>> --- a/Makefile
>>>> +++ b/Makefile
>>>> @@ -19,7 +19,7 @@ MAKEFLAGS += -rR --include-dir=$(CURDIR)
>>>>
>>>>  # Determine host architecture
>>>>  include include/host_arch.h
>>>> -MK_ARCH="${shell uname -m}"
>>>> +MK_ARCH?="${shell uname -m}"
>>>>  unexport HOST_ARCH
>>>>  ifeq ("x86_64", $(MK_ARCH))
>>>>    export HOST_ARCH=$(HOST_ARCH_X86_64)
>>>> diff --git a/doc/arch/sandbox.rst b/doc/arch/sandbox.rst
>>>> index 60ee1e0741..0dd9edc8cb 100644
>>>> --- a/doc/arch/sandbox.rst
>>>> +++ b/doc/arch/sandbox.rst
>>>> @@ -33,6 +33,20 @@ integers can only be built on 64-bit hosts.
>>>>
>>>>  Note that standalone/API support is not available at present.
>>>>
>>>> +Cross compiling
>>>> +---------------
>>>> +
>>>> +When cross compiling the U-Boot sandbox with CONFIG_EFI_LOADER=y the
>>> target
>>>> +architecture must be specified using the MK_ARCH environment
>>> variable using one
>>>> +of the values aarch64, armv7l, i386, riscv32, riscv64, x86_64, e.g.
>>>
>>> OK, but what is the target architecture? I'm just not sure from your
>>> comments what this actually means.
>>
>> See above.
>>
>>>
>>> Does MK mean make?
>>
>> What name do you suggest?
>
> That name is fine, I was just asking. I think using TARGET_ARCH would
> get very confusing.
>
> Regards,
> Simon
>



More information about the U-Boot mailing list