aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Kubaj <pkubaj@FreeBSD.org>2026-08-05 08:01:29 +0000
committerPiotr Kubaj <pkubaj@FreeBSD.org>2026-08-05 08:14:48 +0000
commit7af3bb12f06a58afc7946dfef264578bd24d22cd (patch)
treecc63a5a5167df1c09209c58477e0755bd1310556
parent8c2ac84b701610ea2c269aeb8f06ead8eae48cb2 (diff)
lang/ldc: add new bootstrap for powerpc64le after long double switch
Two new patches: 1. Don't use glibc's dual long double mechanism - we don't support IBM long double. 2. Use proper mangling.
-rw-r--r--lang/ldc/Makefile4
-rw-r--r--lang/ldc/distinfo2
-rw-r--r--lang/ldc/files/patch-gen_target.cpp12
-rw-r--r--lang/ldc/files/patch-runtime_druntime_src_core_stdc_config.d15
4 files changed, 33 insertions, 0 deletions
diff --git a/lang/ldc/Makefile b/lang/ldc/Makefile
index 35d45daf815e..2614a915566d 100644
--- a/lang/ldc/Makefile
+++ b/lang/ldc/Makefile
@@ -39,7 +39,11 @@ MASTER_SITES+= https://github.com/ldc-developers/${PORTNAME}/releases/download/v
BOOTSTRAP_ARCH= ppc64
MASTER_SITES+= LOCAL/pkubaj:bootstrap
.elif ${ARCH} == powerpc64le
+. if ${OSVERSION} >= 1600019
+BOOTSTRAP_ARCH= ppc64le-ld128
+. else
BOOTSTRAP_ARCH= ppc64le
+. endif
MASTER_SITES+= LOCAL/pkubaj:bootstrap
.endif
diff --git a/lang/ldc/distinfo b/lang/ldc/distinfo
index 80a86043e32c..30fa10baf325 100644
--- a/lang/ldc/distinfo
+++ b/lang/ldc/distinfo
@@ -7,3 +7,5 @@ SHA256 (ldc2-1.42.0-freebsd-ppc64le.tar.xz) = 7f14ca7c6d7b717f905ad6ffdbe5446ced
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
+SHA256 (ldc2-1.42.0-freebsd-ppc64le-ld128.tar.xz) = 2e48907ac953620de7c378a82c92fecdb1fdd3dbe27e8bc1a2e88be84c81c3b5
+SIZE (ldc2-1.42.0-freebsd-ppc64le-ld128.tar.xz) = 16342464
diff --git a/lang/ldc/files/patch-gen_target.cpp b/lang/ldc/files/patch-gen_target.cpp
new file mode 100644
index 000000000000..ddf06d68bef8
--- /dev/null
+++ b/lang/ldc/files/patch-gen_target.cpp
@@ -0,0 +1,12 @@
+--- gen/target.cpp.orig 2026-06-11 09:58:17 UTC
++++ gen/target.cpp
+@@ -317,7 +317,8 @@
+ if (triple.getArch() == llvm::Triple::ppc64 ||
+ triple.getArch() == llvm::Triple::ppc64le) {
+ if (target.RealProperties.mant_dig == 113 &&
+- triple.getEnvironment() == llvm::Triple::GNU) {
++ (triple.getEnvironment() == llvm::Triple::GNU ||
++ triple.isOSFreeBSD())) {
+ return "u9__ieee128";
+ }
+ if (target.RealProperties.mant_dig == 106) {
diff --git a/lang/ldc/files/patch-runtime_druntime_src_core_stdc_config.d b/lang/ldc/files/patch-runtime_druntime_src_core_stdc_config.d
new file mode 100644
index 000000000000..43af74303a61
--- /dev/null
+++ b/lang/ldc/files/patch-runtime_druntime_src_core_stdc_config.d
@@ -0,0 +1,15 @@
+--- runtime/druntime/src/core/stdc/config.d.orig 2026-06-11 09:58:17 UTC
++++ runtime/druntime/src/core/stdc/config.d
+@@ -689,6 +689,11 @@
+ }
+
+ version (PPC64)
+- enum PPCUseIEEE128 = real.mant_dig == 113;
++{
++ version (CRuntime_Glibc)
++ enum PPCUseIEEE128 = real.mant_dig == 113;
++ else
++ enum PPCUseIEEE128 = false;
++}
+ else
+ enum PPCUseIEEE128 = false;