diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 51e8384413750f..75cd881e2c7012 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -285,7 +285,13 @@ if (CLR_CMAKE_HOST_UNIX) clr_unknown_arch() endif() elseif(CLR_CMAKE_HOST_FREEBSD) - message("Detected FreeBSD amd64") + if(CLR_CMAKE_HOST_UNIX_ARM64) + message("Detected FreeBSD aarch64") + elseif(CLR_CMAKE_HOST_UNIX_AMD64) + message("Detected FreeBSD amd64") + else() + message(FATAL_ERROR "Unsupported FreeBSD architecture") + endif() elseif(CLR_CMAKE_HOST_NETBSD) message("Detected NetBSD amd64") elseif(CLR_CMAKE_HOST_SUNOS) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index c849c592174af3..bd1e36a0b08633 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -162,7 +162,13 @@ endif(CLR_CMAKE_HOST_OS STREQUAL Android) if(CLR_CMAKE_HOST_OS STREQUAL FreeBSD) set(CLR_CMAKE_HOST_UNIX 1) - set(CLR_CMAKE_HOST_UNIX_AMD64 1) + if (CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + set(CLR_CMAKE_HOST_UNIX_AMD64 1) + elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm64) + set(CLR_CMAKE_HOST_UNIX_ARM64 1) + else() + clr_unknown_arch() + endif() set(CLR_CMAKE_HOST_FREEBSD 1) endif(CLR_CMAKE_HOST_OS STREQUAL FreeBSD) diff --git a/src/coreclr/crossgen-corelib.proj b/src/coreclr/crossgen-corelib.proj index 804e8c0c21fe76..02ff1c2594a0ee 100644 --- a/src/coreclr/crossgen-corelib.proj +++ b/src/coreclr/crossgen-corelib.proj @@ -84,6 +84,7 @@ $(CrossGenDllCmd) -o:$(CoreLibOutputPath) $(CrossGenDllCmd) -r:$([MSBuild]::NormalizePath('$(BinDir)', 'IL', '*.dll')) $(CrossGenDllCmd) --targetarch:$(TargetArchitecture) + $(CrossGenDllCmd) --targetos:$(TargetOS) $(CrossGenDllCmd) -m:$(MergedMibcPath) --embed-pgo-data $(CrossGenDllCmd) -O $(CrossGenDllCmd) --verify-type-and-field-layout diff --git a/src/coreclr/inc/crosscomp.h b/src/coreclr/inc/crosscomp.h index 4be28673efd38a..7353e8cc6b770d 100644 --- a/src/coreclr/inc/crosscomp.h +++ b/src/coreclr/inc/crosscomp.h @@ -551,6 +551,8 @@ typedef struct _T_KNONVOLATILE_CONTEXT_POINTERS { #define DAC_CS_NATIVE_DATA_SIZE 12 #elif defined(TARGET_FREEBSD) && defined(TARGET_AMD64) #define DAC_CS_NATIVE_DATA_SIZE 24 +#elif defined(TARGET_FREEBSD) && defined(TARGET_ARM64) +#define DAC_CS_NATIVE_DATA_SIZE 24 #elif defined(TARGET_LINUX) && defined(TARGET_ARM) #define DAC_CS_NATIVE_DATA_SIZE 80 #elif defined(TARGET_LINUX) && defined(TARGET_ARM64) diff --git a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets index a44c06a0433e3b..135743c7b6d678 100755 --- a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets +++ b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets @@ -214,6 +214,7 @@ The .NET Foundation licenses this file to you under the MIT license. + diff --git a/src/coreclr/pal/inc/pal.h b/src/coreclr/pal/inc/pal.h index e1c48f78f6452f..6ba4499f844ad1 100644 --- a/src/coreclr/pal/inc/pal.h +++ b/src/coreclr/pal/inc/pal.h @@ -2619,6 +2619,8 @@ PALIMPORT BOOL PALAPI PAL_GetUnwindInfoSize(SIZE_T baseAddress, ULONG64 ehFrameH #define PAL_CS_NATIVE_DATA_SIZE 12 #elif defined(__FreeBSD__) && defined(__x86_64__) #define PAL_CS_NATIVE_DATA_SIZE 24 +#elif defined(__FreeBSD__) && defined(HOST_ARM64) +#define PAL_CS_NATIVE_DATA_SIZE 24 #elif defined(__linux__) && defined(HOST_ARM) #define PAL_CS_NATIVE_DATA_SIZE 80 #elif defined(__linux__) && defined(HOST_ARM64) diff --git a/src/coreclr/pal/src/configure.cmake b/src/coreclr/pal/src/configure.cmake index 4f900a5555ef63..84d1a9015d9c1f 100644 --- a/src/coreclr/pal/src/configure.cmake +++ b/src/coreclr/pal/src/configure.cmake @@ -1340,7 +1340,13 @@ elseif(CLR_CMAKE_TARGET_FREEBSD) set(PAL_PT_READ_D PT_READ_D) set(PAL_PT_WRITE_D PT_WRITE_D) set(HAS_FTRUNCATE_LENGTH_ISSUE 0) - set(BSD_REGS_STYLE "((reg).r_##rr)") + if (CLR_CMAKE_HOST_ARCH_AMD64) + set(BSD_REGS_STYLE "((reg).r_##rr)") + elseif(CLR_CMAKE_HOST_ARCH_ARM64) + set(BSD_REGS_STYLE "((reg).rr)") + else() + message(FATAL_ERROR "Unknown FreeBSD architecture") + endif() set(HAVE_SCHED_OTHER_ASSIGNABLE 1) elseif(CLR_CMAKE_TARGET_NETBSD) set(DEADLOCK_WHEN_THREAD_IS_SUSPENDED_WHILE_BLOCKED_ON_MUTEX 0) diff --git a/src/coreclr/pal/src/exception/seh-unwind.cpp b/src/coreclr/pal/src/exception/seh-unwind.cpp index e94922cea04512..b3a4ca23726bb2 100644 --- a/src/coreclr/pal/src/exception/seh-unwind.cpp +++ b/src/coreclr/pal/src/exception/seh-unwind.cpp @@ -198,6 +198,42 @@ enum ASSIGN_REG(R29) \ ASSIGN_REG(R30) \ ASSIGN_REG(R31) +#elif (defined(HOST_ARM64) && defined(TARGET_FREEBSD)) +#define ASSIGN_UNWIND_REGS \ + ASSIGN_REG(X0) \ + ASSIGN_REG(X1) \ + ASSIGN_REG(X2) \ + ASSIGN_REG(X3) \ + ASSIGN_REG(X4) \ + ASSIGN_REG(X5) \ + ASSIGN_REG(X6) \ + ASSIGN_REG(X7) \ + ASSIGN_REG(X8) \ + ASSIGN_REG(X9) \ + ASSIGN_REG(X10) \ + ASSIGN_REG(X11) \ + ASSIGN_REG(X12) \ + ASSIGN_REG(X13) \ + ASSIGN_REG(X14) \ + ASSIGN_REG(X15) \ + ASSIGN_REG(X16) \ + ASSIGN_REG(X17) \ + ASSIGN_REG(X18) \ + ASSIGN_REG(X19) \ + ASSIGN_REG(X20) \ + ASSIGN_REG(X21) \ + ASSIGN_REG(X22) \ + ASSIGN_REG(X23) \ + ASSIGN_REG(X24) \ + ASSIGN_REG(X25) \ + ASSIGN_REG(X26) \ + ASSIGN_REG(X27) \ + ASSIGN_REG(X28) \ + ASSIGN_REG(Lr) \ + ASSIGN_REG(Sp) \ + ASSIGN_REG(Pc) \ + ASSIGN_REG(Fp) \ + ASSIGN_REG(Cpsr) #else #error unsupported architecture #endif diff --git a/src/coreclr/pal/src/include/pal/context.h b/src/coreclr/pal/src/include/pal/context.h index 8f9f99ea2cffb7..c702ae272a76bd 100644 --- a/src/coreclr/pal/src/include/pal/context.h +++ b/src/coreclr/pal/src/include/pal/context.h @@ -448,7 +448,57 @@ inline void *FPREG_Xstate_Ymmh(const ucontext_t *uc) #if defined(HOST_ARM64) -#ifndef TARGET_OSX +#if defined(TARGET_FREEBSD) + +#define MCREG_X0(mc) (mc.mc_gpregs.gp_x[0]) +#define MCREG_X1(mc) (mc.mc_gpregs.gp_x[1]) +#define MCREG_X2(mc) (mc.mc_gpregs.gp_x[2]) +#define MCREG_X3(mc) (mc.mc_gpregs.gp_x[3]) +#define MCREG_X4(mc) (mc.mc_gpregs.gp_x[4]) +#define MCREG_X5(mc) (mc.mc_gpregs.gp_x[5]) +#define MCREG_X6(mc) (mc.mc_gpregs.gp_x[6]) +#define MCREG_X7(mc) (mc.mc_gpregs.gp_x[7]) +#define MCREG_X8(mc) (mc.mc_gpregs.gp_x[8]) +#define MCREG_X9(mc) (mc.mc_gpregs.gp_x[9]) +#define MCREG_X10(mc) (mc.mc_gpregs.gp_x[10]) +#define MCREG_X11(mc) (mc.mc_gpregs.gp_x[11]) +#define MCREG_X12(mc) (mc.mc_gpregs.gp_x[12]) +#define MCREG_X13(mc) (mc.mc_gpregs.gp_x[13]) +#define MCREG_X14(mc) (mc.mc_gpregs.gp_x[14]) +#define MCREG_X15(mc) (mc.mc_gpregs.gp_x[15]) +#define MCREG_X16(mc) (mc.mc_gpregs.gp_x[16]) +#define MCREG_X17(mc) (mc.mc_gpregs.gp_x[17]) +#define MCREG_X18(mc) (mc.mc_gpregs.gp_x[18]) +#define MCREG_X19(mc) (mc.mc_gpregs.gp_x[19]) +#define MCREG_X20(mc) (mc.mc_gpregs.gp_x[20]) +#define MCREG_X21(mc) (mc.mc_gpregs.gp_x[21]) +#define MCREG_X22(mc) (mc.mc_gpregs.gp_x[22]) +#define MCREG_X23(mc) (mc.mc_gpregs.gp_x[23]) +#define MCREG_X24(mc) (mc.mc_gpregs.gp_x[24]) +#define MCREG_X25(mc) (mc.mc_gpregs.gp_x[25]) +#define MCREG_X26(mc) (mc.mc_gpregs.gp_x[26]) +#define MCREG_X27(mc) (mc.mc_gpregs.gp_x[27]) +#define MCREG_X28(mc) (mc.mc_gpregs.gp_x[28]) + +#define MCREG_Cpsr(mc) (mc.mc_gpregs.gp_spsr) +#define MCREG_Lr(mc) (mc.mc_gpregs.gp_lr) +#define MCREG_Sp(mc) (mc.mc_gpregs.gp_sp) +#define MCREG_Pc(mc) (mc.mc_gpregs.gp_elr) +#define MCREG_Fp(mc) (mc.mc_gpregs.gp_x[29]) + +inline +struct fpregs* GetNativeSigSimdContext(native_context_t *mc) +{ + return &(mc->uc_mcontext.mc_fpregs); +} + +inline +const struct fpregs* GetConstNativeSigSimdContext(const native_context_t *mc) +{ + return GetNativeSigSimdContext(const_cast(mc)); +} + +#elif !defined(TARGET_OSX) // TARGET_FREEBSD #define MCREG_X0(mc) ((mc).regs[0]) #define MCREG_X1(mc) ((mc).regs[1]) @@ -957,6 +1007,8 @@ const VfpSigFrame* GetConstNativeSigSimdContext(const native_context_t *mc) #ifdef HOST_64BIT +#ifdef HOST_AMD64 + #define BSDREG_Rbx(reg) BSD_REGS_STYLE(reg,RBX,rbx) #define BSDREG_Rcx(reg) BSD_REGS_STYLE(reg,RCX,rcx) #define BSDREG_Rdx(reg) BSD_REGS_STYLE(reg,RDX,rdx) @@ -978,6 +1030,45 @@ const VfpSigFrame* GetConstNativeSigSimdContext(const native_context_t *mc) #define BSDREG_R15(reg) BSD_REGS_STYLE(reg,R15,r15) #define BSDREG_EFlags(reg) BSD_REGS_STYLE(reg,RFLAGS,rflags) +#elif defined(HOST_ARM64) + +#define BSDREG_X0(reg) BSD_REGS_STYLE(reg,X[0],x[0]) +#define BSDREG_X1(reg) BSD_REGS_STYLE(reg,X[1],x[1]) +#define BSDREG_X2(reg) BSD_REGS_STYLE(reg,X[2],x[2]) +#define BSDREG_X3(reg) BSD_REGS_STYLE(reg,X[3],x[3]) +#define BSDREG_X4(reg) BSD_REGS_STYLE(reg,X[4],x[4]) +#define BSDREG_X5(reg) BSD_REGS_STYLE(reg,X[5],x[5]) +#define BSDREG_X6(reg) BSD_REGS_STYLE(reg,X[6],x[6]) +#define BSDREG_X7(reg) BSD_REGS_STYLE(reg,X[7],x[7]) +#define BSDREG_X8(reg) BSD_REGS_STYLE(reg,X[8],x[8]) +#define BSDREG_X9(reg) BSD_REGS_STYLE(reg,X[9],x[9]) +#define BSDREG_X10(reg) BSD_REGS_STYLE(reg,X[10],x[10]) +#define BSDREG_X11(reg) BSD_REGS_STYLE(reg,X[11],x[11]) +#define BSDREG_X12(reg) BSD_REGS_STYLE(reg,X[12],x[12]) +#define BSDREG_X13(reg) BSD_REGS_STYLE(reg,X[13],x[13]) +#define BSDREG_X14(reg) BSD_REGS_STYLE(reg,X[14],x[14]) +#define BSDREG_X15(reg) BSD_REGS_STYLE(reg,X[15],x[15]) +#define BSDREG_X16(reg) BSD_REGS_STYLE(reg,X[16],x[16]) +#define BSDREG_X17(reg) BSD_REGS_STYLE(reg,X[17],x[17]) +#define BSDREG_X18(reg) BSD_REGS_STYLE(reg,X[18],x[18]) +#define BSDREG_X19(reg) BSD_REGS_STYLE(reg,X[19],x[19]) +#define BSDREG_X20(reg) BSD_REGS_STYLE(reg,X[20],x[20]) +#define BSDREG_X21(reg) BSD_REGS_STYLE(reg,X[21],x[21]) +#define BSDREG_X22(reg) BSD_REGS_STYLE(reg,X[22],x[22]) +#define BSDREG_X23(reg) BSD_REGS_STYLE(reg,X[23],x[23]) +#define BSDREG_X24(reg) BSD_REGS_STYLE(reg,X[24],x[24]) +#define BSDREG_X25(reg) BSD_REGS_STYLE(reg,X[25],x[25]) +#define BSDREG_X26(reg) BSD_REGS_STYLE(reg,X[26],x[26]) +#define BSDREG_X27(reg) BSD_REGS_STYLE(reg,X[27],x[27]) +#define BSDREG_X28(reg) BSD_REGS_STYLE(reg,X[28],x[28]) +#define BSDREG_Pc(reg) BSD_REGS_STYLE(reg,Elr,elr) +#define BSDREG_Fp(reg) BSD_REGS_STYLE(reg,X[29],x[29]) +#define BSDREG_Sp(reg) BSD_REGS_STYLE(reg,Sp,sp) +#define BSDREG_Lr(reg) BSD_REGS_STYLE(reg,Lr,lr) +#define BSDREG_Cpsr(reg) BSD_REGS_STYLE(reg,Spsr,spsr) + +#endif // HOST_ARM64 + #else // HOST_64BIT #define BSDREG_Ebx(reg) BSD_REGS_STYLE(reg,EBX,ebx) diff --git a/src/coreclr/pal/src/thread/context.cpp b/src/coreclr/pal/src/thread/context.cpp index 3b40d75eb2645a..a17c6c077da3b7 100644 --- a/src/coreclr/pal/src/thread/context.cpp +++ b/src/coreclr/pal/src/thread/context.cpp @@ -626,6 +626,17 @@ void CONTEXTToNativeContext(CONST CONTEXT *lpContext, native_context_t *native) { *(NEON128*) &fp->__v[i] = lpContext->V[i]; } +#elif defined(TARGET_FREEBSD) + struct fpregs* fp = GetNativeSigSimdContext(native); + if (fp) + { + fp->fp_sr = lpContext->Fpsr; + fp->fp_cr = lpContext->Fpcr; + for (int i = 0; i < 32; i++) + { + *(NEON128*) &fp->fp_q[i] = lpContext->V[i]; + } + } #else // TARGET_OSX fpsimd_context* fp = GetNativeSigSimdContext(native); if (fp) @@ -777,6 +788,17 @@ void CONTEXTFromNativeContext(const native_context_t *native, LPCONTEXT lpContex { lpContext->V[i] = *(NEON128*) &fp->__v[i]; } +#elif defined(TARGET_FREEBSD) + const struct fpregs* fp = GetConstNativeSigSimdContext(native); + if (fp) + { + lpContext->Fpsr = fp->fp_sr; + lpContext->Fpcr = fp->fp_cr; + for (int i = 0; i < 32; i++) + { + lpContext->V[i] = *(NEON128*) &fp->fp_q[i]; + } + } #else // TARGET_OSX const fpsimd_context* fp = GetConstNativeSigSimdContext(native); if (fp) diff --git a/src/coreclr/pal/tools/gen-dactable-rva.sh b/src/coreclr/pal/tools/gen-dactable-rva.sh index 0f3ce0a0866a7e..4f2828b2f400a7 100755 --- a/src/coreclr/pal/tools/gen-dactable-rva.sh +++ b/src/coreclr/pal/tools/gen-dactable-rva.sh @@ -10,12 +10,11 @@ fi while read -r line; do if [[ "$line" =~ g_dacTable ]]; then - # Parse line for DAC relative address, if length of value is: - # * shorter than 16, zero pad. - # * longer than 16, capture last 16 characters. + # Parse line for DAC relative address. If length of value is longer than 16, + # capture the last 16 characters. # array=($line) - value="$(printf "%016s\n" ${array[2]:(${#array[2]} > 16 ? -16 : 0)})" + value="$(printf "%s\n" ${array[2]:(${#array[2]} > 16 ? -16 : 0)})" # Write line to file and exit printf "#define DAC_TABLE_RVA 0x%s\n" "$value" > "$2" diff --git a/src/coreclr/tools/Common/CommandLineHelpers.cs b/src/coreclr/tools/Common/CommandLineHelpers.cs index 03b20597bb39c4..0dd98b220c2524 100644 --- a/src/coreclr/tools/Common/CommandLineHelpers.cs +++ b/src/coreclr/tools/Common/CommandLineHelpers.cs @@ -76,6 +76,8 @@ public static TargetOS GetTargetOS(string token) return TargetOS.Linux; else if (token.Equals("osx", StringComparison.OrdinalIgnoreCase)) return TargetOS.OSX; + else if (token.Equals("freebsd", StringComparison.OrdinalIgnoreCase)) + return TargetOS.FreeBSD; throw new CommandLineException($"Target OS '{token}' is not supported"); } diff --git a/src/coreclr/tools/aot/crossgen2/crossgen2.csproj b/src/coreclr/tools/aot/crossgen2/crossgen2.csproj index 8fd6160484e434..a75fab86c93aaa 100644 --- a/src/coreclr/tools/aot/crossgen2/crossgen2.csproj +++ b/src/coreclr/tools/aot/crossgen2/crossgen2.csproj @@ -8,7 +8,7 @@ false true - linux-x64;linux-musl-x64;linux-arm;linux-musl-arm;linux-arm64;linux-musl-arm64;freebsd-x64;osx-x64;osx-arm64;win-x64;win-x86;win-arm64;win-arm + linux-x64;linux-musl-x64;linux-arm;linux-musl-arm;linux-arm64;linux-musl-arm64;freebsd-x64;freebsd-arm64;osx-x64;osx-arm64;win-x64;win-x86;win-arm64;win-arm $(PackageRID) false true diff --git a/src/installer/pkg/projects/netcoreappRIDs.props b/src/installer/pkg/projects/netcoreappRIDs.props index 318e97e9b2ac9d..fbc6e4dc4c1a98 100644 --- a/src/installer/pkg/projects/netcoreappRIDs.props +++ b/src/installer/pkg/projects/netcoreappRIDs.props @@ -10,7 +10,6 @@ arm64 - @@ -53,6 +52,7 @@ built during official builds, however we wish to include them in our runtime.json to enable others to provide them. --> + armel diff --git a/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Crossgen2.sfxproj b/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Crossgen2.sfxproj index fe32e81ec46440..7ea5e438f02edc 100644 --- a/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Crossgen2.sfxproj +++ b/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Crossgen2.sfxproj @@ -3,8 +3,8 @@ - - true + + true ToolPack $(SharedFrameworkName).Crossgen2 .PGO @@ -12,7 +12,7 @@ dotnet-crossgen2 crossgen2 - linux-x64;linux-musl-x64;linux-arm;linux-musl-arm;linux-arm64;linux-musl-arm64;freebsd-x64;osx-x64;osx-arm64;win-x64;win-x86;win-arm64;win-arm + linux-x64;linux-musl-x64;linux-arm;linux-musl-arm;linux-arm64;linux-musl-arm64;freebsd-x64;freebsd-arm64;osx-x64;osx-arm64;win-x64;win-x86;win-arm64;win-arm false tools/ true diff --git a/src/installer/pkg/sfx/Microsoft.NETCore.App/ReadyToRun.targets b/src/installer/pkg/sfx/Microsoft.NETCore.App/ReadyToRun.targets index 4e3f684dedc20a..d29f12364fe24e 100644 --- a/src/installer/pkg/sfx/Microsoft.NETCore.App/ReadyToRun.targets +++ b/src/installer/pkg/sfx/Microsoft.NETCore.App/ReadyToRun.targets @@ -5,7 +5,7 @@ - + diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json index a1b755d470d6bd..926d654022362d 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json +++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json @@ -4887,6 +4887,14 @@ "any", "base" ], + "freebsd-arm64": [ + "freebsd-arm64", + "freebsd", + "unix-arm64", + "unix", + "any", + "base" + ], "freebsd.12": [ "freebsd.12", "freebsd", @@ -4904,6 +4912,16 @@ "any", "base" ], + "freebsd.12-arm64": [ + "freebsd.12-arm64", + "freebsd.12", + "freebsd-arm64", + "freebsd", + "unix-arm64", + "unix", + "any", + "base" + ], "freebsd.13": [ "freebsd.13", "freebsd.12", @@ -4924,6 +4942,18 @@ "any", "base" ], + "freebsd.13-arm64": [ + "freebsd.13-arm64", + "freebsd.13", + "freebsd.12-arm64", + "freebsd.12", + "freebsd-arm64", + "freebsd", + "unix-arm64", + "unix", + "any", + "base" + ], "gentoo": [ "gentoo", "linux", diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json index 928498570017e9..eb865ee6422dee 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json +++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json @@ -1588,6 +1588,12 @@ "unix-x64" ] }, + "freebsd-arm64": { + "#import": [ + "freebsd", + "unix-arm64" + ] + }, "freebsd.12": { "#import": [ "freebsd" @@ -1599,6 +1605,12 @@ "freebsd-x64" ] }, + "freebsd.12-arm64": { + "#import": [ + "freebsd.12", + "freebsd-arm64" + ] + }, "freebsd.13": { "#import": [ "freebsd.12" @@ -1610,6 +1622,12 @@ "freebsd.12-x64" ] }, + "freebsd.13-arm64": { + "#import": [ + "freebsd.13", + "freebsd.12-arm64" + ] + }, "gentoo": { "#import": [ "linux" diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props index 912fe7693c4388..08327c9c112c81 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props +++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props @@ -183,7 +183,7 @@ unix - x64 + x64;arm64 12;13 diff --git a/src/mono/cmake/configure.cmake b/src/mono/cmake/configure.cmake index ae55fd112b321e..56c99cb9d7eb0d 100644 --- a/src/mono/cmake/configure.cmake +++ b/src/mono/cmake/configure.cmake @@ -143,6 +143,8 @@ if (HOST_LINUX) set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) endif() +check_symbol_exists(CPU_COUNT "sched.h" HAVE_GNU_CPU_COUNT) + check_c_source_compiles( " #include @@ -155,17 +157,6 @@ check_c_source_compiles( " HAVE_GNU_STRERROR_R) -check_c_source_compiles( - " - #include - int main(void) - { - CPU_COUNT((void *) 0); - return 0; - } - " - HAVE_GNU_CPU_COUNT) - if (HOST_LINUX OR HOST_ANDROID) set(CMAKE_REQUIRED_DEFINITIONS) endif() diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 37d96487b49617..99ecf3d178ba85 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -282,11 +282,18 @@ - + <_MonoCMakeArgs Include="-DCMAKE_TOOLCHAIN_FILE=$(CrossToolchainFile)" /> <_MonoBuildEnv Include="TARGET_BUILD_ARCH=x64" /> + + + <_MonoCMakeArgs Include="-DCMAKE_TOOLCHAIN_FILE=$(CrossToolchainFile)" /> + <_MonoBuildEnv Include="TARGET_BUILD_ARCH=arm64" /> + <_MonoBuildEnv Include="PKG_CONFIG_PATH=$(MonoCrossDir)usr/local/libdata/pkgconfig" /> + + <_MonoCPPFLAGS Include="-DWIN32" /> diff --git a/src/tests/Common/CLRTest.CrossGen.targets b/src/tests/Common/CLRTest.CrossGen.targets index 88906521cc936e..804698285661b3 100644 --- a/src/tests/Common/CLRTest.CrossGen.targets +++ b/src/tests/Common/CLRTest.CrossGen.targets @@ -111,6 +111,7 @@ if [ ! -z ${RunCrossGen2+x} ]%3B then echo --embed-pgo-data>>$__ResponseFile fi echo --targetarch:$(TargetArchitecture)>>$__ResponseFile + echo --targetos:$(TargetOS)>>$__ResponseFile echo -O>>$__ResponseFile echo "Response file: $__ResponseFile" @@ -251,6 +252,7 @@ if defined RunCrossGen2 ( echo !__InputFile!>>!__ResponseFile! echo -o:!__OutputFile!>>!__ResponseFile! echo --targetarch:$(TargetArchitecture)>>!__ResponseFile! + echo --targetos:$(TargetOS)>>!__ResponseFile! echo --verify-type-and-field-layout>>!__ResponseFile! echo --method-layout:random>>!__ResponseFile! if defined CrossGen2SynthesizePgo ( diff --git a/src/tests/readytorun/multifolder/multifolder.csproj b/src/tests/readytorun/multifolder/multifolder.csproj index d621dbd8d17fa2..8a2be6fc1eaa11 100644 --- a/src/tests/readytorun/multifolder/multifolder.csproj +++ b/src/tests/readytorun/multifolder/multifolder.csproj @@ -35,6 +35,7 @@ $(CLRTestBatchPreCommands) echo -o:%scriptPath%\multifolder-composite.dll>>%__ResponseFile% echo --crp:%scriptPath%\..>>%__ResponseFile% echo --targetarch:$(TargetArchitecture)>>%__ResponseFile% + echo --targetos:$(TargetOS)>>%__ResponseFile% echo %scriptPath%\multifolder.dll>>%__ResponseFile% echo %scriptPath%\..\FolderA\FolderA\FolderA.dll>>%__ResponseFile% echo %scriptPath%\..\FolderB\FolderB\FolderB.dll>>%__ResponseFile% @@ -87,6 +88,7 @@ $(CLRTestBashPreCommands) echo -o:$__OutputDir/multifolder-composite.dll>>$__ResponseFile echo --crp:$__OutputDir/..>>$__ResponseFile echo --targetarch:$(TargetArchitecture)>>$__ResponseFile + echo --targetos:$(TargetOS)>>$__ResponseFile echo $__OutputDir/multifolder.dll>>$__ResponseFile echo $__OutputDir/../FolderA/FolderA/FolderA.dll>>$__ResponseFile echo $__OutputDir/../FolderB/FolderB/FolderB.dll>>$__ResponseFile