| Alanny Lopez | 56fc36a | 2017-07-27 13:55:44 -0500 | [diff] [blame] | 1 | #!/bin/bash | 
| Alanny Lopez | b0a12dd | 2017-04-24 16:21:47 -0500 | [diff] [blame] | 2 | ############################################################################### | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 3 | # | 
| Michael Shepos | 3939e95 | 2019-01-16 16:00:35 -0600 | [diff] [blame] | 4 | # This build script is for running the OpenBMC builds as Docker containers. | 
| Alanny Lopez | 3fbaa51 | 2017-04-24 15:46:52 -0500 | [diff] [blame] | 5 | # | 
| Alanny Lopez | b0a12dd | 2017-04-24 16:21:47 -0500 | [diff] [blame] | 6 | ############################################################################### | 
 | 7 | # | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 8 | # Script Variables: | 
 | 9 | #  build_scripts_dir  The path of the openbmc-build-scripts directory. | 
 | 10 | #                     Default: The directory containing this script | 
 | 11 | #  http_proxy         The HTTP address of the proxy server to connect to. | 
 | 12 | #                     Default: "", proxy is not setup if this is not set | 
 | 13 | #  WORKSPACE          Path of the workspace directory where some intermediate | 
 | 14 | #                     files and the images will be saved to. | 
 | 15 | #                     Default: "~/{RandomNumber}" | 
| Andrew Geissler | dc1e702 | 2018-03-26 07:54:48 -0700 | [diff] [blame] | 16 | #  num_cpu            Number of cpu's to give bitbake, default is total amount | 
 | 17 | #                     in system | 
| Alanny Lopez | b0a12dd | 2017-04-24 16:21:47 -0500 | [diff] [blame] | 18 | # | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 19 | # Docker Image Build Variables: | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 20 | #  BITBAKE_OPTS       Set to "-c populate_sdk" or whatever other BitBake options | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 21 | #                     you'd like to pass into the build. | 
 | 22 | #                     Default: "", no options set | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 23 | #  build_dir          Path where the actual BitBake build occurs inside the | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 24 | #                     container, path cannot be located on network storage. | 
 | 25 | #                     Default: "/tmp/openbmc" | 
 | 26 | #  distro             The distro used as the base image for the build image: | 
 | 27 | #                     fedora|ubuntu | 
 | 28 | #                     Default: "ubuntu" | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 29 | #  img_name           The name given to the target build's docker image. | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 30 | #                     Default: "openbmc/${distro}:${imgtag}-${target}-${ARCH}" | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 31 | #  img_tag            The base docker image distro tag: | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 32 | #                     ubuntu: latest|16.04|14.04|trusty|xenial | 
 | 33 | #                     fedora: 23|24|25 | 
 | 34 | #                     Default: "latest" | 
 | 35 | #  target             The target we aim to build: | 
| Andrew Geissler | dd82072 | 2018-02-20 13:42:58 -0600 | [diff] [blame] | 36 | #                     evb-ast2500|palmetto|qemu|qemux86-64 | 
| Vijay Khemka | 4c5b12e | 2019-01-23 14:50:09 -0800 | [diff] [blame] | 37 | #                     romulus|s2600wf|witherspoon|zaius|tiogapass | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 38 | #                     Default: "qemu" | 
| Alanny Lopez | 723fea6 | 2017-09-12 11:22:17 -0500 | [diff] [blame] | 39 | # | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 40 | # Deployment Variables: | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 41 | #  obmc_dir           Path of the OpenBMC repo directory used as a reference | 
| Alanny Lopez | e08e870 | 2018-02-24 18:07:13 -0600 | [diff] [blame] | 42 | #                     for the build inside the container. | 
 | 43 | #                     Default: "${WORKSPACE}/openbmc" | 
| Michael Shepos | 10afbb2 | 2019-02-06 13:33:07 -0600 | [diff] [blame] | 44 | #  xtrct_small_copy_dir | 
 | 45 | #                     Directory within build_dir that should be copied to | 
 | 46 | #                     xtrct_path. The directory and all parents up to, but not | 
 | 47 | #                     including, build_dir will be copied. For example, if | 
 | 48 | #                     build_dir is set to "/tmp/openbmc" and this is set to | 
 | 49 | #                     "build/tmp", the directory at xtrct_path will have the | 
 | 50 | #                     following directory structure: | 
 | 51 | #                     xtrct_path | 
 | 52 | #                      | - build | 
 | 53 | #                        | - tmp | 
 | 54 | #                          ... | 
 | 55 | #                     Can also be set to the empty string to copy the entire | 
 | 56 | #                     contents of build_dir to xtrct_path. | 
 | 57 | #                     Default: "deploy/images". | 
| Alanny Lopez | b0a12dd | 2017-04-24 16:21:47 -0500 | [diff] [blame] | 58 | # | 
 | 59 | ############################################################################### | 
| Joel Stanley | 4b8b239 | 2016-02-12 15:44:57 +1030 | [diff] [blame] | 60 | # Trace bash processing. Set -e so when a step fails, we fail the build | 
| Joel Stanley | 38c9d14 | 2016-02-16 12:31:55 +1030 | [diff] [blame] | 61 | set -xeo pipefail | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 62 |  | 
| Alanny Lopez | 4696770 | 2018-02-25 00:29:14 -0600 | [diff] [blame] | 63 | # Script Variables: | 
 | 64 | build_scripts_dir=${build_scripts_dir:-"$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"} | 
 | 65 | http_proxy=${http_proxy:-} | 
 | 66 | WORKSPACE=${WORKSPACE:-${HOME}/${RANDOM}${RANDOM}} | 
| Andrew Geissler | dc1e702 | 2018-03-26 07:54:48 -0700 | [diff] [blame] | 67 | num_cpu=${num_cpu:-$(nproc)} | 
| Alanny Lopez | 4696770 | 2018-02-25 00:29:14 -0600 | [diff] [blame] | 68 |  | 
 | 69 | # Docker Image Build Variables: | 
 | 70 | build_dir=${build_dir:-/tmp/openbmc} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 71 | distro=${distro:-ubuntu} | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 72 | img_tag=${img_tag:-latest} | 
| Alanny Lopez | 4696770 | 2018-02-25 00:29:14 -0600 | [diff] [blame] | 73 | target=${target:-qemu} | 
 | 74 |  | 
 | 75 | # Deployment variables | 
| Alanny Lopez | 4696770 | 2018-02-25 00:29:14 -0600 | [diff] [blame] | 76 | obmc_dir=${obmc_dir:-${WORKSPACE}/openbmc} | 
| Michael Shepos | 3939e95 | 2019-01-16 16:00:35 -0600 | [diff] [blame] | 77 | ssc_dir=${HOME} | 
| Michael Shepos | 10afbb2 | 2019-02-06 13:33:07 -0600 | [diff] [blame] | 78 | xtrct_small_copy_dir=${xtrct_small_copy_dir:-deploy/images} | 
| Michael Shepos | 3939e95 | 2019-01-16 16:00:35 -0600 | [diff] [blame] | 79 | xtrct_path="${obmc_dir}/build/tmp" | 
 | 80 | xtrct_copy_timeout="300" | 
| Alanny Lopez | 4696770 | 2018-02-25 00:29:14 -0600 | [diff] [blame] | 81 |  | 
| Chris Smart | c352254 | 2016-02-16 11:59:36 +1100 | [diff] [blame] | 82 | PROXY="" | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 83 |  | 
| Alanny Lopez | ccc650e | 2017-04-24 15:14:20 -0500 | [diff] [blame] | 84 | # Determine the architecture | 
 | 85 | ARCH=$(uname -m) | 
 | 86 |  | 
 | 87 | # Determine the prefix of the Dockerfile's base image | 
 | 88 | case ${ARCH} in | 
 | 89 |   "ppc64le") | 
 | 90 |     DOCKER_BASE="ppc64le/" | 
 | 91 |     ;; | 
 | 92 |   "x86_64") | 
 | 93 |     DOCKER_BASE="" | 
 | 94 |     ;; | 
 | 95 |   *) | 
 | 96 |     echo "Unsupported system architecture(${ARCH}) found for docker image" | 
 | 97 |     exit 1 | 
 | 98 | esac | 
| Andrew Geissler | 11abbbe | 2016-08-14 19:39:47 -0500 | [diff] [blame] | 99 |  | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 100 | # Timestamp for job | 
 | 101 | echo "Build started, $(date)" | 
 | 102 |  | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 103 | # If the obmc_dir directory doesn't exist clone it in | 
 | 104 | if [ ! -d ${obmc_dir} ]; then | 
 | 105 |   echo "Clone in openbmc master to ${obmc_dir}" | 
 | 106 |   git clone https://github.com/openbmc/openbmc ${obmc_dir} | 
| Andrew Geissler | c3c3520 | 2016-08-16 08:47:50 -0500 | [diff] [blame] | 107 | fi | 
 | 108 |  | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 109 | # Make and chown the xtrct_path directory to avoid permission errors | 
 | 110 | if [ ! -d ${xtrct_path} ]; then | 
 | 111 |   mkdir -p ${xtrct_path} | 
| Alanny Lopez | 723fea6 | 2017-09-12 11:22:17 -0500 | [diff] [blame] | 112 | fi | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 113 | chown ${UID}:${GROUPS} ${xtrct_path} | 
| Alanny Lopez | 723fea6 | 2017-09-12 11:22:17 -0500 | [diff] [blame] | 114 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 115 | # Work out what build target we should be running and set BitBake command | 
| Michael Shepos | 2de03e9 | 2018-11-07 15:54:56 -0600 | [diff] [blame] | 116 | MACHINE="" | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 117 | case ${target} in | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 118 |   palmetto) | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 119 |     LAYER_DIR="meta-ibm/meta-palmetto" | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 120 |     ;; | 
| Joel Stanley | 0e07720 | 2016-06-28 16:42:45 +0930 | [diff] [blame] | 121 |   witherspoon) | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 122 |     LAYER_DIR="meta-ibm/meta-witherspoon" | 
| Joel Stanley | 0e07720 | 2016-06-28 16:42:45 +0930 | [diff] [blame] | 123 |     ;; | 
| Joel Stanley | 0e07720 | 2016-06-28 16:42:45 +0930 | [diff] [blame] | 124 |   evb-ast2500) | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 125 |     LAYER_DIR="meta-evb/meta-evb-aspeed/meta-evb-ast2500" | 
| Joel Stanley | 0e07720 | 2016-06-28 16:42:45 +0930 | [diff] [blame] | 126 |     ;; | 
| Ed Tanous | 6dc40d9 | 2018-07-30 11:13:36 -0700 | [diff] [blame] | 127 |   s2600wf) | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 128 |     LAYER_DIR="meta-intel/meta-s2600wf" | 
| Ed Tanous | 6dc40d9 | 2018-07-30 11:13:36 -0700 | [diff] [blame] | 129 |     ;; | 
| Joel Stanley | 915381f | 2016-11-01 16:58:59 +1030 | [diff] [blame] | 130 |   zaius) | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 131 |     LAYER_DIR="meta-ingrasys/meta-zaius" | 
| Joel Stanley | 915381f | 2016-11-01 16:58:59 +1030 | [diff] [blame] | 132 |     ;; | 
 | 133 |   romulus) | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 134 |     LAYER_DIR="meta-ibm/meta-romulus" | 
| Joel Stanley | 915381f | 2016-11-01 16:58:59 +1030 | [diff] [blame] | 135 |     ;; | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 136 |   qemu) | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 137 |     LAYER_DIR="meta-phosphor" | 
| Michael Shepos | 2de03e9 | 2018-11-07 15:54:56 -0600 | [diff] [blame] | 138 |     # MACHINE defaults to `qemuarm` in this layer, no change necessary | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 139 |     ;; | 
| Andrew Geissler | dd82072 | 2018-02-20 13:42:58 -0600 | [diff] [blame] | 140 |   qemux86-64) | 
| Michael Shepos | 2de03e9 | 2018-11-07 15:54:56 -0600 | [diff] [blame] | 141 |     LAYER_DIR="meta-phosphor" | 
 | 142 |     # MACHINE defaults to `qemuarm` in this layer, change to `qemux86-64` | 
 | 143 |     MACHINE="qemux86-64" | 
| Andrew Geissler | dd82072 | 2018-02-20 13:42:58 -0600 | [diff] [blame] | 144 |     ;; | 
| Vijay Khemka | 4c5b12e | 2019-01-23 14:50:09 -0800 | [diff] [blame] | 145 |   tiogapass) | 
 | 146 |     LAYER_DIR="meta-facebook/meta-tiogapass" | 
 | 147 |     ;; | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 148 |   *) | 
 | 149 |     exit 1 | 
 | 150 |     ;; | 
 | 151 | esac | 
 | 152 |  | 
| Brad Bishop | 7161a17 | 2018-10-05 16:48:06 -0400 | [diff] [blame] | 153 | BITBAKE_CMD="TEMPLATECONF=${LAYER_DIR}/conf source oe-init-build-env" | 
 | 154 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 155 | # Configure Docker build | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 156 | if [[ "${distro}" == fedora ]];then | 
 | 157 |  | 
 | 158 |   if [[ -n "${http_proxy}" ]]; then | 
 | 159 |     PROXY="RUN echo \"proxy=${http_proxy}\" >> /etc/dnf/dnf.conf" | 
 | 160 |   fi | 
 | 161 |  | 
 | 162 |   Dockerfile=$(cat << EOF | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 163 |   FROM ${DOCKER_BASE}${distro}:${img_tag} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 164 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 165 |   ${PROXY} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 166 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 167 |   # Set the locale | 
 | 168 |   RUN locale-gen en_US.UTF-8 | 
 | 169 |   ENV LANG en_US.UTF-8 | 
 | 170 |   ENV LANGUAGE en_US:en | 
 | 171 |   ENV LC_ALL en_US.UTF-8 | 
| Saqib Khan | 7563512 | 2017-03-23 10:57:34 -0500 | [diff] [blame] | 172 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 173 |   RUN dnf --refresh install -y \ | 
 | 174 |       bzip2 \ | 
 | 175 |       chrpath \ | 
 | 176 |       cpio \ | 
 | 177 |       diffstat \ | 
 | 178 |       findutils \ | 
 | 179 |       gcc \ | 
 | 180 |       gcc-c++ \ | 
 | 181 |       git \ | 
 | 182 |       make \ | 
 | 183 |       patch \ | 
 | 184 |       perl-bignum \ | 
 | 185 |       perl-Data-Dumper \ | 
 | 186 |       perl-Thread-Queue \ | 
 | 187 |       python-devel \ | 
 | 188 |       python3-devel \ | 
 | 189 |       SDL-devel \ | 
 | 190 |       socat \ | 
 | 191 |       subversion \ | 
 | 192 |       tar \ | 
 | 193 |       texinfo \ | 
 | 194 |       wget \ | 
| Saqib Khan | 5158a32 | 2017-10-23 11:31:24 -0500 | [diff] [blame] | 195 |       which \ | 
 | 196 |       iputils-ping | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 197 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 198 |   RUN grep -q ${GROUPS} /etc/group || groupadd -g ${GROUPS} ${USER} | 
 | 199 |   RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS} ${USER} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 200 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 201 |   USER ${USER} | 
 | 202 |   ENV HOME ${HOME} | 
 | 203 |   RUN /bin/bash | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 204 | EOF | 
 | 205 | ) | 
 | 206 |  | 
| Alanny Lopez | ccc650e | 2017-04-24 15:14:20 -0500 | [diff] [blame] | 207 | elif [[ "${distro}" == ubuntu ]]; then | 
 | 208 |  | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 209 |   if [[ -n "${http_proxy}" ]]; then | 
 | 210 |     PROXY="RUN echo \"Acquire::http::Proxy \\"\"${http_proxy}/\\"\";\" > /etc/apt/apt.conf.d/000apt-cacher-ng-proxy" | 
 | 211 |   fi | 
 | 212 |  | 
 | 213 |   Dockerfile=$(cat << EOF | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 214 |   FROM ${DOCKER_BASE}${distro}:${img_tag} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 215 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 216 |   ${PROXY} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 217 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 218 |   ENV DEBIAN_FRONTEND noninteractive | 
| Saqib Khan | 7563512 | 2017-03-23 10:57:34 -0500 | [diff] [blame] | 219 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 220 |   RUN apt-get update && apt-get install -yy \ | 
 | 221 |       build-essential \ | 
 | 222 |       chrpath \ | 
 | 223 |       debianutils \ | 
 | 224 |       diffstat \ | 
 | 225 |       gawk \ | 
 | 226 |       git \ | 
 | 227 |       libdata-dumper-simple-perl \ | 
 | 228 |       libsdl1.2-dev \ | 
 | 229 |       libthread-queue-any-perl \ | 
| Alanny Lopez | 27af3a0 | 2017-05-26 10:49:06 -0500 | [diff] [blame] | 230 |       locales \ | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 231 |       python \ | 
 | 232 |       python3 \ | 
 | 233 |       socat \ | 
 | 234 |       subversion \ | 
 | 235 |       texinfo \ | 
 | 236 |       cpio \ | 
| Saqib Khan | 5158a32 | 2017-10-23 11:31:24 -0500 | [diff] [blame] | 237 |       wget \ | 
 | 238 |       iputils-ping | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 239 |  | 
| Alanny Lopez | 27af3a0 | 2017-05-26 10:49:06 -0500 | [diff] [blame] | 240 |   # Set the locale | 
 | 241 |   RUN locale-gen en_US.UTF-8 | 
 | 242 |   ENV LANG en_US.UTF-8 | 
 | 243 |   ENV LANGUAGE en_US:en | 
 | 244 |   ENV LC_ALL en_US.UTF-8 | 
 | 245 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 246 |   RUN grep -q ${GROUPS} /etc/group || groupadd -g ${GROUPS} ${USER} | 
 | 247 |   RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS} ${USER} | 
| Chris Smart | d30c590 | 2016-03-01 15:00:54 +1100 | [diff] [blame] | 248 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 249 |   USER ${USER} | 
 | 250 |   ENV HOME ${HOME} | 
 | 251 |   RUN /bin/bash | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 252 | EOF | 
 | 253 | ) | 
 | 254 | fi | 
 | 255 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 256 | # Create the Docker run script | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 257 | export PROXY_HOST=${http_proxy/#http*:\/\/} | 
 | 258 | export PROXY_HOST=${PROXY_HOST/%:[0-9]*} | 
 | 259 | export PROXY_PORT=${http_proxy/#http*:\/\/*:} | 
 | 260 |  | 
| Chris Smart | 01d2b96 | 2015-11-11 18:05:30 +1100 | [diff] [blame] | 261 | mkdir -p ${WORKSPACE} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 262 |  | 
| Chris Smart | 01d2b96 | 2015-11-11 18:05:30 +1100 | [diff] [blame] | 263 | cat > "${WORKSPACE}"/build.sh << EOF_SCRIPT | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 264 | #!/bin/bash | 
 | 265 |  | 
| Joel Stanley | 38c9d14 | 2016-02-16 12:31:55 +1030 | [diff] [blame] | 266 | set -xeo pipefail | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 267 |  | 
| Alanny Lopez | 723fea6 | 2017-09-12 11:22:17 -0500 | [diff] [blame] | 268 | # Go into the OpenBMC directory, the build will handle changing directories | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 269 | cd ${obmc_dir} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 270 |  | 
 | 271 | # Set up proxies | 
 | 272 | export ftp_proxy=${http_proxy} | 
 | 273 | export http_proxy=${http_proxy} | 
 | 274 | export https_proxy=${http_proxy} | 
 | 275 |  | 
| Chris Smart | 01d2b96 | 2015-11-11 18:05:30 +1100 | [diff] [blame] | 276 | mkdir -p ${WORKSPACE}/bin | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 277 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 278 | # Configure proxies for BitBake | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 279 | if [[ -n "${http_proxy}" ]]; then | 
 | 280 |  | 
| Chris Smart | d30c590 | 2016-03-01 15:00:54 +1100 | [diff] [blame] | 281 |   cat > ${WORKSPACE}/bin/git-proxy << \EOF_GIT | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 282 |   #!/bin/bash | 
 | 283 |   # \$1 = hostname, \$2 = port | 
 | 284 |   PROXY=${PROXY_HOST} | 
 | 285 |   PROXY_PORT=${PROXY_PORT} | 
 | 286 |   exec socat STDIO PROXY:\${PROXY}:\${1}:\${2},proxyport=\${PROXY_PORT} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 287 | EOF_GIT | 
 | 288 |  | 
| Chris Smart | 01d2b96 | 2015-11-11 18:05:30 +1100 | [diff] [blame] | 289 |   chmod a+x ${WORKSPACE}/bin/git-proxy | 
 | 290 |   export PATH=${WORKSPACE}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 291 |   git config core.gitProxy git-proxy | 
 | 292 |  | 
 | 293 |   mkdir -p ~/.subversion | 
 | 294 |  | 
 | 295 |   cat > ~/.subversion/servers << EOF_SVN | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 296 |   [global] | 
 | 297 |   http-proxy-host = ${PROXY_HOST} | 
 | 298 |   http-proxy-port = ${PROXY_PORT} | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 299 | EOF_SVN | 
 | 300 | fi | 
 | 301 |  | 
 | 302 | # Source our build env | 
 | 303 | ${BITBAKE_CMD} | 
 | 304 |  | 
| Michael Shepos | 2de03e9 | 2018-11-07 15:54:56 -0600 | [diff] [blame] | 305 | # Change MACHINE name when given for build target | 
 | 306 | if [[ -n "${MACHINE}" ]]; then | 
 | 307 |   sed "s/^MACHINE\ ??=.*/MACHINE\ ??=\ \"${MACHINE}\"/" -i conf/local.conf | 
 | 308 | fi | 
 | 309 |  | 
| Alanny Lopez | eaa2eae | 2017-04-24 14:55:07 -0500 | [diff] [blame] | 310 | # Custom BitBake config settings | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 311 | cat >> conf/local.conf << EOF_CONF | 
| Chris Smart | c650c20 | 2015-11-25 15:58:53 +1100 | [diff] [blame] | 312 | BB_NUMBER_THREADS = "$(nproc)" | 
 | 313 | PARALLEL_MAKE = "-j$(nproc)" | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 314 | INHERIT += "rm_work" | 
 | 315 | BB_GENERATE_MIRROR_TARBALLS = "1" | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 316 | DL_DIR="${ssc_dir}/bitbake_downloads" | 
 | 317 | SSTATE_DIR="${ssc_dir}/bitbake_sharedstatecache" | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 318 | USER_CLASSES += "buildstats" | 
| Andrew Geissler | 931ec67 | 2016-08-11 13:10:05 -0500 | [diff] [blame] | 319 | INHERIT_remove = "uninative" | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 320 | TMPDIR="${build_dir}" | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 321 | EOF_CONF | 
 | 322 |  | 
 | 323 | # Kick off a build | 
| Ed Tanous | 7188deb | 2019-04-12 13:01:08 -0700 | [diff] [blame] | 324 | bitbake ${BITBAKE_OPTS} obmc-phosphor-image obmc-phosphor-debug-tarball | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 325 |  | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 326 | # Copy internal build directory into xtrct_path directory | 
| Charles Paul Hofer | b249c2c | 2018-09-12 12:15:13 -0500 | [diff] [blame] | 327 | if [[ ${xtrct_small_copy_dir} ]]; then | 
 | 328 |   mkdir -p ${xtrct_path}/${xtrct_small_copy_dir} | 
 | 329 |   timeout ${xtrct_copy_timeout} cp -r ${build_dir}/${xtrct_small_copy_dir}/* ${xtrct_path}/${xtrct_small_copy_dir} | 
 | 330 | else | 
 | 331 |   timeout ${xtrct_copy_timeout} cp -r ${build_dir}/* ${xtrct_path} | 
 | 332 | fi | 
| Charles Paul Hofer | be8700e | 2018-09-05 09:28:08 -0500 | [diff] [blame] | 333 |  | 
 | 334 | if [[ 0 -ne $? ]]; then | 
 | 335 |   echo "Received a non-zero exit code from timeout" | 
 | 336 |   exit 1 | 
 | 337 | fi | 
 | 338 |  | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 339 | EOF_SCRIPT | 
 | 340 |  | 
 | 341 | chmod a+x ${WORKSPACE}/build.sh | 
 | 342 |  | 
| Alanny Lopez | 5118688 | 2017-08-01 16:14:41 -0500 | [diff] [blame] | 343 | # Give the Docker image a name based on the distro,tag,arch,and target | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 344 | img_name=${img_name:-openbmc/${distro}:${img_tag}-${target}-${ARCH}} | 
| Alanny Lopez | 5118688 | 2017-08-01 16:14:41 -0500 | [diff] [blame] | 345 |  | 
 | 346 | # Build the Docker image | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 347 | docker build -t ${img_name} - <<< "${Dockerfile}" | 
| Alanny Lopez | 5118688 | 2017-08-01 16:14:41 -0500 | [diff] [blame] | 348 |  | 
| Michael Shepos | 3939e95 | 2019-01-16 16:00:35 -0600 | [diff] [blame] | 349 | # If obmc_dir or ssc_dir are ${HOME} or a subdirectory they will not be mounted | 
 | 350 | mount_obmc_dir="-v ""${obmc_dir}"":""${obmc_dir}"" " | 
 | 351 | mount_ssc_dir="-v ""${ssc_dir}"":""${ssc_dir}"" " | 
 | 352 | if [[ "${obmc_dir}" = "${HOME}/"* || "${obmc_dir}" = "${HOME}" ]];then | 
 | 353 | mount_obmc_dir="" | 
| Alanny Lopez | 3fbaa51 | 2017-04-24 15:46:52 -0500 | [diff] [blame] | 354 | fi | 
| Michael Shepos | 3939e95 | 2019-01-16 16:00:35 -0600 | [diff] [blame] | 355 | if [[ "${ssc_dir}" = "${HOME}/"* || "${ssc_dir}" = "${HOME}" ]];then | 
 | 356 | mount_ssc_dir="" | 
 | 357 | fi | 
 | 358 |  | 
 | 359 | # Run the Docker container, execute the build.sh script | 
 | 360 | docker run \ | 
 | 361 | --cap-add=sys_admin \ | 
 | 362 | --net=host \ | 
 | 363 | --rm=true \ | 
 | 364 | -e WORKSPACE=${WORKSPACE} \ | 
 | 365 | -w "${HOME}" \ | 
 | 366 | -v "${HOME}":"${HOME}" \ | 
 | 367 | ${mount_obmc_dir} \ | 
 | 368 | ${mount_ssc_dir} \ | 
 | 369 | --cpus="$num_cpu" \ | 
 | 370 | -t ${img_name} \ | 
 | 371 | ${WORKSPACE}/build.sh | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 372 |  | 
| Alanny Lopez | d32d332 | 2017-07-18 15:21:39 -0500 | [diff] [blame] | 373 | # To maintain function of resources that used an older path, add a link | 
| Alanny Lopez | 1246b03 | 2018-02-24 23:34:55 -0600 | [diff] [blame] | 374 | ln -sf ${xtrct_path}/deploy ${WORKSPACE}/deploy | 
| Alanny Lopez | d32d332 | 2017-07-18 15:21:39 -0500 | [diff] [blame] | 375 |  | 
| Chris Smart | 0265171 | 2015-11-11 11:09:00 +1100 | [diff] [blame] | 376 | # Timestamp for build | 
| Alanny Lopez | 0e8ad99 | 2017-06-19 15:45:23 -0500 | [diff] [blame] | 377 | echo "Build completed, $(date)" |