Date: Fri, 29 May 2026 20:48:59 +0000
From: Piotr Kubaj <pkubaj@FreeBSD.org>
To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject: git: 51c541c1e65f - main - lang/ghc{,96}: port to powerpc64
Message-ID: <6a19fbbb.33deb.16130d8a@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by pkubaj: URL: https://cgit.FreeBSD.org/ports/commit/?id=51c541c1e65f3b9dc225babd7ba0ef66e812a673 commit 51c541c1e65f3b9dc225babd7ba0ef66e812a673 Author: Piotr Kubaj <pkubaj@FreeBSD.org> AuthorDate: 2026-05-29 20:46:28 +0000 Commit: Piotr Kubaj <pkubaj@FreeBSD.org> CommitDate: 2026-05-29 20:48:54 +0000 lang/ghc{,96}: port to powerpc64 1. In the Makefile, switch ARCH == powerpc64le to ARCH:Mpowerpc64*, 2. Add some additional ARCH == powerpc64 for switching to ELFv2, since GHC assumes powerpc64 is ELFv1. 3. Add additional patch to disable ELFv1 code in StgCRun.c. Bootstrap is built against 14.3-RELEASE. PR: 295675 Approved by: arrowd@ --- lang/ghc/Makefile | 20 ++++++++++++++++---- lang/ghc/distinfo | 2 ++ lang/ghc/files/patch-rts_StgCRun.c | 11 +++++++++++ lang/ghc/files/patch-rts_StgCRunAsm.S | 5 +++-- lang/ghc96/files/patch-rts_StgCRun.c | 11 +++++++++++ lang/ghc96/files/patch-rts_StgCRunAsm.S | 5 +++-- 6 files changed, 46 insertions(+), 8 deletions(-) diff --git a/lang/ghc/Makefile b/lang/ghc/Makefile index 327f10609c8c..bf9a4ad6494c 100644 --- a/lang/ghc/Makefile +++ b/lang/ghc/Makefile @@ -14,7 +14,7 @@ WWW= https://www.haskell.org/ghc/ LICENSE= BSD3CLAUSE LICENSE_FILE= ${WRKSRC}/LICENSE -ONLY_FOR_ARCHS= aarch64 amd64 powerpc64le +ONLY_FOR_ARCHS= aarch64 amd64 powerpc64 powerpc64le BUILD_DEPENDS= ${LOCALBASE}/lib/libgmp.so:math/gmp @@ -131,7 +131,7 @@ DO_MAKE_BUILD= ${SETENVI} ${WRK_ENV} ${HADRIAN_CMD} ${_MAKE_JOBS} ALL_TARGET= binary-dist-dir INSTALL_WRKSRC= ${WRKSRC}/_build/bindist/ghc-${GHC_VERSION}-${CONFIGURE_TARGET} -GHC_ARCH= ${ARCH:S/amd64/x86_64/:C/armv.*/arm/:S/powerpc64le/ppc64/} +GHC_ARCH= ${ARCH:S/amd64/x86_64/:C/armv.*/arm/:C/powerpc64.*/ppc64/} BOOT_DIR= ${WRKDIR}/ghc-${BOOT_GHC_VERSION}-${CONFIGURE_TARGET} BOOT_INSTALL_DIR= ${WRKDIR}/ghc-boot-install @@ -152,12 +152,12 @@ DISTFILES+= ${HADRIAN_BOOT_TARBALL}:boot .if ${ARCH} == aarch64 CONFIGURE_TARGET= ${ARCH}-unknown-freebsd${"${ARCH:Maarch64}" != "":?:-gnueabihf} CONFIGURE_ARGS+= --host=${CONFIGURE_TARGET} -.elif ${ARCH} == powerpc64le +.elif ${ARCH:Mpowerpc64*} CONFIGURE_TARGET= ${ARCH}-unknown-freebsd CONFIGURE_ARGS+= --host=${CONFIGURE_TARGET} .endif -.if ${ARCH} == powerpc64le && ${GHC_VERSION} == 9.6.7 +.if ${ARCH:Mpowerpc64*} && ${GHC_VERSION} == 9.6.7 BOOT_GHC_VERSION= 9.6.7 HADRIAN_BOOT_TARBALL= hadrian-9.6.7-boot-powerpc64le.tar.gz .endif @@ -169,9 +169,21 @@ pre-configure: # If we are using bootstrap compiler, configure and install it into ${BOOT_DIR} cd ${BOOT_DIR} && ${SETENVI} ${CONFIGURE_ENV} ${CONFIGURE_CMD} --prefix=${BOOT_INSTALL_DIR} cd ${BOOT_DIR} && ${SETENVI} ${WRK_ENV} ${GMAKE} PACKAGES='' install +.if ${ARCH} == powerpc64 +# Boot's settings are generated by configure which maps `powerpc64` to ELF_V1, +# but FreeBSD ppc64 is ELFv2; flip so the boot's NCG dispatches correctly. + ${REINPLACE_CMD} -e 's|ArchPPC_64 ELF_V1|ArchPPC_64 ELF_V2|g' \ + ${BOOT_INSTALL_DIR}/lib/ghc-${BOOT_GHC_VERSION}/lib/settings +.endif .endif pre-build: +.if ${ARCH} == powerpc64 +# FreeBSD ppc64 BE is ELFv2, but GHC's configure hardcodes powerpc64 -> ELF_V1. + ${REINPLACE_CMD} -e 's|ArchPPC_64 ELF_V1|ArchPPC_64 ELF_V2|g' \ + ${WRKSRC}/hadrian/cfg/default.target \ + ${WRKSRC}/hadrian/cfg/default.host.target +.endif .if ! ${PORT_OPTIONS:MBOOT} # Compile Hadrian using the bootstrap compiler and bootstrap Hadrian distfile cd ${WRKSRC}/hadrian/bootstrap && \ diff --git a/lang/ghc/distinfo b/lang/ghc/distinfo index b7888aa0468d..c480882f8f78 100644 --- a/lang/ghc/distinfo +++ b/lang/ghc/distinfo @@ -31,3 +31,5 @@ SHA256 (ghc-9.6.7-boot-powerpc64le-freebsd.tar.xz) = 0090b3a8d2420af339b94d8df14 SIZE (ghc-9.6.7-boot-powerpc64le-freebsd.tar.xz) = 142326376 SHA256 (hadrian-9.6.7-boot-powerpc64le.tar.gz) = 46b51e5929b3cd1f7c0a30ad5d4fd689d4d10fe555cb6350df80e1dcd78e2e19 SIZE (hadrian-9.6.7-boot-powerpc64le.tar.gz) = 1500047 +SHA256 (ghc-9.6.7-boot-powerpc64-freebsd.tar.xz) = d2f09f4fbd06169891664d7598e51d4615003c2879eec92d0f022e25e99c5cc0 +SIZE (ghc-9.6.7-boot-powerpc64-freebsd.tar.xz) = 136217048 diff --git a/lang/ghc/files/patch-rts_StgCRun.c b/lang/ghc/files/patch-rts_StgCRun.c new file mode 100644 index 000000000000..93dd0a666354 --- /dev/null +++ b/lang/ghc/files/patch-rts_StgCRun.c @@ -0,0 +1,11 @@ +--- rts/StgCRun.c.orig ++++ rts/StgCRun.c +@@ -670,7 +670,7 @@ + Everything is in assembler, so we don't have to deal with GCC... + -------------------------------------------------------------------------- */ + +-#if defined(powerpc64_HOST_ARCH) ++#if defined(powerpc64_HOST_ARCH) && !defined(freebsd_HOST_OS) + /* 64-bit PowerPC ELF ABI 1.9 + * + * Stack frame organization (see Figure 3-17, ELF ABI 1.9, p 14) diff --git a/lang/ghc/files/patch-rts_StgCRunAsm.S b/lang/ghc/files/patch-rts_StgCRunAsm.S index 838a8222eb42..51b8b4ccf4b7 100644 --- a/lang/ghc/files/patch-rts_StgCRunAsm.S +++ b/lang/ghc/files/patch-rts_StgCRunAsm.S @@ -2,9 +2,10 @@ +++ rts/StgCRunAsm.S @@ -6,7 +6,7 @@ #if !defined(USE_MINIINTERPRETER) - - #if defined(powerpc64le_HOST_ARCH) + +-#if defined(powerpc64le_HOST_ARCH) -# if defined(linux_HOST_OS) ++#if defined(powerpc64le_HOST_ARCH) || defined(powerpc64_HOST_ARCH) +# if defined(linux_HOST_OS) || defined(freebsd_HOST_OS) /* 64-bit PowerPC ELF V2 ABI Revision 1.4 * diff --git a/lang/ghc96/files/patch-rts_StgCRun.c b/lang/ghc96/files/patch-rts_StgCRun.c new file mode 100644 index 000000000000..93dd0a666354 --- /dev/null +++ b/lang/ghc96/files/patch-rts_StgCRun.c @@ -0,0 +1,11 @@ +--- rts/StgCRun.c.orig ++++ rts/StgCRun.c +@@ -670,7 +670,7 @@ + Everything is in assembler, so we don't have to deal with GCC... + -------------------------------------------------------------------------- */ + +-#if defined(powerpc64_HOST_ARCH) ++#if defined(powerpc64_HOST_ARCH) && !defined(freebsd_HOST_OS) + /* 64-bit PowerPC ELF ABI 1.9 + * + * Stack frame organization (see Figure 3-17, ELF ABI 1.9, p 14) diff --git a/lang/ghc96/files/patch-rts_StgCRunAsm.S b/lang/ghc96/files/patch-rts_StgCRunAsm.S index 838a8222eb42..51b8b4ccf4b7 100644 --- a/lang/ghc96/files/patch-rts_StgCRunAsm.S +++ b/lang/ghc96/files/patch-rts_StgCRunAsm.S @@ -2,9 +2,10 @@ +++ rts/StgCRunAsm.S @@ -6,7 +6,7 @@ #if !defined(USE_MINIINTERPRETER) - - #if defined(powerpc64le_HOST_ARCH) + +-#if defined(powerpc64le_HOST_ARCH) -# if defined(linux_HOST_OS) ++#if defined(powerpc64le_HOST_ARCH) || defined(powerpc64_HOST_ARCH) +# if defined(linux_HOST_OS) || defined(freebsd_HOST_OS) /* 64-bit PowerPC ELF V2 ABI Revision 1.4 *home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a19fbbb.33deb.16130d8a>
