aboutsummaryrefslogtreecommitdiffstats
path: root/dist/msys2-mingw/run.sh
blob: 32f971322cf48543fd6f649991c893c538b417fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/sh

# Stop in case of error
set -e

enable_color() {
  ENABLECOLOR='-c '
  ANSI_RED="\033[31m"
  ANSI_GREEN="\033[32m"
  ANSI_YELLOW="\033[33m"
  ANSI_BLUE="\033[34m"
  ANSI_MAGENTA="\033[35m"
  ANSI_GRAY="\033[90m"
  ANSI_CYAN="\033[36;1m"
  ANSI_DARKCYAN="\033[36m"
  ANSI_NOCOLOR="\033[0m"
}

disable_color() { unset ENABLECOLOR ANSI_RED ANSI_GREEN ANSI_YELLOW ANSI_BLUE ANSI_MAGENTA ANSI_CYAN ANSI_DARKCYAN ANSI_NOCOLOR; }
enable_color

print_start() {
  if [ "x$2" != "x" ]; then
    COL="$2"
  elif [ "x$BASE_COL" != "x" ]; then
    COL="$BASE_COL"
  else
    COL="$ANSI_YELLOW"
  fi
  printf "${COL}${1}$ANSI_NOCOLOR\n"
}

gstart () {
  print_start "$@"
}
gend () {
  :
}

[ -n "$CI" ] && {
  echo "INFO: set 'gstart' and 'gend' for CI"
  gstart () {
    printf '::group::'
    print_start "$@"
    SECONDS=0
  }

  gend () {
    duration=$SECONDS
    echo '::endgroup::'
    printf "${ANSI_GRAY}took $(($duration / 60)) min $(($duration % 60)) sec.${ANSI_NOCOLOR}\n"
  }
} || echo "INFO: not in CI"

#---

do_build () {
  gstart 'Install common build dependencies'
    pacman -S --noconfirm base-devel
  gend

  if [ -z "$TARGET" ]; then
    printf "${ANSI_RED}Undefined TARGET!$ANSI_NOCOLOR"
    exit 1
  fi
  cd "$TARGET"

  gstart "Fetch --unshallow"
  # The command 'git describe' (used for version) needs the history. Get it.
  # But the following command fails if the repository is complete.
  git fetch --unshallow || true
  gend

  MINGW_INSTALLS="$(echo "$MINGW_INSTALLS" | tr '[:upper:]' '[:lower:]')"

  case "$MINGW_INSTALLS" in
    mingw32)
      TARBALL_ARCH="i686"
    ;;
    mingw64)
      TARBALL_ARCH="x86_64"

      # FIXME: specific versions of these packages should be installed automatically by makepkg-mingw.
      # E.g.: mingw-w64-x86_64-llvm-8.0.1-3 mingw-w64-x86_64-clang-8.0.1-3 mingw-w64-x86_64-z3-4.8.5-1
      # However, specifying the version produces 'error: target not found:'
      gstart "Install build dependencies"
        pacman -S --noconfirm mingw-w64-x86_64-llvm mingw-w64-x86_64-clang mingw-w64-x86_64-z3
      gend
    ;;
    *)
      printf "${ANSI_RED}Unknown MING_INSTALLS=${MINGW_INSTALLS}!$ANSI_NOCOLOR"
      exit 1
  esac
  gstart 'Install toolchain'
    pacman -S --noconfirm mingw-w64-${TARBALL_ARCH}-toolchain
  gend

  gstart 'Build package'
    makepkg-mingw --noconfirm --noprogressbar -sCLf --noarchive
  gend

  gstart 'Archive package'
    makepkg-mingw --noconfirm --noprogressbar -R
  gend

  gstart 'List artifacts'
    ls -la
  gend

  gstart 'Install package'
    pacman --noconfirm -U "mingw-w64-${TARBALL_ARCH}-ghdl-${TARGET}-ci"-*-any.pkg.tar.zst
  gend
}

#---

do_test () {
  gstart 'Environment'
    env | grep MSYSTEM
    env | grep MINGW
  gend

  GHDL=ghdl ../../testsuite/testsuite.sh
}

#---

cd $(dirname $0)

case "$1" in
  -t)
    do_test
  ;;
  *)
    do_build
  ;;
esac