@@ -17,17 +17,21 @@ et_dir=$(realpath $script_dir/../..)
1717ARCH=" $( uname -m) " 
1818OS=" $( uname -s) " 
1919root_dir=" ${script_dir} /ethos-u-scratch" 
20- user_toolchain_url=" " 
21- user_toolchain_dir=" " 
2220eula_acceptance=0
2321skip_toolchain_setup=0
22+ target_toolchain=" " 
2423skip_fvp_setup=0
2524skip_vela_setup=0
2625
2726
2827#  Figure out if setup.sh was called or sourced and save it into "is_script_sourced"
2928(return 0 2> /dev/null) &&  is_script_sourced=1 ||  is_script_sourced=0
3029
30+ #  Global scope these so they can be set later
31+ toolchain_url=" " 
32+ toolchain_dir=" " 
33+ toolchain_md5_checksum=" " 
34+ 
3135if  [[ " ${ARCH} " ==  " x86_64" ;  then 
3236    #  FVPs
3337    corstone300_url=" https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-300/FVP_Corstone_SSE-300_11.22_20_Linux64.tgz?rev=018659bd574f4e7b95fa647e7836ccf4&hash=22A79103C6FA5FFA7AFF3BE0447F3FF9" 
@@ -37,11 +41,6 @@ if [[ "${ARCH}" == "x86_64" ]]; then
3741    corstone320_url=" https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-320/FVP_Corstone_SSE-320_11.27_25_Linux64.tgz?rev=a507bffc219a4d5792f1192ab7002d89&hash=D9A824AA8227D2E679C9B9787FF4E8B6FBE3D7C6" 
3842    corstone320_model_dir=" Linux64_GCC-9.3" 
3943    corstone320_md5_checksum=" 3deb3c68f9b2d145833f15374203514d" 
40- 
41-     #  toochain
42-     toolchain_url=" https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz" 
43-     toolchain_dir=" arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi" 
44-     toolchain_md5_checksum=" 0601a9588bc5b9c99ad2b56133b7f118" 
4544elif  [[ " ${ARCH} " ==  " aarch64" ||  [[ " ${ARCH} " ==  " arm64" ;  then 
4645    #  FVPs
4746    corstone300_url=" https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-300/FVP_Corstone_SSE-300_11.22_20_Linux64_armv8l.tgz?rev=9cc6e9a32bb947ca9b21fa162144cb01&hash=7657A4CF27D42E892E3F08D452AAB073" 
@@ -51,17 +50,6 @@ elif [[ "${ARCH}" == "aarch64" ]] || [[ "${ARCH}" == "arm64" ]]; then
5150    corstone320_url=" https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-320/FVP_Corstone_SSE-320_11.27_25_Linux64_armv8l.tgz?rev=b6ebe0923cb84f739e017385fd3c333c&hash=8965C4B98E2FF7F792A099B08831FE3CB6120493" 
5251    corstone320_model_dir=" Linux64_armv8l_GCC-9.3" 
5352    corstone320_md5_checksum=" 3889f1d80a6d9861ea4aa6f1c88dd0ae" 
54- 
55-     #  toochain
56-     if  [[ " ${OS} " ==  " Darwin" ;  then 
57-         toolchain_url=" https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-darwin-arm64-arm-none-eabi.tar.xz" 
58-         toolchain_dir=" arm-gnu-toolchain-13.3.rel1-darwin-arm64-arm-none-eabi" 
59-         toolchain_md5_checksum=" f1c18320bb3121fa89dca11399273f4e" 
60-     elif  [[ " ${OS} " ==  " Linux" ;  then 
61-         toolchain_url=" https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-aarch64-arm-none-eabi.tar.xz" 
62-         toolchain_dir=" arm-gnu-toolchain-13.3.rel1-aarch64-arm-none-eabi" 
63-         toolchain_md5_checksum=" 303102d97b877ebbeb36b3158994b218" 
64-     fi 
6553else 
6654    echo  " [main] Error: only x86-64 & aarch64/arm64 architecture is supported for now!" ;  exit  1; 
6755fi 
@@ -75,7 +63,7 @@ vela_rev="8cac2b9a7204b57125a8718049519b091a98846c"
7563# #######
7664
7765function  print_usage()  {
78-     echo  " Usage: $( basename $0 ) user -toolchain-url  toolchain-url] [--user-toolchain-dir toolchain-dir ] [--skip-fvp-setup] [--skip-toolchain-setup] [--skip-vela-setup]" 
66+     echo  " Usage: $( basename $0 ) target -toolchain toolchain name ] [--skip-fvp-setup] [--skip-toolchain-setup] [--skip-vela-setup]" 
7967    echo  " Supplied args: $* " 
8068}
8169
@@ -99,21 +87,14 @@ function check_options() {
9987                    exit  1
10088                fi 
10189                ;;
102-             --user-toolchain-url)
103-                 if  [[ $is_script_sourced  -eq  0 ]];  then 
104-                     user_toolchain_url=${2:- " ${user_toolchain_url} "  
105-                 fi 
106- 
107-                 if  [[ $#  -ge  2 ]];  then 
108-                     shift  2
109-                 else 
110-                     print_usage " $@ " 
111-                     exit  1
112-                 fi 
90+             --skip-toolchain-setup)
91+                 skip_toolchain_setup=1
92+                 shift 
11393                ;;
114-             --user-toolchain-dir)
94+             --target-toolchain)
95+                 #  Only change default root dir if the script is being executed and not sourced.
11596                if  [[ $is_script_sourced  -eq  0 ]];  then 
116-                     user_toolchain_dir =${2:- " ${user_toolchain_dir } "  
97+                     target_toolchain =${2:- " ${target_toolchain } "  
11798                fi 
11899
119100                if  [[ $#  -ge  2 ]];  then 
@@ -123,10 +104,6 @@ function check_options() {
123104                    exit  1
124105                fi 
125106                ;;
126-             --skip-toolchain-setup)
127-                 skip_toolchain_setup=1
128-                 shift 
129-                 ;;
130107            --skip-fvp-setup)
131108                skip_fvp_setup=1
132109                shift 
@@ -223,32 +200,46 @@ function setup_fvp() {
223200    done 
224201}
225202
203+ function  select_toolchain()  {
204+     if  [[ " ${ARCH} " ==  " x86_64" ;  then 
205+ 	if  [[ " ${target_toolchain} " ==  " zephyr" ;  then 
206+ 	    #  TODO can include support for zephyr toolchain for other host platforms later
207+             toolchain_url=" https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.2/toolchain_linux-x86_64_arm-zephyr-eabi.tar.xz" 
208+             toolchain_dir=" arm-zephyr-eabi" 
209+             toolchain_md5_checksum=" 93128be0235cf5cf5f1ee561aa6eac5f" 
210+         else 
211+             toolchain_url=" https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz" 
212+             toolchain_dir=" arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi" 
213+             toolchain_md5_checksum=" 0601a9588bc5b9c99ad2b56133b7f118" 
214+             echo  " [main] Info using bare metal toolchain for default host OS ${OS}  selection" 
215+ 	fi 
216+    elif  [[ " ${ARCH} " ==  " aarch64" ||  [[ " ${ARCH} " ==  " arm64" ;  then 
217+         if  [[ " ${OS} " ==  " Darwin" ;  then 
218+             toolchain_url=" https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-darwin-arm64-arm-none-eabi.tar.xz" 
219+             toolchain_dir=" arm-gnu-toolchain-13.3.rel1-darwin-arm64-arm-none-eabi" 
220+             toolchain_md5_checksum=" f1c18320bb3121fa89dca11399273f4e" 
221+         elif  [[ " ${OS} " ==  " Linux" ;  then 
222+             toolchain_url=" https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-aarch64-arm-none-eabi.tar.xz" 
223+             toolchain_dir=" arm-gnu-toolchain-13.3.rel1-aarch64-arm-none-eabi" 
224+             toolchain_md5_checksum=" 303102d97b877ebbeb36b3158994b218" 
225+         fi 
226+     else 
227+         echo  " [main] Error: only x86-64 & aarch64/arm64 architecture is supported for now!" ;  exit  1; 
228+     fi 
229+ }
226230function  setup_toolchain()  {
227231    #  Download and install the arm toolchain (default is arm-none-eabi)
232+     #  setting --target-toolchain to zephyr sets this to arm-zephyr-eabi
228233    cd  " ${root_dir} " 
229-     local  selected_toolchain_url=" ${toolchain_url} " 
230-     local  selected_toolchain_dir=" ${toolchain_dir} " 
231-     local  selected_toolchain_md5=" ${toolchain_md5_checksum} " 
232-     local  skip_md5_verify=0
233-     if  [[ -n  " ${user_toolchain_url} " ;  then 
234-         selected_toolchain_url=" ${user_toolchain_url} " 
235-         selected_toolchain_dir=" ${user_toolchain_dir} " 
236-         selected_toolchain_md5=" " 
237- 	#  TODO: For now we skip this if its a user specified url
238-         #  but eventually we should verify the checksums	
239-         skip_md5_verify=1
240-     fi 
241-     if  [[ !  -e  " ${selected_toolchain_dir} .tar.xz" ;  then 
242-         echo  " [${FUNCNAME[0]} ] Downloading toolchain ..." 
243-         curl --output " ${selected_toolchain_dir} .tar.xz" " ${selected_toolchain_url} " 
244- 	if  [[ ${skip_md5_verify}  -eq  0 ]];  then  
245-             verify_md5 ${selected_toolchain_md5}  " ${selected_toolchain_dir} .tar.xz" ||  exit  1
246- 	fi 
234+     if  [[ !  -e  " ${toolchain_dir} .tar.xz" ;  then 
235+         echo  " [${FUNCNAME[0]} ] Downloading ${toolchain_dir}  toolchain ..." 
236+         curl --output " ${toolchain_dir} .tar.xz" " ${toolchain_url} " 
237+         verify_md5 ${toolchain_md5_checksum}  " ${toolchain_dir} .tar.xz" ||  exit  1
247238    fi 
248239
249240    echo  " [${FUNCNAME[0]} ] Installing toolchain ..." 
250-     rm -rf " ${selected_toolchain_dir } " 
251-     tar xf " ${selected_toolchain_dir } .tar.xz" 
241+     rm -rf " ${toolchain_dir } " 
242+     tar xf " ${toolchain_dir } .tar.xz" 
252243}
253244
254245function  setup_vela()  {
@@ -277,12 +268,8 @@ function create_setup_path(){
277268        echo  " hash FVP_Corstone_SSE-320" >>  ${setup_path_script} 
278269    fi 
279270
280-     local  selected_toolchain_dir=" ${toolchain_dir} " 
281-     if  [[ -n  " ${user_toolchain_url} " &&  -n  " ${user_toolchain_dir} " ;  then 
282-         selected_toolchain_dir=" ${user_toolchain_dir} " 
283-     fi 
284271    if  [[ " ${skip_toolchain_setup} " -eq  0 ]];  then 
285-         toolchain_bin_path=" $( cd ${selected_toolchain_dir } /bin &&  pwd) " 
272+         toolchain_bin_path=" $( cd ${toolchain_dir } /bin &&  pwd) " 
286273        echo  " export PATH=\$ {PATH}:${toolchain_bin_path} " >>  ${setup_path_script} 
287274    fi 
288275}
@@ -315,15 +302,17 @@ if [[ $is_script_sourced -eq 0 ]]; then
315302    setup_root_dir
316303    cd  " ${root_dir} " 
317304    echo  " [main] Using root dir ${root_dir}  and options:" 
318-     echo  " user_toolchain_url=${user_toolchain_url} " 
319-     echo  " user_toolchain_dir=${user_toolchain_dir} " 
320305    echo  " skip-fvp-setup=${skip_fvp_setup} " 
306+     echo  " target-toolchain=${target_toolchain} " 
321307    echo  " skip-toolchain-setup=${skip_toolchain_setup} " 
322308    echo  " skip-vela-setup=${skip_vela_setup} " 
323309
324310    #  Import utils
325311    source  $et_dir /backends/arm/scripts/utils.sh
326312
313+     #  Select appropriate toolchain
314+     select_toolchain
315+ 
327316    #  Setup toolchain
328317    if  [[ " ${skip_toolchain_setup} " -eq  0 ]];  then 
329318        setup_toolchain
0 commit comments