diff options
author | Adeel Mujahid <3840695+am11@users.noreply.github.com> | 2022-08-05 02:08:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-05 02:08:01 +0300 |
commit | 56095347ca1bacbc7a95e468f03f02ea808b9d9b (patch) | |
tree | 5859fdac22bdf82fa1876bf051ce175e0a766d41 /eng | |
parent | fda46bec93b80b3cbaddbeec825fb78e9559243a (diff) |
Add initial riscv64 port (#73385)
Diffstat (limited to 'eng')
-rwxr-xr-x | eng/build.sh | 6 | ||||
-rwxr-xr-x | eng/native/build-commons.sh | 6 | ||||
-rw-r--r-- | eng/native/configurecompiler.cmake | 20 | ||||
-rw-r--r-- | eng/native/configureplatform.cmake | 33 | ||||
-rw-r--r-- | eng/native/functions.cmake | 6 | ||||
-rw-r--r-- | eng/native/init-os-and-arch.sh | 4 | ||||
-rw-r--r-- | eng/native/tryrun.cmake | 4 |
7 files changed, 55 insertions, 24 deletions
diff --git a/eng/build.sh b/eng/build.sh index 91ea9dbd478..84a4fd746c9 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, armv6, armel, arm64, loongarch64, s390x, ppc64le or wasm." + echo " --arch (-a) Target platform: x86, x64, arm, armv6, armel, arm64, loongarch64, riscv64, s390x, ppc64le 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|armv6|armel|arm64|loongarch64|s390x|ppc64le|wasm) + x64|x86|arm|armv6|armel|arm64|loongarch64|riscv64|s390x|ppc64le|wasm) arch=$passedArch ;; *) echo "Unsupported target architecture '$2'." - echo "The allowed values are x86, x64, arm, armv6, armel, arm64, loongarch64, s390x, ppc64le and wasm." + echo "The allowed values are x86, x64, arm, armv6, armel, arm64, loongarch64, riscv64, s390x, ppc64le and wasm." exit 1 ;; esac diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh index 3f05aef7f53..4199828f297 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, -armv6, -armel, -arm64, -loongarch64, -s390x, -ppc64le, x64, x86, -wasm" + echo "BuildArch can be: -arm, -armv6, -armel, -arm64, -loongarch64, -riscv64, -s390x, -ppc64le, 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)" @@ -384,6 +384,10 @@ while :; do __TargetArch=loongarch64 ;; + riscv64|-riscv64) + __TargetArch=riscv64 + ;; + s390x|-s390x) __TargetArch=s390x ;; diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 551a2dc7f2a..0642fccae90 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -227,6 +227,9 @@ elseif (CLR_CMAKE_HOST_ARCH_ARM64) elseif (CLR_CMAKE_HOST_ARCH_LOONGARCH64) set(ARCH_HOST_NAME loongarch64) add_definitions(-DHOST_LOONGARCH64 -DHOST_64BIT) +elseif (CLR_CMAKE_HOST_ARCH_RISCV64) + set(ARCH_HOST_NAME riscv64) + add_definitions(-DHOST_RISCV64 -DHOST_64BIT) elseif (CLR_CMAKE_HOST_ARCH_S390X) set(ARCH_HOST_NAME s390x) add_definitions(-DHOST_S390X -DHOST_64BIT -DBIGENDIAN) @@ -238,7 +241,7 @@ elseif (CLR_CMAKE_HOST_ARCH_MIPS64) add_definitions(-DHOST_MIPS64 -DHOST_64BIT=1) elseif (CLR_CMAKE_HOST_ARCH_POWERPC64) set(ARCH_HOST_NAME ppc64le) - add_definitions(-DHOST_POWERPC64 -DHOST_64BIT) + add_definitions(-DHOST_POWERPC64 -DHOST_64BIT) else () clr_unknown_arch() endif () @@ -248,13 +251,15 @@ if (CLR_CMAKE_HOST_UNIX) if(CLR_CMAKE_HOST_UNIX_AMD64) message("Detected Linux x86_64") elseif(CLR_CMAKE_HOST_UNIX_ARM) - message("Detected Linux ARM") + message("Detected Linux arm") elseif(CLR_CMAKE_HOST_UNIX_ARMV6) - message("Detected Linux ARMv6") + message("Detected Linux armv6") elseif(CLR_CMAKE_HOST_UNIX_ARM64) - message("Detected Linux ARM64") + message("Detected Linux arm64") elseif(CLR_CMAKE_HOST_UNIX_LOONGARCH64) - message("Detected Linux LOONGARCH64") + message("Detected Linux loongarch64") + elseif(CLR_CMAKE_HOST_UNIX_RISCV64) + message("Detected Linux riscv64") elseif(CLR_CMAKE_HOST_UNIX_X86) message("Detected Linux i686") elseif(CLR_CMAKE_HOST_UNIX_S390X) @@ -332,6 +337,11 @@ elseif (CLR_CMAKE_TARGET_ARCH_LOONGARCH64) set(ARCH_SOURCES_DIR loongarch64) add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:TARGET_LOONGARCH64>) add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:TARGET_64BIT>) +elseif (CLR_CMAKE_TARGET_ARCH_RISCV64) + set(ARCH_TARGET_NAME riscv64) + set(ARCH_SOURCES_DIR riscv64) + add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:TARGET_RISCV64>) + add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:TARGET_64BIT>) elseif (CLR_CMAKE_TARGET_ARCH_S390X) set(ARCH_TARGET_NAME s390x) set(ARCH_SOURCES_DIR s390x) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index 315aa480c69..c7a38c3eee8 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -45,8 +45,10 @@ if(CLR_CMAKE_HOST_OS STREQUAL Linux) 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) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL loongarch64) set(CLR_CMAKE_HOST_UNIX_LOONGARCH64 1) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL riscv64) + set(CLR_CMAKE_HOST_UNIX_RISCV64 1) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686 OR CMAKE_SYSTEM_PROCESSOR STREQUAL x86) set(CLR_CMAKE_HOST_UNIX_X86 1) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL s390x) @@ -243,6 +245,9 @@ elseif(CLR_CMAKE_HOST_UNIX_ARM64) elseif(CLR_CMAKE_HOST_UNIX_LOONGARCH64) set(CLR_CMAKE_HOST_ARCH_LOONGARCH64 1) set(CLR_CMAKE_HOST_ARCH "loongarch64") +elseif(CLR_CMAKE_HOST_UNIX_RISCV64) + set(CLR_CMAKE_HOST_ARCH_RISCV64 1) + set(CLR_CMAKE_HOST_ARCH "riscv64") elseif(CLR_CMAKE_HOST_UNIX_AMD64) set(CLR_CMAKE_HOST_ARCH_AMD64 1) set(CLR_CMAKE_HOST_ARCH "x64") @@ -292,29 +297,31 @@ endif() # Set target architecture variables if (CLR_CMAKE_TARGET_ARCH STREQUAL x64) set(CLR_CMAKE_TARGET_ARCH_AMD64 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL x86) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL x86) set(CLR_CMAKE_TARGET_ARCH_I386 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm64) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm64) set(CLR_CMAKE_TARGET_ARCH_ARM64 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL loongarch64) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL loongarch64) set(CLR_CMAKE_TARGET_ARCH_LOONGARCH64 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL riscv64) + set(CLR_CMAKE_TARGET_ARCH_RISCV64 1) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm) set(CLR_CMAKE_TARGET_ARCH_ARM 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armv6) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armv6) set(CLR_CMAKE_TARGET_ARCH_ARMV6 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armel) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armel) set(CLR_CMAKE_TARGET_ARCH_ARM 1) set(CLR_CMAKE_TARGET_ARCH_ARMV7L 1) set(ARM_SOFTFP 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL s390x) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL s390x) set(CLR_CMAKE_TARGET_ARCH_S390X 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL ppc64le) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL ppc64le) set(CLR_CMAKE_TARGET_ARCH_POWERPC64 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL wasm) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL wasm) set(CLR_CMAKE_TARGET_ARCH_WASM 1) - elseif(CLR_CMAKE_TARGET_ARCH STREQUAL mips64) +elseif(CLR_CMAKE_TARGET_ARCH STREQUAL mips64) set(CLR_CMAKE_TARGET_ARCH_MIPS64 1) - else() +else() clr_unknown_arch() endif() @@ -416,6 +423,8 @@ if(CLR_CMAKE_TARGET_UNIX) set(CLR_CMAKE_TARGET_UNIX_ARM64 1) elseif(CLR_CMAKE_TARGET_ARCH STREQUAL loongarch64) set(CLR_CMAKE_TARGET_UNIX_LOONGARCH64 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL riscv64) + set(CLR_CMAKE_TARGET_UNIX_RISCV64 1) elseif(CLR_CMAKE_TARGET_ARCH STREQUAL x86) set(CLR_CMAKE_TARGET_UNIX_X86 1) elseif(CLR_CMAKE_TARGET_ARCH STREQUAL s390x) diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake index 8c497259ad2..efb36de6e48 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, ARMV6, ARM64, LOONGARCH64 and ARM are supported. Found: ${CMAKE_SYSTEM_PROCESSOR}") + message(FATAL_ERROR "'${CMAKE_SYSTEM_PROCESSOR}' is an unsupported architecture.") endif() endfunction() @@ -167,6 +167,10 @@ function(find_unwind_libs UnwindLibs) find_library(UNWIND_ARCH NAMES unwind-loongarch64) endif() + if(CLR_CMAKE_HOST_ARCH_RISCV64) + find_library(UNWIND_ARCH NAMES unwind-riscv64) + endif() + if(CLR_CMAKE_HOST_ARCH_AMD64) find_library(UNWIND_ARCH NAMES unwind-x86_64) endif() diff --git a/eng/native/init-os-and-arch.sh b/eng/native/init-os-and-arch.sh index ded32e3f755..887bb3b72f7 100644 --- a/eng/native/init-os-and-arch.sh +++ b/eng/native/init-os-and-arch.sh @@ -41,6 +41,10 @@ case "$CPUName" in arch=loongarch64 ;; + riscv64) + arch=riscv64 + ;; + amd64|x86_64) arch=x64 ;; diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake index c491422ae7b..5c5344bd801 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|armv6|arm64|loongarch64|s390x|ppc64le|x86)$" OR FREEBSD OR ILLUMOS) +elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s390x|ppc64le|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) @@ -149,6 +149,6 @@ else() message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, armv6, arm64, loongarch64, s390x, ppc64le and x86 are supported!") endif() -if(TARGET_ARCH_NAME STREQUAL "x86" OR TARGET_ARCH_NAME STREQUAL "s390x" OR TARGET_ARCH_NAME STREQUAL "armv6" OR TARGET_ARCH_NAME STREQUAL "loongarch64" OR TARGET_ARCH_NAME STREQUAL "ppc64le") +if(TARGET_ARCH_NAME MATCHES "^(x86|s390x|armv6|loongarch64|riscv64|ppc64le)$") set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0) endif() |