From e3ae98b9598c81e5a03b4cba27f6a4b1b06acf8e Mon Sep 17 00:00:00 2001 From: Christy Norman Date: Tue, 7 Mar 2023 17:20:18 -0600 Subject: [PATCH] Add ppc64le support Closes #165. Signed-off-by: Christy Norman --- .github/workflows/linux.yml | 31 ++++++++++++++++++++++++ cpython-unix/build-cpython.sh | 3 +++ cpython-unix/build-libX11.sh | 3 +++ cpython-unix/build.cross.Dockerfile | 2 ++ cpython-unix/extension-modules.yml | 1 + cpython-unix/targets.yml | 37 +++++++++++++++++++++++++++++ docs/building.rst | 1 + src/release.rs | 9 +++++++ src/validation.rs | 8 +++++++ 9 files changed, 95 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 43baf18a..b4c4a4d0 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -325,6 +325,37 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'lto' + + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4c2044d9..7e355f2f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -677,6 +677,9 @@ mipsel-unknown-linux-gnu) mips64el-unknown-linux-gnuabi64) PYTHON_ARCH="mips64el-linux-gnuabi64" ;; +ppc64le-unknown-linux-gnu) + PYTHON_ARCH="powerpc64le-linux-gnu" + ;; s390x-unknown-linux-gnu) PYTHON_ARCH="s390x-linux-gnu" ;; diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index 86fc595c..019b2c07 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -66,6 +66,9 @@ if [ -n "${CROSS_COMPILING}" ]; then mips64el-unknown-linux-gnuabi64) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; + ppc64le-unknown-linux-gnu) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; s390x-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index 4b951231..968386f5 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -54,6 +54,7 @@ RUN apt-get install \ gcc-mips-linux-gnu \ gcc-mips64el-linux-gnuabi64 \ gcc-mipsel-linux-gnu \ + gcc-powerpc64le-linux-gnu \ gcc-s390x-linux-gnu \ libc6-dev-arm64-cross \ libc6-dev-armel-cross \ @@ -61,4 +62,5 @@ RUN apt-get install \ libc6-dev-mips-cross \ libc6-dev-mips64el-cross \ libc6-dev-mipsel-cross \ + libc6-dev-ppc64el-cross \ libc6-dev-s390x-cross diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 5d1956f3..07ebaa82 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -228,6 +228,7 @@ _decimal: - define: CONFIG_64=1 targets: - aarch64-.* + - ppc64le-unknown-linux.* - s390x-unknown-linux-.* - x86_64.* links: diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index a7294092..7a4d9d8e 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -409,6 +409,43 @@ mipsel-unknown-linux-gnu: - zlib openssl_target: linux-mips32 +ppc64le-unknown-linux-gnu: + host_platforms: + - linux64 + pythons_supported: + - '3.9' + - '3.10' + - '3.11' + docker_image_suffix: .cross + host_cc: /usr/bin/x86_64-linux-gnu-gcc + host_cxx: /usr/bin/x86_64-linux-gnu-g++ + target_cc: /usr/bin/powerpc64le-linux-gnu-gcc + needs: + - autoconf + - bdb + - binutils + - bzip2 + - expat + - libedit + - libffi + - libX11 + - libXau + - libxcb + - m4 + - mpdecimal + - ncurses + - openssl + - patchelf + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-ppc64le + s390x-unknown-linux-gnu: host_platforms: - linux64 diff --git a/docs/building.rst b/docs/building.rst index 8ebfcc7f..94f7effd 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -39,6 +39,7 @@ As are various other targets:: $ ./build-linux.py --target armv7-unknown-linux-gnueabihf $ ./build-linux.py --target mips-unknown-linux-gnu $ ./build-linux.py --target mipsel-unknown-linux-gnu + $ ./build-linux.py --target ppc64le-unknown-linux-gnu $ ./build-linux.py --target s390x-unknown-linux-gnu macOS diff --git a/src/release.rs b/src/release.rs index ca0df969..0ede5d05 100644 --- a/src/release.rs +++ b/src/release.rs @@ -96,6 +96,15 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }, ); + h.insert( + "ppc64le-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: None, + }, + ); + h.insert( "i686-unknown-linux-gnu", TripleRelease { diff --git a/src/validation.rs b/src/validation.rs index b09e5d38..ba0f1ebe 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -41,6 +41,7 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ "mips-unknown-linux-gnu", "mipsel-unknown-linux-gnu", "mips64el-unknown-linux-gnuabi64", + "ppc64le-unknown-linux-gnu", "s390x-unknown-linux-gnu", "thumbv7k-apple-watchos", "x86_64-apple-darwin", @@ -155,6 +156,10 @@ static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy> = Lazy: ("mips-unknown-linux-gnu", "linux-mips"), ("mipsel-unknown-linux-gnu", "linux-mipsel"), ("mips64el-unknown-linux-gnuabi64", "todo"), + ("ppc64le-unknown-linux-gnu", "linux-powerpc64le"), ("s390x-unknown-linux-gnu", "linux-s390x"), ("x86_64-apple-darwin", "macosx-10.9-x86_64"), ("x86_64-apple-ios", "iOS-x86_64"), @@ -777,6 +784,7 @@ fn validate_elf<'data, Elf: FileHeader>( "mips-unknown-linux-gnu" => object::elf::EM_MIPS, "mipsel-unknown-linux-gnu" => object::elf::EM_MIPS, "mips64el-unknown-linux-gnuabi64" => 0, + "ppc64le-unknown-linux-gnu" => object::elf::EM_PPC64, "s390x-unknown-linux-gnu" => object::elf::EM_S390, "x86_64-unknown-linux-gnu" => object::elf::EM_X86_64, "x86_64_v2-unknown-linux-gnu" => object::elf::EM_X86_64,