diff --git a/lang/ldc/Makefile b/lang/ldc/Makefile index 567f9b23e498..35d45daf815e 100644 --- a/lang/ldc/Makefile +++ b/lang/ldc/Makefile @@ -1,43 +1,58 @@ PORTNAME= ldc PORTVERSION= 1.42.0 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 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 USES= llvm:lib,run,min=15,max=21 ninja cmake:insource pkgconfig 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 + +.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 ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ldc-profdata ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ldc-prune-cache ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ldc2 ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ldmd2 .include diff --git a/lang/ldc/distinfo b/lang/ldc/distinfo index 78422c8cbb66..80a86043e32c 100644 --- a/lang/ldc/distinfo +++ b/lang/ldc/distinfo @@ -1,5 +1,9 @@ TIMESTAMP = 1776306069 SHA256 (ldc-1.42.0-src.tar.gz) = 9bb0f628f869f7fc7b53c381a79742d29c17552c6f1a56b0a02aa289e65a0e3b 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: