Compare commits

...

20 Commits

Author SHA1 Message Date
d3d033f77d Merge branch 'master' into clean_repos 2021-07-01 00:08:03 +02:00
9409f4c5a2 Merge pull request #521 from bensuperpc/update_cmake 2021-06-30 17:05:51 -04:00
1d311100cd Merge branch 'master' into clean_repos 2021-06-30 16:37:59 +02:00
7f5fcc4513 Merge pull request #517 from bensuperpc/update_readme 2021-06-30 10:13:28 -04:00
37a75535ab Merge pull request #519 from bensuperpc/update_bullseye
Update images to debian bullseye
2021-06-30 09:51:45 -04:00
eb0c4d8d95 Fix CMake error on manylinux1
Fix CMake error on manylinux1

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-30 15:07:13 +02:00
076faf7ede Update CMake to 3.20.5 and git to 2.32.0
Update CMake to 3.20.5 and git to 2.32.0

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-30 09:08:40 +02:00
ce521deaeb Revert "Update CMake to 3.20.5 and git to 2.32.0, update install-cmake-binary.sh script"
This reverts commit 969f456ae0.
2021-06-30 09:07:32 +02:00
479f1c5d6f Add cmake to build from source
Add cmake to build from source

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-30 09:07:19 +02:00
ce95ecfbf6 Merge branch 'master' into update_cmake 2021-06-30 00:09:24 +02:00
656e8ef65a Update to bullseye
Update to bullseye

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-29 22:14:18 +02:00
927f709819 Clean repos and fix clean rule
Move common files to common folder
Move patch files to patch folder
Fix clean rule in Makefile (Remove /Dockerfile in path, he is already there)

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-29 19:10:34 +02:00
c7d6bb91b7 Add readme to ignored path in CI
It is not necessary to launch a git workflow when modifying the README

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-29 17:47:51 +02:00
0b108e35a8 Fix merge
Fix merge

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-29 17:38:29 +02:00
678140b0ac Update README
Fix text size

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-29 17:30:05 +02:00
12a662e05c Merge pull request #516 from bensuperpc/remove_mipsel
Remove linux-mipsel and add linux-mips to CI
2021-06-29 11:21:00 -04:00
0a00d94731 Update README
Add docker pull badge

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-29 17:03:12 +02:00
ecc02c2f39 First new version of README
Move from .rst to .md

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-29 16:44:11 +02:00
1c063e47f0 Merge branch 'master' into update_cmake 2021-06-29 15:06:06 +02:00
969f456ae0 Update CMake to 3.20.5 and git to 2.32.0, update install-cmake-binary.sh script
Update CMake to 3.20.5 and git to 2.32.0, update install-cmake-binary.sh script

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-06-27 19:59:12 +02:00
22 changed files with 535 additions and 510 deletions

View File

@ -4,9 +4,13 @@ on:
push:
branches:
- 'master'
paths-ignore:
- '**/README.md'
pull_request:
branches:
- '*'
paths-ignore:
- '**/README.md'
jobs:
base:

View File

@ -1,4 +1,6 @@
FROM debian:buster-slim
ARG DOCKER_IMAGE=debian:bullseye-slim
FROM $DOCKER_IMAGE
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
#include "common.debian"

View File

@ -23,7 +23,10 @@ GEN_IMAGE_DOCKERFILES = $(addsuffix /Dockerfile,$(GEN_IMAGES))
# These images are expected to have explicit rules for *both* build and testing
NON_STANDARD_IMAGES = web-wasm manylinux1-x64 manylinux1-x86 manylinux2010-x64 manylinux2010-x86 manylinux2014-x64 manylinux2014-x86 manylinux2014-aarch64
# Docker composite files
DOCKER_COMPOSITE_SOURCES = common.docker common.debian common.manylinux common.crosstool common.windows common-manylinux.crosstool common.dockcross common.label-and-env
DOCKER_COMPOSITE_FOLDER_PATH = common/
DOCKER_COMPOSITE_PATH = $(addprefix $(DOCKER_COMPOSITE_FOLDER_PATH),$(DOCKER_COMPOSITE_SOURCES))
# This list all available images
IMAGES = $(STANDARD_IMAGES) $(NON_STANDARD_IMAGES)
@ -61,16 +64,16 @@ test: base.test $(addsuffix .test,$(IMAGES))
# Generic Targets (can specialize later).
#
$(GEN_IMAGE_DOCKERFILES) Dockerfile: %Dockerfile: %Dockerfile.in $(DOCKER_COMPOSITE_SOURCES)
$(GEN_IMAGE_DOCKERFILES) Dockerfile: %Dockerfile: %Dockerfile.in $(DOCKER_COMPOSITE_PATH)
sed \
-e '/common.docker/ r common.docker' \
-e '/common.debian/ r common.debian' \
-e '/common.manylinux/ r common.manylinux' \
-e '/common.crosstool/ r common.crosstool' \
-e '/common-manylinux.crosstool/ r common-manylinux.crosstool' \
-e '/common.windows/ r common.windows' \
-e '/common.dockcross/ r common.dockcross' \
-e '/common.label-and-env/ r common.label-and-env' \
-e '/common.docker/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.docker' \
-e '/common.debian/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.debian' \
-e '/common.manylinux/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.manylinux' \
-e '/common.crosstool/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.crosstool' \
-e '/common-manylinux.crosstool/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common-manylinux.crosstool' \
-e '/common.windows/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.windows' \
-e '/common.dockcross/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.dockcross' \
-e '/common.label-and-env/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.label-and-env' \
$< > $@
#
@ -239,7 +242,6 @@ base: Dockerfile imagefiles/
base.test: base
$(DOCKER) run $(RM) $(ORG)/base > $(BIN)/dockcross-base && chmod +x $(BIN)/dockcross-base
#
# display
#
display_images:
@ -264,7 +266,7 @@ $(STANDARD_IMAGES): %: %/Dockerfile base
clean:
for d in $(STANDARD_IMAGES) ; do rm -rf $$d/imagefiles ; done
for d in $(GEN_IMAGE_DOCKERFILES) ; do rm -f $$d/Dockerfile ; done
for d in $(GEN_IMAGE_DOCKERFILES) ; do rm -f $$d ; done
rm -f Dockerfile
purge: clean

493
README.md Normal file
View File

@ -0,0 +1,493 @@
# dockcross
Cross compiling toolchains in Docker images.
[![image](https://github.com/dockcross/dockcross/workflows/Dockcross%20CI/badge.svg)](https://github.com/dockcross/dockcross/actions?query=branch%3Amaster)
## Features
- Pre-built and configured toolchains for cross compiling.
- Most images also contain an emulator for the target system.
- Clean separation of build tools, source code, and build artifacts.
- Commands in the container are run as the calling user, so that any
created files have the expected ownership, (i.e. not root).
- Make variables ([CC]{.title-ref}, [LD]{.title-ref} etc) are set to
point to the appropriate tools in the container.
- Recent [CMake](https://cmake.org) and ninja are precompiled.
- [Conan.io](https://www.conan.io) can be used as a package manager.
- Toolchain files configured for CMake.
- Current directory is mounted as the container\'s workdir, `/work`.
- Works with the [Docker for
Mac](https://docs.docker.com/docker-for-mac/) and [Docker for
Windows](https://docs.docker.com/docker-for-windows/).
- Support using alternative container executor by setting
[OCI_EXE]{.title-ref} environment variable. By default, it searches
for [docker]{.title-ref} and
\[[podman]{.title-ref}\](<https://podman.io/>) executable.
## Examples
1. `dockcross make`: Build the *Makefile* in the current directory.
2. `dockcross cmake -Bbuild -H. -GNinja`: Run CMake with a build
directory `./build` for a *CMakeLists.txt* file in the current
directory and generate `ninja` build configuration files.
3. `dockcross ninja -Cbuild`: Run ninja in the `./build` directory.
4. `dockcross bash -c '$CC test/C/hello.c -o hello'`: Build the
*hello.c* file with the compiler identified with the `CC`
environmental variable in the build environment.
5. `dockcross bash`: Run an interactive shell in the build environment.
Note that commands are executed verbatim. If any shell processing for
environment variable expansion or redirection is required, please use
[bash -c \'command args\...\']{.title-ref}.
## Installation
This image does not need to be run manually. Instead, there is a helper
script to execute build commands on source code existing on the local
host filesystem. This script is bundled with the image.
To install the helper script, run one of the images with no arguments,
and redirect the output to a file:
docker run --rm CROSS_COMPILER_IMAGE_NAME > ./dockcross
chmod +x ./dockcross
mv ./dockcross ~/bin/
Where [CROSS_COMPILER_IMAGE_NAME]{.title-ref} is the name of the
cross-compiler toolchain Docker instance, e.g.
[dockcross/linux-armv7]{.title-ref}.
Only 64-bit x86_64 images are provided; a 64-bit x86_64 host system is
required.
## Usage
For the impatient, here\'s how to compile a hello world for armv7:
cd ~/src/dockcross
docker run --rm dockcross/linux-armv7 > ./dockcross-linux-armv7
chmod +x ./dockcross-linux-armv7
./dockcross-linux-armv7 bash -c '$CC test/C/hello.c -o hello_arm'
Note how invoking any toolchain command (make, gcc, etc.) is just a
matter of prepending the **dockcross** script on the commandline:
./dockcross-linux-armv7 [command] [args...]
The dockcross script will execute the given command-line inside the
container, along with all arguments passed after the command. Commands
that evaluate environmental variables in the image, like
[\$CC]{.title-ref} above, should be executed in [bash -c].
The present working directory is mounted within the image, which can be
used to make source code available in the Docker container.
## Cross compilers
### dockcross/base
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/base/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/base/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/base) ![Docker Stars](https://img.shields.io/docker/stars/dockcross/base)
Base image for other toolchain images. From Debian Jessie with GCC,
make, autotools, CMake, Ninja, Git, and Python.
### dockcross/android-arm
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/android-arm/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/android-arm/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/android-arm)
The Android NDK standalone toolchain for the arm architecture.
### dockcross/android-arm64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/android-arm64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/android-arm64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/android-arm64)
The Android NDK standalone toolchain for the arm64 architecture.
### dockcross/android-x86
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/android-x86/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/android-x86/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/android-x86)
The Android NDK standalone toolchain for the x86 architecture.
### dockcross/android-x86_64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/android-x86_64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/android-x86_64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/android-x86_64)
The Android NDK standalone toolchain for the x86_64 architecture.
### dockcross/linux-arm64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-arm64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-arm64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-arm64)
Cross compiler for the 64-bit ARM platform on Linux, also known as
AArch64.
### dockcross/linux-arm64-musl
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-arm64-musl/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-arm64-musl/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-arm64-musl)
Cross compiler for the 64-bit ARM platform on Linux (also known as
AArch64), using [musl](https://www.musl-libc.org/) as base \"libc\".
### dockcross/linux-armv5
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-armv5/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-armv5/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-armv5)
Linux armv5 cross compiler toolchain for legacy devices like the
Parrot AR Drone.
### dockcross/linux-armv5-musl
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-armv5-musl/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-armv5-musl/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-armv5-musl)
Linux armv5 cross compiler toolchain using
[musl](https://www.musl-libc.org/) as base \"libc\".
### dockcross/linux-armv6
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-armv6/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-armv6/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-armv6)
Linux ARMv6 cross compiler toolchain for the Raspberry Pi, etc.
### dockcross/linux-armv6-musl
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-armv6-musl/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-armv6-musl/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-armv6-musl)
Linux ARMv6 cross compiler toolchain for the Raspberry Pi, etc,
using [musl](https://www.musl-libc.org/) as base \"libc\".
### dockcross/linux-armv7
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-armv7/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-armv7/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-armv7)
Generic Linux armv7 cross compiler toolchain.
### dockcross/linux-armv7a
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-armv7a/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-armv7a/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-armv7a)
Toolchain configured for ARMv7-A used in Beaglebone Black single
board PC with TI SoC AM3358 on board, Cortex-A8.
### dockcross/linux-armv7l-musl
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-armv7l-musl/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-armv7l-musl/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-armv7l-musl)
Toolchain configured for ARMv7-L, using
[musl](https://www.musl-libc.org/) as base \"libc\".
### dockcross/linux-mipsel
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-mipsel/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-mipsel/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-mipsel)
Linux mipsel cross compiler toolchain for little endian MIPS GNU
systems.
### dockcross/linux-mips
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-mips/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-mips/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-mips)
Linux mips cross compiler toolchain for big endian 32-bit hard float
MIPS GNU systems.
### dockcross/linux-s390x
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-s390x/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-s390x/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-s390x)
Linux s390x cross compiler toolchain for S390X GNU systems.
### dockcross/linux-ppc64le
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-ppc64le/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-ppc64le/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-ppc64le)
Linux PowerPC 64 little endian cross compiler toolchain for the
POWER8, etc. Important: Due to Issue #430, automatic build of newer
images has been disabled.
### dockcross/linux-x64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-x64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-x64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-x64)
Linux x86_64 / amd64 compiler. Since the Docker image is natively
x86_64, this is not actually a cross compiler.
### dockcross/linux-x64-clang
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-x64-clang/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-x64-clang/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-x64-clang)
Linux clang x86_64 / amd64 compiler. Since the Docker image is
natively x86_64, this is not actually a cross compiler.
### dockcross/linux-x86
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/linux-x86/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/linux-x86/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/linux-x86)
Linux i686 cross compiler.
### dockcross/manylinux2014-x64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/manylinux2014-x64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/manylinux2014-x64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/manylinux2014-x64)
Docker [manylinux2014](https://github.com/pypa/manylinux) image for
building Linux x86_64 / amd64 [Python wheel
packages](http://pythonwheels.com/). It includes Python 3.5, 3.6,
3.7, 3.8, and 3.9. Also has support for the dockcross script, and it
has installations of CMake, Ninja, and
[scikit-build](http://scikit-build.org). For CMake, it sets
[MANYLINUX2014]{.title-ref} to \"TRUE\" in the toolchain.
### dockcross/manylinux2014-x86
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/manylinux2014-x86/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/manylinux2014-x86/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/manylinux2014-x86)
Docker [manylinux2014](https://github.com/pypa/manylinux) image for
building Linux i686 [Python wheel
packages](http://pythonwheels.com/). It includes Python 3.5, 3.6,
3.7, 3.8, and 3.9. Also has support for the dockcross script, and it
has installations of CMake, Ninja, and
[scikit-build](http://scikit-build.org). For CMake, it sets
[MANYLINUX2014]{.title-ref} to \"TRUE\" in the toolchain.
### dockcross/manylinux2014-aarch64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/manylinux2014-aarch64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/manylinux2014-aarch64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/manylinux2014-aarch64)
Docker [manylinux2014](https://github.com/pypa/manylinux) image for
building Linux aarch64 / arm64 [Python wheel
packages](http://pythonwheels.com/). It includes Python 3.5, 3.6,
3.7, 3.8, and 3.9. Also has support for the dockcross script, and it
has installations of CMake, Ninja, and
[scikit-build](http://scikit-build.org). For CMake, it sets
[MANYLINUX2014]{.title-ref} to \"TRUE\" in the toolchain.
### dockcross/manylinux2010-x64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/manylinux2010-x64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/manylinux2010-x64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/manylinux2010-x64)
Docker [manylinux2010](https://github.com/pypa/manylinux)
image for building Linux x86_64 / amd64 [Python wheel
packages](http://pythonwheels.com/). It includes Python 2.7, 3.4,
3.5, 3.6, 3.7 and 3.8. Also has support for the dockcross script,
and it has installations of CMake, Ninja, and
[scikit-build](http://scikit-build.org). For CMake, it sets
[MANYLINUX2010]{.title-ref} to \"TRUE\" in the toolchain.
### dockcross/manylinux2010-x86
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/manylinux2010-x86/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/manylinux2010-x86/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/manylinux2010-x86)
Docker [manylinux2010](https://github.com/pypa/manylinux) image for
building Linux i686 [Python wheel
packages](http://pythonwheels.com/). It includes Python 2.7, 3.4,
3.5, 3.6, 3.7 and 3.8. Also has support for the dockcross script,
and it has installations of CMake, Ninja, and
[scikit-build](http://scikit-build.org). For CMake, it sets
[MANYLINUX2010]{.title-ref} to \"TRUE\" in the toolchain.
### dockcross/manylinux1-x64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/manylinux1-x64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/manylinux1-x64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/manylinux1-x64)
Docker [manylinux1](https://github.com/pypa/manylinux/tree/manylinux1)
image for building Linux x86_64 / amd64 [Python wheel
packages](http://pythonwheels.com/). It includes Python 2.7, 3.4,
3.5, 3.6, 3.7 and 3.8. Also has support for the dockcross script,
and it has installations of CMake, Ninja, and
[scikit-build](http://scikit-build.org). For CMake, it sets
[MANYLINUX1]{.title-ref} to \"TRUE\" in the toolchain.
### dockcross/manylinux1-x86
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/manylinux1-x86/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/manylinux1-x86/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/manylinux1-x86)
Docker [manylinux1](https://github.com/pypa/manylinux/tree/manylinux1)
image for building Linux i686 [Python wheel
packages](http://pythonwheels.com/). It includes Python 2.7, 3.4,
3.5, 3.6, 3.7 and 3.8. Also has support for the dockcross script,
and it has installations of CMake, Ninja, and
[scikit-build](http://scikit-build.org). For CMake, it sets
[MANYLINUX1]{.title-ref} to \"TRUE\" in the toolchain.
### dockcross/web-wasm
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/web-wasm/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/web-wasm/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/web-wasm)
The Emscripten WebAssembly/asm.js/JavaScript cross compiler.
### dockcross/windows-static-x64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/windows-static-x64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/windows-static-x64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/windows-static-x64)
64-bit Windows cross-compiler based on [MXE/MinGW-w64](https://mxe.cc/) with win32 threads and static
linking.
### dockcross/windows-static-x64-posix
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/windows-static-x64-posix/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/windows-static-x64-posix/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/windows-static-x64-posix)
64-bit Windows cross-compiler based on [MXE/MinGW-w64](https://mxe.cc/) with posix threads and static
linking.
### dockcross/windows-static-x86
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/windows-static-x86/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/windows-static-x86/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/windows-static-x86)
32-bit Windows cross-compiler based on [MXE/MinGW-w64](https://mxe.cc/) with win32 threads and static linking.
### dockcross/windows-shared-x64
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/windows-shared-x64/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/windows-shared-x64/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/windows-shared-x64)
64-bit Windows cross-compiler based on [MXE/MinGW-w64](https://mxe.cc/) with win32 threads and dynamic linking.
### dockcross/windows-shared-x64-posix
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/windows-shared-x64-posix/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/windows-shared-x64-posix/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/windows-shared-x64-posix)
64-bit Windows cross-compiler based on [MXE/MinGW-w64](https://mxe.cc/) with posix threads and dynamic linking.
### dockcross/windows-shared-x86
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/dockcross/windows-shared-x86/latest) ![MicroBadger Layers (tag)](https://img.shields.io/microbadger/layers/dockcross/windows-shared-x86/latest) ![Docker Pulls](https://img.shields.io/docker/pulls/dockcross/windows-shared-x86)
32-bit Windows cross-compiler based on [MXE/MinGW-w64](https://mxe.cc/) with win32 threads and dynamic linking.
## Articles
- [dockcross: C++ Write Once, Run
Anywhere](https://nbviewer.jupyter.org/format/slides/github/dockcross/cxx-write-once-run-anywhere/blob/master/dockcross_CXX_Write_Once_Run_Anywhere.ipynb#/)
- [Cross-compiling binaries for multiple architectures with
Docker](https://web.archive.org/web/20170912153531/http://blogs.nopcode.org/brainstorm/2016/07/26/cross-compiling-with-docker)
## Built-in update commands
A special update command can be executed that will update the source
cross-compiler Docker image or the dockcross script itself.
- `dockcross [--] command [args...]`: Forces a command to run inside
the container (in case of a name clash with a built-in command), use
`--` before the command.
- `dockcross update-image`: Fetch the latest version of the docker
image.
- `dockcross update-script`: Update the installed dockcross script
with the one bundled in the image.
- `dockcross update`: Update both the docker image, and the dockcross
script.
## Download all images
To easily download all images, the convenience target `display_images`
could be used:
curl https://raw.githubusercontent.com/dockcross/dockcross/master/Makefile -o dockcross-Makefile
for image in $(make -f dockcross-Makefile display_images); do
echo "Pulling dockcross/$image"
docker pull dockcross/$image
done
## Install all dockcross scripts
To automatically install in `~/bin` the dockcross scripts for each
images already downloaded, the convenience target `display_images` could
be used:
curl https://raw.githubusercontent.com/dockcross/dockcross/master/Makefile -o dockcross-Makefile
for image in $(make -f dockcross-Makefile display_images); do
if [[ $(docker images -q dockcross/$image) == "" ]]; then
echo "~/bin/dockcross-$image skipping: image not found locally"
continue
fi
echo "~/bin/dockcross-$image ok"
docker run dockcross/$image > ~/bin/dockcross-$image && \
chmod u+x ~/bin/dockcross-$image
done
## Dockcross configuration
The following environmental variables and command-line options are used.
In all cases, the command-line option overrides the environment
variable.
### DOCKCROSS_CONFIG / \--config\|-c \<path-to-config-file>
This file is sourced, if it exists, before executing the rest of the
dockcross script.
Default: `~/.dockcross`
### DOCKCROSS_IMAGE / \--image\|-i \<docker-image-name>
The Docker cross-compiler image to run.
Default: Image with which the script was created.
### DOCKCROSS_ARGS / \--args\|-a \<docker-run-args>
Extra arguments to pass to the `docker run` command. Quote the entire
set of args if they contain spaces.
## Per-project dockcross configuration
If a shell script named `.dockcross` is found in the current directory
where the dockcross script is started, it is executed before the
dockcross script `command` argument. The shell script is expected to
have a shebang like `#!/usr/bin/env bash`.
For example, commands like
`git config --global advice.detachedHead false` can be added to this
script.
## How to extend Dockcross images
In order to extend Dockcross images with your own commands, one must:
1. Use `FROM dockcross/<name_of_image>`.
2. Set `DEFAULT_DOCKCROSS_IMAGE` to a name of the tag you\'re planning
to use for the image. This tag must then be used during the build
phase, unless you mean to pass the resulting helper script the
`DOCKCROSS_IMAGE` argument.
An example Dockerfile would be:
FROM dockcross/linux-armv7
ENV DEFAULT_DOCKCROSS_IMAGE my_cool_image
RUN apt-get install nano
And then in the shell:
docker build -t my_cool_image . ## Builds the dockcross image.
docker run my_cool_image > linux-armv7 ## Creates a helper script named linux-armv7.
chmod +x linux-armv7 ## Gives the script execution permission.
./linux-armv7 bash ## Runs the helper script with the argument "bash", which starts an interactive container using your extended image.
## What is the difference between [dockcross]{.title-ref} and [dockbuild]{.title-ref} ?
The key difference is that
[dockbuild](https://github.com/dockbuild/dockbuild#readme) images do
**NOT** provide a [toolchain
file](https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html)
but they use the same method to conveniently isolate the build
environment as
[dockcross](https://github.com/dockcross/dockcross#readme).
[dockbuild]{.title-ref} is used to build binaries for Linux x86_64 /
amd64 that will work across most Linux distributions.
[dockbuild]{.title-ref} performs a native Linux build where the host
build system is a Linux x86_64 / amd64 Docker image (so that it can be
used for building binaries on any system which can run Docker images)
and the target runtime system is Linux x86_x64 / amd64.
[dockcross]{.title-ref} is used to build binaries for many different
platforms. [dockcross]{.title-ref} performs a cross compilation where
the host build system is a Linux x86_64 / amd64 Docker image (so that it
can be used for building binaries on any system which can run Docker
images) and the target runtime system varies.
\-\--
Credits go to
[sdt/docker-raspberry-pi-cross-compiler](https://github.com/sdt/docker-raspberry-pi-cross-compiler),
who invented the base of the **dockcross** script.

View File

@ -1,477 +0,0 @@
dockcross
=========
Cross compiling toolchains in Docker images.
.. image:: https://github.com/dockcross/dockcross/workflows/Dockcross%20CI/badge.svg
:target: https://github.com/dockcross/dockcross/actions?query=branch%3Amaster
Features
--------
* Pre-built and configured toolchains for cross compiling.
* Most images also contain an emulator for the target system.
* Clean separation of build tools, source code, and build artifacts.
* Commands in the container are run as the calling user, so that any created files have the expected ownership, (i.e. not root).
* Make variables (`CC`, `LD` etc) are set to point to the appropriate tools in the container.
* Recent `CMake <https://cmake.org>`_ and ninja are precompiled.
* `Conan.io <https://www.conan.io>`_ can be used as a package manager.
* Toolchain files configured for CMake.
* Current directory is mounted as the container's workdir, ``/work``.
* Works with the `Docker for Mac <https://docs.docker.com/docker-for-mac/>`_ and `Docker for Windows <https://docs.docker.com/docker-for-windows/>`_.
* Support using alternative container executor by setting `OCI_EXE` environment variable. By default, it searches for `docker` and [`podman`](https://podman.io/) executable.
Examples
--------
1. ``dockcross make``: Build the *Makefile* in the current directory.
2. ``dockcross cmake -Bbuild -H. -GNinja``: Run CMake with a build directory
``./build`` for a *CMakeLists.txt* file in the current directory and generate
``ninja`` build configuration files.
3. ``dockcross ninja -Cbuild``: Run ninja in the ``./build`` directory.
4. ``dockcross bash -c '$CC test/C/hello.c -o hello'``: Build the *hello.c* file
with the compiler identified with the ``CC`` environmental variable in the
build environment.
5. ``dockcross bash``: Run an interactive shell in the build environment.
Note that commands are executed verbatim. If any shell processing for
environment variable expansion or redirection is required, please use
`bash -c 'command args...'`.
Installation
------------
This image does not need to be run manually. Instead, there is a helper script
to execute build commands on source code existing on the local host filesystem. This
script is bundled with the image.
To install the helper script, run one of the images with no arguments, and
redirect the output to a file::
docker run --rm CROSS_COMPILER_IMAGE_NAME > ./dockcross
chmod +x ./dockcross
mv ./dockcross ~/bin/
Where `CROSS_COMPILER_IMAGE_NAME` is the name of the cross-compiler toolchain
Docker instance, e.g. `dockcross/linux-armv7`.
Only 64-bit x86_64 images are provided; a 64-bit x86_64 host system is required.
Usage
-----
For the impatient, here's how to compile a hello world for armv7::
cd ~/src/dockcross
docker run --rm dockcross/linux-armv7 > ./dockcross-linux-armv7
chmod +x ./dockcross-linux-armv7
./dockcross-linux-armv7 bash -c '$CC test/C/hello.c -o hello_arm'
Note how invoking any toolchain command (make, gcc, etc.) is just a matter of prepending the **dockcross** script on the commandline::
./dockcross-linux-armv7 [command] [args...]
The dockcross script will execute the given command-line inside the container,
along with all arguments passed after the command. Commands that evaluate
environmental variables in the image, like `$CC` above, should be executed in
`bash -c`. The present working directory is mounted within the image, which
can be used to make source code available in the Docker container.
Cross compilers
---------------
.. |base-images| image:: https://images.microbadger.com/badges/image/dockcross/base.svg
:target: https://microbadger.com/images/dockcross/base
dockcross/base
|base-images| Base image for other toolchain images. From Debian Jessie with GCC,
make, autotools, CMake, Ninja, Git, and Python.
.. |android-arm-images| image:: https://images.microbadger.com/badges/image/dockcross/android-arm.svg
:target: https://microbadger.com/images/dockcross/android-arm
dockcross/android-arm
|android-arm-images| The Android NDK standalone toolchain for the arm
architecture.
.. |android-arm64-images| image:: https://images.microbadger.com/badges/image/dockcross/android-arm64.svg
:target: https://microbadger.com/images/dockcross/android-arm64
dockcross/android-arm64
|android-arm64-images| The Android NDK standalone toolchain for the arm64
architecture.
.. |android-x86-images| image:: https://images.microbadger.com/badges/image/dockcross/android-x86.svg
:target: https://microbadger.com/images/dockcross/android-x86
dockcross/android-x86
|android-x86-images| The Android NDK standalone toolchain for the x86
architecture.
.. |android-x86_64-images| image:: https://images.microbadger.com/badges/image/dockcross/android-x86_64.svg
:target: https://microbadger.com/images/dockcross/android-x86_64
dockcross/android-x86_64
|android-x86_64-images| The Android NDK standalone toolchain for the x86_64
architecture.
.. |linux-arm64-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-arm64.svg
:target: https://microbadger.com/images/dockcross/linux-arm64
dockcross/linux-arm64
|linux-arm64-images| Cross compiler for the 64-bit ARM platform on Linux,
also known as AArch64.
.. |linux-arm64-musl-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-arm64-musl.svg
:target: https://microbadger.com/images/dockcross/linux-arm64-musl
dockcross/linux-arm64-musl
|linux-arm64-musl-images| Cross compiler for the 64-bit ARM platform on Linux (also known as AArch64), using `musl <https://www.musl-libc.org/>`_ as base "libc".
.. |linux-armv5-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-armv5.svg
:target: https://microbadger.com/images/dockcross/linux-armv5
dockcross/linux-armv5
|linux-armv5-images| Linux armv5 cross compiler toolchain for legacy devices
like the Parrot AR Drone.
.. |linux-armv5-musl-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-armv5-musl.svg
:target: https://microbadger.com/images/dockcross/linux-armv5-musl
dockcross/linux-armv5-musl
|linux-armv5-musl-images| Linux armv5 cross compiler toolchain using `musl <https://www.musl-libc.org/>`_ as base "libc".
.. |linux-armv6-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-armv6.svg
:target: https://microbadger.com/images/dockcross/linux-armv6
dockcross/linux-armv6
|linux-armv6-images| Linux ARMv6 cross compiler toolchain for the Raspberry
Pi, etc.
.. |linux-armv6-musl-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-armv6-musl.svg
:target: https://microbadger.com/images/dockcross/linux-armv6-musl
dockcross/linux-armv6-musl
|linux-armv6-musl-images| Linux ARMv6 cross compiler toolchain for the Raspberry Pi, etc, using `musl <https://www.musl-libc.org/>`_ as base "libc".
.. |linux-armv7-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-armv7.svg
:target: https://microbadger.com/images/dockcross/linux-armv7
dockcross/linux-armv7
|linux-armv7-images| Generic Linux armv7 cross compiler toolchain.
.. |linux-armv7a-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-armv7a.svg
:target: https://microbadger.com/images/dockcross/linux-armv7a
dockcross/linux-armv7a
|linux-armv7a-images| Toolchain configured for ARMv7-A used in Beaglebone Black single board PC with TI SoC AM3358 on board, Cortex-A8.
.. |linux-armv7l-musl-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-armv7l-musl.svg
:target: https://microbadger.com/images/dockcross/linux-armv7l-musl
dockcross/linux-armv7l-musl
|linux-armv7l-musl-images| Toolchain configured for ARMv7-L, using `musl <https://www.musl-libc.org/>`_ as base "libc".
.. |linux-mips-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-mips.svg
:target: https://microbadger.com/images/dockcross/linux-mips
dockcross/linux-mips
|linux-mips-images| Linux mips cross compiler toolchain for big endian 32-bit hard float MIPS GNU systems.
.. |linux-s390x-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-s390x.svg
:target: https://microbadger.com/images/dockcross/linux-s390x
dockcross/linux-s390x
|linux-s390x-images| Linux s390x cross compiler toolchain for S390X GNU systems.
.. |linux-ppc64le-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-ppc64le.svg
:target: https://microbadger.com/images/dockcross/linux-ppc64le
dockcross/linux-ppc64le
|linux-ppc64le-images| Linux PowerPC 64 little endian cross compiler
toolchain for the POWER8, etc. Important: Due to Issue #430, automatic build of newer images has been disabled.
.. |linux-x64-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-x64.svg
:target: https://microbadger.com/images/dockcross/linux-x64
dockcross/linux-x64
|linux-x64-images| Linux x86_64 / amd64 compiler. Since the Docker image is
natively x86_64, this is not actually a cross compiler.
.. |linux-x64-clang-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-x64-clang.svg
:target: https://microbadger.com/images/dockcross/linux-x64-clang
dockcross/linux-x64-clang
|linux-x64-clang-images| Linux clang x86_64 / amd64 compiler. Since the Docker image is
natively x86_64, this is not actually a cross compiler.
.. |linux-x86-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-x86.svg
:target: https://microbadger.com/images/dockcross/linux-x86
dockcross/linux-x86
|linux-x86-images| Linux i686 cross compiler.
.. |manylinux2014-x64-images| image:: https://images.microbadger.com/badges/image/dockcross/manylinux2014-x64.svg
:target: https://microbadger.com/images/dockcross/manylinux2014-x64
dockcross/manylinux2014-x64
|manylinux2014-x64-images| Docker `manylinux2014 <https://github.com/pypa/manylinux>`_ image for building Linux x86_64 / amd64 `Python wheel packages <http://pythonwheels.com/>`_. It includes Python 3.5, 3.6, 3.7, 3.8, and 3.9.
Also has support for the dockcross script, and it has installations of CMake, Ninja, and `scikit-build <http://scikit-build.org>`_. For CMake, it sets `MANYLINUX2014` to "TRUE" in the toolchain.
.. |manylinux2014-x86-images| image:: https://images.microbadger.com/badges/image/dockcross/manylinux2014-x86.svg
:target: https://microbadger.com/images/dockcross/manylinux2014-x86
dockcross/manylinux2014-x86
|manylinux2014-x86-images| Docker `manylinux2014 <https://github.com/pypa/manylinux>`_ image for building Linux i686 `Python wheel packages <http://pythonwheels.com/>`_. It includes Python 3.5, 3.6, 3.7, 3.8, and 3.9.
Also has support for the dockcross script, and it has installations of CMake, Ninja, and `scikit-build <http://scikit-build.org>`_. For CMake, it sets `MANYLINUX2014` to "TRUE" in the toolchain.
.. |manylinux2014-aarch64-images| image:: https://images.microbadger.com/badges/image/dockcross/manylinux2014-aarch64.svg
:target: https://microbadger.com/images/dockcross/manylinux2014-aarch64
dockcross/manylinux2014-aarch64
|manylinux2014-aarch64-images| Docker `manylinux2014 <https://github.com/pypa/manylinux>`_ image for building Linux aarch64 / arm64 `Python wheel packages <http://pythonwheels.com/>`_. It includes Python 3.5, 3.6, 3.7, 3.8, and 3.9.
Also has support for the dockcross script, and it has installations of CMake, Ninja, and `scikit-build <http://scikit-build.org>`_. For CMake, it sets `MANYLINUX2014` to "TRUE" in the toolchain.
.. |manylinux2010-x64-images| image:: https://images.microbadger.com/badges/image/dockcross/manylinux2010-x64.svg
:target: https://microbadger.com/images/dockcross/manylinux2010-x64
dockcross/manylinux2010-x64
|manylinux2010-x64-images| Docker `manylinux2010 <https://github.com/pypa/manylinux>`_ image for building Linux x86_64 / amd64 `Python wheel packages <http://pythonwheels.com/>`_. It includes Python 2.7, 3.4, 3.5, 3.6, 3.7 and 3.8.
Also has support for the dockcross script, and it has installations of CMake, Ninja, and `scikit-build <http://scikit-build.org>`_. For CMake, it sets `MANYLINUX2010` to "TRUE" in the toolchain.
.. |manylinux2010-x86-images| image:: https://images.microbadger.com/badges/image/dockcross/manylinux2010-x86.svg
:target: https://microbadger.com/images/dockcross/manylinux2010-x86
dockcross/manylinux2010-x86
|manylinux2010-x86-images| Docker `manylinux2010 <https://github.com/pypa/manylinux>`_ image for building Linux i686 `Python wheel packages <http://pythonwheels.com/>`_. It includes Python 2.7, 3.4, 3.5, 3.6, 3.7 and 3.8.
Also has support for the dockcross script, and it has installations of CMake, Ninja, and `scikit-build <http://scikit-build.org>`_. For CMake, it sets `MANYLINUX2010` to "TRUE" in the toolchain.
.. |manylinux1-x64-images| image:: https://images.microbadger.com/badges/image/dockcross/manylinux1-x64.svg
:target: https://microbadger.com/images/dockcross/manylinux1-x64
dockcross/manylinux1-x64
|manylinux1-x64-images| Docker `manylinux1 <https://github.com/pypa/manylinux/tree/manylinux1>`_ image for building Linux x86_64 / amd64 `Python wheel packages <http://pythonwheels.com/>`_. It includes Python 2.7, 3.4, 3.5, 3.6, 3.7 and 3.8.
Also has support for the dockcross script, and it has installations of CMake, Ninja, and `scikit-build <http://scikit-build.org>`_. For CMake, it sets `MANYLINUX1` to "TRUE" in the toolchain.
.. |manylinux1-x86-images| image:: https://images.microbadger.com/badges/image/dockcross/manylinux1-x86.svg
:target: https://microbadger.com/images/dockcross/manylinux1-x86
dockcross/manylinux1-x86
|manylinux1-x86-images| Docker `manylinux1 <https://github.com/pypa/manylinux/tree/manylinux1>`_ image for building Linux i686 `Python wheel packages <http://pythonwheels.com/>`_. It includes Python 2.7, 3.4, 3.5, 3.6, 3.7 and 3.8.
Also has support for the dockcross script, and it has installations of CMake, Ninja, and `scikit-build <http://scikit-build.org>`_. For CMake, it sets `MANYLINUX1` to "TRUE" in the toolchain.
.. |web-wasm-images| image:: https://images.microbadger.com/badges/image/dockcross/web-wasm.svg
:target: https://microbadger.com/images/dockcross/web-wasm
dockcross/web-wasm
|web-wasm-images| The Emscripten WebAssembly/asm.js/JavaScript cross compiler.
.. |windows-static-x64-images| image:: https://images.microbadger.com/badges/image/dockcross/windows-static-x64.svg
:target: https://microbadger.com/images/dockcross/windows-static-x64
dockcross/windows-static-x64
|windows-static-x64-images| 64-bit Windows cross-compiler based on `MXE/MinGW-w64`_ with win32 threads and static linking.
.. |windows-static-x64-posix-images| image:: https://images.microbadger.com/badges/image/dockcross/windows-static-x64-posix.svg
:target: https://microbadger.com/images/dockcross/windows-static-x64-posix
dockcross/windows-static-x64-posix
|windows-static-x64-posix-images| 64-bit Windows cross-compiler based on `MXE/MinGW-w64`_ with posix threads and static linking.
.. |windows-static-x86-images| image:: https://images.microbadger.com/badges/image/dockcross/windows-static-x86.svg
:target: https://microbadger.com/images/dockcross/windows-static-x86
dockcross/windows-static-x86
|windows-static-x86-images| 32-bit Windows cross-compiler based on `MXE/MinGW-w64`_ with win32 threads and static linking.
.. |windows-shared-x64-images| image:: https://images.microbadger.com/badges/image/dockcross/windows-shared-x64.svg
:target: https://microbadger.com/images/dockcross/windows-shared-x64
dockcross/windows-shared-x64
|windows-shared-x64-images| 64-bit Windows cross-compiler based on `MXE/MinGW-w64`_ with win32 threads and dynamic linking.
.. |windows-shared-x64-posix-images| image:: https://images.microbadger.com/badges/image/dockcross/windows-shared-x64-posix.svg
:target: https://microbadger.com/images/dockcross/windows-shared-x64-posix
dockcross/windows-shared-x64-posix
|windows-shared-x64-posix-images| 64-bit Windows cross-compiler based on `MXE/MinGW-w64`_ with posix threads and dynamic linking.
.. |windows-shared-x86-images| image:: https://images.microbadger.com/badges/image/dockcross/windows-shared-x86.svg
:target: https://microbadger.com/images/dockcross/windows-shared-x86
dockcross/windows-shared-x86
|windows-shared-x86-images| 32-bit Windows cross-compiler based on `MXE/MinGW-w64`_ with win32 threads and dynamic linking.
Articles
--------
- `dockcross: C++ Write Once, Run Anywhere
<https://nbviewer.jupyter.org/format/slides/github/dockcross/cxx-write-once-run-anywhere/blob/master/dockcross_CXX_Write_Once_Run_Anywhere.ipynb#/>`_
- `Cross-compiling binaries for multiple architectures with Docker
<https://web.archive.org/web/20170912153531/http://blogs.nopcode.org/brainstorm/2016/07/26/cross-compiling-with-docker>`_
Built-in update commands
------------------------
A special update command can be executed that will update the
source cross-compiler Docker image or the dockcross script itself.
- ``dockcross [--] command [args...]``: Forces a command to run inside the container (in case of a name clash with a built-in command), use ``--`` before the command.
- ``dockcross update-image``: Fetch the latest version of the docker image.
- ``dockcross update-script``: Update the installed dockcross script with the one bundled in the image.
- ``dockcross update``: Update both the docker image, and the dockcross script.
Download all images
-------------------
To easily download all images, the convenience target ``display_images`` could be used::
curl https://raw.githubusercontent.com/dockcross/dockcross/master/Makefile -o dockcross-Makefile
for image in $(make -f dockcross-Makefile display_images); do
echo "Pulling dockcross/$image"
docker pull dockcross/$image
done
Install all dockcross scripts
-----------------------------
To automatically install in ``~/bin`` the dockcross scripts for each images already downloaded, the
convenience target ``display_images`` could be used::
curl https://raw.githubusercontent.com/dockcross/dockcross/master/Makefile -o dockcross-Makefile
for image in $(make -f dockcross-Makefile display_images); do
if [[ $(docker images -q dockcross/$image) == "" ]]; then
echo "~/bin/dockcross-$image skipping: image not found locally"
continue
fi
echo "~/bin/dockcross-$image ok"
docker run dockcross/$image > ~/bin/dockcross-$image && \
chmod u+x ~/bin/dockcross-$image
done
Dockcross configuration
-----------------------
The following environmental variables and command-line options are used. In
all cases, the command-line option overrides the environment variable.
DOCKCROSS_CONFIG / --config|-c <path-to-config-file>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This file is sourced, if it exists, before executing the rest of the dockcross
script.
Default: ``~/.dockcross``
DOCKCROSS_IMAGE / --image|-i <docker-image-name>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Docker cross-compiler image to run.
Default: Image with which the script was created.
DOCKCROSS_ARGS / --args|-a <docker-run-args>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Extra arguments to pass to the ``docker run`` command. Quote the entire set of
args if they contain spaces.
Per-project dockcross configuration
-----------------------------------
If a shell script named ``.dockcross`` is found in the current directory where
the dockcross script is started, it is executed before the dockcross script
``command`` argument. The shell script is expected to have a shebang like
``#!/usr/bin/env bash``.
For example, commands like ``git config --global advice.detachedHead false`` can
be added to this script.
How to extend Dockcross images
------------------------------
In order to extend Dockcross images with your own commands, one must:
1. Use ``FROM dockcross/<name_of_image>``.
2. Set ``DEFAULT_DOCKCROSS_IMAGE`` to a name of the tag you're planning to use for the image. This tag must then be used during the build phase, unless you mean to pass the resulting helper script the ``DOCKCROSS_IMAGE`` argument.
An example Dockerfile would be::
FROM dockcross/linux-armv7
ENV DEFAULT_DOCKCROSS_IMAGE my_cool_image
RUN apt-get install nano
And then in the shell::
docker build -t my_cool_image . # Builds the dockcross image.
docker run my_cool_image > linux-armv7 # Creates a helper script named linux-armv7.
chmod +x linux-armv7 # Gives the script execution permission.
./linux-armv7 bash # Runs the helper script with the argument "bash", which starts an interactive container using your extended image.
What is the difference between `dockcross` and `dockbuild` ?
------------------------------------------------------------
The key difference is that `dockbuild
<https://github.com/dockbuild/dockbuild#readme>`_ images do **NOT** provide
a `toolchain file
<https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html>`_
but they use the same method
to conveniently isolate the build environment as `dockcross
<https://github.com/dockcross/dockcross#readme>`_.
`dockbuild` is used to build binaries for Linux x86_64 / amd64 that will work
across most Linux distributions. `dockbuild` performs a native Linux build
where the host build system is a Linux x86_64 / amd64 Docker image (so that it
can be used for building binaries on any system which can run Docker images)
and the target runtime system is Linux x86_x64 / amd64.
`dockcross` is used to build binaries for many different platforms.
`dockcross` performs a cross compilation where the host build system is a
Linux x86_64 / amd64 Docker image (so that it can be used for building
binaries on any system which can run Docker images) and the target runtime
system varies.
---
Credits go to `sdt/docker-raspberry-pi-cross-compiler <https://github.com/sdt/docker-raspberry-pi-cross-compiler>`_, who invented the base of the **dockcross** script.
.. _MXE/MinGW-w64: https://mxe.cc/

View File

@ -47,8 +47,8 @@ ENV XCC_PREFIX=/usr/xcc
# for users.
COPY \
imagefiles/install-crosstool-ng-toolchain.sh \
imagefiles/crosstool-ng-expat.patch \
imagefiles/Fix-error-with-bash-5-and-up.patch \
imagefiles/patch/crosstool-ng/crosstool-ng-expat.patch \
imagefiles/patch/crosstool-ng/Fix-error-with-bash-5-and-up.patch \
manylinux2014-aarch64/crosstool-ng.config \
/dockcross/

View File

@ -38,8 +38,8 @@ ENV XCC_PREFIX=/usr/xcc
# for users.
COPY \
imagefiles/install-crosstool-ng-toolchain.sh \
imagefiles/crosstool-ng-expat.patch \
imagefiles/Fix-error-with-bash-5-and-up.patch \
imagefiles/patch/crosstool-ng/crosstool-ng-expat.patch \
imagefiles/patch/crosstool-ng/Fix-error-with-bash-5-and-up.patch \
crosstool-ng.config \
/dockcross/

View File

@ -36,10 +36,7 @@ RUN \
xz-utils \
zip \
zlib1g-dev \
# python-is-python3 \
python-is-python3 \
&& apt-get clean autoclean --yes \
&& apt-get autoremove --yes \
&& rm -rf /var/lib/{apt,dpkg,cache,log}/
RUN ln -s /usr/bin/python3 /usr/bin/python \
&& ln -s /usr/bin/pip3 /usr/bin/pip

View File

@ -1,7 +1,7 @@
WORKDIR /usr/src
ARG GIT_VERSION=2.31.1
ARG CMAKE_VERSION=3.17.1
ARG GIT_VERSION=2.32.0
ARG CMAKE_VERSION=3.20.5
# Image build scripts
COPY \
@ -23,7 +23,7 @@ RUN \
/buildscripts/build-and-install-openssh.sh && \
/buildscripts/build-and-install-curl.sh && \
/buildscripts/build-and-install-git.sh && \
/buildscripts/install-cmake-binary.sh $X86_FLAG && \
if [ "$CMAKE_BIN" = "true" ]; then CMAKE_VERSION=3.17.1 && /buildscripts/install-cmake-binary.sh $X86_FLAG;else /buildscripts/build-and-install-cmake.sh $X86_FLAG;fi && \
/buildscripts/install-liquidprompt-binary.sh && \
PYTHON=$([ -e /opt/python/cp38-cp38/bin/python ] && echo "/opt/python/cp38-cp38/bin/python" || echo "python3") && \
/buildscripts/install-python-packages.sh -python ${PYTHON} && \

View File

@ -35,8 +35,10 @@ mkdir /usr/src/CMake-build
cd /usr/src/CMake-build
${WRAPPER} /usr/src/CMake/bootstrap \
--parallel=$(grep -c processor /proc/cpuinfo)
${WRAPPER} make -j$(grep -c processor /proc/cpuinfo)
--parallel=$(nproc) \
-- -DCMAKE_USE_OPENSSL=OFF
${WRAPPER} make -j$(nproc)
mkdir /usr/src/CMake-ssl-build
cd /usr/src/CMake-ssl-build
@ -48,7 +50,7 @@ ${WRAPPER} /usr/src/CMake-build/bin/cmake \
-DCMAKE_USE_OPENSSL:BOOL=ON \
-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \
../CMake
${WRAPPER} make -j$(grep -c processor /proc/cpuinfo) install
${WRAPPER} make -j$(nproc) install
# Cleanup install tree
cd /usr/src/cmake-$CMAKE_VERSION

View File

@ -18,7 +18,7 @@ function do_curl_build {
# We do this shared to avoid obnoxious linker issues where git couldn't
# link properly. If anyone wants to make this build statically go for it.
LIBS=-ldl CFLAGS=-Wl,--exclude-libs,ALL ./configure --with-ssl --disable-static > /dev/null
make > /dev/null
make -j$(nproc) > /dev/null
make install > /dev/null
}

View File

@ -32,7 +32,7 @@ rm -f git-${GIT_VERSION}.tar.gz
pushd git-${GIT_VERSION}
./configure --prefix=/usr/local --with-curl
make
make -j$(nproc)
make install
popd

View File

@ -59,7 +59,7 @@ PERL_DOWNLOAD_URL=https://www.cpan.org/src/5.0
function do_perl_build {
${WRAPPER} sh Configure -des -Dprefix=/opt/perl > /dev/null
${WRAPPER} make > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null
${WRAPPER} make install > /dev/null
}
@ -78,7 +78,7 @@ function build_perl {
function do_openssl_build {
${WRAPPER} ./config no-shared -fPIC $CONFIG_FLAG --prefix=/usr/local/ssl --openssldir=/usr/local/ssl > /dev/null
${WRAPPER} make > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null
${WRAPPER} make install_sw > /dev/null
}

View File

@ -1,9 +1,9 @@
FROM dockcross/base:latest
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
# flang
RUN echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster main" >> /etc/apt/sources.list \
&& echo "deb-src http://apt.llvm.org/buster/ llvm-toolchain-buster main" >> /etc/apt/sources.list \
&& wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - \
RUN echo "deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye main" >> /etc/apt/sources.list \
&& echo "deb-src http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye main" >> /etc/apt/sources.list \
&& wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \
&& apt-get update \
&& apt-get purge --autoremove -y gcc g++ software-properties-common \
&& apt-get -y install clang libc++-dev libc++abi-dev clang-format clang-tidy lldb \

View File

@ -2,6 +2,7 @@ FROM quay.io/pypa/manylinux1_x86_64:latest
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux1-x64
ENV CMAKE_BIN true
#include "common.manylinux"

View File

@ -2,6 +2,7 @@ FROM quay.io/pypa/manylinux1_i686:latest
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux1-x86
ENV CMAKE_BIN true
#include "common.manylinux"