diff options
author | Jakub Czapiga <jacz@semihalf.com> | 2021-09-15 14:52:45 +0200 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2021-10-11 12:59:57 +0000 |
commit | 3d91b47b425ffb880c0ed6c45fd04ba48d95ca8d (patch) | |
tree | 828ac9be4df77c66c9f06435f560e5124db0f9f9 /payloads/libpayload/arch | |
parent | b40fdbaa648639c2922732e2fa137c3ebcc78e4e (diff) |
libpayload: Add mock architecture
Mock architecture can be used to build libpayload using host compiler.
It can be enabled by setting ARCH_MOCK=y in the dotconfig. It sets
LITTLE_ENDIAN=y, as most machines these days use little-endian CPUs.
Libpayload will use HOSTCC as CC, HOSTLD as LD, etc. instead of tools
provided by xcompile.
Mock architecture configuration can be used by payloads for testing
purposes. Thanks to it, tests can be architecture-independent,
and can be executed without requiring compatible Kconfig options,
e.g. ARCH_ARM64=y for ARM64 machine. However, one has to provide
implementation for most architecture-specific functions present
in arch/* directories.
Signed-off-by: Jakub Czapiga <jacz@semihalf.com>
Change-Id: Ie3a6e6f6cad2f8a2e48a8e546d3b79c577653080
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57708
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'payloads/libpayload/arch')
-rw-r--r-- | payloads/libpayload/arch/mock/Kconfig | 16 | ||||
-rw-r--r-- | payloads/libpayload/arch/mock/Makefile.inc | 7 | ||||
-rw-r--r-- | payloads/libpayload/arch/mock/head.c | 3 | ||||
-rw-r--r-- | payloads/libpayload/arch/mock/libpayload.ldscript | 3 | ||||
-rw-r--r-- | payloads/libpayload/arch/mock/mock_media.c | 10 | ||||
-rw-r--r-- | payloads/libpayload/arch/mock/virtual.c | 10 |
6 files changed, 49 insertions, 0 deletions
diff --git a/payloads/libpayload/arch/mock/Kconfig b/payloads/libpayload/arch/mock/Kconfig new file mode 100644 index 0000000000..3903a76005 --- /dev/null +++ b/payloads/libpayload/arch/mock/Kconfig @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: GPL-2.0-only + +if ARCH_MOCK + +config ARCH_MOCK_BIG_ENDIAN + bool "Use big-endian for mock architecture" + default n + help + This option enables big-endinan support in the code. + +config ARCH_SPECIFIC_OPTIONS + def_bool y + select LITTLE_ENDIAN if !ARCH_MOCK_BIG_ENDIAN + select BIG_ENDIAN if ARCH_MOCK_BIG_ENDIAN + +endif diff --git a/payloads/libpayload/arch/mock/Makefile.inc b/payloads/libpayload/arch/mock/Makefile.inc new file mode 100644 index 0000000000..f15f0f9f1d --- /dev/null +++ b/payloads/libpayload/arch/mock/Makefile.inc @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0-only + +head.o-y += head.c + +libc-y += virtual.c + +libcbfs-$(CONFIG_LP_CBFS) += mock_media.c diff --git a/payloads/libpayload/arch/mock/head.c b/payloads/libpayload/arch/mock/head.c new file mode 100644 index 0000000000..55a691f910 --- /dev/null +++ b/payloads/libpayload/arch/mock/head.c @@ -0,0 +1,3 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +/* This file is empty on purpose. It should not be used. */ diff --git a/payloads/libpayload/arch/mock/libpayload.ldscript b/payloads/libpayload/arch/mock/libpayload.ldscript new file mode 100644 index 0000000000..6842c9ad5c --- /dev/null +++ b/payloads/libpayload/arch/mock/libpayload.ldscript @@ -0,0 +1,3 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +/* This file is empty on purpose. It is present only to satisfy install script */ diff --git a/payloads/libpayload/arch/mock/mock_media.c b/payloads/libpayload/arch/mock/mock_media.c new file mode 100644 index 0000000000..2bb06edc29 --- /dev/null +++ b/payloads/libpayload/arch/mock/mock_media.c @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <cbfs.h> + +int libpayload_init_default_cbfs_media(struct cbfs_media *media); + +__attribute__((weak)) int libpayload_init_default_cbfs_media(struct cbfs_media *media) +{ + return -1; +} diff --git a/payloads/libpayload/arch/mock/virtual.c b/payloads/libpayload/arch/mock/virtual.c new file mode 100644 index 0000000000..6f369d2dcb --- /dev/null +++ b/payloads/libpayload/arch/mock/virtual.c @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <unistd.h> + +unsigned long virtual_offset = 0; + +int getpagesize(void) +{ + return 4096; +} |