git: 089daccfe07b - main - lang/ldc: add powerpc64* support

From: Piotr Kubaj <pkubaj_at_FreeBSD.org>
Date: Fri, 19 Jun 2026 12:13:35 UTC
The branch main has been updated by pkubaj:

URL: https://cgit.FreeBSD.org/ports/commit/?id=089daccfe07b76a04d5c46a217f0e96d484e80c1

commit 089daccfe07b76a04d5c46a217f0e96d484e80c1
Author:     Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2026-06-19 12:09:20 +0000
Commit:     Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2026-06-19 12:13:32 +0000

    lang/ldc: add powerpc64* support
    
    PR:     271717
    Approved by:    acm (maintainer)
---
 lang/ldc/Makefile                             | 23 +++++++++++++++++++----
 lang/ldc/distinfo                             |  4 ++++
 lang/ldc/files/patch-driver_targetmachine.cpp | 11 +++++++++++
 lang/ldc/files/patch-gen_abi_abi.cpp          | 16 ++++++++++++++++
 4 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/lang/ldc/Makefile b/lang/ldc/Makefile
index 567f9b23e498..35d45daf815e 100644
--- a/lang/ldc/Makefile
+++ b/lang/ldc/Makefile
@@ -4,7 +4,7 @@ DISTVERSIONSUFFIX=	-src
 CATEGORIES=	lang
 MASTER_SITES=	https://github.com/ldc-developers/${PORTNAME}/releases/download/v${DISTVERSION}/
 DISTFILES=	${DISTNAME}${EXTRACT_SUFX} \
-		ldc2-${PORTVERSION}-freebsd-x86_64.tar.xz
+		ldc2-${PORTVERSION}-freebsd-${BOOTSTRAP_ARCH}.tar.xz:bootstrap
 
 MAINTAINER=	acm@FreeBSD.org
 COMMENT=	LLVM-based D compiler
@@ -12,8 +12,8 @@ WWW=		https://wiki.dlang.org/LDC
 
 LICENSE=	BSD3CLAUSE
 
-ONLY_FOR_ARCHS=	amd64
-ONLY_FOR_ARCHS_REASON=	The bootstrap compiler is provided only for x86_64
+ONLY_FOR_ARCHS=	amd64 powerpc64 powerpc64le
+ONLY_FOR_ARCHS_REASON=	The bootstrap compiler is provided only for x86_64, powerpc64 and powerpc64le
 
 BUILD_DEPENDS=	${LOCALBASE}/llvm19/lib/libLLVM-19.so:devel/llvm19 # required for bootstrap
 LIB_DEPENDS=	libconfig.so:devel/libconfig
@@ -25,13 +25,28 @@ USE_LDCONFIG=	yes
 CFLAGS+=	-fPIC
 
 CMAKE_ARGS+=	-DLDC_INSTALL_PREFIX="${PREFIX}" \
-		-DD_COMPILER="${WRKDIR}/ldc2-${PORTVERSION}-freebsd-x86_64/bin/ldmd2" \
+		-DD_COMPILER="${WRKDIR}/ldc2-${PORTVERSION}-freebsd-${BOOTSTRAP_ARCH}/bin/ldmd2" \
 		-DLLVM_CONFIG=${LOCALBASE}/bin/${LLVM_CONFIG} \
 		-DBUILD_SHARED_LIBS="BOTH" \
 		-DBUILD_LTO_LIBS=ON
 
+.include <bsd.port.options.mk>
+
+.if ${ARCH} == amd64
+BOOTSTRAP_ARCH=	x86_64
+MASTER_SITES+=	https://github.com/ldc-developers/${PORTNAME}/releases/download/v${DISTVERSION}/:bootstrap
+.elif ${ARCH} == powerpc64
+BOOTSTRAP_ARCH=	ppc64
+MASTER_SITES+=	LOCAL/pkubaj:bootstrap
+.elif ${ARCH} == powerpc64le
+BOOTSTRAP_ARCH=	ppc64le
+MASTER_SITES+=	LOCAL/pkubaj:bootstrap
+.endif
+
+.if ${ARCH} == amd64
 post-patch:
 	cd ${WRKDIR}; patch < ${.CURDIR}/files/extra-patch-ldc2-1.41.0-freebsd-x86_64-import-core-sys-freebsd-config.d
+.endif
 
 post-install:
 	${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ldc-build-runtime
diff --git a/lang/ldc/distinfo b/lang/ldc/distinfo
index 78422c8cbb66..80a86043e32c 100644
--- a/lang/ldc/distinfo
+++ b/lang/ldc/distinfo
@@ -3,3 +3,7 @@ SHA256 (ldc-1.42.0-src.tar.gz) = 9bb0f628f869f7fc7b53c381a79742d29c17552c6f1a56b
 SIZE (ldc-1.42.0-src.tar.gz) = 9162109
 SHA256 (ldc2-1.42.0-freebsd-x86_64.tar.xz) = 1f9e93796cd3a089b33e28093b6c37d3e8e9929fe930e5d15f40d77b7cb14acb
 SIZE (ldc2-1.42.0-freebsd-x86_64.tar.xz) = 19531680
+SHA256 (ldc2-1.42.0-freebsd-ppc64le.tar.xz) = 7f14ca7c6d7b717f905ad6ffdbe5446ced4a2e806d3e34c4667a441d4b6c8fdc
+SIZE (ldc2-1.42.0-freebsd-ppc64le.tar.xz) = 16168864
+SHA256 (ldc2-1.42.0-freebsd-ppc64.tar.xz) = 3c635430a169d85e11c46eaed84d4fd3348ed096a89f221e8f188900a5708f8d
+SIZE (ldc2-1.42.0-freebsd-ppc64.tar.xz) = 14346472
diff --git a/lang/ldc/files/patch-driver_targetmachine.cpp b/lang/ldc/files/patch-driver_targetmachine.cpp
new file mode 100644
index 000000000000..87a955eae16f
--- /dev/null
+++ b/lang/ldc/files/patch-driver_targetmachine.cpp
@@ -0,0 +1,11 @@
+--- driver/targetmachine.cpp.orig	2026-06-11 09:58:17 UTC
++++ driver/targetmachine.cpp
+@@ -158,7 +158,7 @@
+   case llvm::Triple::mips64el:
+     return "n32";
+   case llvm::Triple::ppc64:
+-    return "elfv1";
++    return triple.isOSFreeBSD() ? "elfv2" : "elfv1";
+   case llvm::Triple::ppc64le:
+     return "elfv2";
+   case llvm::Triple::riscv64:
diff --git a/lang/ldc/files/patch-gen_abi_abi.cpp b/lang/ldc/files/patch-gen_abi_abi.cpp
new file mode 100644
index 000000000000..799100ca73df
--- /dev/null
+++ b/lang/ldc/files/patch-gen_abi_abi.cpp
@@ -0,0 +1,16 @@
+--- gen/abi/abi.cpp.orig	2026-06-11 12:57:35 UTC
++++ gen/abi/abi.cpp
+@@ -273,8 +273,12 @@
+   case llvm::Triple::riscv64:
+     return getRISCV64TargetABI();
+   case llvm::Triple::ppc:
++    return getPPCTargetABI(false);
+   case llvm::Triple::ppc64:
+-    return getPPCTargetABI(global.params.targetTriple->isArch64Bit());
++    // FreeBSD powerpc64 is big-endian but uses the ELFv2 ABI, like ppc64le.
++    if (global.params.targetTriple->isOSFreeBSD())
++      return getPPC64LETargetABI();
++    return getPPCTargetABI(true);
+   case llvm::Triple::ppc64le:
+     return getPPC64LETargetABI();
+   case llvm::Triple::aarch64: