tree: 8fc2bf5e4e94e381511be37a08c2feb3cedbd914 [path history] [tgz]
  1. bin/
  2. cross-files/
  3. Dockerfile
  4. Dockerfile.ubuntu
  5. Dockerfile.ubuntu_bionic
  6. README.md
  7. simde-dev.sh
cpp/third_party/simde-0.8.4-rc3/docker/README.md

SIMDe Development Container

The basic idea is to set up a Debian system with lots of different compilers and emulators for different architectures and configure multiple builds in different directories.

Note that there are also several docker files in the test/ subdirectory. These can be used to test other operating systems, especially older compilers which aren't supported on Debian testing anymore.

To use this, just run the simde-dev.sh script and go grab a cup of coffee lunch (it will take a while, and download a lot of packages). Once the container is ready it will drop you into a bash shell in /opt/simde; this is the build directory.

This will bind the parent directory (the root of the SIMDe checkout) to /usr/local/src/simde; any changes to either will propagate to the other, meaning you can continue using your normal development environment and just re-run ninja in the container to (re)build SIMDe.

If you would like build directories to persist across multiple invocations of simde-dev.sh, you can set the PERSISTENT_BUILD_DIR to a directory on the host filesystem and it will be mapped to /opt/simde in the container.

Once your container is finished building, just simde-reset-build.sh and it should be populated with a bunch of subdirectories which you can build with ninja. For example, ninja -C gcc-10 will build SIMDe using GCC 10. If you want to run the tests, ninja -C gcc-10 test (or cd gcc-10 && ninja test).

You can also run simde-reset-build.sh build-name to (re)generate a single build.

Debian Version

By default, we use Debian testing. If you would like to use Debian unstable instead, just run simde-dev.sh unstable.

Altering or Adding Builds

Each build has an associated Meson cross file (see the cross-files/ subdirectory). We kind of abuse these by adding flags like -Wextra, -Werror, -march=..., etc., which aren't really about cross-compilation. However, you can add or remove C/C++ flags in the cross files, or if you want to add flags you can just put them in the CFLAGS/CXXFLAGS environment variables and reconfigure the build. You can also create a new cross file with your preferred configuration.