Re: lang/mono for arm64

2021-04-10 Thread Christian Weisgerber
Patrick Wildt:

> sthen, naddy: OK to put it in, or too late?

ok

-- 
Christian "naddy" Weisgerber  na...@mips.inka.de



Re: lang/mono for arm64

2021-04-10 Thread Patrick Wildt
i386 builds as well, as expected!

> Move aarch64 to the front of the list.

Sure, will do that.

sthen, naddy: OK to put it in, or too late?

Am Sat, Apr 10, 2021 at 01:18:05AM +0200 schrieb Patrick Wildt:
> Cool, thanks, Robert.
> 
> > sthen | makes sense to have that mono diff, need to be sure it doesn't 
> > break existing working archs (looked good from a quick read but i haven't 
> > tested)
> 
> The changes are all encapsulated in proper arch ifdefs.  To verify that
> is the case I'll compile it on our two mono arches;  amd64 works, and I
> will test i386 tomorrow morning.
> 
> Patrick
> 
> Am Fri, Apr 09, 2021 at 09:00:39PM +0200 schrieb Robert Nagy:
> > Hi
> > 
> > I am okay with this and i do not see why it cannot make release.
> > 
> > On 09/04/21 17:15 +0200, Patrick Wildt wrote:
> > > Hi,
> > > 
> > > to do some release tests with iked we wanted to play^Wtest games/openra
> > > over IPsec.  Turns out that arm64 does not support lang/mono, but I have
> > > gotten it to run.  With the following diff, games/openra builds and I
> > > can even play it.
> > > 
> > > This doesn't need to make release, so no worries.  Would be nice for
> > > others, but I myself run -current anyway.
> > > 
> > > The arch-defines.mk enables all mono-related packages.  In gcconfig.h
> > > OPENBSD needs to be checked so make sure in case it's AArch64, it
> > > doesn't define NOSYS.  Additionally apparently one has to check for
> > > OPENBSD and __aarch64__ to define the mach type.  Then there's another
> > > AARCH64 block where OS-related stuff has to be defined.  I simply used
> > > the AMD64 block, but skipping ELFCLASS.  In boringssl we need to have
> > > the 'find aarch64 crypto accel' code as well.  We don't have a nice API
> > > yet to extract info, so let's for now only use NEON, which we require
> > > on AArch64.  As far as I can see, ucontext is sigcontext, so I provide
> > > the same defines as FreeBSD but with sigcontext context.
> > > 
> > > I can try to get the diffs upstreamed.
> > > 
> > > Patrick
> > > 
> > > diff --git a/infrastructure/mk/arch-defines.mk 
> > > b/infrastructure/mk/arch-defines.mk
> > > index 228c3991f50..965949a964b 100644
> > > --- a/infrastructure/mk/arch-defines.mk
> > > +++ b/infrastructure/mk/arch-defines.mk
> > > @@ -21,7 +21,7 @@ LP64_ARCHS = aarch64 alpha amd64 mips64 mips64el 
> > > powerpc64 sparc64
> > >  GCC4_ARCHS = alpha hppa sh sparc64
> > >  GCC3_ARCHS = m88k
> > >  # XXX easier for ports that depend on mono
> > > -MONO_ARCHS = amd64 i386
> > > +MONO_ARCHS = amd64 i386 aarch64
> > >  OCAML_NATIVE_ARCHS = i386 amd64
> > >  OCAML_NATIVE_DYNLINK_ARCHS = i386 amd64
> > >  GO_ARCHS = aarch64 amd64 arm arm64 armv7 i386
> > > diff --git 
> > > a/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h 
> > > b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h
> > > new file mode 100644
> > > index 000..e2d766861a7
> > > --- /dev/null
> > > +++ b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h
> > > @@ -0,0 +1,51 @@
> > > +$OpenBSD$
> > > +
> > > +Index: external/bdwgc/include/private/gcconfig.h
> > > +--- external/bdwgc/include/private/gcconfig.h.orig
> > >  external/bdwgc/include/private/gcconfig.h
> > > +@@ -155,7 +155,7 @@ EXTERN_C_BEGIN
> > > + # if defined(__aarch64__)
> > > + #define AARCH64
> > > + #if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
> > > +-&& !defined(NN_BUILD_TARGET_PLATFORM_NX)
> > > ++&& !defined(OPENBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX)
> > > + #  define NOSYS
> > > + #  define mach_type_known
> > > + #endif
> > > +@@ -348,6 +348,10 @@ EXTERN_C_BEGIN
> > > + #define X86_64
> > > + #define mach_type_known
> > > + # endif
> > > ++# if defined(OPENBSD) && defined(__aarch64__)
> > > ++#   define AARCH64
> > > ++#   define mach_type_known
> > > ++# endif
> > > + # if defined(LINUX) && (defined(i386) || defined(__i386__))
> > > + #define I386
> > > + #define mach_type_known
> > > +@@ -2298,6 +2302,25 @@ EXTERN_C_BEGIN
> > > +   extern char etext[];
> > > + # define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext)
> > > + # define DATASTART_USES_BSDGETDATASTART
> > > ++#   endif
> > > ++#   ifdef OPENBSD
> > > ++# define OS_TYPE "OPENBSD"
> > > ++# ifndef GC_OPENBSD_THREADS
> > > ++EXTERN_C_END
> > > ++#   include 
> > > ++#   include 
> > > ++EXTERN_C_BEGIN
> > > ++#   ifdef USRSTACK
> > > ++# define STACKBOTTOM ((ptr_t)USRSTACK)
> > > ++#   else
> > > ++# define HEURISTIC2
> > > ++#   endif
> > > ++# endif
> > > ++  extern int __data_start[];
> > > ++  extern int _end[];
> > > ++# define DATASTART ((ptr_t)__data_start)
> > > ++# define DATAEND ((ptr_t)(&_end))
> > > ++# define DYNAMIC_LOADING
> > > + #   endif
> > > + #   ifdef NINTENDO_SWITCH
> > > +   static int zero_fd = -1;
> > > diff --git 
> > > 

Re: lang/mono for arm64

2021-04-09 Thread Brad Smith

On 4/9/2021 11:15 AM, Patrick Wildt wrote:

Hi,

to do some release tests with iked we wanted to play^Wtest games/openra
over IPsec.  Turns out that arm64 does not support lang/mono, but I have
gotten it to run.  With the following diff, games/openra builds and I
can even play it.

This doesn't need to make release, so no worries.  Would be nice for
others, but I myself run -current anyway.

The arch-defines.mk enables all mono-related packages.  In gcconfig.h
OPENBSD needs to be checked so make sure in case it's AArch64, it
doesn't define NOSYS.  Additionally apparently one has to check for
OPENBSD and __aarch64__ to define the mach type.  Then there's another
AARCH64 block where OS-related stuff has to be defined.  I simply used
the AMD64 block, but skipping ELFCLASS.  In boringssl we need to have
the 'find aarch64 crypto accel' code as well.  We don't have a nice API
yet to extract info, so let's for now only use NEON, which we require
on AArch64.  As far as I can see, ucontext is sigcontext, so I provide
the same defines as FreeBSD but with sigcontext context.

I can try to get the diffs upstreamed.

Patrick

diff --git a/infrastructure/mk/arch-defines.mk 
b/infrastructure/mk/arch-defines.mk
index 228c3991f50..965949a964b 100644
--- a/infrastructure/mk/arch-defines.mk
+++ b/infrastructure/mk/arch-defines.mk
@@ -21,7 +21,7 @@ LP64_ARCHS = aarch64 alpha amd64 mips64 mips64el powerpc64 
sparc64
  GCC4_ARCHS = alpha hppa sh sparc64
  GCC3_ARCHS = m88k
  # XXX easier for ports that depend on mono
-MONO_ARCHS = amd64 i386
+MONO_ARCHS = amd64 i386 aarch64

Move aarch64 to the front of the list.



Re: lang/mono for arm64

2021-04-09 Thread Patrick Wildt
Cool, thanks, Robert.

> sthen | makes sense to have that mono diff, need to be sure it doesn't break 
> existing working archs (looked good from a quick read but i haven't tested)

The changes are all encapsulated in proper arch ifdefs.  To verify that
is the case I'll compile it on our two mono arches;  amd64 works, and I
will test i386 tomorrow morning.

Patrick

Am Fri, Apr 09, 2021 at 09:00:39PM +0200 schrieb Robert Nagy:
> Hi
> 
> I am okay with this and i do not see why it cannot make release.
> 
> On 09/04/21 17:15 +0200, Patrick Wildt wrote:
> > Hi,
> > 
> > to do some release tests with iked we wanted to play^Wtest games/openra
> > over IPsec.  Turns out that arm64 does not support lang/mono, but I have
> > gotten it to run.  With the following diff, games/openra builds and I
> > can even play it.
> > 
> > This doesn't need to make release, so no worries.  Would be nice for
> > others, but I myself run -current anyway.
> > 
> > The arch-defines.mk enables all mono-related packages.  In gcconfig.h
> > OPENBSD needs to be checked so make sure in case it's AArch64, it
> > doesn't define NOSYS.  Additionally apparently one has to check for
> > OPENBSD and __aarch64__ to define the mach type.  Then there's another
> > AARCH64 block where OS-related stuff has to be defined.  I simply used
> > the AMD64 block, but skipping ELFCLASS.  In boringssl we need to have
> > the 'find aarch64 crypto accel' code as well.  We don't have a nice API
> > yet to extract info, so let's for now only use NEON, which we require
> > on AArch64.  As far as I can see, ucontext is sigcontext, so I provide
> > the same defines as FreeBSD but with sigcontext context.
> > 
> > I can try to get the diffs upstreamed.
> > 
> > Patrick
> > 
> > diff --git a/infrastructure/mk/arch-defines.mk 
> > b/infrastructure/mk/arch-defines.mk
> > index 228c3991f50..965949a964b 100644
> > --- a/infrastructure/mk/arch-defines.mk
> > +++ b/infrastructure/mk/arch-defines.mk
> > @@ -21,7 +21,7 @@ LP64_ARCHS = aarch64 alpha amd64 mips64 mips64el 
> > powerpc64 sparc64
> >  GCC4_ARCHS = alpha hppa sh sparc64
> >  GCC3_ARCHS = m88k
> >  # XXX easier for ports that depend on mono
> > -MONO_ARCHS = amd64 i386
> > +MONO_ARCHS = amd64 i386 aarch64
> >  OCAML_NATIVE_ARCHS = i386 amd64
> >  OCAML_NATIVE_DYNLINK_ARCHS = i386 amd64
> >  GO_ARCHS = aarch64 amd64 arm arm64 armv7 i386
> > diff --git 
> > a/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h 
> > b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h
> > new file mode 100644
> > index 000..e2d766861a7
> > --- /dev/null
> > +++ b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h
> > @@ -0,0 +1,51 @@
> > +$OpenBSD$
> > +
> > +Index: external/bdwgc/include/private/gcconfig.h
> > +--- external/bdwgc/include/private/gcconfig.h.orig
> >  external/bdwgc/include/private/gcconfig.h
> > +@@ -155,7 +155,7 @@ EXTERN_C_BEGIN
> > + # if defined(__aarch64__)
> > + #define AARCH64
> > + #if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
> > +-&& !defined(NN_BUILD_TARGET_PLATFORM_NX)
> > ++&& !defined(OPENBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX)
> > + #  define NOSYS
> > + #  define mach_type_known
> > + #endif
> > +@@ -348,6 +348,10 @@ EXTERN_C_BEGIN
> > + #define X86_64
> > + #define mach_type_known
> > + # endif
> > ++# if defined(OPENBSD) && defined(__aarch64__)
> > ++#   define AARCH64
> > ++#   define mach_type_known
> > ++# endif
> > + # if defined(LINUX) && (defined(i386) || defined(__i386__))
> > + #define I386
> > + #define mach_type_known
> > +@@ -2298,6 +2302,25 @@ EXTERN_C_BEGIN
> > +   extern char etext[];
> > + # define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext)
> > + # define DATASTART_USES_BSDGETDATASTART
> > ++#   endif
> > ++#   ifdef OPENBSD
> > ++# define OS_TYPE "OPENBSD"
> > ++# ifndef GC_OPENBSD_THREADS
> > ++EXTERN_C_END
> > ++#   include 
> > ++#   include 
> > ++EXTERN_C_BEGIN
> > ++#   ifdef USRSTACK
> > ++# define STACKBOTTOM ((ptr_t)USRSTACK)
> > ++#   else
> > ++# define HEURISTIC2
> > ++#   endif
> > ++# endif
> > ++  extern int __data_start[];
> > ++  extern int _end[];
> > ++# define DATASTART ((ptr_t)__data_start)
> > ++# define DATAEND ((ptr_t)(&_end))
> > ++# define DYNAMIC_LOADING
> > + #   endif
> > + #   ifdef NINTENDO_SWITCH
> > +   static int zero_fd = -1;
> > diff --git 
> > a/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c 
> > b/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c
> > new file mode 100644
> > index 000..472cc8637e0
> > --- /dev/null
> > +++ b/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c
> > @@ -0,0 +1,31 @@
> > +$OpenBSD$
> > +
> > +Index: external/boringssl/crypto/cpu-aarch64-linux.c
> > +--- external/boringssl/crypto/cpu-aarch64-linux.c.orig
> > 

Re: lang/mono for arm64

2021-04-09 Thread Robert Nagy
Hi

I am okay with this and i do not see why it cannot make release.

On 09/04/21 17:15 +0200, Patrick Wildt wrote:
> Hi,
> 
> to do some release tests with iked we wanted to play^Wtest games/openra
> over IPsec.  Turns out that arm64 does not support lang/mono, but I have
> gotten it to run.  With the following diff, games/openra builds and I
> can even play it.
> 
> This doesn't need to make release, so no worries.  Would be nice for
> others, but I myself run -current anyway.
> 
> The arch-defines.mk enables all mono-related packages.  In gcconfig.h
> OPENBSD needs to be checked so make sure in case it's AArch64, it
> doesn't define NOSYS.  Additionally apparently one has to check for
> OPENBSD and __aarch64__ to define the mach type.  Then there's another
> AARCH64 block where OS-related stuff has to be defined.  I simply used
> the AMD64 block, but skipping ELFCLASS.  In boringssl we need to have
> the 'find aarch64 crypto accel' code as well.  We don't have a nice API
> yet to extract info, so let's for now only use NEON, which we require
> on AArch64.  As far as I can see, ucontext is sigcontext, so I provide
> the same defines as FreeBSD but with sigcontext context.
> 
> I can try to get the diffs upstreamed.
> 
> Patrick
> 
> diff --git a/infrastructure/mk/arch-defines.mk 
> b/infrastructure/mk/arch-defines.mk
> index 228c3991f50..965949a964b 100644
> --- a/infrastructure/mk/arch-defines.mk
> +++ b/infrastructure/mk/arch-defines.mk
> @@ -21,7 +21,7 @@ LP64_ARCHS = aarch64 alpha amd64 mips64 mips64el powerpc64 
> sparc64
>  GCC4_ARCHS = alpha hppa sh sparc64
>  GCC3_ARCHS = m88k
>  # XXX easier for ports that depend on mono
> -MONO_ARCHS = amd64 i386
> +MONO_ARCHS = amd64 i386 aarch64
>  OCAML_NATIVE_ARCHS = i386 amd64
>  OCAML_NATIVE_DYNLINK_ARCHS = i386 amd64
>  GO_ARCHS = aarch64 amd64 arm arm64 armv7 i386
> diff --git 
> a/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h 
> b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h
> new file mode 100644
> index 000..e2d766861a7
> --- /dev/null
> +++ b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h
> @@ -0,0 +1,51 @@
> +$OpenBSD$
> +
> +Index: external/bdwgc/include/private/gcconfig.h
> +--- external/bdwgc/include/private/gcconfig.h.orig
>  external/bdwgc/include/private/gcconfig.h
> +@@ -155,7 +155,7 @@ EXTERN_C_BEGIN
> + # if defined(__aarch64__)
> + #define AARCH64
> + #if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
> +-&& !defined(NN_BUILD_TARGET_PLATFORM_NX)
> ++&& !defined(OPENBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX)
> + #  define NOSYS
> + #  define mach_type_known
> + #endif
> +@@ -348,6 +348,10 @@ EXTERN_C_BEGIN
> + #define X86_64
> + #define mach_type_known
> + # endif
> ++# if defined(OPENBSD) && defined(__aarch64__)
> ++#   define AARCH64
> ++#   define mach_type_known
> ++# endif
> + # if defined(LINUX) && (defined(i386) || defined(__i386__))
> + #define I386
> + #define mach_type_known
> +@@ -2298,6 +2302,25 @@ EXTERN_C_BEGIN
> +   extern char etext[];
> + # define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext)
> + # define DATASTART_USES_BSDGETDATASTART
> ++#   endif
> ++#   ifdef OPENBSD
> ++# define OS_TYPE "OPENBSD"
> ++# ifndef GC_OPENBSD_THREADS
> ++EXTERN_C_END
> ++#   include 
> ++#   include 
> ++EXTERN_C_BEGIN
> ++#   ifdef USRSTACK
> ++# define STACKBOTTOM ((ptr_t)USRSTACK)
> ++#   else
> ++# define HEURISTIC2
> ++#   endif
> ++# endif
> ++  extern int __data_start[];
> ++  extern int _end[];
> ++# define DATASTART ((ptr_t)__data_start)
> ++# define DATAEND ((ptr_t)(&_end))
> ++# define DYNAMIC_LOADING
> + #   endif
> + #   ifdef NINTENDO_SWITCH
> +   static int zero_fd = -1;
> diff --git 
> a/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c 
> b/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c
> new file mode 100644
> index 000..472cc8637e0
> --- /dev/null
> +++ b/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c
> @@ -0,0 +1,31 @@
> +$OpenBSD$
> +
> +Index: external/boringssl/crypto/cpu-aarch64-linux.c
> +--- external/boringssl/crypto/cpu-aarch64-linux.c.orig
>  external/boringssl/crypto/cpu-aarch64-linux.c
> +@@ -16,7 +16,9 @@
> + 
> + #if defined(OPENSSL_AARCH64) && !defined(OPENSSL_STATIC_ARMCAP)
> + 
> ++#if !defined(__OpenBSD__)
> + #include 
> ++#endif
> + 
> + #include 
> + 
> +@@ -63,6 +65,15 @@ void OPENSSL_cpuid_setup(void) {
> +   if (ID_AA64ISAR0_SHA2_VAL(isar0_val) >= ID_AA64ISAR0_SHA2_BASE) {
> + OPENSSL_armcap_P |= ARMV8_SHA256;
> +   }
> ++}
> ++
> ++#elif defined(__OpenBSD__)
> ++
> ++#include 
> ++#include 
> ++
> ++void OPENSSL_cpuid_setup(void) {
> ++  OPENSSL_armcap_P |= ARMV7_NEON;
> + }
> + 
> + #else // linux
> diff --git a/lang/mono/patches/patch-mono_utils_mono-sigcontext_h 
>