12add0d91Sopenharmony_ci#!/usr/bin/env sh
22add0d91Sopenharmony_ci# This is intended to be used in CI only.
32add0d91Sopenharmony_ci
42add0d91Sopenharmony_ciset -ex
52add0d91Sopenharmony_ci
62add0d91Sopenharmony_ciecho "Setup toolchain"
72add0d91Sopenharmony_citoolchain=
82add0d91Sopenharmony_ciif [ -n "$TOOLCHAIN" ]; then
92add0d91Sopenharmony_ci  toolchain=$TOOLCHAIN
102add0d91Sopenharmony_cielse
112add0d91Sopenharmony_ci  # Pin the nightly version as newer nightly versions break CI,
122add0d91Sopenharmony_ci  # https://github.com/rust-lang/rust/issues/103673 contains related information.
132add0d91Sopenharmony_ci  case "$TARGET" in
142add0d91Sopenharmony_ci    *android*) toolchain=nightly-2022-10-09;;
152add0d91Sopenharmony_ci    *) toolchain=nightly;;
162add0d91Sopenharmony_ci  esac
172add0d91Sopenharmony_cifi
182add0d91Sopenharmony_ciif [ "$OS" = "windows" ]; then
192add0d91Sopenharmony_ci  : "${TARGET?The TARGET environment variable must be set.}"
202add0d91Sopenharmony_ci  rustup set profile minimal
212add0d91Sopenharmony_ci  rustup update --force $toolchain-"$TARGET"
222add0d91Sopenharmony_ci  rustup default $toolchain-"$TARGET"
232add0d91Sopenharmony_cielse
242add0d91Sopenharmony_ci  rustup set profile minimal
252add0d91Sopenharmony_ci  rustup update --force $toolchain
262add0d91Sopenharmony_ci  rustup default $toolchain
272add0d91Sopenharmony_cifi
282add0d91Sopenharmony_ci
292add0d91Sopenharmony_ciif [ -n "$TARGET" ]; then
302add0d91Sopenharmony_ci  echo "Install target"
312add0d91Sopenharmony_ci  rustup target add "$TARGET"
322add0d91Sopenharmony_cifi
332add0d91Sopenharmony_ci
342add0d91Sopenharmony_ciif [ -n "$INSTALL_RUST_SRC" ]; then
352add0d91Sopenharmony_ci  echo "Install rust-src"
362add0d91Sopenharmony_ci  rustup component add rust-src
372add0d91Sopenharmony_cifi
382add0d91Sopenharmony_ci
392add0d91Sopenharmony_ciif [ "$OS" = "windows" ]; then
402add0d91Sopenharmony_ci  if [ "$ARCH_BITS" = "i686" ]; then
412add0d91Sopenharmony_ci    echo "Install MinGW32"
422add0d91Sopenharmony_ci    choco install mingw --x86 --force
432add0d91Sopenharmony_ci  fi
442add0d91Sopenharmony_ci
452add0d91Sopenharmony_ci  echo "Find GCC libraries"
462add0d91Sopenharmony_ci  gcc -print-search-dirs
472add0d91Sopenharmony_ci  /usr/bin/find "C:\ProgramData\Chocolatey" -name "crt2*"
482add0d91Sopenharmony_ci  /usr/bin/find "C:\ProgramData\Chocolatey" -name "dllcrt2*"
492add0d91Sopenharmony_ci  /usr/bin/find "C:\ProgramData\Chocolatey" -name "libmsvcrt*"
502add0d91Sopenharmony_ci
512add0d91Sopenharmony_ci  if [ -n "$ARCH_BITS" ]; then
522add0d91Sopenharmony_ci    echo "Fix MinGW"
532add0d91Sopenharmony_ci    for i in crt2.o dllcrt2.o libmingwex.a libmsvcrt.a ; do
542add0d91Sopenharmony_ci      cp -f "/C/ProgramData/Chocolatey/lib/mingw/tools/install/mingw$ARCH_BITS/$ARCH-w64-mingw32/lib/$i" "$(rustc --print sysroot)/lib/rustlib/$TARGET/lib"
552add0d91Sopenharmony_ci    done
562add0d91Sopenharmony_ci  fi
572add0d91Sopenharmony_cifi
582add0d91Sopenharmony_ci
592add0d91Sopenharmony_ciecho "Query rust and cargo versions"
602add0d91Sopenharmony_cicommand -v rustc
612add0d91Sopenharmony_cicommand -v cargo
622add0d91Sopenharmony_cicommand -v rustup
632add0d91Sopenharmony_cirustc -Vv
642add0d91Sopenharmony_cicargo -V
652add0d91Sopenharmony_cirustup -Vv
662add0d91Sopenharmony_cirustup show
672add0d91Sopenharmony_ci
682add0d91Sopenharmony_ciecho "Generate lockfile"
692add0d91Sopenharmony_ciN=5
702add0d91Sopenharmony_cin=0
712add0d91Sopenharmony_ciuntil [ $n -ge $N ]
722add0d91Sopenharmony_cido
732add0d91Sopenharmony_ci  if cargo generate-lockfile; then
742add0d91Sopenharmony_ci    break
752add0d91Sopenharmony_ci  fi
762add0d91Sopenharmony_ci  n=$((n+1))
772add0d91Sopenharmony_ci  sleep 1
782add0d91Sopenharmony_cidone
79