| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 1 | #!/usr/bin/env python3 | 
 | 2 | # | 
 | 3 | # Build the required docker image to run package unit tests | 
 | 4 | # | 
 | 5 | # Script Variables: | 
 | 6 | #   DOCKER_IMG_NAME:  <optional, the name of the docker image to generate> | 
 | 7 | #                     default is openbmc/ubuntu-unit-test | 
 | 8 | #   DISTRO:           <optional, the distro to build a docker image against> | 
 | 9 | #                     default is ubuntu:eoan | 
 | 10 | #   BRANCH:           <optional, branch to build from each of the openbmc/ | 
 | 11 | #                     repositories> | 
 | 12 | #                     default is master, which will be used if input branch not | 
 | 13 | #                     provided or not found | 
 | 14 | #   UBUNTU_MIRROR:    <optional, the URL of a mirror of Ubuntu to override the | 
 | 15 | #                     default ones in /etc/apt/sources.list> | 
 | 16 | #                     default is empty, and no mirror is used. | 
 | 17 | #   http_proxy        The HTTP address of the proxy server to connect to. | 
 | 18 | #                     Default: "", proxy is not setup if this is not set | 
 | 19 |  | 
 | 20 | import os | 
 | 21 | import sys | 
 | 22 | from sh import docker, git, nproc, uname | 
 | 23 |  | 
 | 24 | # Read a bunch of environment variables. | 
 | 25 | docker_image_name = os.environ.get("DOCKER_IMAGE_NAME", "openbmc/ubuntu-unit-test") | 
 | 26 | distro = os.environ.get("DISTRO", "ubuntu:focal") | 
 | 27 | branch = os.environ.get("BRANCH", "master") | 
 | 28 | ubuntu_mirror = os.environ.get("UBUNTU_MIRROR") | 
 | 29 | http_proxy = os.environ.get("http_proxy") | 
 | 30 |  | 
 | 31 | # Set up some common variables. | 
 | 32 | proc_count = nproc().strip() | 
 | 33 | username = os.environ.get("USER") | 
 | 34 | homedir = os.environ.get("HOME") | 
 | 35 | gid = os.getgid() | 
 | 36 | uid = os.getuid() | 
 | 37 |  | 
 | 38 | # Determine the architecture for Docker. | 
 | 39 | arch = uname("-m").strip() | 
 | 40 | if arch == "ppc64le": | 
 | 41 |     docker_base = "ppc64le/" | 
 | 42 | elif arch == "x86_64": | 
 | 43 |     docker_base = "" | 
 | 44 | else: | 
 | 45 |     print(f"Unsupported system architecture({arch}) found for docker image") | 
 | 46 |     sys.exit(1) | 
 | 47 |  | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 48 | # Packages to include in image. | 
 | 49 | packages = { | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 50 |     "boost": { | 
 | 51 |         "rev": "1.74.0", | 
 | 52 |         "url": ( | 
 | 53 |             lambda pkg, rev: f"https://dl.bintray.com/boostorg/release/{rev}/source/{pkg}_{rev.replace('.', '_')}.tar.bz2" | 
 | 54 |         ), | 
 | 55 |     }, | 
 | 56 |     "USCiLab/cereal": {"rev": "v1.3.0"}, | 
 | 57 |     "catchorg/Catch2": {"rev": "v2.12.2"}, | 
 | 58 |     "CLIUtils/CLI11": {"rev": "v1.9.0"}, | 
 | 59 |     "fmtlib/fmt": {"rev": "6.2.1"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 60 |     # Snapshot from 2020-01-03 | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 61 |     "Naios/function2": {"rev": "3a0746bf5f601dfed05330aefcb6854354fce07d"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 62 |     # Snapshot from 2020-02-13 | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 63 |     "google/googletest": {"rev": "23b2a3b1cf803999fb38175f6e9e038a4495c8a5"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 64 |     # Release 2020-08-06 | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 65 |     "nlohmann/json": {"rev": "v3.9.1"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 66 |     # Snapshot from 2019-05-24 | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 67 |     "linux-test-project/lcov": {"rev": "75fbae1cfc5027f818a0bb865bf6f96fab3202da"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 68 |     # dev-5.0 2019-05-03 | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 69 |     "openbmc/linux": {"rev": "8bf6567e77f7aa68975b7c9c6d044bba690bf327"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 70 |     # Snapshot from 2019-09-03 | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 71 |     "LibVNC/libvncserver": {"rev": "1354f7f1bb6962dab209eddb9d6aac1f03408110"}, | 
 | 72 |     "martinmoene/span-lite": {"rev": "v0.7.0"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 73 |     # version from meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_5.0.1.bb | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 74 |     "leethomason/tinyxml2": {"rev": "37bc3aca429f0164adf68c23444540b4a24b5778"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 75 |     # version from /meta-openembedded/meta-oe/recipes-devtools/boost-url/boost-url_git.bb | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 76 |     "CPPAlliance/url": {"rev": "a56ae0df6d3078319755fbaa67822b4fa7fd352b"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 77 |     # version from meta-openembedded/meta-oe/recipes-devtools/valijson/valijson_git.bb | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 78 |     "tristanpenman/valijson": {"rev": "c2f22fddf599d04dc33fcd7ed257c698a05345d9"}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 79 |     # version from meta-openembedded/meta-oe/recipes-devtools/nlohmann-fifo/nlohmann-fifo_git.bb | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 80 |     "nlohmann/fifo_map": {"rev": "0dfbf5dacbb15a32c43f912a7e66a54aae39d0f9"}, | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 81 |     "open-power/pdbg": {}, | 
 | 82 |     "openbmc/gpioplus": {}, | 
 | 83 |     "openbmc/phosphor-dbus-interfaces": {}, | 
 | 84 |     "openbmc/phosphor-logging": {}, | 
 | 85 |     "openbmc/phosphor-objmgr": {}, | 
 | 86 |     "openbmc/pldm": {}, | 
 | 87 |     "openbmc/sdbusplus": {}, | 
 | 88 |     "openbmc/sdeventplus": {}, | 
 | 89 |     "openbmc/stdplus": {}, | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 90 | } | 
 | 91 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 92 |  | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 93 | def pkg_rev(pkg): | 
 | 94 |     return packages[pkg]["rev"] | 
 | 95 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 96 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 97 | def pkg_stagename(pkg): | 
 | 98 |     if not pkg.startswith("openbmc/"): | 
 | 99 |         pkg = "openbmc/" + pkg | 
 | 100 |     return pkg.replace("/", "-") | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 101 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 102 |  | 
 | 103 | def pkg_url(pkg): | 
 | 104 |     if "url" in packages[pkg]: | 
 | 105 |         return packages[pkg]["url"](pkg, pkg_rev(pkg)) | 
 | 106 |     return f"https://github.com/{pkg}/archive/{pkg_rev(pkg)}.tar.gz" | 
 | 107 |  | 
 | 108 |  | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 109 | # Look up the HEAD for missing a static rev. | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 110 | pkg_lookups = {} | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 111 | for pkg in packages.keys(): | 
 | 112 |     if "rev" in packages[pkg]: | 
 | 113 |         continue | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 114 |     pkg_lookups[pkg] = git( | 
 | 115 |         "ls-remote", "--heads", f"https://github.com/{pkg}", _bg=True | 
 | 116 |     ) | 
 | 117 | for pkg, result in pkg_lookups.items(): | 
 | 118 |     for line in result.stdout.decode().split("\n"): | 
 | 119 |         if f"refs/heads/{branch}" in line: | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 120 |             packages[pkg]["rev"] = line.strip().split()[0] | 
 | 121 |         elif "refs/heads/master" in line and p not in packages: | 
 | 122 |             packages[pkg]["rev"] = line.strip().split()[0] | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 123 |  | 
 | 124 | # Create the contents of the '/tmp/depcache'. | 
 | 125 | # This needs to be sorted for consistency. | 
 | 126 | depcache = "" | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 127 | for pkg in sorted(packages.keys()): | 
 | 128 |     depcache += "%s:%s," % (pkg, pkg_rev(pkg)) | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 129 |  | 
 | 130 | # Define common flags used for builds | 
 | 131 | prefix = "/usr/local" | 
 | 132 | configure_flags = " ".join( | 
 | 133 |     [ | 
 | 134 |         f"--prefix={prefix}", | 
 | 135 |     ] | 
 | 136 | ) | 
 | 137 | cmake_flags = " ".join( | 
 | 138 |     [ | 
 | 139 |         "-DCMAKE_BUILD_TYPE=RelWithDebInfo", | 
 | 140 |         "-DBUILD_SHARED_LIBS=ON", | 
 | 141 |         f"-DCMAKE_INSTALL_PREFIX:PATH={prefix}", | 
 | 142 |     ] | 
 | 143 | ) | 
 | 144 | meson_flags = " ".join( | 
 | 145 |     [ | 
 | 146 |         "--wrap-mode=nodownload", | 
 | 147 |         f"-Dprefix={prefix}", | 
 | 148 |     ] | 
 | 149 | ) | 
 | 150 |  | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 151 | # Build the commands needed to compose our final image | 
 | 152 | # We must sort the packages, otherwise we might produce an unstable | 
 | 153 | # docker file and rebuild the image unnecessarily | 
 | 154 | copy_cmds = "" | 
| Patrick Williams | 7204324 | 2021-02-02 10:31:45 -0600 | [diff] [blame] | 155 | for pkg in sorted(packages.keys()): | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 156 |     copy_cmds += f"COPY --from={pkg_stagename(pkg)} {prefix} {prefix}\n" | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 157 |     # Workaround for upstream docker bug and multiple COPY cmds | 
 | 158 |     # https://github.com/moby/moby/issues/37965 | 
 | 159 |     copy_cmds += "RUN true\n" | 
 | 160 |  | 
 | 161 | # Special flags if setting up a deb mirror. | 
 | 162 | mirror = "" | 
 | 163 | if "ubuntu" in distro and ubuntu_mirror: | 
 | 164 |     mirror = f""" | 
 | 165 | RUN echo "deb {ubuntu_mirror} $(. /etc/os-release && echo $VERSION_CODENAME) main restricted universe multiverse" > /etc/apt/sources.list && \\ | 
 | 166 |     echo "deb {ubuntu_mirror} $(. /etc/os-release && echo $VERSION_CODENAME)-updates main restricted universe multiverse" >> /etc/apt/sources.list && \\ | 
 | 167 |     echo "deb {ubuntu_mirror} $(. /etc/os-release && echo $VERSION_CODENAME)-security main restricted universe multiverse" >> /etc/apt/sources.list && \\ | 
 | 168 |     echo "deb {ubuntu_mirror} $(. /etc/os-release && echo $VERSION_CODENAME)-proposed main restricted universe multiverse" >> /etc/apt/sources.list && \\ | 
 | 169 |     echo "deb {ubuntu_mirror} $(. /etc/os-release && echo $VERSION_CODENAME)-backports main restricted universe multiverse" >> /etc/apt/sources.list | 
 | 170 | """ | 
 | 171 |  | 
 | 172 | # Special flags for proxying. | 
 | 173 | proxy_cmd = "" | 
 | 174 | proxy_args = [] | 
 | 175 | if http_proxy: | 
 | 176 |     proxy_cmd = f""" | 
 | 177 | RUN echo "[http]" >> {homedir}/.gitconfig && \ | 
 | 178 |     echo "proxy = {http_proxy}" >> {homedir}/.gitconfig | 
 | 179 | """ | 
 | 180 |     proxy_args.extend( | 
 | 181 |         [ | 
 | 182 |             "--build-arg", | 
 | 183 |             f"http_proxy={http_proxy}", | 
 | 184 |             "--build-arg", | 
 | 185 |             "https_proxy={https_proxy}", | 
 | 186 |         ] | 
 | 187 |     ) | 
 | 188 |  | 
 | 189 | # Create docker image that can run package unit tests | 
 | 190 | dockerfile = f""" | 
 | 191 | FROM {docker_base}{distro} as openbmc-base | 
 | 192 |  | 
 | 193 | {mirror} | 
 | 194 |  | 
 | 195 | ENV DEBIAN_FRONTEND noninteractive | 
 | 196 |  | 
 | 197 | ENV PYTHONPATH "/usr/local/lib/python3.8/site-packages/" | 
 | 198 |  | 
 | 199 | # We need the keys to be imported for dbgsym repos | 
 | 200 | # New releases have a package, older ones fall back to manual fetching | 
 | 201 | # https://wiki.ubuntu.com/Debug%20Symbol%20Packages | 
 | 202 | RUN apt-get update && ( apt-get install ubuntu-dbgsym-keyring || ( apt-get install -yy dirmngr && \ | 
 | 203 |     apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2EDC64DC5AEE1F6B9C621F0C8CAB6595FDFF622 ) ) | 
 | 204 |  | 
 | 205 | # Parse the current repo list into a debug repo list | 
 | 206 | RUN sed -n '/^deb /s,^deb [^ ]* ,deb http://ddebs.ubuntu.com ,p' /etc/apt/sources.list >/etc/apt/sources.list.d/debug.list | 
 | 207 |  | 
 | 208 | # Remove non-existent debug repos | 
 | 209 | RUN sed -i '/-\(backports\|security\) /d' /etc/apt/sources.list.d/debug.list | 
 | 210 |  | 
 | 211 | RUN cat /etc/apt/sources.list.d/debug.list | 
 | 212 |  | 
 | 213 | RUN apt-get update && apt-get dist-upgrade -yy && apt-get install -yy \ | 
 | 214 |     gcc-10 \ | 
 | 215 |     g++-10 \ | 
 | 216 |     libc6-dbg \ | 
 | 217 |     libc6-dev \ | 
 | 218 |     libtool \ | 
 | 219 |     bison \ | 
 | 220 |     libdbus-1-dev \ | 
 | 221 |     flex \ | 
 | 222 |     cmake \ | 
 | 223 |     python3 \ | 
 | 224 |     python3-dev\ | 
 | 225 |     python3-yaml \ | 
 | 226 |     python3-mako \ | 
 | 227 |     python3-pip \ | 
 | 228 |     python3-setuptools \ | 
 | 229 |     python3-git \ | 
 | 230 |     python3-socks \ | 
 | 231 |     pkg-config \ | 
 | 232 |     autoconf \ | 
 | 233 |     autoconf-archive \ | 
 | 234 |     libsystemd-dev \ | 
 | 235 |     systemd \ | 
 | 236 |     libssl-dev \ | 
 | 237 |     libevdev-dev \ | 
 | 238 |     libevdev2-dbgsym \ | 
 | 239 |     libjpeg-dev \ | 
 | 240 |     libpng-dev \ | 
 | 241 |     ninja-build \ | 
 | 242 |     sudo \ | 
 | 243 |     curl \ | 
 | 244 |     git \ | 
 | 245 |     dbus \ | 
 | 246 |     iputils-ping \ | 
 | 247 |     clang-10 \ | 
 | 248 |     clang-format-10 \ | 
 | 249 |     clang-tidy-10 \ | 
 | 250 |     clang-tools-10 \ | 
 | 251 |     shellcheck \ | 
 | 252 |     npm \ | 
 | 253 |     iproute2 \ | 
 | 254 |     libnl-3-dev \ | 
 | 255 |     libnl-genl-3-dev \ | 
 | 256 |     libconfig++-dev \ | 
 | 257 |     libsnmp-dev \ | 
 | 258 |     valgrind \ | 
 | 259 |     valgrind-dbg \ | 
 | 260 |     libpam0g-dev \ | 
 | 261 |     xxd \ | 
 | 262 |     libi2c-dev \ | 
 | 263 |     wget \ | 
 | 264 |     libldap2-dev \ | 
 | 265 |     libprotobuf-dev \ | 
 | 266 |     libperlio-gzip-perl \ | 
 | 267 |     libjson-perl \ | 
 | 268 |     protobuf-compiler \ | 
 | 269 |     libgpiod-dev \ | 
 | 270 |     device-tree-compiler \ | 
 | 271 |     cppcheck \ | 
 | 272 |     libpciaccess-dev \ | 
 | 273 |     libmimetic-dev \ | 
 | 274 |     libxml2-utils \ | 
 | 275 |     libxml-simple-perl | 
 | 276 |  | 
 | 277 | RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 1000 \ | 
 | 278 |   --slave /usr/bin/g++ g++ /usr/bin/g++-10 \ | 
 | 279 |   --slave /usr/bin/gcov gcov /usr/bin/gcov-10 \ | 
 | 280 |   --slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-10 \ | 
 | 281 |   --slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-10 | 
 | 282 |  | 
 | 283 |  | 
 | 284 | RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 1000 \ | 
 | 285 |   --slave /usr/bin/clang++ clang++ /usr/bin/clang++-10 \ | 
 | 286 |   --slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-10 \ | 
 | 287 |   --slave /usr/bin/clang-format clang-format /usr/bin/clang-format-10 \ | 
 | 288 |   --slave /usr/bin/run-clang-tidy.py run-clang-tidy.py /usr/bin/run-clang-tidy-10.py | 
 | 289 |  | 
 | 290 | RUN pip3 install inflection | 
 | 291 | RUN pip3 install pycodestyle | 
 | 292 | RUN pip3 install jsonschema | 
 | 293 | RUN pip3 install meson==0.54.3 | 
 | 294 | RUN pip3 install protobuf | 
 | 295 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 296 | FROM openbmc-base as {pkg_stagename('linux-test-project/lcov')} | 
 | 297 | RUN curl -L {pkg_url('linux-test-project/lcov')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 298 | cd lcov-* && \ | 
 | 299 | make -j{proc_count} && \ | 
 | 300 | make install | 
 | 301 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 302 | FROM openbmc-base as {pkg_stagename('Naios/function2')} | 
 | 303 | RUN curl -L {pkg_url('Naios/function2')} | tar -xz && \ | 
 | 304 | cd function2-* && \ | 
 | 305 | mkdir {prefix}/include/function2 && \ | 
 | 306 | cp include/function2/function2.hpp {prefix}/include/function2/ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 307 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 308 | FROM openbmc-base as {pkg_stagename('google/googletest')} | 
 | 309 | RUN curl -L {pkg_url('google/googletest')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 310 | cd googletest-* && \ | 
 | 311 | mkdir build && \ | 
 | 312 | cd build && \ | 
 | 313 | CXXFLAGS=-std=c++17 cmake {cmake_flags} -DTHREADS_PREFER_PTHREAD_FLAG=ON .. && \ | 
 | 314 | make -j{proc_count} && \ | 
 | 315 | make install | 
 | 316 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 317 | FROM openbmc-base as {pkg_stagename('catchorg/Catch2')} | 
 | 318 | RUN curl -L {pkg_url('catchorg/Catch2')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 319 | cd Catch2-* && \ | 
 | 320 | mkdir build && \ | 
 | 321 | cd build && \ | 
 | 322 | cmake {cmake_flags} -DBUILD_TESTING=OFF -DCATCH_INSTALL_DOCS=OFF .. && \ | 
 | 323 | make -j{proc_count} && \ | 
 | 324 | make install | 
 | 325 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 326 | FROM openbmc-base as {pkg_stagename('USCiLab/cereal')} | 
 | 327 | RUN curl -L {pkg_url('USCiLab/cereal')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 328 | cp -a cereal-*/include/cereal/ {prefix}/include/ | 
 | 329 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 330 | FROM openbmc-base as {pkg_stagename('CLIUtils/CLI11')} | 
 | 331 | RUN curl -L {pkg_url('CLIUtils/CLI11')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 332 | cd CLI11-* && \ | 
 | 333 | mkdir build && \ | 
 | 334 | cd build && \ | 
 | 335 | cmake {cmake_flags} -DCLI11_BUILD_DOCS=OFF -DBUILD_TESTING=OFF -DCLI11_BUILD_EXAMPLES=OFF .. && \ | 
 | 336 | make -j{proc_count} && \ | 
 | 337 | make install | 
 | 338 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 339 | FROM openbmc-base as {pkg_stagename('fmtlib/fmt')} | 
 | 340 | RUN curl -L {pkg_url('fmtlib/fmt')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 341 | cd fmt-* && \ | 
 | 342 | mkdir build && \ | 
 | 343 | cd build && \ | 
 | 344 | cmake {cmake_flags} -DFMT_DOC=OFF -DFMT_TEST=OFF .. && \ | 
 | 345 | make -j{proc_count} && \ | 
 | 346 | make install | 
 | 347 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 348 | FROM openbmc-base as {pkg_stagename('nlohmann/json')} | 
 | 349 | RUN curl -L {pkg_url('nlohmann/json')} | tar -xz && \ | 
 | 350 | cd json-* && \ | 
 | 351 | mkdir {prefix}/include/nlohmann && \ | 
 | 352 | cp include/nlohmann/json.hpp {prefix}/include/nlohmann && \ | 
 | 353 | ln -s {prefix}/include/nlohmann/json.hpp {prefix}/include/json.hpp | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 354 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 355 | FROM openbmc-base as {pkg_stagename('nlohmann/fifo_map')} | 
 | 356 | RUN curl -L {pkg_url('nlohmann/fifo_map')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 357 | cd fifo_map-*/src && cp fifo_map.hpp {prefix}/include/ | 
 | 358 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 359 | FROM openbmc-base as {pkg_stagename('martinmoene/span-lite')} | 
 | 360 | RUN curl -L {pkg_url('martinmoene/span-lite')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 361 | cd span-lite-* && \ | 
 | 362 | mkdir build && \ | 
 | 363 | cd build && \ | 
 | 364 | cmake {cmake_flags} -DSPAN_LITE_OPT_BUILD_TESTS=OFF .. && \ | 
 | 365 | make -j{proc_count} && \ | 
 | 366 | make install | 
 | 367 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 368 | FROM openbmc-base as {pkg_stagename('openbmc/linux')} | 
 | 369 | RUN curl -L {pkg_url('openbmc/linux')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 370 | cd linux-* && \ | 
 | 371 | make -j{proc_count} defconfig && \ | 
 | 372 | make INSTALL_HDR_PATH=/usr/local headers_install | 
 | 373 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 374 | FROM openbmc-base as {pkg_stagename('boost')} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 375 | RUN curl -L {pkg_url('boost')} | tar -xj && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 376 | cd boost_*/ && \ | 
 | 377 | ./bootstrap.sh --prefix={prefix} --with-libraries=context,coroutine && \ | 
 | 378 | ./b2 && ./b2 install --prefix={prefix} | 
 | 379 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 380 | FROM openbmc-base as {pkg_stagename('leethomason/tinyxml2')} | 
 | 381 | RUN curl -L {pkg_url('leethomason/tinyxml2')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 382 | cd tinyxml2-* && \ | 
 | 383 | mkdir build && \ | 
 | 384 | cd build && \ | 
 | 385 | cmake {cmake_flags} .. && \ | 
 | 386 | make -j{proc_count} && \ | 
 | 387 | make install | 
 | 388 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 389 | FROM openbmc-base as {pkg_stagename('CPPAlliance/url')} | 
 | 390 | RUN curl -L {pkg_url('CPPAlliance/url')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 391 | cd url-* && \ | 
 | 392 | mkdir buildir && \ | 
 | 393 | cd buildir && \ | 
 | 394 | cmake {cmake_flags} -DBOOST_URL_STANDALONE=ON -DBOOST_URL_BUILD_TESTS=OFF -DBOOST_URL_BUILD_EXAMPLES=OFF .. && \ | 
 | 395 | make -j{proc_count} && \ | 
 | 396 | make install | 
 | 397 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 398 | FROM openbmc-base as {pkg_stagename('tristanpenman/valijson')} | 
 | 399 | RUN curl -L {pkg_url('tristanpenman/valijson')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 400 | cd valijson-* && \ | 
 | 401 | mkdir build && \ | 
 | 402 | cd build && \ | 
 | 403 | cmake {cmake_flags} -DINSTALL_HEADERS=1 -DBUILD_TESTS=0 .. && \ | 
 | 404 | make -j{proc_count} && \ | 
 | 405 | make install | 
 | 406 |  | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 407 | FROM openbmc-base as {pkg_stagename('LibVNC/libvncserver')} | 
 | 408 | RUN curl -L {pkg_url('LibVNC/libvncserver')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 409 | cd libvncserver-* && \ | 
 | 410 | mkdir build && \ | 
 | 411 | cd build && \ | 
 | 412 | cmake {cmake_flags} .. && \ | 
 | 413 | make -j{proc_count} && \ | 
 | 414 | make install | 
 | 415 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 416 | FROM openbmc-base as {pkg_stagename('openbmc/stdplus')} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 417 | COPY --from={pkg_stagename('fmtlib/fmt')} {prefix} {prefix} | 
 | 418 | COPY --from={pkg_stagename('martinmoene/span-lite')} {prefix} {prefix} | 
 | 419 | RUN curl -L {pkg_url('openbmc/stdplus')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 420 | cd stdplus-* && \ | 
 | 421 | meson build {meson_flags} -Dtests=disabled -Dexamples=false && \ | 
 | 422 | ninja -C build && \ | 
 | 423 | ninja -C build install | 
 | 424 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 425 | FROM openbmc-base as {pkg_stagename('openbmc/sdbusplus')} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 426 | RUN curl -L {pkg_url('openbmc/sdbusplus')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 427 | cd sdbusplus-* && \ | 
 | 428 | cd tools && ./setup.py install --root=/ --prefix={prefix} && \ | 
 | 429 | cd .. && meson build {meson_flags} -Dtests=disabled -Dexamples=disabled && \ | 
 | 430 | ninja -C build && \ | 
 | 431 | ninja -C build install | 
 | 432 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 433 | FROM openbmc-base as {pkg_stagename('openbmc/sdeventplus')} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 434 | COPY --from={pkg_stagename('Naios/function2')} {prefix} {prefix} | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 435 | COPY --from={pkg_stagename('openbmc/stdplus')} {prefix} {prefix} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 436 | RUN curl -L {pkg_url('openbmc/sdeventplus')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 437 | cd sdeventplus-* && \ | 
 | 438 | meson build {meson_flags} -Dtests=disabled -Dexamples=false && \ | 
 | 439 | ninja -C build && \ | 
 | 440 | ninja -C build install | 
 | 441 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 442 | FROM openbmc-base as {pkg_stagename('openbmc/gpioplus')} | 
 | 443 | COPY --from={pkg_stagename('openbmc/stdplus')} {prefix} {prefix} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 444 | RUN curl -L {pkg_url('openbmc/gpioplus')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 445 | cd gpioplus-* && \ | 
 | 446 | meson build {meson_flags} -Dtests=disabled -Dexamples=false && \ | 
 | 447 | ninja -C build && \ | 
 | 448 | ninja -C build install | 
 | 449 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 450 | FROM openbmc-base as {pkg_stagename('openbmc/phosphor-dbus-interfaces')} | 
 | 451 | COPY --from={pkg_stagename('openbmc/sdbusplus')} {prefix} {prefix} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 452 | RUN curl -L {pkg_url('openbmc/phosphor-dbus-interfaces')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 453 | cd phosphor-dbus-interfaces-* && \ | 
 | 454 | meson build {meson_flags} -Ddata_org_open_power=true -Ddata_com_ibm=true && \ | 
 | 455 | ninja -C build && \ | 
 | 456 | ninja -C build install | 
 | 457 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 458 | FROM openbmc-base as {pkg_stagename('openbmc/phosphor-logging')} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 459 | COPY --from={pkg_stagename('USCiLab/cereal')} {prefix} {prefix} | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 460 | COPY --from={pkg_stagename('openbmc/sdbusplus')} {prefix} {prefix} | 
 | 461 | COPY --from={pkg_stagename('openbmc/sdeventplus')} {prefix} {prefix} | 
 | 462 | COPY --from={pkg_stagename('openbmc/phosphor-dbus-interfaces')} {prefix} {prefix} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 463 | COPY --from={pkg_stagename('nlohmann/fifo_map')} {prefix} {prefix} | 
 | 464 | RUN curl -L {pkg_url('openbmc/phosphor-logging')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 465 | cd phosphor-logging-* && \ | 
 | 466 | ./bootstrap.sh && \ | 
 | 467 | ./configure {configure_flags} --enable-metadata-processing YAML_DIR={prefix}/share/phosphor-dbus-yaml/yaml && \ | 
 | 468 | make -j{proc_count} && \ | 
 | 469 | make install | 
 | 470 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 471 | FROM openbmc-base as {pkg_stagename('openbmc/phosphor-objmgr')} | 
 | 472 | COPY --from={pkg_stagename('boost')} {prefix} {prefix} | 
 | 473 | COPY --from={pkg_stagename('openbmc/sdbusplus')} {prefix} {prefix} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 474 | COPY --from={pkg_stagename('leethomason/tinyxml2')} {prefix} {prefix} | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 475 | COPY --from={pkg_stagename('openbmc/phosphor-logging')} {prefix} {prefix} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 476 | RUN curl -L {pkg_url('openbmc/phosphor-objmgr')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 477 | cd phosphor-objmgr-* && \ | 
 | 478 | ./bootstrap.sh && \ | 
 | 479 | ./configure {configure_flags} && \ | 
 | 480 | make -j{proc_count} && \ | 
 | 481 | make install | 
 | 482 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 483 | FROM openbmc-base as {pkg_stagename('open-power/pdbg')} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 484 | RUN curl -L {pkg_url('open-power/pdbg')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 485 | cd pdbg-* && \ | 
 | 486 | ./bootstrap.sh && \ | 
 | 487 | ./configure {configure_flags} && \ | 
 | 488 | make -j{proc_count} && \ | 
 | 489 | make install | 
 | 490 |  | 
| Patrick Williams | e139874 | 2021-02-02 12:20:20 -0600 | [diff] [blame] | 491 | FROM openbmc-base as {pkg_stagename('openbmc/pldm')} | 
 | 492 | COPY --from={pkg_stagename('openbmc/sdbusplus')} {prefix} {prefix} | 
 | 493 | COPY --from={pkg_stagename('openbmc/sdeventplus')} {prefix} {prefix} | 
 | 494 | COPY --from={pkg_stagename('boost')} {prefix} {prefix} | 
 | 495 | COPY --from={pkg_stagename('openbmc/phosphor-dbus-interfaces')} {prefix} {prefix} | 
 | 496 | COPY --from={pkg_stagename('openbmc/phosphor-logging')} {prefix} {prefix} | 
| Patrick Williams | 2abc4a4 | 2021-02-03 06:11:40 -0600 | [diff] [blame^] | 497 | COPY --from={pkg_stagename('nlohmann/json')} {prefix} {prefix} | 
 | 498 | COPY --from={pkg_stagename('CLIUtils/CLI11')} {prefix} {prefix} | 
 | 499 | RUN curl -L {pkg_url('openbmc/pldm')} | tar -xz && \ | 
| Patrick Williams | 02871c9 | 2021-02-01 20:57:19 -0600 | [diff] [blame] | 500 | cd pldm-* && \ | 
 | 501 | meson build {meson_flags} -Dlibpldm-only=enabled -Doem-ibm=enabled -Dtests=disabled && \ | 
 | 502 | ninja -C build && \ | 
 | 503 | ninja -C build install | 
 | 504 |  | 
 | 505 | # Build the final output image | 
 | 506 | FROM openbmc-base | 
 | 507 | {copy_cmds} | 
 | 508 |  | 
 | 509 | # Some of our infrastructure still relies on the presence of this file | 
 | 510 | # even though it is no longer needed to rebuild the docker environment | 
 | 511 | # NOTE: The file is sorted to ensure the ordering is stable. | 
 | 512 | RUN echo '{depcache}' > /tmp/depcache | 
 | 513 |  | 
 | 514 | # Final configuration for the workspace | 
 | 515 | RUN grep -q {gid} /etc/group || groupadd -g {gid} {username} | 
 | 516 | RUN mkdir -p "{os.path.dirname(homedir)}" | 
 | 517 | RUN grep -q {uid} /etc/passwd || useradd -d {homedir} -m -u {uid} -g {gid} {username} | 
 | 518 | RUN sed -i '1iDefaults umask=000' /etc/sudoers | 
 | 519 | RUN echo "{username} ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers | 
 | 520 |  | 
 | 521 | {proxy_cmd} | 
 | 522 |  | 
 | 523 | RUN /bin/bash | 
 | 524 | """ | 
 | 525 |  | 
 | 526 | # Do the docker build. | 
 | 527 | for line in docker.build( | 
 | 528 |     proxy_args, | 
 | 529 |     "--network=host", | 
 | 530 |     "-t", | 
 | 531 |     docker_image_name, | 
 | 532 |     "-", | 
 | 533 |     _in=dockerfile, | 
 | 534 |     _iter=True, | 
 | 535 | ): | 
 | 536 |     print(line, end="", flush=True) |