1#!/usr/bin/env bash
2set -e
3set -u
4
5# this is to support running Renode from an external directory and via a symlink
6ROOT_PATH="$(cd $(dirname $(readlink -f $0 2>/dev/null || echo $0)); echo $PWD)"
7
8. "$ROOT_PATH/tools/common.sh"
9
10OUTPUT_PATH="$ROOT_PATH/output/bin"
11
12TARGET="Release"
13QUIET=false
14TRACE=false
15NET=false
16
17PARAMS=()
18while [[ "$#" -gt 0 ]]
19do
20    case $1 in
21    -d|--debug)
22        TARGET="Debug"
23        if $ON_LINUX
24        then
25            LAUNCHER="$LAUNCHER --debug"
26        fi
27        ;;
28    -q|--quiet)
29        QUIET=true
30        ;;
31    --net)
32        echo "'--net' flag is required only for building and is not used by launcher"
33        ;;
34    --trace)
35        TRACE=true
36        TRACE_FORMAT=${2:-}
37        case $TRACE_FORMAT in
38            Chromium|chromium)
39                TRACE_FORMAT="Chromium"
40                shift
41                ;;
42            Speedscope|speedscope)
43                TRACE_FORMAT="Speedscope"
44                shift
45                ;;
46            Nettrace|nettrace)
47                TRACE_FORMAT="Nettrace"
48                shift
49                ;;
50            *)
51                # No format specified - use default, don't shift argument list
52                TRACE_FORMAT="Nettrace"
53                ;;
54        esac
55        ;;
56    *)
57        PARAMS+=("$1")
58        ;;
59    esac
60    shift
61done
62
63BUILD_TYPE_FILE="$OUTPUT_PATH/$TARGET/build_type"
64
65if [[ -f "$BUILD_TYPE_FILE" ]]
66then
67    if [[ "$(cat "$BUILD_TYPE_FILE")" == "dotnet" ]]
68    then
69        NET=true
70    fi
71fi
72
73if ! $NET && $TRACE
74then
75    echo "Tracing is available only on the dotnet target"
76    exit 1
77fi
78
79if ! $ON_WINDOWS && ! $NET
80then
81    verify_mono_version
82fi
83
84if ${REMOTE:-false} && ! $NET
85then
86    LAUNCHER="$LAUNCHER --debugger-agent=transport=dt_socket,address=0.0.0.0:${REMOTE_PORT:=9876},server=y"
87    echo "Waiting for a debugger at port $REMOTE_PORT..."
88fi
89
90if ${QUIET:-false}
91then
92    exec 2>/dev/null
93fi
94
95if $NET
96then
97    export DOTNET_CLI_TELEMETRY_OPTOUT=1
98    if ! $TRACE
99    then
100        TRACE_COMMAND=""
101    else
102        TRACE_COMMAND="dotnet-trace collect --format ${TRACE_FORMAT} --"
103    fi
104
105    ${TRACE_COMMAND} dotnet "${OUTPUT_PATH}/${TARGET}/Renode.dll" "${PARAMS[@]:-}"
106else
107    if $ON_WINDOWS
108    then
109        "${OUTPUT_PATH}/${TARGET}/Renode.exe" "${PARAMS[@]:-}"
110    else
111        $LAUNCHER "${OUTPUT_PATH}/${TARGET}/Renode.exe" "${PARAMS[@]:-}"
112    fi
113fi
114