From b63e695601285f40ccfb4df81abb6eecc5fe362f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Fri, 4 Sep 2026 00:53:58 -0300 Subject: [PATCH] feat(genesis): add s390x OpenEmbedded target --- .gitattributes | 1 + xCAT-genesis-builder/oe/build | 2 +- xCAT-genesis-builder/oe/export | 1 + xCAT-genesis-builder/oe/export-extension | 2 +- xCAT-genesis-builder/oe/kas/s390x.yml | 6 +++ .../xcat-genesis-extension.bbclass | 2 +- .../conf/machine/include/s390x/tune-s390x.inc | 29 +++++++++++++++ .../conf/machine/xcat-genesis-s390x.conf | 37 +++++++++++++++++++ .../openssl/files/50-xcat-s390x.conf | 7 ++++ .../openssl/openssl_%.bbappend | 7 ++++ .../files/genesis-sysext | 4 +- .../recipes-core/zlib/zlib_%.bbappend | 3 ++ .../kexec/kexec-tools_%.bbappend | 1 + .../0001-s390-use-stable-generator-name.patch | 26 +++++++++++++ .../linux/linux-yocto/xcat-genesis-s390x.cfg | 28 ++++++++++++++ .../linux/linux-yocto_%.bbappend | 12 ++++++ .../libspdm/libspdm_%.bbappend | 2 + xCAT-genesis-builder/oe/report | 2 +- 18 files changed, 166 insertions(+), 6 deletions(-) create mode 100644 .gitattributes create mode 100644 xCAT-genesis-builder/oe/kas/s390x.yml create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/include/s390x/tune-s390x.inc create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/xcat-genesis-s390x.conf create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/files/50-xcat-s390x.conf create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/openssl_%.bbappend create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/zlib/zlib_%.bbappend create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/kexec/kexec-tools_%.bbappend create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/0001-s390-use-stable-generator-name.patch create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/xcat-genesis-s390x.cfg create mode 100644 xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-support/libspdm/libspdm_%.bbappend diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..082f88533 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/0001-s390-use-stable-generator-name.patch whitespace=-space-before-tab diff --git a/xCAT-genesis-builder/oe/build b/xCAT-genesis-builder/oe/build index 8874d74d3..93656d61c 100755 --- a/xCAT-genesis-builder/oe/build +++ b/xCAT-genesis-builder/oe/build @@ -17,7 +17,7 @@ fi for architecture do case "$architecture" in - aarch64|armv7hf|riscv64|x86|x86_64|ppc64|ppc64le) ;; + aarch64|armv7hf|riscv64|s390x|x86|x86_64|ppc64|ppc64le) ;; *) printf 'Unsupported Genesis architecture: %s\n' "$architecture" >&2 exit 2 diff --git a/xCAT-genesis-builder/oe/export b/xCAT-genesis-builder/oe/export index e0ce0bc39..bcc3f164f 100755 --- a/xCAT-genesis-builder/oe/export +++ b/xCAT-genesis-builder/oe/export @@ -23,6 +23,7 @@ case "$architecture" in armv7hf) kernel_name=zImage ;; aarch64) kernel_name=Image ;; riscv64) kernel_name=Image ;; + s390x) kernel_name=bzImage ;; *) fail "unsupported architecture: $architecture" ;; esac diff --git a/xCAT-genesis-builder/oe/export-extension b/xCAT-genesis-builder/oe/export-extension index 62b482ad8..0c36915b9 100755 --- a/xCAT-genesis-builder/oe/export-extension +++ b/xCAT-genesis-builder/oe/export-extension @@ -21,7 +21,7 @@ output_dir=${6%/} script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) case "$architecture" in - x86|x86_64|ppc64|ppc64le|armv7hf|aarch64|riscv64) ;; + x86|x86_64|ppc64|ppc64le|armv7hf|aarch64|riscv64|s390x) ;; *) fail "unsupported architecture: $architecture" ;; esac [[ $extension =~ ^[a-z0-9][a-z0-9._-]{0,63}$ ]] \ diff --git a/xCAT-genesis-builder/oe/kas/s390x.yml b/xCAT-genesis-builder/oe/kas/s390x.yml new file mode 100644 index 000000000..ac06515bd --- /dev/null +++ b/xCAT-genesis-builder/oe/kas/s390x.yml @@ -0,0 +1,6 @@ +header: + version: 19 + includes: + - xCAT-genesis-builder/oe/kas/common.yml + +machine: xcat-genesis-s390x diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/classes-recipe/xcat-genesis-extension.bbclass b/xCAT-genesis-builder/oe/meta-xcat-genesis/classes-recipe/xcat-genesis-extension.bbclass index 67e185286..74a0de953 100644 --- a/xCAT-genesis-builder/oe/meta-xcat-genesis/classes-recipe/xcat-genesis-extension.bbclass +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/classes-recipe/xcat-genesis-extension.bbclass @@ -34,7 +34,7 @@ python __anonymous() { architecture = d.getVar("XCAT_GENESIS_EXTENSION_ARCHITECTURE") architectures = { - "x86", "x86_64", "ppc64", "ppc64le", "armv7hf", "aarch64", "riscv64" + "x86", "x86_64", "ppc64", "ppc64le", "armv7hf", "aarch64", "riscv64", "s390x" } if architecture not in architectures: bb.fatal("Invalid Genesis extension architecture: %s" % architecture) diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/include/s390x/tune-s390x.inc b/xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/include/s390x/tune-s390x.inc new file mode 100644 index 000000000..0a4939201 --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/include/s390x/tune-s390x.inc @@ -0,0 +1,29 @@ +DEFAULTTUNE ?= "s390x" + +TUNEVALID[m64] = "64-bit z/Architecture ABI" +TUNEVALID[bigendian] = "Big-endian byte order" +TUNEVALID[z10] = "IBM System z10 instruction set" + +TUNE_ARCH = "s390x" +TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}" +TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'm64', ' -m64', '', d)}" +TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'z10', ' -march=z10 -mtune=z10', '', d)}" + +AVAILTUNES += "s390x" +TUNE_FEATURES:tune-s390x = "m64 bigendian z10" +BASE_LIB:tune-s390x = "lib64" +BASELIB:libc-glibc:s390x = "lib64" +TUNE_PKGARCH:tune-s390x = "s390x" +PACKAGE_EXTRA_ARCHS:tune-s390x = "s390x" + +def xcat_genesis_s390x_siteinfo(archinfo, osinfo, targetinfo, d): + archinfo["s390x"] = "endian-big bit-64" + return archinfo, osinfo, targetinfo + +SITEINFO_EXTRA_DATAFUNCS += "xcat_genesis_s390x_siteinfo" + +def xcat_genesis_s390x_packageqa_machdata(machdata, d): + machdata["linux"]["s390x"] = (22, 0, 0, False, 64) + return machdata + +PACKAGEQA_EXTRA_MACHDEFFUNCS += "xcat_genesis_s390x_packageqa_machdata" diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/xcat-genesis-s390x.conf b/xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/xcat-genesis-s390x.conf new file mode 100644 index 000000000..4e8b7b9ed --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/conf/machine/xcat-genesis-s390x.conf @@ -0,0 +1,37 @@ +#@TYPE: Machine +#@NAME: xCAT Genesis s390x +#@DESCRIPTION: QEMU s390x Genesis target + +DEFAULTTUNE = "s390x" +XCAT_GENESIS_ARCHITECTURE = "s390x" +require conf/machine/include/s390x/tune-s390x.inc +require conf/machine/include/qemu.inc + +ARCH:s390x = "s390" +QEMU_TARGETS:append = " s390x" + +MACHINEOVERRIDES =. "qemus390x:" + +KERNEL_IMAGETYPE = "bzImage" +SERIAL_CONSOLES = "115200;ttysclp0" +XCAT_GENESIS_CONSOLE_TTY = "ttysclp0" + +MACHINE_FEATURES_DEFAULTS = "" +MACHINE_FEATURES = "" +MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "" +MACHINE_EXTRA_RRECOMMENDS = "" + +IMAGE_FSTYPES = "cpio.gz ext4" + +QB_SYSTEM_NAME = "qemu-system-s390x" +QB_MACHINE = "-machine s390-ccw-virtio" +# TCG lacks optional z10 facilities, so disable them while retaining the z10 instruction floor. +QB_CPU = "-cpu z10EC-base,msa=off,msa1=off,dfp=off,dfphp=off,parseh=off,hfpue=off,hfpm=off,pfpo=off,dateh2=off,csske=off,asnlxr=off,tods=off" +QB_SMP = "-smp 2" +QB_MEM = "-m 4096" +QB_DEFAULT_FSTYPE = "ext4" +QB_KERNEL_CMDLINE_APPEND = "console=ttysclp0" +QB_NETWORK_DEVICE = "-device virtio-net-ccw,netdev=net0,mac=@MAC@" +QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-ccw,drive=disk0" +QB_RNG = "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-ccw,rng=rng0" +QB_OPT_APPEND = "" diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/files/50-xcat-s390x.conf b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/files/50-xcat-s390x.conf new file mode 100644 index 000000000..75aed4869 --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/files/50-xcat-s390x.conf @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: EPL-1.0 + +my %targets = ( + "linux-s390x" => { + inherit_from => [ "linux64-s390x" ], + }, +); diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/openssl_%.bbappend b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/openssl_%.bbappend new file mode 100644 index 000000000..94de9a5f0 --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-connectivity/openssl/openssl_%.bbappend @@ -0,0 +1,7 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + +SRC_URI:append:s390x = " file://50-xcat-s390x.conf" + +do_configure:prepend:s390x() { + install -m 0644 ${UNPACKDIR}/50-xcat-s390x.conf ${S}/Configurations/ +} diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/xcat-genesis-extensions/files/genesis-sysext b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/xcat-genesis-extensions/files/genesis-sysext index 0e89c817e..7c530123f 100644 --- a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/xcat-genesis-extensions/files/genesis-sysext +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/xcat-genesis-extensions/files/genesis-sysext @@ -46,7 +46,7 @@ canonical_architecture() { case "$machine" in i?86) printf '%s\n' x86 ;; armv7*) printf '%s\n' armv7hf ;; - x86_64|ppc64|ppc64le|aarch64|riscv64) printf '%s\n' "$machine" ;; + x86_64|ppc64|ppc64le|aarch64|riscv64|s390x) printf '%s\n' "$machine" ;; *) fail "unsupported runtime architecture: $machine" ;; esac } @@ -75,7 +75,7 @@ validate_manifest() { .schema == 1 and (.name | type == "string" and test("^[a-z0-9][a-z0-9._-]{0,63}$")) and (.version | type == "string" and test("^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$")) and - (.architecture | IN("x86", "x86_64", "ppc64", "ppc64le", "armv7hf", "aarch64", "riscv64")) and + (.architecture | IN("x86", "x86_64", "ppc64", "ppc64le", "armv7hf", "aarch64", "riscv64", "s390x")) and (.genesis_release | type == "string" and test("^[A-Za-z0-9._-]+$")) and (.key_id | type == "string" and test("^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$")) and (.license_class | IN("open", "redistributable", "restricted")) and diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/zlib/zlib_%.bbappend b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/zlib/zlib_%.bbappend new file mode 100644 index 000000000..b97f6034a --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/zlib/zlib_%.bbappend @@ -0,0 +1,3 @@ +do_configure:s390x() { + LDCONFIG=true ${S}/configure --prefix=${prefix} --shared --libdir=${libdir} --uname=GNU --disable-crcvx +} diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/kexec/kexec-tools_%.bbappend b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/kexec/kexec-tools_%.bbappend new file mode 100644 index 000000000..ad990b4f6 --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/kexec/kexec-tools_%.bbappend @@ -0,0 +1 @@ +COMPATIBLE_HOST:s390x = "s390x.*-linux" diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/0001-s390-use-stable-generator-name.patch b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/0001-s390-use-stable-generator-name.patch new file mode 100644 index 000000000..4637452bf --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/0001-s390-use-stable-generator-name.patch @@ -0,0 +1,26 @@ +From: xCAT Genesis Builder +Date: Thu, 3 Sep 2026 22:46:00 -0300 +Subject: [PATCH] s390: use stable generator name + +__FILE__ contains the build directory when the generator is compiled with an +absolute source path. Do not copy that path into the exported source package. + +Upstream-Status: Pending +Signed-off-by: xCAT Genesis Builder +--- + arch/s390/tools/gen_opcode_table.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/s390/tools/gen_opcode_table.c b/arch/s390/tools/gen_opcode_table.c +index 0fbb061..8cd17d0 100644 +--- a/arch/s390/tools/gen_opcode_table.c ++++ b/arch/s390/tools/gen_opcode_table.c +@@ -341,7 +341,7 @@ int main(int argc, char **argv) + printf("/*\n"); + printf(" * DO NOT MODIFY.\n"); + printf(" *\n"); +- printf(" * This file was generated by %s\n", __FILE__); ++ printf(" * This file was generated by arch/s390/tools/gen_opcode_table.c\n"); + printf(" */\n\n"); + print_formats(desc); + print_long_insn(desc); diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/xcat-genesis-s390x.cfg b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/xcat-genesis-s390x.cfg new file mode 100644 index 000000000..e64fc5963 --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto/xcat-genesis-s390x.cfg @@ -0,0 +1,28 @@ +CONFIG_MARCH_Z10=y +CONFIG_TUNE_Z10=y +CONFIG_NET=y +CONFIG_INET=y +CONFIG_IPV6=y +CONFIG_NETDEVICES=y +CONFIG_VIRTIO=y +CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_NET=y +CONFIG_HW_RANDOM_VIRTIO=y +CONFIG_CCWGROUP=y +CONFIG_QDIO=y +CONFIG_QETH=y +CONFIG_QETH_L2=y +CONFIG_QETH_L3=y +CONFIG_DASD=y +CONFIG_DASD_ECKD=y +CONFIG_DASD_FBA=y +CONFIG_CHSC_SCH=y +CONFIG_SCSI=y +CONFIG_SCSI_FC_ATTRS=y +CONFIG_ZFCP=y +CONFIG_SCLP_TTY=y +CONFIG_SCLP_CONSOLE=y +CONFIG_SCLP_VT220_TTY=y +CONFIG_SCLP_VT220_CONSOLE=y +CONFIG_TN3270=y +CONFIG_TN3270_CONSOLE=y diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto_%.bbappend b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto_%.bbappend index ffc02101d..09197365e 100644 --- a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto_%.bbappend +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-kernel/linux/linux-yocto_%.bbappend @@ -84,3 +84,15 @@ do_kernel_metadata:prepend:xcat-genesis-ppc64() { fi } do_kernel_metadata[depends] += "patch-native:do_populate_sysroot" + +COMPATIBLE_MACHINE:xcat-genesis-s390x = "^xcat-genesis-s390x$" +KMACHINE:xcat-genesis-s390x = "xcat-genesis-s390x" +KBRANCH:xcat-genesis-s390x = "v6.18/standard/base" +SRCREV_machine:xcat-genesis-s390x = "b1ba5428513b52c2bd6acfd3ad0a910f699bc395" +KBUILD_DEFCONFIG:xcat-genesis-s390x = "defconfig" +KCONFIG_MODE:xcat-genesis-s390x = "--alldefconfig" +KERNEL_FEATURES:remove:xcat-genesis-s390x = "features/drm-bochs/drm-bochs.scc" +SRC_URI:append:xcat-genesis-s390x = " \ + file://0001-s390-use-stable-generator-name.patch \ + file://xcat-genesis-s390x.cfg \ +" diff --git a/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-support/libspdm/libspdm_%.bbappend b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-support/libspdm/libspdm_%.bbappend new file mode 100644 index 000000000..9f72194d1 --- /dev/null +++ b/xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-support/libspdm/libspdm_%.bbappend @@ -0,0 +1,2 @@ +# libspdm has no s390x architecture mapping. +COMPATIBLE_HOST:s390x = "null" diff --git a/xCAT-genesis-builder/oe/report b/xCAT-genesis-builder/oe/report index e596bcced..08ad6726f 100755 --- a/xCAT-genesis-builder/oe/report +++ b/xCAT-genesis-builder/oe/report @@ -59,7 +59,7 @@ done architecture=$1 image_dir=${2%/} case "$architecture" in - aarch64|armv7hf|riscv64|x86|x86_64|ppc64|ppc64le) ;; + aarch64|armv7hf|riscv64|s390x|x86|x86_64|ppc64|ppc64le) ;; *) fail "unsupported architecture: $architecture" ;; esac