~postmarketos/pmbootstrap

62a05d4fbccbc33b2ab04be4b63b4861d0fd2cd9 — Oliver Smith 10 months ago bcfdc3f
aportgen: build gcc-x86_64 etc. pkgs for aarch64

Instead of building cross packages for the native architecture, add a
new get_cross_packages_arches() function that returns the desired
architectures no matter what the current native architecture is.

So gcc-x86_64 will always have arch="aarch64", and gcc-aarch64 will
always have arch="x86_64".

We can tweak the function in the future if e.g. it becomes viable to
cross compile from riscv64. Or even better, remove this and the cross
compile packages upstreamed into alpine (see pmb#551).

Link: https://lists.sr.ht/~postmarketos/pmbootstrap-devel/%3C20231126104823.3723-1-ollieparanoid@postmarketos.org%3E
4 files changed, 16 insertions(+), 5 deletions(-)

M pmb/aportgen/__init__.py
M pmb/aportgen/busybox_static.py
M pmb/aportgen/gcc.py
M pmb/aportgen/musl.py
M pmb/aportgen/__init__.py => pmb/aportgen/__init__.py +12 -0
@@ 13,6 13,18 @@ import pmb.config
import pmb.helpers.cli


def get_cross_package_arches(pkgname):
    """
    Get the arches for which we want to build cross packages.
    :param pkgname: package name, e.g. "gcc-aarch64", "gcc-x86_64"
    :returns: string of architecture(s) (space separated)
    """
    if pkgname.endswith("-x86_64"):
        return "aarch64"
    else:
        return "x86_64"


def properties(pkgname):
    """
    Get the `pmb.config.aportgen` properties for the aport generator, based on

M pmb/aportgen/busybox_static.py => pmb/aportgen/busybox_static.py +1 -1
@@ 47,7 47,7 @@ def generate(args, pkgname):

            url="http://busybox.net"
            license="GPL2"
            arch="{pmb.config.arch_native}"
            arch="{pmb.aportgen.get_cross_package_arches(pkgname)}"
            options="!check !strip"
            pkgdesc="Statically linked Busybox for $_arch"
            _target="$(arch_to_hostspec $_arch)"

M pmb/aportgen/gcc.py => pmb/aportgen/gcc.py +2 -3
@@ 23,12 23,11 @@ def generate(args, pkgname):
                         " gcc6.")
    pmb.helpers.run.user(args, ["cp", "-r", upstream, f"{args.work}/aportgen"])

    # Rewrite APKBUILD (only building for native covers most use cases and
    # saves a lot of build time, can be changed on demand)
    # Rewrite APKBUILD
    fields = {
        "pkgname": pkgname,
        "pkgdesc": f"Stage2 cross-compiler for {arch}",
        "arch": pmb.config.arch_native,
        "arch": pmb.aportgen.get_cross_package_arches(pkgname),
        "depends": f"binutils-{arch} mpc1",
        "makedepends_build": "gcc g++ bison flex texinfo gawk zip"
                             " gmp-dev mpfr-dev mpc1-dev zlib-dev",

M pmb/aportgen/musl.py => pmb/aportgen/musl.py +1 -1
@@ 42,7 42,7 @@ def generate(args, pkgname):
            pkgname={pkgname}
            pkgver={pkgver}
            pkgrel={pkgrel}
            arch="{pmb.config.arch_native}"
            arch="{pmb.aportgen.get_cross_package_arches(pkgname)}"
            subpackages="musl-dev-{arch}:package_dev"

            _arch="{arch}"