Add riscv64 baremetal runtime (#14105)

This patch add a build rule for riscv64 baremetal runtime.

The riscv64 baremetal toolchain can get from
https://github.com/riscv-collab/riscv-gnu-toolchain.
riscv64 baremetal toolchain build command:
```
git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
mkdir -p build/install && cd build
../configure --enable-llvm --prefix=`realpath install`
make -j8
```

Build command
```
cmake -G Ninja \
    -B ../iree-baremetal-rv64 \
    -DCMAKE_TOOLCHAIN_FILE="./build_tools/cmake/riscv.toolchain.cmake" \
    -DRISCV_TOOLCHAIN_ROOT=<riscv64 baremetal toolchain root> \
    -DRISCV_CPU="generic-riscv_64" \
    -DRISCV_TOOLCHAIN_PREFIX="riscv64-unknown-elf-" \
    -DIREE_HOST_BIN_DIR=<host tool bin path> \
    -DRISCV_COMPILER_FLAGS="-O2" \
    -DIREE_BUILD_COMPILER=OFF \
    -DIREE_ENABLE_CPUINFO=OFF \
    -DIREE_BUILD_TESTS=OFF \
    -DIREE_ENABLE_ASSERTIONS=ON \
    -DIREE_BUILD_SAMPLES=ON \
    .
    
cmake --build ../iree-baremetal-rv64
```

Test Command
```
qemu-riscv64 -cpu rv64 -B 0x100000  ../iree-baremetal-rv64-gnu/samples/simple_embedding/simple_embedding_embedded_sync
```
diff --git a/build_tools/cmake/build_riscv.sh b/build_tools/cmake/build_riscv.sh
index d3f4978..70fd756 100755
--- a/build_tools/cmake/build_riscv.sh
+++ b/build_tools/cmake/build_riscv.sh
@@ -54,12 +54,14 @@
 if [[ "${RISCV_PLATFORM}" == "linux" ]]; then
   args+=(
     -DRISCV_TOOLCHAIN_ROOT="${RISCV_RV64_LINUX_TOOLCHAIN_ROOT}"
+    -DRISCV_TOOLCHAIN_PREFIX="riscv64-unknown-linux-gnu-"
   )
 elif [[ "${RISCV_PLATFORM_ARCH}" == "generic-riscv_32" ]]; then
   args+=(
     # TODO(#6353): Off until tools/ are refactored to support threadless config.
     -DIREE_BUILD_TESTS=OFF
     -DRISCV_TOOLCHAIN_ROOT="${RISCV_RV32_NEWLIB_TOOLCHAIN_ROOT}"
+    -DRISCV_TOOLCHAIN_PREFIX="riscv32-unknown-elf-"
   )
 else
   echo "riscv config for ${RISCV_PLATFORM_ARCH} not supported yet"
diff --git a/build_tools/cmake/riscv.toolchain.cmake b/build_tools/cmake/riscv.toolchain.cmake
index 68c01cb..f5dc3cd 100644
--- a/build_tools/cmake/riscv.toolchain.cmake
+++ b/build_tools/cmake/riscv.toolchain.cmake
@@ -23,6 +23,7 @@
 set(RISCV_TOOL_PATH "$ENV{HOME}/riscv" CACHE PATH "RISC-V tool path")
 
 set(RISCV_TOOLCHAIN_ROOT "${RISCV_TOOL_PATH}/toolchain/clang/${RISCV_HOST_TAG}/RISCV" CACHE PATH "RISC-V compiler path")
+set(RISCV_TOOLCHAIN_PREFIX "riscv64-unknown-linux-gnu-" CACHE STRING "RISC-V toolchain prefix")
 set(CMAKE_FIND_ROOT_PATH ${RISCV_TOOLCHAIN_ROOT})
 list(APPEND CMAKE_PREFIX_PATH "${RISCV_TOOLCHAIN_ROOT}")
 
@@ -39,9 +40,33 @@
 set(RISCV_LINKER_FLAGS)
 set(RISCV_LINKER_FLAGS_EXE)
 
-if(RISCV_CPU STREQUAL "linux-riscv_64")
-  set(CMAKE_SYSTEM_PROCESSOR riscv64)
+if (RISCV_CPU MATCHES "generic")
+  set(CMAKE_SYSTEM_NAME Generic)
+  set(CMAKE_SYSTEM_LIBRARY_PATH "${RISCV_TOOLCHAIN_ROOT}/${RISCV_TOOLCHAIN_PREFIX}/lib/")
+  set(CMAKE_CROSSCOMPILING ON CACHE BOOL "")
+  set(CMAKE_C_STANDARD 11)
+  set(CMAKE_C_EXTENSIONS OFF)     # Force the usage of _ISOC11_SOURCE
+  set(IREE_BUILD_BINDINGS_TFLITE OFF CACHE BOOL "" FORCE)
+  set(IREE_BUILD_BINDINGS_TFLITE_JAVA OFF CACHE BOOL "" FORCE)
+  set(IREE_HAL_DRIVER_DEFAULTS OFF CACHE BOOL "" FORCE)
+  set(IREE_HAL_DRIVER_LOCAL_SYNC ON CACHE BOOL "" FORCE)
+  set(IREE_HAL_EXECUTABLE_LOADER_DEFAULTS OFF CACHE BOOL "" FORCE)
+  set(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF ON CACHE BOOL "" FORCE)
+  set(IREE_HAL_EXECUTABLE_LOADER_VMVX_MODULE ON CACHE BOOL "" FORCE)
+  set(IREE_HAL_EXECUTABLE_PLUGIN_DEFAULTS OFF CACHE BOOL "" FORCE)
+  set(IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF ON CACHE BOOL "" FORCE)
+  set(IREE_ENABLE_THREADING OFF CACHE BOOL "" FORCE)
+elseif(RISCV_CPU MATCHES "linux")
   set(CMAKE_SYSTEM_NAME Linux)
+endif()
+
+if(RISCV_CPU MATCHES "riscv_64")
+  set(CMAKE_SYSTEM_PROCESSOR riscv64)
+elseif(RISCV_CPU MATCHES "riscv_32")
+  set(CMAKE_SYSTEM_PROCESSOR riscv32)
+endif()
+
+if(RISCV_CPU STREQUAL "linux-riscv_64")
   set(CMAKE_SYSTEM_LIBRARY_PATH "${RISCV_TOOLCHAIN_ROOT}/sysroot/usr/lib")
   # Specify ISP spec for march=rv64gc. This is to resolve the mismatch between
   # llvm and binutil ISA version.
@@ -55,9 +80,14 @@
     "--iree-llvmcpu-target-cpu-features=+m,+a,+f,+d,+c,+zvl512b,+v"
     "--riscv-v-fixed-length-vector-lmul-max=8"
     CACHE INTERNAL "Default llvm codegen flags for testing purposes")
+elseif(RISCV_CPU STREQUAL "generic-riscv_64")
+  # Specify ISP spec for march=rv64gc. This is to resolve the mismatch between
+  # llvm and binutil ISA version.
+  set(RISCV_COMPILER_FLAGS "${RISCV_COMPILER_FLAGS} \
+      -march=rv64i2p0ma2p0f2p0d2p0c2p0 -mabi=lp64d -DIREE_PLATFORM_GENERIC=1 -DIREE_SYNCHRONIZATION_DISABLE_UNSAFE=1 \
+      -DIREE_FILE_IO_ENABLE=0 -DIREE_TIME_NOW_FN=\"\{ return 0; \}\" -DIREE_DEVICE_SIZE_T=uint64_t -DPRIdsz=PRIu64")
+  set(RISCV_LINKER_FLAGS "${RISCV_LINKER_FLAGS} -lm")
 elseif(RISCV_CPU STREQUAL "linux-riscv_32")
-  set(CMAKE_SYSTEM_PROCESSOR riscv32)
-  set(CMAKE_SYSTEM_NAME Linux)
   list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
     "${RISCV_TOOLCHAIN_ROOT}/sysroot/usr/lib32"
     "${RISCV_TOOLCHAIN_ROOT}/sysroot/usr/lib32/ilp32d"
@@ -74,23 +104,7 @@
     "--riscv-v-fixed-length-vector-lmul-max=8"
     CACHE INTERNAL "Default llvm codegen flags for testing purposes")
 elseif(RISCV_CPU STREQUAL "generic-riscv_32")
-  set(CMAKE_SYSTEM_PROCESSOR riscv32)
-  set(CMAKE_SYSTEM_NAME Generic)
-  set(CMAKE_CROSSCOMPILING ON CACHE BOOL "")
-  set(CMAKE_C_STANDARD 11)
-  set(CMAKE_C_EXTENSIONS OFF)     # Force the usage of _ISOC11_SOURCE
-  set(IREE_BUILD_BINDINGS_TFLITE OFF CACHE BOOL "" FORCE)
-  set(IREE_BUILD_BINDINGS_TFLITE_JAVA OFF CACHE BOOL "" FORCE)
-  set(IREE_HAL_DRIVER_DEFAULTS OFF CACHE BOOL "" FORCE)
-  set(IREE_HAL_DRIVER_LOCAL_SYNC ON CACHE BOOL "" FORCE)
-  set(IREE_HAL_EXECUTABLE_LOADER_DEFAULTS OFF CACHE BOOL "" FORCE)
-  set(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF ON CACHE BOOL "" FORCE)
-  set(IREE_HAL_EXECUTABLE_LOADER_VMVX_MODULE ON CACHE BOOL "" FORCE)
-  set(IREE_HAL_EXECUTABLE_PLUGIN_DEFAULTS OFF CACHE BOOL "" FORCE)
-  set(IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF ON CACHE BOOL "" FORCE)
-  set(CMAKE_SYSTEM_LIBRARY_PATH "${RISCV_TOOLCHAIN_ROOT}/riscv32-unknown-elf/lib")
-  set(IREE_ENABLE_THREADING OFF CACHE BOOL "" FORCE)
-  # Specify ISP spec for march=rv64gc. This is to resolve the mismatch between
+  # Specify ISP spec for march=rv32gc. This is to resolve the mismatch between
   # llvm and binutil ISA version.
   set(RISCV_COMPILER_FLAGS "${RISCV_COMPILER_FLAGS} \
       -march=rv32i2p0mf2p0 -mabi=ilp32 -DIREE_PLATFORM_GENERIC=1 -DIREE_SYNCHRONIZATION_DISABLE_UNSAFE=1 \