| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 1 | #!/bin/bash | 
|  | 2 |  | 
|  | 3 | # This build script is for running the Jenkins builds using docker. | 
|  | 4 | # | 
|  | 5 | # It expects a few variables which are part of Jenkins build job matrix: | 
|  | 6 | #   target = palmetto|qemu|habanero|firestone|garrison | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 7 | #   distro = ubuntu|fedora | 
|  | 8 | #   WORKSPACE = Random Number by Default | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 9 |  | 
|  | 10 | # Trace bash processing | 
|  | 11 | set -x | 
|  | 12 |  | 
|  | 13 | # Default variables | 
|  | 14 | target=${target:-palmetto} | 
|  | 15 | distro=${distro:-ubuntu} | 
|  | 16 | WORKSPACE=${WORKSPACE:-${HOME}/${RANDOM}${RANDOM}} | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 17 |  | 
|  | 18 | # Timestamp for job | 
|  | 19 | echo "Build started, $(date)" | 
|  | 20 |  | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 21 | # if there is no open-power directory clone in master into workspace | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 22 | if [ ! -e "${WORKSPACE}"/op-build ]; then | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 23 | echo "Clone in openpower master to ${WORKSPACE}/op-build" | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 24 | git clone --recursive https://github.com/open-power/op-build "${WORKSPACE}"/op-build | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 25 | fi | 
|  | 26 |  | 
|  | 27 | # Determine the architecture | 
|  | 28 | ARCH=$(uname -m) | 
|  | 29 |  | 
|  | 30 | # Determine the prefix of the Dockerfile's base image | 
|  | 31 | case ${ARCH} in | 
|  | 32 | "ppc64le") | 
|  | 33 | DOCKER_BASE="ppc64le/" | 
|  | 34 | ;; | 
|  | 35 | "x86_64") | 
|  | 36 | DOCKER_BASE="" | 
|  | 37 | ;; | 
|  | 38 | *) | 
|  | 39 | echo "Unsupported system architecture(${ARCH}) found for docker image" | 
|  | 40 | exit 1 | 
|  | 41 | esac | 
|  | 42 |  | 
|  | 43 |  | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 44 | # Configure docker build | 
|  | 45 | if [[ "${distro}" == fedora ]];then | 
|  | 46 |  | 
|  | 47 | Dockerfile=$(cat << EOF | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 48 | FROM ${DOCKER_BASE}fedora:latest | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 49 |  | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 50 | RUN dnf --refresh repolist && dnf install -y \ | 
|  | 51 | bc \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 52 | bison \ | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 53 | bzip2 \ | 
|  | 54 | cpio \ | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 55 | cscope \ | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 56 | ctags \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 57 | expat-devel \ | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 58 | findutils \ | 
|  | 59 | flex \ | 
|  | 60 | gcc-c++ \ | 
|  | 61 | git \ | 
|  | 62 | libxml2-devel \ | 
|  | 63 | ncurses-devel \ | 
| Joel Stanley | 2ab9a21 | 2017-03-23 10:56:27 +1030 | [diff] [blame] | 64 | openssl-devel \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 65 | patch \ | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 66 | perl \ | 
|  | 67 | perl-bignum \ | 
|  | 68 | "perl(Digest::SHA1)" \ | 
| Chris Smart | 905777e | 2016-03-11 15:01:48 +1100 | [diff] [blame] | 69 | "perl(Env)" \ | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 70 | "perl(Fatal)" \ | 
|  | 71 | "perl(Thread::Queue)" \ | 
|  | 72 | "perl(XML::SAX)" \ | 
|  | 73 | "perl(XML::Simple)" \ | 
|  | 74 | "perl(YAML)" \ | 
|  | 75 | "perl(XML::LibXML)" \ | 
|  | 76 | python \ | 
| Saqib Khan | 362ca85 | 2017-03-21 10:48:46 -0500 | [diff] [blame] | 77 | python3 \ | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 78 | tar \ | 
|  | 79 | unzip \ | 
|  | 80 | vim \ | 
|  | 81 | wget \ | 
|  | 82 | which \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 83 | zlib-devel \ | 
| Saqib Khan | 5158a32 | 2017-10-23 11:31:24 -0500 | [diff] [blame] | 84 | zlib-static \ | 
|  | 85 | iputils-ping | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 86 |  | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 87 | RUN grep -q ${GROUPS[0]} /etc/group || groupadd -g ${GROUPS[0]} ${USER} | 
|  | 88 | RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS[0]} ${USER} | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 89 |  | 
|  | 90 | USER ${USER} | 
|  | 91 | ENV HOME ${HOME} | 
|  | 92 | RUN /bin/bash | 
|  | 93 | EOF | 
|  | 94 | ) | 
|  | 95 |  | 
|  | 96 | elif [[ "${distro}" == ubuntu ]]; then | 
|  | 97 |  | 
|  | 98 | Dockerfile=$(cat << EOF | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 99 | FROM ${DOCKER_BASE}ubuntu:latest | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 100 |  | 
|  | 101 | ENV DEBIAN_FRONTEND noninteractive | 
| Chris Smart | fc730ff | 2016-03-09 20:17:19 +1100 | [diff] [blame] | 102 | RUN apt-get update && apt-get install -yy \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 103 | bc \ | 
|  | 104 | bison \ | 
|  | 105 | build-essential \ | 
|  | 106 | cscope \ | 
| AlannyLopez | 266312e | 2017-02-17 10:37:28 -0600 | [diff] [blame] | 107 | cpio \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 108 | ctags \ | 
|  | 109 | flex \ | 
|  | 110 | g++ \ | 
|  | 111 | git \ | 
| Joel Stanley | 2ab9a21 | 2017-03-23 10:56:27 +1030 | [diff] [blame] | 112 | libssl-dev \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 113 | libexpat-dev \ | 
|  | 114 | libz-dev \ | 
|  | 115 | libxml-sax-perl \ | 
|  | 116 | libxml-simple-perl \ | 
|  | 117 | libxml2-dev \ | 
|  | 118 | libxml2-utils \ | 
|  | 119 | language-pack-en \ | 
|  | 120 | python \ | 
| Saqib Khan | 362ca85 | 2017-03-21 10:48:46 -0500 | [diff] [blame] | 121 | python3 \ | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 122 | texinfo \ | 
|  | 123 | unzip \ | 
|  | 124 | vim-common \ | 
|  | 125 | wget\ | 
| Rahul Maheshwari | d6b829e | 2017-03-20 13:34:35 -0500 | [diff] [blame] | 126 | xsltproc \ | 
| Saqib Khan | 5158a32 | 2017-10-23 11:31:24 -0500 | [diff] [blame] | 127 | libssl-dev \ | 
|  | 128 | iputils-ping | 
| Chris Smart | 4593d4f | 2016-03-09 15:50:59 +1100 | [diff] [blame] | 129 |  | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 130 | RUN grep -q ${GROUPS[0]} /etc/group || groupadd -g ${GROUPS[0]} ${USER} | 
|  | 131 | RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS[0]} ${USER} | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 132 |  | 
|  | 133 | USER ${USER} | 
|  | 134 | ENV HOME ${HOME} | 
|  | 135 | RUN /bin/bash | 
|  | 136 | EOF | 
|  | 137 | ) | 
|  | 138 | fi | 
|  | 139 |  | 
|  | 140 | # Build the docker container | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 141 | if ! docker build -t op-build/"${distro}" - <<< "${Dockerfile}" ; then | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 142 | echo "Failed to build docker container." | 
|  | 143 | exit 1 | 
|  | 144 | fi | 
|  | 145 |  | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 146 | mkdir -p "${WORKSPACE}" | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 147 |  | 
|  | 148 | cat > "${WORKSPACE}"/build.sh << EOF_SCRIPT | 
|  | 149 | #!/bin/bash | 
|  | 150 |  | 
|  | 151 | set -x | 
|  | 152 |  | 
| Joel Stanley | 21e6523 | 2015-12-11 15:40:54 +1030 | [diff] [blame] | 153 | # This ensures that the alias set in op-build-env is | 
|  | 154 | # avalaible in this script | 
|  | 155 | shopt -s expand_aliases | 
|  | 156 |  | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 157 | cd "${WORKSPACE}"/op-build | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 158 |  | 
|  | 159 | # Source our build env | 
|  | 160 | . op-build-env | 
|  | 161 |  | 
|  | 162 | # Configure | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 163 | op-build "${target}_defconfig" | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 164 |  | 
|  | 165 | # Kick off a build | 
| Joel Stanley | f00719d | 2015-12-11 15:16:32 +1030 | [diff] [blame] | 166 | op-build | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 167 |  | 
|  | 168 | EOF_SCRIPT | 
|  | 169 |  | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 170 | chmod a+x "${WORKSPACE}"/build.sh | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 171 |  | 
|  | 172 | # Run the docker container, execute the build script we just built | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 173 | docker run --net=host --rm=true -e WORKSPACE="${WORKSPACE}" --user="${USER}" \ | 
|  | 174 | -w "${HOME}" -v "${HOME}":"${HOME}" -t op-build/"${distro}" "${WORKSPACE}"/build.sh | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 175 |  | 
|  | 176 | # Create link to images for archiving | 
| Patrick Williams | 384d741 | 2020-11-06 16:15:41 -0600 | [diff] [blame] | 177 | ln -sf "${WORKSPACE}"/op-build/output/images "${WORKSPACE}"/images | 
| Joel Stanley | 2ed389f | 2015-12-11 15:07:07 +1030 | [diff] [blame] | 178 |  | 
|  | 179 | # Timestamp for build | 
|  | 180 | echo "Build completed, $(date)" |