diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..7b95b99 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,109 @@ +# +# Copyright 2022 James E. King III +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE.txt or copy at http://boost.org/LICENSE_1_0.txt) +# +--- +name: Test + +on: + pull_request: + branches: + - main + - master + push: + branches: + - main + - master + +jobs: + posix: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + - { distro: ubuntu, edition: focal, arch: x86_64, toolset: clang, stdlib: native } + - { distro: ubuntu, edition: focal, arch: x86_64, toolset: clang, stdlib: libc++ } + - { distro: ubuntu, edition: focal, arch: x86_64, toolset: gcc, stdlib: native } + - { distro: ubuntu, edition: focal, arch: x86_64, toolset: gcc, stdlib: libc++ } + + - { distro: ubuntu, edition: focal, arch: arm64, toolset: clang, stdlib: native, limit: minimal } + - { distro: ubuntu, edition: focal, arch: arm64, toolset: clang, stdlib: libc++, limit: minimal } + - { distro: ubuntu, edition: focal, arch: arm64, toolset: gcc, stdlib: native, limit: minimal } + - { distro: ubuntu, edition: focal, arch: arm64, toolset: gcc, stdlib: libc++, limit: minimal } + + - { distro: fedora, edition: 34, arch: s390x, toolset: clang, stdlib: native, limit: minimal } + - { distro: fedora, edition: 34, arch: s390x, toolset: clang, stdlib: libc++, limit: minimal } + - { distro: fedora, edition: 34, arch: s390x, toolset: gcc, stdlib: native, limit: minimal } + - { distro: fedora, edition: 34, arch: s390x, toolset: gcc, stdlib: libc++, limit: minimal } + + timeout-minutes: 120 + runs-on: ubuntu-latest + env: + BDDE_DISTRO: ${{ matrix.distro }} + BDDE_EDITION: ${{ matrix.edition }} + BDDE_ARCH: ${{ matrix.arch }} + + steps: + - uses: actions/checkout@v2 + + - name: Run script tests + run: | + git submodule update --init bin/linux/test/bash_unit + make test + + - name: Enable multiarch + run: | + sudo apt-get install -y binfmt-support qemu-user-static + sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + echo "$(pwd)/bin/linux" >> $GITHUB_PATH + + - name: bdde-pull + run: bdde-pull + + - name: bdde-clone + run: | + export BOOST_ROOT=$(pwd)/boost-root + bdde-clone + chmod -R 777 ${BOOST_ROOT} + echo "BOOST_ROOT=${BOOST_ROOT}" >> $GITHUB_ENV + echo "B2_ARGS=toolset=${{ matrix.toolset }} stdlib=${{ matrix.stdlib }}" >> $GITHUB_ENV + + - name: Bootstrap + working-directory: ./boost-root + run: bdde bootstrap.sh --with-toolset="${{ matrix.toolset }}" + + - name: Platform details + working-directory: ./boost-root/libs/predef/test + run: | + bdde b2 ${{ env.B2_ARGS }} -a info_as_cpp + find ../../../bin.v2/libs/predef/test/info_as_cpp.test/ -name info_as_cpp.run -exec cat {} \; + + - name: bdde-asan + working-directory: ./boost-root/libs/format + if: "matrix.limit != 'minimal'" + run: bdde-asan ${{ env.B2_ARGS }} + + - name: bdde-tsan + working-directory: ./boost-root/libs/format + if: "matrix.limit != 'minimal'" + run: bdde-tsan ${{ env.B2_ARGS }} + + - name: bdde-ubsan + working-directory: ./boost-root/libs/format + run: bdde-ubsan ${{ env.B2_ARGS }} + + - name: bdde-valgrind + working-directory: ./boost-root/libs/format + if: "matrix.limit != 'minimal'" + run: bdde-ubsan ${{ env.B2_ARGS }} + + - name: Build all + working-directory: ./boost-root + if: "matrix.limit != 'minimal'" + run: bdde b2 ${{ env.B2_ARGS }} diff --git a/.gitignore b/.gitignore index 215ccdf..972a651 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ +/boost/ /qemu-* +.vscode diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e3403ed..0000000 --- a/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright 2018 James E. King III -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) - -sudo: false -dist: trusty -language: cpp - -script: - - make test - -notifications: - email: - false diff --git a/Dockerfile.deb-x86_64 b/Dockerfile.deb-x86_64 deleted file mode 100644 index 37c6ed6..0000000 --- a/Dockerfile.deb-x86_64 +++ /dev/null @@ -1,186 +0,0 @@ -# -# Copyright (c) 2018 - 2019 James E. King III -# -# Use, modification, and distribution are subject to the -# Boost Software License, Version 1.0. (See accompanying file -# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -# -# Docker build environment for Boost -# Provides everything you need for development in any boost lib. -# (for linux, at least..) -# - -FROM ubuntu:bionic -MAINTAINER James E. King III -ENV CONTAINER_USER=boost -ENV DEBIAN_FRONTEND noninteractive -WORKDIR /boost - -# Load apt-utils first, fixes warnings - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - apt-utils - -# Basic utilities - -RUN apt-get install -y --no-install-recommends \ - bash-completion \ - bzip2 \ - ca-certificates \ - curl \ - file \ - git \ - gpg-agent \ - patch \ - procps \ - software-properties-common \ - sudo \ - unzip \ - vim \ - wget - -# Hook in the Ubuntu PPA Repositories -RUN add-apt-repository ppa:ubuntu-toolchain-r/test && \ - apt-get update - -# C++ - -RUN apt-get install -y \ - build-essential \ - clang \ - clang++-6 \ - cmake \ - g++-5 \ - g++-6 \ - g++-7 \ - g++-8 \ - g++-9 \ - gdb \ - lcov \ - libc++-dev \ - libc++-helpers \ - libstdc++6-8-dbg \ - libubsan1-dbg \ - valgrind - -################################################################# -## Boost Library Dependencies -## Do not "de-dupe" - this is a canonical list of dependencies! -################################################################# - -# asio -RUN apt-get install -y --no-install-recommends \ - libssl-dev - -# beast -RUN apt-get install -y --no-install-recommends \ - libssl-dev \ - zlib1g-dev - -# gil -RUN apt-get install -y --no-install-recommends \ - libjpeg-dev \ - libpng-dev \ - libtiff-dev \ - zlib1g-dev - -# integer -RUN apt-get install -y --no-install-recommends \ - libgmp-dev - -# interval (for one disabled example) -RUN apt-get install -y --no-install-recommends \ - libgmp-dev \ - libmpfr-dev - -# iostreams -RUN apt-get install -y --no-install-recommends \ - libbz2-dev \ - liblzma-dev \ - libzstd-dev \ - zlib1g-dev - -# locale -RUN apt-get install -y --no-install-recommends \ - libicu-dev - -# mpi -RUN apt-get install -y --no-install-recommends \ - libopenmpi-dev - -# python -RUN apt-get install -y --no-install-recommends \ - python3-dev - -# stacktrace -RUN cd /usr/local/src && \ - git clone https://github.com/ianlancetaylor/libbacktrace.git && \ - cd libbacktrace && \ - ./configure && \ - make -j3 install && \ - cd .. && \ - rm -rf libbacktrace - -# sync -# pthread-win32, but not on Unix - -# thread -# pthread-win32, but not on Unix - -################################################################# -# Prerequisites for boostbook (does what setup_boostbook.sh does) -# for documentation builds to work - -RUN apt-get install -y --no-install-recommends \ - xsltproc \ - doxygen \ - openjdk-11-jre-headless - -RUN cd /opt && \ - wget --quiet http://sourceforge.net/projects/docbook/files/docbook-xsl/1.75.2/docbook-xsl-1.75.2.tar.gz && \ - tar xzf docbook-xsl-1.75.2.tar.gz && \ - rm docbook-xsl-1.75.2.tar.gz - -RUN cd /opt && \ - mkdir docbook-dtd-4.2 && \ - cd docbook-dtd-4.2 && \ - wget --quiet http://www.oasis-open.org/docbook/xml/4.2/docbook-xml-4.2.zip && \ - unzip -q docbook-xml-4.2.zip && \ - rm docbook-xml-4.2.zip - -RUN cd /opt && \ - wget --quiet http://archive.apache.org/dist/xmlgraphics/fop/binaries/fop-0.94-bin-jdk1.4.tar.gz && \ - tar xzf fop-0.94-bin-jdk1.4.tar.gz && \ - rm fop-0.94-bin-jdk1.4.tar.gz - -################################################################# -# cppcheck need 1.85 or later, Bionic has 1.82 - -ENV CPPCHKVER=1.87 -RUN mkdir /tmp/cppcheck && \ - cd /tmp/cppcheck && \ - wget https://github.com/danmar/cppcheck/archive/$CPPCHKVER.tar.gz && \ - tar xzf $CPPCHKVER.tar.gz && \ - mkdir cppcheck-build && \ - cd cppcheck-build && \ - cmake ../cppcheck-$CPPCHKVER -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF && \ - make -j3 install 2>&1 > /dev/null && \ - cd /tmp && \ - rm -rf /tmp/cppcheck - -################################################################# -# Build as a regular user -# Credit: https://github.com/delcypher/docker-ubuntu-cxx-dev/blob/master/Dockerfile -# License: None specified at time of import -# Add non-root user for container but give it sudo access. -# Password is the same as the username -RUN useradd -m ${CONTAINER_USER} && \ - echo ${CONTAINER_USER}:${CONTAINER_USER} | chpasswd && \ - echo "${CONTAINER_USER} ALL=(root) ALL" >> /etc/sudoers -RUN chsh --shell /bin/bash ${CONTAINER_USER} -USER ${CONTAINER_USER} -################################################################# - -ADD --chown=boost assets/home/boost/user-config.jam /home/boost/user-config.jam -ENV PATH="/boost:/bdde/bin/linux:$PATH" diff --git a/Dockerfile.red-ppc64 b/Dockerfile.fedora-34.common similarity index 86% rename from Dockerfile.red-ppc64 rename to Dockerfile.fedora-34.common index 06f066b..c0c1aa1 100644 --- a/Dockerfile.red-ppc64 +++ b/Dockerfile.fedora-34.common @@ -1,38 +1,37 @@ # -# Copyright (c) 2018 - 2019 James E. King III +# Copyright (c) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # -# Boost Docker Build Environment: +# Boost Docker Development Environment # -# - PowerPC -# - Big Endian -# -# multiarch prerequisites: -# -# 1. Install the qemu-user-static package. -# 2. Run `docker run --rm --privileged multiarch/qemu-user-static:register --reset` -# 3. Copy /usr/bin/qemu-ppc64-static to the bdde directory. +# Common redhat family commands to install necessary files. # -FROM multiarch/fedora:25-ppc64 -MAINTAINER James E. King III ENV CONTAINER_USER=boost -ENV DEBIAN_FRONTEND noninteractive -WORKDIR /boost - -COPY qemu-ppc64-static /usr/bin/qemu-ppc64-static RUN dnf groupinstall -y 'Development Tools' -RUN dnf install -y util-linux-user libxslt -RUN dnf install -y sudo -RUN dnf install -y gcc-c++ -RUN dnf install -y gdb +RUN dnf install -y \ + clang \ + cmake \ + cppcheck \ + gcc-c++ \ + gdb \ + libxslt \ + sudo \ + util-linux-user \ + which \ + valgrind -# -# # Load apt-utils first, fixes warnings +### late additions to avoid huge rebuilds, consolidate on next big release + +RUN dnf install -y libcxx libcxx-devel libcxxabi-devel + +# the following stuff hasn't been fully translated to redhat/fedora-speak yet + +# Load apt-utils first, fixes warnings # # RUN apt-get update && \ # apt-get install -y --no-install-recommends \ @@ -178,7 +177,7 @@ RUN dnf install -y gdb # License: None specified at time of import # Add non-root user for container but give it sudo access. # Password is the same as the username -RUN useradd -m ${CONTAINER_USER} && \ +RUN useradd -m ${CONTAINER_USER} -g wheel && \ echo ${CONTAINER_USER}:${CONTAINER_USER} | chpasswd && \ echo "${CONTAINER_USER} ALL=(root) ALL" >> /etc/sudoers RUN chsh --shell /bin/bash ${CONTAINER_USER} @@ -187,3 +186,4 @@ USER ${CONTAINER_USER} ADD --chown=boost assets/home/boost/user-config.jam /home/boost/user-config.jam ENV PATH="/boost:/bdde/bin/linux:$PATH" +WORKDIR /boost diff --git a/Dockerfile.fedora-34.s390x b/Dockerfile.fedora-34.s390x new file mode 100644 index 0000000..5990ad2 --- /dev/null +++ b/Dockerfile.fedora-34.s390x @@ -0,0 +1,18 @@ +# syntax = edrevo/dockerfile-plus +# +# Copyright (c) 2018 - 2022 James E. King III +# +# Use, modification, and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# Boost Docker Development Environment for Big Endian +# + +FROM multiarch/fedora:34-s390x +LABEL BDDE_DISTRO="fedora" +LABEL BDDE_EDITION="34" +LABEL BDDE_ARCH="s390x" +LABEL MAINTAINER="James E. King III " + +INCLUDE+ Dockerfile.fedora-34.common diff --git a/Dockerfile.ubuntu-focal.arm64 b/Dockerfile.ubuntu-focal.arm64 new file mode 100644 index 0000000..73d5499 --- /dev/null +++ b/Dockerfile.ubuntu-focal.arm64 @@ -0,0 +1,21 @@ +# syntax = edrevo/dockerfile-plus +# +# Copyright (c) 2018 - 2022 James E. King III +# +# Use, modification, and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# Requires DOCKER_BUILDKIT=1 +# + +FROM multiarch/ubuntu-debootstrap:arm64-focal +LABEL BDDE_DISTRO="ubuntu" +LABEL BDDE_EDITION="focal" +LABEL BDDE_ARCH="arm64" +LABEL MAINTAINER="James E. King III " + +RUN apt-get update && apt install --no-install-recommends -y software-properties-common +RUN add-apt-repository universe + +INCLUDE+ Dockerfile.ubuntu-focal.common diff --git a/Dockerfile.deb-arm64 b/Dockerfile.ubuntu-focal.common similarity index 81% rename from Dockerfile.deb-arm64 rename to Dockerfile.ubuntu-focal.common index a2d7724..d7aa8cf 100644 --- a/Dockerfile.deb-arm64 +++ b/Dockerfile.ubuntu-focal.common @@ -1,25 +1,17 @@ # -# Copyright (c) 2018 - 2019 James E. King III +# Copyright (c) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # -# Docker build environment for Boost -# Provides everything you need for development in any boost lib. -# (for linux, at least..) +# Boost Docker Development Environment # -# multiarch prerequisites: -# -# 1. Install the qemu-user-static package. -# 2. Run `docker run --rm --privileged multiarch/qemu-user-static:register --reset` +# Common debian family commands to install necessary files. # -FROM multiarch/ubuntu-debootstrap:arm64-bionic -MAINTAINER James E. King III ENV CONTAINER_USER=boost -ENV DEBIAN_FRONTEND noninteractive -WORKDIR /boost +ENV DEBIAN_FRONTEND=noninteractive # Load apt-utils first, fixes warnings @@ -45,30 +37,21 @@ RUN apt-get install -y --no-install-recommends \ vim \ wget -# Hook in the Ubuntu PPA Repositories -RUN add-apt-repository ppa:ubuntu-toolchain-r/test && \ - apt-get update - # C++ RUN apt-get install -y \ build-essential \ - clang++ \ + clang \ cmake \ - g++-7 \ - g++-9 \ + cppcheck \ + gcc \ + g++ \ gdb \ + lcov \ + libc6-dbg \ libc++-dev \ - libubsan1-dbg \ + libstdc++6-9-dbg \ valgrind -# clang \ -# clang++-6 \ -# g++-5 \ -# g++-6 \ -# g++-8 \ -# lcov \ -# libc++-helpers \ -# libstdc++6-8-dbg \ ################################################################# ## Boost Library Dependencies @@ -112,8 +95,8 @@ RUN apt-get install -y --no-install-recommends \ libicu-dev # mpi -# RUN apt-get install -y --no-install-recommends \ -# libopenmpi-dev +RUN apt-get install -y --no-install-recommends \ + libopenmpi-dev # python RUN apt-get install -y --no-install-recommends \ @@ -160,6 +143,11 @@ RUN cd /opt && \ tar xzf fop-0.94-bin-jdk1.4.tar.gz && \ rm fop-0.94-bin-jdk1.4.tar.gz +### late additions to avoid huge rebuilds, consolidate on next big release + +RUN apt-get install -y \ + libc++abi-dev + ################################################################# # Build as a regular user # Credit: https://github.com/delcypher/docker-ubuntu-cxx-dev/blob/master/Dockerfile @@ -175,3 +163,4 @@ USER ${CONTAINER_USER} ADD --chown=boost assets/home/boost/user-config.jam /home/boost/user-config.jam ENV PATH="/boost:/bdde/bin/linux:$PATH" +WORKDIR /boost diff --git a/Dockerfile.ubuntu-focal.x86_64 b/Dockerfile.ubuntu-focal.x86_64 new file mode 100644 index 0000000..bfab616 --- /dev/null +++ b/Dockerfile.ubuntu-focal.x86_64 @@ -0,0 +1,18 @@ +# syntax = edrevo/dockerfile-plus +# +# Copyright (c) 2018 - 2022 James E. King III +# +# Use, modification, and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# Requires DOCKER_BUILDKIT=1 +# + +FROM ubuntu:focal +LABEL BDDE_DISTRO="ubuntu" +LABEL BDDE_EDITION="focal" +LABEL BDDE_ARCH="x86_64" +LABEL MAINTAINER="James E. King III " + +INCLUDE+ Dockerfile.ubuntu-focal.common diff --git a/Makefile b/Makefile index ba302d2..55a85e9 100644 --- a/Makefile +++ b/Makefile @@ -1,39 +1,23 @@ # -# Copyright (C) 2018 - 2019 James E. King III +# Copyright (C) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # -.PHONY: all clean image test deb-arm64 deb-x86_64 red-ppc64 test +.PHONY: all images test verify -all: deb-arm64 deb-x86_64 red-ppc64 - -clean: - @ if [ ! -z "$(docker ps -a -q)" ]; then docker rm $(docker ps -a -q); fi - @ if [ ! -z "$(docker images -q -f dangling=true)" ]; then docker rmi $(docker images -q -f dangling=true); fi - bin/linux/bdde-clean-image deb-arm64 - bin/linux/bdde-clean-image deb-x86_64 - bin/linux/bdde-clean-image red-ppc64 - -deb-arm64: - cp -p /usr/bin/qemu-arm64-static . - BDDE_OS=deb BDDE_ARCH=arm64 bin/linux/bdde-build-image - -deb-x86_64: - cp -p /usr/bin/qemu-x86_64-static . - BDDE_OS=deb BDDE_ARCH=x86_64 bin/linux/bdde-build-image - -red-ppc64: - cp -p /usr/bin/qemu-ppc64-static . - BDDE_OS=red BDDE_ARCH=ppc64 bin/linux/bdde-build-image +images: + BDDE_DISTRO=ubuntu BDDE_EDITION=focal BDDE_ARCH=arm64 bin/linux/bdde-build + BDDE_DISTRO=ubuntu BDDE_EDITION=focal BDDE_ARCH=x86_64 bin/linux/bdde-build + BDDE_DISTRO=fedora BDDE_EDITION=34 BDDE_ARCH=s390x bin/linux/bdde-build # unit tests for some shell code; not much to this... test: ./bin/linux/test/bash_unit/bash_unit -f tap ./bin/linux/test/test_*.sh verify: - BDDE_OS=deb BDDE_ARCH=arm64 BDDE_SHELL="uname -a" bdde | grep aarch64 - BDDE_OS=deb BDDE_ARCH=x86_64 BDDE_SHELL="uname -a" bdde | grep x86_64 - BDDE_OS=red BDDE_ARCH=ppc64 BDDE_SHELL="uname -a" bdde | grep ppc64 + BDDE_DISTRO=ubuntu BDDE_EDITION=focal BDDE_ARCH=arm64 BDDE_SHELL="uname -a" bin/linux/bdde | grep aarch64 + BDDE_DISTRO=ubuntu BDDE_EDITION=focal BDDE_ARCH=x86_64 BDDE_SHELL="uname -a" bin/linux/bdde | grep x86_64 + BDDE_DISTRO=fedora BDDE_EDITION=34 BDDE_ARCH=s390x BDDE_SHELL="uname -a" bin/linux/bdde | grep s390x diff --git a/README.md b/README.md index daedf67..0e6f821 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,49 @@ # Boost Docker Development Environment (BDDE) -Provides a docker container for linux development of Boost that is -easy to use and accelerates development and debugging of C++ -products. +Provides a docker container for development of Boost that is easy to use +and accelerates development and debugging: -The x86_64 container provides all of the required and optional dependencies -necessary to build boost completely, including documentation. The other -containers are missing some (or many) things and are not marked as "complete" -below. +- Containers marked 'complete' include all optional dependencies for boost + to build completely. +- Multiarch containers allow you to build and test easily against other + architectures. Supported combinations of architecture and OS: -| OS | Arch | Endian | Complete? | Notes | -| -- | ---- | ------ | --------- | ----- | -| deb | x86_64 | little | Yes | Ubuntu Bionic 18.04 LTS | -| deb | arm64 | little | No | Ubuntu Bionic 18.04 LTS | -| red | ppc64 | big | No | Fedora 25 | +| DISTRO | EDITION | ARCH | Endian | Complete? | Clang | GCC | CMake | Cppcheck | Valgrind | +| ------ | ------- | ------ | ------ | --------- | ----- | --- | ----- | -------- | -------- | +| ubuntu | focal | x86_64 | little | Yes | 10.0 | 9.3 | 3.16 | 1.90 | 3.15 | +| ubuntu | focal | arm64 | little | Yes | 10.0 | 9.3 | 3.16 | 1.90 | 3.15 | +| fedora | 34 | s390x | big | No | 12.0 | 11.2 | 3.20 | 2.6 | 3.18 | To use any image that is not native to your host architecture and endianness, -you must satisfy the prerequisites of running a multiarch docker container. +you must satisfy the prerequisites of running a +[multiarch](https://github.com/multiarch/qemu-user-static) docker container: -1. Install the qemu-user-static package. -2. Run `docker run --rm --privileged multiarch/qemu-user-static:register --reset` - -See each Dockerfile for specific prerequisites. Some containers may have special -requirements. +1. Install the binfmt-support and qemu-user-static packages. +2. Run `docker run --rm --privileged multiarch/qemu-user-static --reset -p yes` ## Status -| Branch | Docker Hub | Travis | -| :-------------: | ---------- | ------ | -| [`master`](https://github.com/jeking3/bdde) | [![Build Status](https://img.shields.io/docker/build/jeking3/bdde.svg?style=plastic)](https://cloud.docker.com/repository/docker/jeking3/bdde) | [![Build Status](https://travis-ci.org/jeking3/bdde.svg?branch=master)](https://travis-ci.org/jeking3/bdde/branches) | +| Branch | GitHub Actions | +| :-------------: | -------------- | +| [`main`](https://github.com/jeking3/bdde) | [![Build Status](https://github.com/jeking3/bdde/actions/workflows/test.yml/badge.svg](https://github.com/jeking3/bdde/actions) | ## Future Plans -* Support for a Visual Studio 201x Build Tools environment is planned, +* Support for a Visual Studio 20xx Build Tools environment is planned, enabling Windows containerized builds with all of the required and optional dependencies prepared. ## Linux Development Linux development is possible on any platform with a linux-capable -docker container environment. The x86_64 container includes: +docker container environment. Complete containers include: 1. All of the required and optional dependencies for boost repositories. 2. All of the documentation build dependencies. -3. A known good version of clang, currently 6.0. - (clang does not support side-by-side installation) -4. Many version of gcc from 5.x through 9.x. -5. Both libstdc++ and libc++ are provided. -6. Components for static code analysis (ubsan, valgrind). +3. Both libstdc++ and libc++ are provided. +4. Components for static code analysis (cppcheck, ubsan, valgrind). BDDE will either use `BOOST_ROOT`, or determine it automatically based on your current working directory inside a boost source tree. @@ -61,16 +55,22 @@ boost. ### Usage -Add the `bin/linux` path to your environment (or do this in your .profile to make it permanent): +Unless specified, the ubuntu-focal.x86_64 container is the one that will +be used. See the Environment Variables section below to learn how to +control which container is used. + +Add the `bin/linux` path to your environment (or do this in your .profile +to make it permanent): user@ubuntu:~/bdde$ export PATH=$(pwd)/bin/linux:$PATH -Pull or build the linux docker image for the architecture you want, for exmaple: +Pull or build the linux docker image for the architecture you want, for example: - user@ubuntu:~/bdde$ make deb-x86_64 + user@ubuntu:~/bdde$ bdde-pull If you do not have the boost source tree locally, obtain it: + user@ubuntu:~$ export BOOST_ROOT=~/boost user@ubuntu:~$ bdde-clone The entire boost source collection is downloaded into `BOOST_ROOT`, and @@ -81,22 +81,21 @@ with the top level. Now navigate to a location within your boost source tree and use `bdde` to jump into a docker container at that location where you can start a build. - user@ubuntu:~$ cd ~/boost + user@ubuntu:~$ cd $BOOST_ROOT user@ubuntu:~/boost$ bdde -Now you are in the docker container. Anything you do inside the `/boost` -directory will be preserved. Anything you do outside of the `/boost` -directory is destroyed when you exit the docker container shell prompt. +Now you are inside a docker container. Anything you do inside the `/boost` +directory will be preserved to your BOOST_ROOT. Anything you do outside of +the `/boost` directory is destroyed when you exit the docker container shell +prompt. Type `exit` to leave the container and go back to your host prompt. Boost provides its own build system, Boost.Build, previously known as Boost -Jam. You need to build it one time using the bootstrap shell script. This -will generate the b2 executable: +Jam. You need to build it one time using the bootstrap shell script. By adding +bdde in front of the command you want to run, whatever follows is run inside +the development container. This will generate the b2 executable: user@ubuntu:~/boost$ bdde bootstrap.sh -The previous example also demonstrates how to run a one-off command inside -the docker container from your current directory. - #### Shell BDDE makes it easy to jump into and out of the docker build container. When @@ -120,15 +119,18 @@ by adding arguments to the end of the bdde command: More information on building boost with Boost.Build can be found at: -https://www.boost.org/doc/libs/1_70_0/more/getting_started/unix-variants.html +https://www.boost.org/doc/libs/1_78_0/more/getting_started/unix-variants.html -#### UBSAN +#### ASAN, TSAN, UBSAN, Valgrind -BDDE provides a convenience to make it easy to run anything under UBSAN. -This is a modification of the b2 command with options added to invoke UBSAN -and to print a stacktrace on error: +BDDE provides a convenience to make it easy to run anything under a sanitizer. +This is a modification of the b2 command with options added to invoke the +sanitizer and to print a stacktrace on error: - user@ubuntu:~/boost/libs/uuid/test$ bdde ubsan cxxstd=03 test_sha1 + user@ubuntu:~/boost/libs/format$ bdde-asan + user@ubuntu:~/boost/libs/format$ bdde-tsan + user@ubuntu:~/boost/libs/format$ bdde-ubsan + user@ubuntu:~/boost/libs/format$ bdde-valgrind ## Environment @@ -136,27 +138,26 @@ The following environment variables control the behavior of bdde: ### `BDDE_ARCH` -Set the architecture to use in the container. Choices are (* default): +Set the architecture to use in the container. Choices are based on the available +Dockerfiles. The default is `x86_64`. -- arm64 -- ppc64 -- x86_64 (*) +### `BDDE_DISTRO` -### `BDDE_DOCK` +Set the operating system for the docker container. Choices are based on the +available Dockerfiles. The default is `ubuntu`. -Additional options to pass to docker. +### `BDDE_DOCK` -### `BDDE_OS` +Additional options to pass to docker. Not commonly used. -Set the operating system for the docker container. Choices are (* default): +### `BDDE_EDITION` -- deb (*) - Debian based -- red - RedHat based +Set the distribution edition (release). Choices are based on the available +Dockerfiles. The default is `focal`. ### `BDDE_REPO` -Set the Docker Hub repository name to pull from or name the images for. -The default is `jeking3/bdde`. +Set the Docker Hub repository name to pull from. The default is `jeking3/bdde`. ### `BDDE_SHELL` @@ -174,68 +175,83 @@ on a little-endian x86_64 host running Ubuntu Bionic: ### Installing Prerequisites - root@ubuntu:~# apt-get install -y binfmt-support - root@ubuntu:~# wget http://lug.mtu.edu/ubuntu/pool/universe/q/qemu/qemu-user-static_3.1+dfsg-2ubuntu3.1_amd64.deb - root@ubuntu:~# dpkg -i qemu-user-static_3.1+dfsg-2ubuntu3.1_amd64.deb - - user@ubuntu:~$ docker run --rm --privileged multiarch/qemu-user-static:register --reset + user@ubuntu:~$ sudo apt-get install -y binfmt-support qemu-user-static + user@ubuntu:~$ sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -### Running a unit test in Boost.Predef +### Running a unit test in Boost.Predef while emulating a big-endian system - user@ubuntu:~/boost$ export BDDE_OS=red - user@ubuntu:~/boost$ export BDDE_ARCH=ppc64 + user@ubuntu:~/boost$ export BDDE_DISTRO=fedora + user@ubuntu:~/boost$ export BDDE_EDITION=34 + user@ubuntu:~/boost$ export BDDE_ARCH=s390x user@ubuntu:~/boost$ bdde bootstrap.sh - + docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /home/jking/boost:/boost:rw -v /home/jking/bdde:/bdde:ro -v /home/jking/.vimrc:/home/boost/.vimrc:ro --workdir /boost -it jeking3/bdde:red-ppc64 /bin/bash -c 'bootstrap.sh' - Building Boost.Build engine with toolset gcc... tools/build/src/engine/b2 + + docker run --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /home/jking/boost-root:/boost:rw -v /home/jking/jking/bdde:/bdde:ro -v /home/jking/.vimrc:/home/boost/.vimrc:ro --workdir /boost/. -it jeking3/bdde:fedora-34.s390x /bin/bash -c 'bootstrap.sh' + ### + ### + ### Using 'gcc' toolset. + ### + ### + + g++ (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1) + Copyright (C) 2021 Free Software Foundation, Inc. + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + + ### + ### + + > g++ -x c++ -std=c++11 -O2 -s -DNDEBUG builtins.cpp class.cpp command.cpp compile.cpp constants.cpp cwd.cpp debug.cpp debugger.cpp execcmd.cpp execnt.cpp execunix.cpp filesys.cpp filent.cpp fileunix.cpp frames.cpp function.cpp glob.cpp hash.cpp hcache.cpp hdrmacro.cpp headers.cpp jam_strings.cpp jam.cpp jamgram.cpp lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp native.cpp object.cpp option.cpp output.cpp parse.cpp pathnt.cpp pathsys.cpp pathunix.cpp regexp.cpp rules.cpp scan.cpp search.cpp startup.cpp subst.cpp sysinfo.cpp timestamp.cpp variable.cpp w32_getreg.cpp modules/order.cpp modules/path.cpp modules/property-set.cpp modules/regex.cpp modules/sequence.cpp modules/set.cpp -o b2 + > cp b2 bjam + tools/build/src/engine/b2 Unicode/ICU support for Boost.Regex?... not found. - Backing up existing Boost.Build configuration in project-config.jam.31 - Generating Boost.Build configuration in project-config.jam for gcc... - + Backing up existing B2 configuration in project-config.jam.14 + Generating B2 configuration in project-config.jam for gcc... + Bootstrapping is done. To build, run: - + ./b2 To generate header files, run: - + ./b2 headers + + The configuration generated uses gcc to build by default. If that is + unintended either use the --with-toolset option or adjust configuration, by + editing 'project-config.jam'. - To adjust configuration, edit 'project-config.jam'. - Further information: - - - Command line help: - ./b2 --help - - - Getting started guide: - http://www.boost.org/more/getting_started/unix-variants.html - - - Boost.Build documentation: - http://www.boost.org/build/ - + ... + user@ubuntu:~/boost$ cd libs/predef/test user@ubuntu:~/boost/libs/predef/test$ bdde - boost@554276e34481:/boost/libs/predef/test$ b2 -a info_as_cpp + [boost@b36ab70f591f test]$ b2 toolset=gcc stdlib=gnu11 -a info_as_cpp + MPI auto-detection failed: unknown wrapper compiler mpic++ + You will need to manually configure MPI support. Performing configuration checks - - - default address-model : 64-bit - - default architecture : x86 + + - default address-model : 64-bit [1] + - default architecture : s390x [1] - symlinks supported : yes + + [1] gcc-11 + ...found 40 targets... + ...updating 11 targets... + mklink-or-dir ../../../boost + mklink-or-dir ../../../boost/predef ...patience... - ...found 338 targets... - ...updating 5 targets... link.mklink ../../../boost/predef.h - gcc.compile.c++ ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-7/debug/threading-multi/visibility-hidden/info_as_cpp.o - gcc.link ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-7/debug/threading-multi/visibility-hidden/info_as_cpp - testing.capture-output ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-7/debug/threading-multi/visibility-hidden/info_as_cpp.run - **passed** ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-7/debug/threading-multi/visibility-hidden/info_as_cpp.test - ...updated 5 targets... - boost@554276e34481:/boost/libs/predef/test$ ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-7/debug/threading-multi/visibility-hidden/info_as_cpp | head -10 + gcc.compile.c++ ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-11/debug/stdlib-gnu11/threading-multi/visibility-hidden/info_as_cpp.o + gcc.link ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-11/debug/stdlib-gnu11/threading-multi/visibility-hidden/info_as_cpp + testing.capture-output ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-11/debug/stdlib-gnu11/threading-multi/visibility-hidden/info_as_cpp.run + **passed** ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-11/debug/stdlib-gnu11/threading-multi/visibility-hidden/info_as_cpp.test + ...updated 12 targets... + [boost@b36ab70f591f test]$ ../../../bin.v2/libs/predef/test/info_as_cpp.test/gcc-11/debug/stdlib-gnu11/threading-multi/visibility-hidden/info_as_cpp | head -10 ** Detected ** - BOOST_ARCH_PPC = 1 (0,0,1) | PowerPC - BOOST_COMP_GNUC = 60400001 (6,4,1) | Gnu GCC C/C++ + BOOST_ARCH_SYS390 = 1 (0,0,1) | System/390 + BOOST_ARCH_WORD_BITS = 32 (0,0,32) | Word Bits + BOOST_ARCH_WORD_BITS_32 = 1 (0,0,1) | 32-bit Word Size + BOOST_COMP_GNUC = 110200001 (11,2,1) | Gnu GCC C/C++ BOOST_ENDIAN_BIG_BYTE = 1 (0,0,1) | Byte-Swapped Big-Endian BOOST_LANG_STDC = 1 (0,0,1) | Standard C - BOOST_LANG_STDCPP = 440200001 (44,2,1) | Standard C++ - BOOST_LIB_C_GNU = 22400000 (2,24,0) | GNU - BOOST_LIB_STD_GNU = 470700027 (47,7,27) | GNU - BOOST_OS_LINUX = 1 (0,0,1) | Linux - BOOST_OS_UNIX = 1 (0,0,1) | Unix Environment + BOOST_LANG_STDCPP = 470300001 (47,3,1) | Standard C++ + BOOST_LIB_C_GNU = 23300000 (2,33,0) | GNU + BOOST_LIB_STD_GNU = 510700028 (51,7,28) | GNU diff --git a/bin/linux/bdde b/bin/linux/bdde index 59ab4ea..b040aea 100755 --- a/bin/linux/bdde +++ b/bin/linux/bdde @@ -19,10 +19,21 @@ BOOST_ROOT=$(find_boost_root) BOOST_STEM=${BOOST_STEM:-/boost/$(realpath --logical --relative-base="${BOOST_ROOT}" "$(pwd)")} set +e +# check if we're interactive and need a tty +if [[ -t 0 ]]; then + IT=-it +else + IT=-i +fi + if [ $# -ne 0 ]; then set -x - docker run --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined ${BDDE_DOCK} -v "${BOOST_ROOT}:/boost:rw" -v "${BDDE_ROOT}:/bdde:ro" -v "${HOME}/.vimrc:/home/boost/.vimrc:ro" --workdir "${BOOST_STEM}" -it ${BDDE_REPO}:${BDDE_OS}-${BDDE_ARCH} ${BDDE_SHELL} -c "$*" + docker run --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined ${BDDE_DOCK} \ + -v "${BOOST_ROOT}:/boost:rw" -v "${BDDE_ROOT}:/bdde:ro" -v "${HOME}/.vimrc:/home/boost/.vimrc:ro" \ + --workdir "${BOOST_STEM}" ${IT} ${BDDE_REPO}:${BDDE_SLUG} ${BDDE_SHELL} -c "$*" else set -x - docker run --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined ${BDDE_DOCK} -v "${BOOST_ROOT}:/boost:rw" -v "${BDDE_ROOT}:/bdde:ro" -v "${HOME}/.vimrc:/home/boost/.vimrc:ro" --workdir "${BOOST_STEM}" -it ${BDDE_REPO}:${BDDE_OS}-${BDDE_ARCH} ${BDDE_SHELL} + docker run --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined ${BDDE_DOCK} \ + -v "${BOOST_ROOT}:/boost:rw" -v "${BDDE_ROOT}:/bdde:ro" -v "${HOME}/.vimrc:/home/boost/.vimrc:ro" \ + --workdir "${BOOST_STEM}" ${IT} ${BDDE_REPO}:${BDDE_SLUG} ${BDDE_SHELL} fi diff --git a/bin/linux/bdde-asan b/bin/linux/bdde-asan new file mode 100755 index 0000000..904ffe0 --- /dev/null +++ b/bin/linux/bdde-asan @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2018 - 2022 James E. King III +# +# Use, modification, and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# bdde-ubsan can be executed inside the container to build +# and run tests with ASAN. +# +# Arguments: +# $* arguments to pass to the build string which is configured +# to enable ASAN. +# + +set -x +bdde UBSAN_OPTIONS=print_stacktrace=1 b2 define=BOOST_NO_STRESS_TEST=1 address-sanitizer=norecover variant=debug $* diff --git a/bin/linux/bdde-build b/bin/linux/bdde-build new file mode 100755 index 0000000..c45a2a4 --- /dev/null +++ b/bin/linux/bdde-build @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2018 - 2022 James E. King III +# +# Use, modification, and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# Boost Docker Development Environment +# + +BDDE_ROOT=$(readlink -f "$(dirname ${BASH_SOURCE[0]})/../..") +BDDE_LIB=${BDDE_ROOT}/bin/linux/lib +. ${BDDE_LIB}/defaults.sh + +if [ ! -z "${BDDE_REBUILD}" ]; then + DOCKER_CACHE_OPTION=--no-cache +fi + +set -x +docker build ${DOCKER_CACHE_OPTION} -t ${BDDE_REPO}:${BDDE_SLUG} -f Dockerfile.${BDDE_SLUG} . diff --git a/bin/linux/bdde-clean-image b/bin/linux/bdde-clean similarity index 80% rename from bin/linux/bdde-clean-image rename to bin/linux/bdde-clean index 165c7a7..5a48df6 100755 --- a/bin/linux/bdde-clean-image +++ b/bin/linux/bdde-clean @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright (C) 2018 - 2019 James E. King III +# Copyright (C) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file @@ -14,4 +14,4 @@ BDDE_LIB=${BDDE_ROOT}/bin/linux/lib . ${BDDE_LIB}/defaults.sh set -x -docker rmi ${BDDE_REPO}:${BDDE_OS}-${BDDE_ARCH} +docker rmi ${BDDE_REPO}:${BDDE_SLUG} diff --git a/bin/linux/bdde-clone b/bin/linux/bdde-clone index 53987ae..b431719 100755 --- a/bin/linux/bdde-clone +++ b/bin/linux/bdde-clone @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright (C) 2018 James E. King III +# Copyright (C) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file @@ -18,6 +18,7 @@ fi BOOST_BRANCH=${1:-develop} +set -x git clone https://github.com/boostorg/boost.git ${BOOST_ROOT} && \ pushd ${BOOST_ROOT} && git checkout -t origin/${BOOST_BRANCH} && \ git submodule update --init --recursive && popd diff --git a/bin/linux/bdde-build-image b/bin/linux/bdde-pull similarity index 65% rename from bin/linux/bdde-build-image rename to bin/linux/bdde-pull index b060bb0..45d84f4 100755 --- a/bin/linux/bdde-build-image +++ b/bin/linux/bdde-pull @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright (C) 2018 - 2019 James E. King III +# Copyright (C) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file @@ -13,5 +13,4 @@ BDDE_ROOT=$(readlink -f "$(dirname ${BASH_SOURCE[0]})/../..") BDDE_LIB=${BDDE_ROOT}/bin/linux/lib . ${BDDE_LIB}/defaults.sh -set -x -docker pull ${BDDE_REPO}:${BDDE_OS}-${BDDE_ARCH} || docker build -t ${BDDE_REPO}:${BDDE_OS}-${BDDE_ARCH} -f Dockerfile.${BDDE_OS}-${BDDE_ARCH} . +docker pull ${BDDE_REPO}:${BDDE_SLUG} diff --git a/bin/linux/bdde-tsan b/bin/linux/bdde-tsan new file mode 100755 index 0000000..f998a34 --- /dev/null +++ b/bin/linux/bdde-tsan @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2018 - 2022 James E. King III +# +# Use, modification, and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# bdde-ubsan can be executed inside the container to build +# and run tests with TSAN. +# +# Arguments: +# $* arguments to pass to the build string which is configured +# to enable TSAN. +# + +set -x +bdde UBSAN_OPTIONS=print_stacktrace=1 b2 define=BOOST_NO_STRESS_TEST=1 thread-sanitizer=norecover variant=debug $* diff --git a/bin/linux/ubsan b/bin/linux/bdde-ubsan similarity index 67% rename from bin/linux/ubsan rename to bin/linux/bdde-ubsan index ab34cda..3883be2 100755 --- a/bin/linux/ubsan +++ b/bin/linux/bdde-ubsan @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright (C) 2018 - 2019 James E. King III +# Copyright (C) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file @@ -15,4 +15,4 @@ # set -x -UBSAN_OPTIONS=print_stacktrace=1 b2 define=BOOST_NO_STRESS_TEST=1 undefined-sanitizer=norecover variant=debug linkflags=-fuse-ld=gold toolset=gcc-8 $* +bdde UBSAN_OPTIONS=print_stacktrace=1 b2 define=BOOST_NO_STRESS_TEST=1 undefined-sanitizer=norecover variant=debug $* diff --git a/bin/linux/bdde-valgrind b/bin/linux/bdde-valgrind new file mode 100755 index 0000000..c1f3fd6 --- /dev/null +++ b/bin/linux/bdde-valgrind @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2018 - 2022 James E. King III +# +# Use, modification, and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# bdde-ubsan can be executed inside the container to build +# and run tests with valgrind. +# +# Arguments: +# $* arguments to pass to the build string which is configured +# to enable valgrind. +# + +set -x +bdde b2 define=BOOST_NO_STRESS_TEST=1 valgrind=on testing.launcher=valgrind variant=debug $* diff --git a/bin/linux/lib/defaults.sh b/bin/linux/lib/defaults.sh index 41ef7d7..d283739 100755 --- a/bin/linux/lib/defaults.sh +++ b/bin/linux/lib/defaults.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright (C) 2018 - 2019 James E. King III +# Copyright (C) 2018 - 2022 James E. King III # # Use, modification, and distribution are subject to the # Boost Software License, Version 1.0. (See accompanying file @@ -10,6 +10,10 @@ # BDDE_ARCH=${BDDE_ARCH:-x86_64} -BDDE_OS=${BDDE_OS:-deb} +BDDE_DISTRO=${BDDE_DISTRO:-ubuntu} +BDDE_EDITION=${BDDE_EDITION:-focal} BDDE_REPO=${BDDE_REPO:-jeking3/bdde} BDDE_SHELL=${BDDE_SHELL:-/bin/bash} +BDDE_SLUG=${BDDE_DISTRO}-${BDDE_EDITION}.${BDDE_ARCH} + +export DOCKER_BUILDKIT=1