diff --git a/Directory.Build.props b/Directory.Build.props
index e9e6fc4e36234..d862ee091fe81 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -29,6 +29,7 @@
<_hostArch>$([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString().ToLowerInvariant)
$(_hostArch)
arm
+ armv6
armel
arm64
loongarch64
diff --git a/eng/Subsets.props b/eng/Subsets.props
index 5ce5417445136..fbe6f9712686e 100644
--- a/eng/Subsets.props
+++ b/eng/Subsets.props
@@ -27,7 +27,7 @@
flavor is used to decide when to build the hosts and installers. -->
CoreCLR
- Mono
+ Mono
diff --git a/eng/build.sh b/eng/build.sh
index ea8e3089e95f4..167f8e2014182 100755
--- a/eng/build.sh
+++ b/eng/build.sh
@@ -17,7 +17,7 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
usage()
{
echo "Common settings:"
- echo " --arch (-a) Target platform: x86, x64, arm, armel, arm64, loongarch64, s390x or wasm."
+ echo " --arch (-a) Target platform: x86, x64, arm, armv6, armel, arm64, loongarch64, s390x or wasm."
echo " [Default: Your machine's architecture.]"
echo " --binaryLog (-bl) Output binary log."
echo " --cross Optional argument to signify cross compilation."
@@ -206,12 +206,12 @@ while [[ $# > 0 ]]; do
fi
passedArch="$(echo "$2" | tr "[:upper:]" "[:lower:]")"
case "$passedArch" in
- x64|x86|arm|armel|arm64|loongarch64|s390x|wasm)
+ x64|x86|arm|armv6|armel|arm64|loongarch64|s390x|wasm)
arch=$passedArch
;;
*)
echo "Unsupported target architecture '$2'."
- echo "The allowed values are x86, x64, arm, armel, arm64, loongarch64, s390x, and wasm."
+ echo "The allowed values are x86, x64, arm, armv6, armel, arm64, loongarch64, s390x, and wasm."
exit 1
;;
esac
diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh
index 373091b13a001..294e9832ad310 100755
--- a/eng/native/build-commons.sh
+++ b/eng/native/build-commons.sh
@@ -197,7 +197,7 @@ usage()
echo ""
echo "Common Options:"
echo ""
- echo "BuildArch can be: -arm, -armel, -arm64, -loongarch64, -s390x, x64, x86, -wasm"
+ echo "BuildArch can be: -arm, -armv6, -armel, -arm64, -loongarch64, -s390x, x64, x86, -wasm"
echo "BuildType can be: -debug, -checked, -release"
echo "-os: target OS (defaults to running OS)"
echo "-bindir: output directory (defaults to $__ProjectRoot/artifacts)"
@@ -270,6 +270,10 @@ while :; do
__BuildArch=arm
;;
+ armv6|-armv6)
+ __BuildArch=armv6
+ ;;
+
arm64|-arm64)
__BuildArch=arm64
;;
diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake
index fad1ac58d39c8..b67594cb60fb2 100644
--- a/eng/native/configurecompiler.cmake
+++ b/eng/native/configurecompiler.cmake
@@ -213,6 +213,9 @@ elseif (CLR_CMAKE_HOST_ARCH_I386)
elseif (CLR_CMAKE_HOST_ARCH_ARM)
set(ARCH_HOST_NAME arm)
add_definitions(-DHOST_ARM)
+elseif (CLR_CMAKE_HOST_ARCH_ARMV6)
+ set(ARCH_HOST_NAME armv6)
+ add_definitions(-DHOST_ARMV6)
elseif (CLR_CMAKE_HOST_ARCH_ARM64)
set(ARCH_HOST_NAME arm64)
add_definitions(-DHOST_ARM64 -DHOST_64BIT)
@@ -238,6 +241,8 @@ if (CLR_CMAKE_HOST_UNIX)
message("Detected Linux x86_64")
elseif(CLR_CMAKE_HOST_UNIX_ARM)
message("Detected Linux ARM")
+ elseif(CLR_CMAKE_HOST_UNIX_ARMV6)
+ message("Detected Linux ARMv6")
elseif(CLR_CMAKE_HOST_UNIX_ARM64)
message("Detected Linux ARM64")
elseif(CLR_CMAKE_HOST_UNIX_LOONGARCH64)
@@ -301,6 +306,12 @@ elseif (CLR_CMAKE_TARGET_ARCH_ARM)
set(ARCH_TARGET_NAME arm)
add_compile_definitions($<$>>:TARGET_ARM>)
add_compile_definitions($<$>>:TARGET_32BIT>)
+elseif (CLR_CMAKE_TARGET_ARCH_ARMV6)
+ set(ARCH_SOURCES_DIR arm)
+ set(ARCH_TARGET_NAME armv6)
+ add_compile_definitions($<$>>:TARGET_ARM>)
+ add_compile_definitions($<$>>:TARGET_ARMV6>)
+ add_compile_definitions($<$>>:TARGET_32BIT>)
elseif (CLR_CMAKE_TARGET_ARCH_I386)
set(ARCH_TARGET_NAME x86)
set(ARCH_SOURCES_DIR i386)
@@ -507,6 +518,14 @@ if(CLR_CMAKE_HOST_UNIX_ARM)
endif(ARM_SOFTFP)
endif(CLR_CMAKE_HOST_UNIX_ARM)
+if(CLR_CMAKE_HOST_UNIX_ARMV6)
+ add_compile_options(-mfpu=vfp)
+ add_definitions(-DCLR_ARM_FPU_CAPABILITY=0x0)
+ add_compile_options(-march=armv6zk)
+ add_compile_options(-mcpu=arm1176jzf-s)
+ add_compile_options(-mfloat-abi=hard)
+endif(CLR_CMAKE_HOST_UNIX_ARMV6)
+
if(CLR_CMAKE_HOST_UNIX_X86)
add_compile_options(-msse2)
endif()
diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake
index cdf33430b49f1..ecf10a8d4c39e 100644
--- a/eng/native/configureplatform.cmake
+++ b/eng/native/configureplatform.cmake
@@ -41,6 +41,8 @@ if(CLR_CMAKE_HOST_OS STREQUAL Linux)
set(CLR_CMAKE_HOST_UNIX_ARMV7L 1)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL arm OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv7-a)
set(CLR_CMAKE_HOST_UNIX_ARM 1)
+ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv6 OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv6l)
+ set(CLR_CMAKE_HOST_UNIX_ARMV6 1)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm64)
set(CLR_CMAKE_HOST_UNIX_ARM64 1)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL loongarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL loongarch64)
@@ -217,6 +219,13 @@ if(CLR_CMAKE_HOST_UNIX_ARM)
if(CLR_CMAKE_HOST_UNIX_ARMV7L)
set(CLR_CMAKE_HOST_ARCH_ARMV7L 1)
endif()
+elseif(CLR_CMAKE_HOST_UNIX_ARMV6)
+ set(CLR_CMAKE_HOST_ARCH_ARMV6 1)
+ set(CLR_CMAKE_HOST_ARCH "armv6")
+
+ if(CLR_CMAKE_HOST_UNIX_ARMV6L)
+ set(CLR_CMAKE_HOST_ARCH_ARMV6L 1)
+ endif()
elseif(CLR_CMAKE_HOST_UNIX_ARM64)
set(CLR_CMAKE_HOST_ARCH_ARM64 1)
set(CLR_CMAKE_HOST_ARCH "arm64")
@@ -277,6 +286,8 @@ if (CLR_CMAKE_TARGET_ARCH STREQUAL x64)
set(CLR_CMAKE_TARGET_ARCH_LOONGARCH64 1)
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm)
set(CLR_CMAKE_TARGET_ARCH_ARM 1)
+ elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armv6)
+ set(CLR_CMAKE_TARGET_ARCH_ARMV6 1)
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armel)
set(CLR_CMAKE_TARGET_ARCH_ARM 1)
set(CLR_CMAKE_TARGET_ARCH_ARMV7L 1)
@@ -379,6 +390,8 @@ if(CLR_CMAKE_TARGET_UNIX)
set(CLR_CMAKE_TARGET_UNIX_ARM 1)
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm)
set(CLR_CMAKE_TARGET_UNIX_ARM 1)
+ elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armv6)
+ set(CLR_CMAKE_TARGET_UNIX_ARMV6 1)
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm64)
set(CLR_CMAKE_TARGET_UNIX_ARM64 1)
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL loongarch64)
diff --git a/eng/native/configuretools.cmake b/eng/native/configuretools.cmake
index 136cd67925d0c..ad5dc38107c33 100644
--- a/eng/native/configuretools.cmake
+++ b/eng/native/configuretools.cmake
@@ -52,8 +52,8 @@ if(NOT WIN32 AND NOT CLR_CMAKE_TARGET_BROWSER)
if(CLR_CMAKE_TARGET_ANDROID)
set(TOOLSET_PREFIX ${ANDROID_TOOLCHAIN_PREFIX})
- elseif(CMAKE_CROSSCOMPILING AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD AND (CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l OR
- CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm OR CMAKE_SYSTEM_PROCESSOR STREQUAL s390x))
+ elseif(CMAKE_CROSSCOMPILING AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD AND
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7l|armv6l|aarch64|arm|s390x)$")
set(TOOLSET_PREFIX "${TOOLCHAIN}-")
else()
set(TOOLSET_PREFIX "")
diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake
index c4af68ba7dc61..0c28f75706de1 100644
--- a/eng/native/functions.cmake
+++ b/eng/native/functions.cmake
@@ -4,7 +4,7 @@ function(clr_unknown_arch)
elseif(CLR_CROSS_COMPONENTS_BUILD)
message(FATAL_ERROR "Only AMD64, I386 host are supported for linux cross-architecture component. Found: ${CMAKE_SYSTEM_PROCESSOR}")
else()
- message(FATAL_ERROR "Only AMD64, ARM64, LOONGARCH64 and ARM are supported. Found: ${CMAKE_SYSTEM_PROCESSOR}")
+ message(FATAL_ERROR "Only AMD64, ARMV6, ARM64, LOONGARCH64 and ARM are supported. Found: ${CMAKE_SYSTEM_PROCESSOR}")
endif()
endfunction()
@@ -155,6 +155,10 @@ function(find_unwind_libs UnwindLibs)
find_library(UNWIND_ARCH NAMES unwind-arm)
endif()
+ if(CLR_CMAKE_HOST_ARCH_ARMV6)
+ find_library(UNWIND_ARCH NAMES unwind-arm)
+ endif()
+
if(CLR_CMAKE_HOST_ARCH_ARM64)
find_library(UNWIND_ARCH NAMES unwind-aarch64)
endif()
diff --git a/eng/native/init-os-and-arch.sh b/eng/native/init-os-and-arch.sh
index 586534be1c8aa..eda07a5feebbd 100644
--- a/eng/native/init-os-and-arch.sh
+++ b/eng/native/init-os-and-arch.sh
@@ -53,6 +53,10 @@ case "$CPUName" in
fi
;;
+ armv6l)
+ arch=armv6
+ ;;
+
i[3-6]86)
echo "Unsupported CPU $CPUName detected, build might not succeed!"
arch=x86
diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake
index e8a04c5698ad3..fca410fcb4b42 100644
--- a/eng/native/tryrun.cmake
+++ b/eng/native/tryrun.cmake
@@ -68,7 +68,7 @@ if(DARWIN)
else()
message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm64 or x64 is supported for OSX cross build!")
endif()
-elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|arm64|loongarch64|s390x|x86)$" OR FREEBSD OR ILLUMOS)
+elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|s390x|x86)$" OR FREEBSD OR ILLUMOS)
set_cache_value(FILE_OPS_CHECK_FERROR_OF_PREVIOUS_CALL_EXITCODE 1)
set_cache_value(GETPWUID_R_SETS_ERRNO_EXITCODE 0)
set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0)
@@ -146,9 +146,9 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|arm64|loongarch64|s390x|x86)$" OR F
set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0)
endif()
else()
- message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, arm64, loongarch64, s390x and x86 are supported!")
+ message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, armv6, arm64, loongarch64, s390x and x86 are supported!")
endif()
-if(TARGET_ARCH_NAME STREQUAL "x86" OR TARGET_ARCH_NAME STREQUAL "s390x" OR TARGET_ARCH_NAME STREQUAL "loongarch64")
+if(TARGET_ARCH_NAME STREQUAL "x86" OR TARGET_ARCH_NAME STREQUAL "s390x" OR TARGET_ARCH_NAME STREQUAL "armv6" OR TARGET_ARCH_NAME STREQUAL "loongarch64")
set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0)
endif()
diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml
index 282fa56755081..0938ee359b4a4 100644
--- a/eng/pipelines/common/platform-matrix.yml
+++ b/eng/pipelines/common/platform-matrix.yml
@@ -52,6 +52,31 @@ jobs:
crossrootfsDir: '/crossrootfs/arm'
${{ insert }}: ${{ parameters.jobParameters }}
+# Linux armv6
+- ${{ if or(containsValue(parameters.platforms, 'Linux_armv6'), in(parameters.platformGroup, 'all', 'gcstress')) }}:
+ - template: xplat-setup.yml
+ parameters:
+ jobTemplate: ${{ parameters.jobTemplate }}
+ helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
+ variables: ${{ parameters.variables }}
+ osGroup: Linux
+ archType: armv6
+ targetRid: linux-armv6
+ platform: Linux_armv6
+ container:
+ image: ubuntu-20.04-cross-armv6-raspbian-10-20211208135931-e6e3ac4
+ registry: mcr
+ jobParameters:
+ runtimeFlavor: ${{ parameters.runtimeFlavor }}
+ stagedBuild: ${{ parameters.stagedBuild }}
+ buildConfig: ${{ parameters.buildConfig }}
+ ${{ if eq(parameters.passPlatforms, true) }}:
+ platforms: ${{ parameters.platforms }}
+ helixQueueGroup: ${{ parameters.helixQueueGroup }}
+ crossBuild: true
+ crossrootfsDir: '/crossrootfs/armv6'
+ ${{ insert }}: ${{ parameters.jobParameters }}
+
# Linux arm64
- ${{ if or(containsValue(parameters.platforms, 'Linux_arm64'), in(parameters.platformGroup, 'all', 'gcstress')) }}:
diff --git a/eng/pipelines/libraries/helix-queues-setup.yml b/eng/pipelines/libraries/helix-queues-setup.yml
index dec87138ed456..70161eb7e1968 100644
--- a/eng/pipelines/libraries/helix-queues-setup.yml
+++ b/eng/pipelines/libraries/helix-queues-setup.yml
@@ -33,6 +33,11 @@ jobs:
- (Debian.10.Arm32.Open)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-10-helix-arm32v7-20210304164340-6616c63
- (Debian.11.Arm32.Open)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-arm32v7-20210304164347-5a7c380
+ # Linux armv6
+ - ${{ if eq(parameters.platform, 'Linux_armv6') }}:
+# - ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
+ - (Raspbian.10.Armv6.Open)Raspbian.9.Arm32.IoT.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:raspbian-10-helix-arm32v6-20211215185610-60748cc
+
# Linux arm64
- ${{ if eq(parameters.platform, 'Linux_arm64') }}:
- ${{ if or(eq(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
diff --git a/eng/pipelines/runtime-staging.yml b/eng/pipelines/runtime-staging.yml
index d49ceeed3ef53..e06a9a6344d9b 100644
--- a/eng/pipelines/runtime-staging.yml
+++ b/eng/pipelines/runtime-staging.yml
@@ -234,6 +234,46 @@ jobs:
eq(variables['monoContainsChange'], true),
eq(variables['isRollingBuild'], true))
+#
+# Build the whole product using Mono and run libraries tests
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ runtimeFlavor: mono
+ platforms:
+ - Linux_armv6
+ variables:
+ # map dependencies variables to local variables
+ - name: librariesContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ]
+ - name: monoContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'] ]
+ jobParameters:
+ testScope: innerloop
+ nameSuffix: AllSubsets_Mono
+ buildArgs: -s mono+clr+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true
+ timeoutInMinutes: 120
+ condition: >-
+ or(
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_installer.containsChange'], true),
+ eq(variables['isManualOrIsNotPR'], true),
+ eq(variables['isFullMatrix'], true))
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ condition: >-
+ or(
+ eq(variables['librariesContainsChange'], true),
+ eq(variables['monoContainsChange'], true),
+ eq(variables['isRollingBuild'], true))
+
#
# Build the whole product using Mono and run runtime tests with the JIT.
#
diff --git a/eng/targetingpacks.targets b/eng/targetingpacks.targets
index 4213c84e709d9..150ddf7401c9e 100644
--- a/eng/targetingpacks.targets
+++ b/eng/targetingpacks.targets
@@ -43,13 +43,13 @@
RuntimeFrameworkName="$(LocalFrameworkOverrideName)"
LatestRuntimeFrameworkVersion="$(ProductVersion)"
RuntimePackNamePatterns="$(LocalFrameworkOverrideName).Runtime.Mono.**RID**"
- RuntimePackRuntimeIdentifiers="linux-arm;linux-arm64;linux-musl-arm64;linux-loongarch64;linux-musl-x64;linux-x64;osx-x64;rhel.6-x64;win-arm;win-arm64;win-x64;win-x86;linux-musl-arm;osx-arm64;maccatalyst-x64;maccatalyst-arm64;browser-wasm;ios-arm64;ios-arm;iossimulator-arm64;iossimulator-x64;iossimulator-x86;tvos-arm64;tvossimulator-arm64;tvossimulator-x64;android-arm64;android-arm;android-x64;android-x86"
+ RuntimePackRuntimeIdentifiers="linux-arm;linux-armv6;linux-arm64;linux-musl-arm64;linux-loongarch64;linux-musl-x64;linux-x64;osx-x64;rhel.6-x64;win-arm;win-arm64;win-x64;win-x86;linux-musl-arm;osx-arm64;maccatalyst-x64;maccatalyst-arm64;browser-wasm;ios-arm64;ios-arm;iossimulator-arm64;iossimulator-x64;iossimulator-x86;tvos-arm64;tvossimulator-arm64;tvossimulator-x64;android-arm64;android-arm;android-x64;android-x86"
RuntimePackLabels="Mono"
Condition="'@(KnownRuntimePack)' == '' or !@(KnownRuntimePack->AnyHaveMetadataValue('TargetFramework', '$(NetCoreAppCurrent)'))"/>
arm
+
+ armv6
+
arm64
diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json
index 25a7780058844..fc0fb68ac6e7e 100644
--- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json
+++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json
@@ -3760,6 +3760,14 @@
"any",
"base"
],
+ "linux-armv6": [
+ "linux-armv6",
+ "linux",
+ "unix-armv6",
+ "unix",
+ "any",
+ "base"
+ ],
"linux-mips64": [
"linux-mips64",
"linux",
@@ -8248,6 +8256,12 @@
"any",
"base"
],
+ "unix-armv6": [
+ "unix-armv6",
+ "unix",
+ "any",
+ "base"
+ ],
"unix-mips64": [
"unix-mips64",
"unix",
@@ -8902,4 +8916,4 @@
"any",
"base"
]
-}
\ No newline at end of file
+}
diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json
index f8c398707e0bb..0b71f880e893d 100644
--- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json
+++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json
@@ -1504,6 +1504,12 @@
"unix-loongarch64"
]
},
+ "linux-armv6": {
+ "#import": [
+ "linux",
+ "unix-armv6"
+ ]
+ },
"linux-mips64": {
"#import": [
"linux",
@@ -3444,6 +3450,11 @@
"unix"
]
},
+ "unix-armv6": {
+ "#import": [
+ "unix"
+ ]
+ },
"unix-mips64": {
"#import": [
"unix"
@@ -3788,4 +3799,4 @@
]
}
}
-}
\ No newline at end of file
+}
diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props
index d1613c4345b31..da7960a1f5785 100644
--- a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props
+++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props
@@ -3,11 +3,11 @@
any
- x64;x86;arm;armel;arm64;loongarch64;mips64;s390x
+ x64;x86;arm;armv6;armel;arm64;loongarch64;mips64;s390x
unix
- x64;x86;arm;armel;arm64;loongarch64;mips64;s390x
+ x64;x86;arm;armv6;armel;arm64;loongarch64;mips64;s390x
linux
diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/Architecture.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/Architecture.cs
index 225fec28c763a..4dead88ce4c92 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/Architecture.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/Architecture.cs
@@ -11,6 +11,7 @@ public enum Architecture
Arm64,
Wasm,
S390x,
- LoongArch64
+ LoongArch64,
+ Armv6,
}
}
diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/RuntimeInformation.ProcessArchitecture.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/RuntimeInformation.ProcessArchitecture.cs
index 0da595b95e074..d11391a001ef9 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/RuntimeInformation.ProcessArchitecture.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/RuntimeInformation.ProcessArchitecture.cs
@@ -10,6 +10,8 @@ public static Architecture ProcessArchitecture
=> Architecture.X86;
#elif TARGET_AMD64
=> Architecture.X64;
+#elif TARGET_ARMV6
+ => Architecture.Armv6;
#elif TARGET_ARM
=> Architecture.Arm;
#elif TARGET_ARM64
diff --git a/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/CheckArchitectureTests.cs b/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/CheckArchitectureTests.cs
index 6f1b289fd00ee..50fe5210c91ad 100644
--- a/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/CheckArchitectureTests.cs
+++ b/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/CheckArchitectureTests.cs
@@ -44,6 +44,10 @@ public void VerifyArchitecture()
Assert.Equal(Architecture.LoongArch64, processArch);
break;
+ case Architecture.Armv6:
+ Assert.Equal(Architecture.Armv6, processArch);
+ break;
+
default:
Assert.False(true, "Unexpected Architecture.");
break;
diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs
index c57c5b13cc119..1fd76371e7332 100644
--- a/src/libraries/System.Runtime/ref/System.Runtime.cs
+++ b/src/libraries/System.Runtime/ref/System.Runtime.cs
@@ -13449,6 +13449,7 @@ public enum Architecture
Wasm = 4,
S390x = 5,
LoongArch64 = 6,
+ Armv6 = 7,
}
public enum CharSet
{
diff --git a/src/libraries/externals.csproj b/src/libraries/externals.csproj
index 54ef0d14897c6..c04d47d9f897e 100644
--- a/src/libraries/externals.csproj
+++ b/src/libraries/externals.csproj
@@ -9,7 +9,7 @@
true
false
true
- true
+ true
diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj
index 8d6a97b157d41..2e5554df5bc5b 100644
--- a/src/libraries/tests.proj
+++ b/src/libraries/tests.proj
@@ -47,7 +47,7 @@ Roslyn4.0.Tests.csproj" />
-
+
diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt
index 79d238e6eeb28..909e1f72c19dc 100644
--- a/src/mono/CMakeLists.txt
+++ b/src/mono/CMakeLists.txt
@@ -9,6 +9,7 @@ project(mono)
include(../../eng/native/configurepaths.cmake)
include(${CLR_ENG_NATIVE_DIR}/functions.cmake)
+set(CROSS_ROOTFS $ENV{ROOTFS_DIR})
set(CMAKE_C_FLAGS_CHECKED "")
set(CMAKE_CXX_FLAGS_CHECKED "")
set(CMAKE_EXE_LINKER_FLAGS_CHECKED "")
@@ -420,8 +421,13 @@ elseif(TARGET_ARCH STREQUAL "arm64")
elseif(TARGET_ARCH MATCHES "arm")
set(TARGET_ARM 1)
set(MONO_ARCHITECTURE "\"arm\"")
- # FIXME:
- add_definitions("-DARM_FPU_VFP=1")
+ if(MONO_ARM_FPU STREQUAL "none")
+ add_definitions("-DARM_FPU_NONE=1")
+ elseif(MONO_ARM_FPU STREQUAL "vfp-hard")
+ add_definitions("-DARM_FPU_VFP_HARD=1")
+ else()
+ add_definitions("-DARM_FPU_VFP=1")
+ endif()
set(TARGET_SIZEOF_VOID_P 4)
set(SIZEOF_REGISTER 4)
# fixme: use separate defines for host/target
@@ -644,6 +650,9 @@ elseif(HOST_ANDROID)
set(HAVE_SYS_ICU 1)
elseif(HOST_LINUX)
include(FindPkgConfig)
+ if(CROSS_ROOTFS)
+ set(ENV{PKG_CONFIG_ICU_UC_INCLUDEDIR} "${CROSS_ROOTFS}/usr/include")
+ endif(CROSS_ROOTFS)
pkg_check_modules(ICU icu-uc)
set(ICU_FLAGS "-DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations")
set(HAVE_SYS_ICU 1)
diff --git a/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj
index da99b06e81b8e..d952686ac56b8 100644
--- a/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj
+++ b/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj
@@ -10,7 +10,7 @@
$(RuntimeBinDir)IL/
Debug;Release;Checked
- x64;x86;arm;arm64;s390x;wasm
+ x64;x86;arm;armv6;arm64;s390x;wasm
true
@@ -56,6 +56,10 @@
x86
$(DefineConstants);TARGET_X86
+
+ arm
+ $(DefineConstants);TARGET_ARMV6
+
arm
$(DefineConstants);TARGET_ARM
diff --git a/src/mono/mono.proj b/src/mono/mono.proj
index c7febf933f5c9..bff71d03b47e9 100644
--- a/src/mono/mono.proj
+++ b/src/mono/mono.proj
@@ -228,12 +228,23 @@
-
+
<_MonoCMakeArgs Include="-DCMAKE_TOOLCHAIN_FILE=$(CrossToolchainFile)" />
+ <_MonoCMakeArgs Condition="'$(TargetOS)' == 'Linux' and ('$(TargetArchitecture)' == 'arm' or '$(TargetArchitecture)' == 'armv6')" Include="-DMONO_ARM_FPU=vfp-hard" />
<_MonoBuildEnv Condition="'$(Platform)' == 'arm64'" Include="TARGET_BUILD_ARCH=arm64" />
<_MonoBuildEnv Condition="'$(Platform)' == 'arm'" Include="TARGET_BUILD_ARCH=arm" />
+ <_MonoBuildEnv Condition="'$(Platform)' == 'armv6'" Include="TARGET_BUILD_ARCH=armv6" />
<_MonoBuildEnv Condition="'$(Platform)' == 'arm64'" Include="PKG_CONFIG_PATH=$(MonoCrossDir)/usr/lib/aarch64-linux-gnu/pkgconfig" />
<_MonoBuildEnv Condition="'$(Platform)' == 'arm'" Include="PKG_CONFIG_PATH=$(MonoCrossDir)/usr/lib/arm-linux-gnueabihf/pkgconfig" />
+ <_MonoBuildEnv Condition="'$(Platform)' == 'armv6'" Include="PKG_CONFIG_PATH=$(MonoCrossDir)/usr/lib/arm-linux-gnueabihf/pkgconfig" />
+ <_MonoCFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-march=armv6zk" />
+ <_MonoCFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-mcpu=arm1176jzf-s" />
+ <_MonoCFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-mfpu=vfp" />
+ <_MonoCFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-mfloat-abi=hard" />
+ <_MonoCXXFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-march=armv6zk" />
+ <_MonoCXXFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-mcpu=arm1176jzf-s" />
+ <_MonoCXXFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-mfpu=vfp" />
+ <_MonoCXXFLAGS Condition="'$(TargetArchitecture)' == 'armv6'" Include="-mfloat-abi=hard" />
@@ -514,6 +525,7 @@
<_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true'">hf
<_Objcopy>objcopy
<_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy)
+ <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy)
<_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy)
<_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy)
<_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy)
diff --git a/src/native/corehost/fxr/standalone/CMakeLists.txt b/src/native/corehost/fxr/standalone/CMakeLists.txt
index 42785ac91d4b6..5e30750ab4a60 100644
--- a/src/native/corehost/fxr/standalone/CMakeLists.txt
+++ b/src/native/corehost/fxr/standalone/CMakeLists.txt
@@ -56,3 +56,7 @@ else()
endif(WIN32)
target_link_libraries(hostfxr libhostcommon)
+
+if (CLR_CMAKE_TARGET_ARCH_ARMV6)
+ target_link_libraries(${DOTNET_PROJECT_NAME} atomic)
+endif()
diff --git a/src/native/corehost/hostmisc/utils.cpp b/src/native/corehost/hostmisc/utils.cpp
index 7f5fdbca40ab0..18e54a3e6d7f8 100644
--- a/src/native/corehost/hostmisc/utils.cpp
+++ b/src/native/corehost/hostmisc/utils.cpp
@@ -191,6 +191,8 @@ const pal::char_t* get_arch()
return _X("x64");
#elif defined(TARGET_X86)
return _X("x86");
+#elif defined(TARGET_ARMV6)
+ return _X("armv6");
#elif defined(TARGET_ARM)
return _X("arm");
#elif defined(TARGET_ARM64)
diff --git a/src/native/corehost/test/nativehost/CMakeLists.txt b/src/native/corehost/test/nativehost/CMakeLists.txt
index c21e95a1c71d9..d8b23ca12ce56 100644
--- a/src/native/corehost/test/nativehost/CMakeLists.txt
+++ b/src/native/corehost/test/nativehost/CMakeLists.txt
@@ -58,3 +58,7 @@ endif()
if (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_ARM64))
target_link_libraries(${DOTNET_PROJECT_NAME} Ole32.lib OleAut32.lib)
endif()
+
+if (CLR_CMAKE_TARGET_ARCH_ARMV6)
+ target_link_libraries(${DOTNET_PROJECT_NAME} atomic)
+endif()
diff --git a/src/native/eventpipe/ep-event-source.c b/src/native/eventpipe/ep-event-source.c
index 78d1c4852b991..0da7ebc50caad 100644
--- a/src/native/eventpipe/ep-event-source.c
+++ b/src/native/eventpipe/ep-event-source.c
@@ -34,6 +34,8 @@ const ep_char8_t* _ep_os_info = "Unknown";
const ep_char8_t* _ep_arch_info = "x86";
#elif defined(TARGET_AMD64)
const ep_char8_t* _ep_arch_info = "x64";
+#elif defined(TARGET_ARMV6)
+const ep_char8_t* _ep_arch_info = "arm32";
#elif defined(TARGET_ARM)
const ep_char8_t* _ep_arch_info = "arm32";
#elif defined(TARGET_ARM64)
diff --git a/src/native/libs/System.Native/pal_runtimeinformation.h b/src/native/libs/System.Native/pal_runtimeinformation.h
index adae223d48339..da39ac51d55ac 100644
--- a/src/native/libs/System.Native/pal_runtimeinformation.h
+++ b/src/native/libs/System.Native/pal_runtimeinformation.h
@@ -23,5 +23,6 @@ enum
ARCH_ARM64,
ARCH_WASM,
ARCH_S390X,
- ARCH_LOONGARCH64
+ ARCH_LOONGARCH64,
+ ARCH_ARMV6,
};