svn commit: r555229 - head/lang/ldc/files
Mikael Urankar
mikael at FreeBSD.org
Sun Nov 15 15:23:05 UTC 2020
Author: mikael
Date: Sun Nov 15 15:23:04 2020
New Revision: 555229
URL: https://svnweb.freebsd.org/changeset/ports/555229
Log:
lang/ldc: fix build on aarch64
PR: 237427
Submitted by: Greg V
Approved by: portmgr (tier-2 blanket)
Added:
head/lang/ldc/files/patch-ltsmaster_driver_targetmachine.cpp (contents, props changed)
head/lang/ldc/files/patch-ltsmaster_runtime_druntime_src_core_sys_posix_setjmp.d (contents, props changed)
head/lang/ldc/files/patch-ltsmaster_runtime_druntime_src_core_sys_posix_ucontext.d (contents, props changed)
head/lang/ldc/files/patch-ltsmaster_runtime_phobos_std_internal_math_gammafunction.d (contents, props changed)
Added: head/lang/ldc/files/patch-ltsmaster_driver_targetmachine.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/ldc/files/patch-ltsmaster_driver_targetmachine.cpp Sun Nov 15 15:23:04 2020 (r555229)
@@ -0,0 +1,27 @@
+--- /usr/ports/lang/ldc/work/ldc-1.23.0/ltsmaster/driver/targetmachine.cpp
++++ /usr/ports/lang/ldc.last/work/ldc-1.23.0/ltsmaster/driver/targetmachine.cpp
+@@ -587,6 +587,23 @@
+ break;
+ }
+
++ // Taken from clang's lib/Driver/ToolChains/Gnu.cpp
++ if (triple.getArch() == llvm::Triple::aarch64 ||
++ triple.getArch() == llvm::Triple::aarch64_be ||
++ (triple.getOS() == llvm::Triple::FreeBSD &&
++ triple.getOSMajorVersion() >= 12) ||
++ triple.getOS() == llvm::Triple::NaCl ||
++ (triple.getVendor() == llvm::Triple::MipsTechnologies &&
++ !triple.hasEnvironment()) ||
++ triple.getOS() == llvm::Triple::Solaris
++#if LDC_LLVM_VER >= 400
++ || triple.getArch() == llvm::Triple::riscv32
++ || triple.getArch() == llvm::Triple::riscv64
++#endif
++ ) {
++ targetOptions.UseInitArray = true;
++ }
++
+ // Right now, we only support linker-level dead code elimination on Linux
+ // using the GNU toolchain (based on ld's --gc-sections flag). The Apple ld
+ // on OS X supports a similar flag (-dead_strip) that doesn't require
+
Added: head/lang/ldc/files/patch-ltsmaster_runtime_druntime_src_core_sys_posix_setjmp.d
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/ldc/files/patch-ltsmaster_runtime_druntime_src_core_sys_posix_setjmp.d Sun Nov 15 15:23:04 2020 (r555229)
@@ -0,0 +1,27 @@
+--- ltsmaster/runtime/druntime/src/core/sys/posix/setjmp.d.orig 2020-11-14 19:34:19 UTC
++++ ltsmaster/runtime/druntime/src/core/sys/posix/setjmp.d
+@@ -163,6 +163,12 @@ else version( FreeBSD )
+ enum _JBLEN = 5;
+ struct _jmp_buf { c_long[_JBLEN + 1] _jb; }
+ }
++ else version( AArch64 )
++ {
++ enum _JBLEN = 31;
++ // __int128_t
++ struct _jmp_buf { long[2][_JBLEN + 1] _jb; };
++ }
+ else
+ static assert(0);
+ alias _jmp_buf[1] jmp_buf;
+@@ -250,6 +256,11 @@ else version( FreeBSD )
+ enum _JB_SIGFLAG = 5;
+ struct _sigjmp_buf { c_long[_JBLEN + 1] _sjb; }
+ }
++ else version( AArch64 )
++ {
++ // __int128_t
++ struct _sigjmp_buf { long[2][_JBLEN + 1] _jb; };
++ }
+ else
+ static assert(0);
+ alias _sigjmp_buf[1] sigjmp_buf;
Added: head/lang/ldc/files/patch-ltsmaster_runtime_druntime_src_core_sys_posix_ucontext.d
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/ldc/files/patch-ltsmaster_runtime_druntime_src_core_sys_posix_ucontext.d Sun Nov 15 15:23:04 2020 (r555229)
@@ -0,0 +1,41 @@
+--- ltsmaster/runtime/druntime/src/core/sys/posix/ucontext.d.orig 2020-11-14 19:35:48 UTC
++++ ltsmaster/runtime/druntime/src/core/sys/posix/ucontext.d
+@@ -686,6 +686,38 @@ else version( FreeBSD )
+ int[6] mc_spare2;
+ }
+ }
++ else version( AArch64 )
++ {
++ alias __register_t = long;
++
++ struct gpregs
++ {
++ __register_t[30] gp_x;
++ __register_t gp_lr;
++ __register_t gp_sp;
++ __register_t gp_elr;
++ uint gp_spsr;
++ int gp_pad;
++ }
++
++ struct fpregs
++ {
++ ulong[2][32] fp_q; // __uint128_t
++ uint fp_sr;
++ uint fp_cr;
++ int fp_flags;
++ int fp_pad;
++ }
++
++ struct mcontext_t
++ {
++ gpregs mc_gpregs;
++ fpregs mc_fpregs;
++ int mc_flags;
++ int mc_pad;
++ ulong[8] mc_spare;
++ }
++ }
+
+ // <ucontext.h>
+ enum UCF_SWAPPED = 0x00000001;
Added: head/lang/ldc/files/patch-ltsmaster_runtime_phobos_std_internal_math_gammafunction.d
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/ldc/files/patch-ltsmaster_runtime_phobos_std_internal_math_gammafunction.d Sun Nov 15 15:23:04 2020 (r555229)
@@ -0,0 +1,22 @@
+https://github.com/ldc-developers/phobos/commit/65b103fc08c5a58f3b0c2b56ac8650ca8e678109.patch
+
+From 65b103fc08c5a58f3b0c2b56ac8650ca8e678109 Mon Sep 17 00:00:00 2001
+From: Iain Buclaw <ibuclaw at gdcproject.org>
+Date: Sat, 23 May 2015 14:05:03 +0200
+Subject: [PATCH] Relax compile-time assertion in gammafunction to runtime
+
+--- ltsmaster/runtime/phobos/std/internal/math/gammafunction.d.orig 2020-11-14 19:44:53 UTC
++++ ltsmaster/runtime/phobos/std/internal/math/gammafunction.d
+@@ -1653,8 +1653,10 @@ unittest {
+ real logmdigammaInverse(real y)
+ {
+ import std.numeric: findRoot;
+- enum maxY = logmdigamma(real.min_normal);
+- static assert(maxY > 0 && maxY <= real.max);
++ // FIXME: should be returned back to enum.
++ // Fix requires CTFEable `log` on non-x86 targets (check both LDC and GDC).
++ immutable maxY = logmdigamma(real.min_normal);
++ assert(maxY > 0 && maxY <= real.max);
+
+ if (y >= maxY)
+ {
More information about the svn-ports-all
mailing list