|
1 | 1 | #!/usr/bin/env bash |
2 | 2 |
|
3 | | -ASM_FILE=$1 |
| 3 | +ARCH=$1 |
| 4 | +ASM_FILE=$2 |
4 | 5 | PLATFORM="" |
5 | 6 | LD_FLAGS="" |
6 | | -BENCHMARKING="false" # "true" to enable |
| 7 | +BENCHMARKING="true" # "true" to enable |
| 8 | +QEMU="" |
7 | 9 |
|
8 | | -if [[ -z "$ASM_FILE" ]]; then |
9 | | - echo "Error: Assembly (.S) file is not passed in." |
10 | | - echo "Usage: ./run.sh test_binary_translate_add.S" |
| 10 | +if [[ -z "$ARCH" || -z "$ASM_FILE" ]]; then |
| 11 | + echo "Error: Architecture and assembly (.S) file must be provided." |
| 12 | + echo "Usage: ./run.sh [riscv|arm] <assembly_file.S>" |
11 | 13 | exit 1 |
12 | 14 | fi |
13 | 15 |
|
14 | | -if [[ "$OSTYPE" == "linux-gnu"* ]]; then |
15 | | - PLATFORM="aarch64-linux-gnu" |
| 16 | +if [[ "$ARCH" != "riscv" && "$ARCH" != "arm" ]]; then |
| 17 | + echo "Error: Architecture must be either 'riscv' or 'arm'." |
| 18 | + echo "Usage: ./run.sh [riscv|arm] <assembly_file.S>" |
| 19 | + exit 1 |
| 20 | +fi |
| 21 | + |
| 22 | +if [[ "$ARCH" == "riscv" ]]; then |
| 23 | + QEMU="qemu-riscv64" |
| 24 | + if [[ "$OSTYPE" == "linux-gnu"* ]]; then |
| 25 | + PLATFORM="riscv64-unknown-linux-gnu-" |
| 26 | + fi |
| 27 | +elif [[ "$ARCH" == "arm" ]]; then |
| 28 | + QEMU="qemu-aarch64" |
| 29 | + if [[ "$OSTYPE" == "linux-gnu"* ]]; then |
| 30 | + PLATFORM="aarch64-unknown-linux-gnu-" |
| 31 | + fi |
16 | 32 | fi |
17 | 33 |
|
18 | 34 | if [[ "$OSTYPE" == "darwin"* ]]; then |
|
23 | 39 | "$PLATFORM"as "$ASM_FILE" -o "$ASM_FILE".as || { echo "Assembly compilation failed"; exit 1; } |
24 | 40 | "$PLATFORM"ld "$ASM_FILE".as -o "$ASM_FILE".bin $LD_FLAGS || { echo "Linking failed"; exit 1; } |
25 | 41 |
|
26 | | -./"$ASM_FILE".bin |
| 42 | +"$QEMU" ./"$ASM_FILE".bin |
27 | 43 | echo "$?" |
28 | 44 |
|
29 | 45 | if [ "$BENCHMARKING" = true ]; then |
30 | | - hyperfine -r 1000 -w 100 -Ni ./"$ASM_FILE".bin |
| 46 | + hyperfine -r 1000 -w 100 -Ni ""$QEMU" ./"$ASM_FILE".bin" |
31 | 47 | fi |
| 48 | + |
0 commit comments