mirror of
https://github.com/bensuperpc/dockcross.git
synced 2024-12-23 00:54:26 +01:00
Merge branch 'master' into update_linux-armv6
This commit is contained in:
commit
d9154d0e87
9
.github/dependabot.yml
vendored
Normal file
9
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Set update schedule for GitHub Actions
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
# Check for updates to GitHub Actions every weekday
|
||||||
|
interval: "daily"
|
22
.github/workflows/expired.yml
vendored
Normal file
22
.github/workflows/expired.yml
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
name: 'Close stale issues and PRs'
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '* * */1 * *'
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v3
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
exempt-issue-milestones: 'future,alpha,beta,release'
|
||||||
|
exempt-pr-milestones: 'bugfix,improvement'
|
||||||
|
exempt-all-pr-assignees: true
|
||||||
|
stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 15 days.'
|
||||||
|
stale-pr-message: 'This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 15 days.'
|
||||||
|
close-issue-message: 'This issue was closed because it has been stalled for 15 days with no activity.'
|
||||||
|
close-pr-message: 'This PR was closed because it has been stalled for 15 days with no activity.'
|
||||||
|
days-before-issue-stale: 120
|
||||||
|
days-before-pr-stale: 120
|
||||||
|
days-before-issue-close: 30
|
||||||
|
days-before-pr-close: 30
|
9
.github/workflows/main.yml
vendored
9
.github/workflows/main.yml
vendored
@ -3,10 +3,15 @@ name: Dockcross CI
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- 'master'
|
- '*'
|
||||||
|
paths-ignore:
|
||||||
|
- '**/README.md'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- '*'
|
- '*'
|
||||||
|
paths-ignore:
|
||||||
|
- '**/README.md'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
base:
|
base:
|
||||||
@ -41,7 +46,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
arch_name: [android-arm, android-arm64, android-x86, android-x86_64, web-wasm, linux-arm64, linux-arm64-musl, linux-armv5, linux-armv5-musl, linux-armv6, linux-armv6-musl, linux-armv7, linux-armv7a, linux-armv7l-musl, linux-s390x, linux-x64, linux-x86, linux-ppc64le, manylinux1-x64, manylinux1-x86, manylinux2010-x64, manylinux2010-x86, manylinux2014-x64, manylinux2014-x86, manylinux2014-aarch64, windows-static-x64, windows-static-x64-posix, windows-static-x86, windows-shared-x64, windows-shared-x64-posix, windows-shared-x86]
|
arch_name: [android-arm, android-arm64, android-x86, android-x86_64, web-wasm, linux-arm64, linux-arm64-musl, linux-armv5, linux-armv5-musl, linux-armv6, linux-armv6-musl, linux-armv7, linux-armv7a, linux-armv7l-musl, linux-x64-clang, linux-s390x, linux-x64, linux-x86, linux-mips, linux-ppc64le, manylinux1-x64, manylinux1-x86, manylinux2010-x64, manylinux2010-x86, manylinux2014-x64, manylinux2014-x86, manylinux2014-aarch64, windows-static-x64, windows-static-x64-posix, windows-static-x86, windows-shared-x64, windows-shared-x64-posix, windows-shared-x86]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/download-artifact@v2
|
- uses: actions/download-artifact@v2
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
FROM debian:buster-slim
|
ARG DOCKER_IMAGE=debian:bullseye-slim
|
||||||
|
FROM $DOCKER_IMAGE
|
||||||
|
|
||||||
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
||||||
|
|
||||||
#include "common.debian"
|
#include "common.debian"
|
||||||
|
31
Makefile
31
Makefile
@ -13,16 +13,20 @@ ORG = dockcross
|
|||||||
BIN = ./bin
|
BIN = ./bin
|
||||||
|
|
||||||
# These images are built using the "build implicit rule"
|
# These images are built using the "build implicit rule"
|
||||||
STANDARD_IMAGES = linux-s390x android-arm android-arm64 android-x86 android-x86_64 linux-x86 linux-x64 linux-arm64 linux-arm64-musl linux-armv5 linux-armv5-musl linux-armv6 linux-armv6-musl linux-armv7 linux-armv7a linux-armv7l-musl linux-mips linux-mipsel linux-ppc64le windows-static-x86 windows-static-x64 windows-static-x64-posix windows-shared-x86 windows-shared-x64 windows-shared-x64-posix
|
STANDARD_IMAGES = linux-s390x android-arm android-arm64 android-x86 android-x86_64 linux-x86 linux-x64 linux-arm64 linux-x64-clang linux-arm64-musl linux-armv5 linux-armv5-musl linux-armv6 linux-armv6-musl linux-armv7 linux-armv7a linux-armv7l-musl linux-mips linux-ppc64le windows-static-x86 windows-static-x64 windows-static-x64-posix windows-shared-x86 windows-shared-x64 windows-shared-x64-posix
|
||||||
|
|
||||||
# Generated Dockerfiles.
|
# Generated Dockerfiles.
|
||||||
GEN_IMAGES = linux-s390x android-arm android-arm64 linux-x86 linux-x64 linux-mips linux-mipsel manylinux1-x64 manylinux1-x86 manylinux2010-x64 manylinux2010-x86 manylinux2014-x64 manylinux2014-x86 manylinux2014-aarch64 web-wasm linux-arm64 linux-arm64-musl windows-static-x86 windows-static-x64 windows-static-x64-posix windows-shared-x86 windows-shared-x64 windows-shared-x64-posix linux-armv7 linux-armv7a linux-armv7l-musl linux-armv6 linux-armv6-musl linux-armv5 linux-armv5-musl linux-ppc64le
|
GEN_IMAGES = linux-s390x android-arm android-arm64 linux-x86 linux-x64 linux-mips linux-x64-clang manylinux1-x64 manylinux1-x86 manylinux2010-x64 manylinux2010-x86 manylinux2014-x64 manylinux2014-x86 manylinux2014-aarch64 web-wasm linux-arm64 linux-arm64-musl windows-static-x86 windows-static-x64 windows-static-x64-posix windows-shared-x86 windows-shared-x64 windows-shared-x64-posix linux-armv7 linux-armv7a linux-armv7l-musl linux-armv6 linux-armv6-musl linux-armv5 linux-armv5-musl linux-ppc64le
|
||||||
|
|
||||||
GEN_IMAGE_DOCKERFILES = $(addsuffix /Dockerfile,$(GEN_IMAGES))
|
GEN_IMAGE_DOCKERFILES = $(addsuffix /Dockerfile,$(GEN_IMAGES))
|
||||||
|
|
||||||
# These images are expected to have explicit rules for *both* build and testing
|
# 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
|
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_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
|
# This list all available images
|
||||||
IMAGES = $(STANDARD_IMAGES) $(NON_STANDARD_IMAGES)
|
IMAGES = $(STANDARD_IMAGES) $(NON_STANDARD_IMAGES)
|
||||||
@ -60,16 +64,16 @@ test: base.test $(addsuffix .test,$(IMAGES))
|
|||||||
# Generic Targets (can specialize later).
|
# 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 \
|
sed \
|
||||||
-e '/common.docker/ r common.docker' \
|
-e '/common.docker/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.docker' \
|
||||||
-e '/common.debian/ r common.debian' \
|
-e '/common.debian/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.debian' \
|
||||||
-e '/common.manylinux/ r common.manylinux' \
|
-e '/common.manylinux/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.manylinux' \
|
||||||
-e '/common.crosstool/ r common.crosstool' \
|
-e '/common.crosstool/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.crosstool' \
|
||||||
-e '/common-manylinux.crosstool/ r common-manylinux.crosstool' \
|
-e '/common-manylinux.crosstool/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common-manylinux.crosstool' \
|
||||||
-e '/common.windows/ r common.windows' \
|
-e '/common.windows/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.windows' \
|
||||||
-e '/common.dockcross/ r common.dockcross' \
|
-e '/common.dockcross/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.dockcross' \
|
||||||
-e '/common.label-and-env/ r common.label-and-env' \
|
-e '/common.label-and-env/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.label-and-env' \
|
||||||
$< > $@
|
$< > $@
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -238,7 +242,6 @@ base: Dockerfile imagefiles/
|
|||||||
base.test: base
|
base.test: base
|
||||||
$(DOCKER) run $(RM) $(ORG)/base > $(BIN)/dockcross-base && chmod +x $(BIN)/dockcross-base
|
$(DOCKER) run $(RM) $(ORG)/base > $(BIN)/dockcross-base && chmod +x $(BIN)/dockcross-base
|
||||||
|
|
||||||
#
|
|
||||||
# display
|
# display
|
||||||
#
|
#
|
||||||
display_images:
|
display_images:
|
||||||
@ -263,7 +266,7 @@ $(STANDARD_IMAGES): %: %/Dockerfile base
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
for d in $(STANDARD_IMAGES) ; do rm -rf $$d/imagefiles ; done
|
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
|
rm -f Dockerfile
|
||||||
|
|
||||||
purge: clean
|
purge: clean
|
||||||
@ -288,4 +291,4 @@ test.prerequisites:
|
|||||||
|
|
||||||
$(addsuffix .test,base $(IMAGES)): test.prerequisites
|
$(addsuffix .test,base $(IMAGES)): test.prerequisites
|
||||||
|
|
||||||
.PHONY: base images $(IMAGES) test %.test clean
|
.PHONY: base images $(IMAGES) test %.test clean purge
|
||||||
|
493
README.md
Normal file
493
README.md
Normal 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.
|
478
README.rst
478
README.rst
@ -1,478 +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-mipsel-images| image:: https://images.microbadger.com/badges/image/dockcross/linux-mipsel.svg
|
|
||||||
:target: https://microbadger.com/images/dockcross/linux-mipsel
|
|
||||||
|
|
||||||
dockcross/linux-mipsel
|
|
||||||
|linux-mipsel-images| Linux mipsel cross compiler toolchain for little endian MIPS GNU systems.
|
|
||||||
|
|
||||||
|
|
||||||
.. |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-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/
|
|
@ -47,8 +47,8 @@ ENV XCC_PREFIX=/usr/xcc
|
|||||||
# for users.
|
# for users.
|
||||||
COPY \
|
COPY \
|
||||||
imagefiles/install-crosstool-ng-toolchain.sh \
|
imagefiles/install-crosstool-ng-toolchain.sh \
|
||||||
imagefiles/crosstool-ng-expat.patch \
|
imagefiles/patch/crosstool-ng/crosstool-ng-expat.patch \
|
||||||
imagefiles/Fix-error-with-bash-5-and-up.patch \
|
imagefiles/patch/crosstool-ng/Fix-error-with-bash-5-and-up.patch \
|
||||||
manylinux2014-aarch64/crosstool-ng.config \
|
manylinux2014-aarch64/crosstool-ng.config \
|
||||||
/dockcross/
|
/dockcross/
|
||||||
|
|
@ -38,8 +38,8 @@ ENV XCC_PREFIX=/usr/xcc
|
|||||||
# for users.
|
# for users.
|
||||||
COPY \
|
COPY \
|
||||||
imagefiles/install-crosstool-ng-toolchain.sh \
|
imagefiles/install-crosstool-ng-toolchain.sh \
|
||||||
imagefiles/crosstool-ng-expat.patch \
|
imagefiles/patch/crosstool-ng/crosstool-ng-expat.patch \
|
||||||
imagefiles/Fix-error-with-bash-5-and-up.patch \
|
imagefiles/patch/crosstool-ng/Fix-error-with-bash-5-and-up.patch \
|
||||||
crosstool-ng.config \
|
crosstool-ng.config \
|
||||||
/dockcross/
|
/dockcross/
|
||||||
|
|
@ -36,10 +36,7 @@ RUN \
|
|||||||
xz-utils \
|
xz-utils \
|
||||||
zip \
|
zip \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
# python-is-python3 \
|
python-is-python3 \
|
||||||
&& apt-get clean autoclean --yes \
|
&& apt-get clean autoclean --yes \
|
||||||
&& apt-get autoremove --yes \
|
&& apt-get autoremove --yes \
|
||||||
&& rm -rf /var/lib/{apt,dpkg,cache,log}/
|
&& 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
|
|
@ -1,7 +1,7 @@
|
|||||||
WORKDIR /usr/src
|
WORKDIR /usr/src
|
||||||
|
|
||||||
ARG GIT_VERSION=2.31.1
|
ARG GIT_VERSION=2.32.0
|
||||||
ARG CMAKE_VERSION=3.17.1
|
ARG CMAKE_VERSION=3.20.5
|
||||||
|
|
||||||
# Image build scripts
|
# Image build scripts
|
||||||
COPY \
|
COPY \
|
||||||
@ -23,7 +23,7 @@ RUN \
|
|||||||
/buildscripts/build-and-install-openssh.sh && \
|
/buildscripts/build-and-install-openssh.sh && \
|
||||||
/buildscripts/build-and-install-curl.sh && \
|
/buildscripts/build-and-install-curl.sh && \
|
||||||
/buildscripts/build-and-install-git.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 && \
|
/buildscripts/install-liquidprompt-binary.sh && \
|
||||||
PYTHON=$([ -e /opt/python/cp38-cp38/bin/python ] && echo "/opt/python/cp38-cp38/bin/python" || echo "python3") && \
|
PYTHON=$([ -e /opt/python/cp38-cp38/bin/python ] && echo "/opt/python/cp38-cp38/bin/python" || echo "python3") && \
|
||||||
/buildscripts/install-python-packages.sh -python ${PYTHON} && \
|
/buildscripts/install-python-packages.sh -python ${PYTHON} && \
|
@ -35,8 +35,10 @@ mkdir /usr/src/CMake-build
|
|||||||
cd /usr/src/CMake-build
|
cd /usr/src/CMake-build
|
||||||
|
|
||||||
${WRAPPER} /usr/src/CMake/bootstrap \
|
${WRAPPER} /usr/src/CMake/bootstrap \
|
||||||
--parallel=$(grep -c processor /proc/cpuinfo)
|
--parallel=$(nproc) \
|
||||||
${WRAPPER} make -j$(grep -c processor /proc/cpuinfo)
|
-- -DCMAKE_USE_OPENSSL=OFF
|
||||||
|
${WRAPPER} make -j$(nproc)
|
||||||
|
|
||||||
|
|
||||||
mkdir /usr/src/CMake-ssl-build
|
mkdir /usr/src/CMake-ssl-build
|
||||||
cd /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 \
|
-DCMAKE_USE_OPENSSL:BOOL=ON \
|
||||||
-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \
|
-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \
|
||||||
../CMake
|
../CMake
|
||||||
${WRAPPER} make -j$(grep -c processor /proc/cpuinfo) install
|
${WRAPPER} make -j$(nproc) install
|
||||||
|
|
||||||
# Cleanup install tree
|
# Cleanup install tree
|
||||||
cd /usr/src/cmake-$CMAKE_VERSION
|
cd /usr/src/cmake-$CMAKE_VERSION
|
||||||
|
@ -18,7 +18,7 @@ function do_curl_build {
|
|||||||
# We do this shared to avoid obnoxious linker issues where git couldn't
|
# 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.
|
# 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
|
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
|
make install > /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ rm -f git-${GIT_VERSION}.tar.gz
|
|||||||
|
|
||||||
pushd git-${GIT_VERSION}
|
pushd git-${GIT_VERSION}
|
||||||
./configure --prefix=/usr/local --with-curl
|
./configure --prefix=/usr/local --with-curl
|
||||||
make
|
make -j$(nproc)
|
||||||
make install
|
make install
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ PERL_DOWNLOAD_URL=https://www.cpan.org/src/5.0
|
|||||||
|
|
||||||
function do_perl_build {
|
function do_perl_build {
|
||||||
${WRAPPER} sh Configure -des -Dprefix=/opt/perl > /dev/null
|
${WRAPPER} sh Configure -des -Dprefix=/opt/perl > /dev/null
|
||||||
${WRAPPER} make > /dev/null
|
${WRAPPER} make -j$(nproc) > /dev/null
|
||||||
${WRAPPER} make install > /dev/null
|
${WRAPPER} make install > /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ function build_perl {
|
|||||||
|
|
||||||
function do_openssl_build {
|
function do_openssl_build {
|
||||||
${WRAPPER} ./config no-shared -fPIC $CONFIG_FLAG --prefix=/usr/local/ssl --openssldir=/usr/local/ssl > /dev/null
|
${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
|
${WRAPPER} make install_sw > /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,6 +111,9 @@ cp "${CONFIG_PATH}" "${BUILD}/.config"
|
|||||||
|
|
||||||
# As mentioned in ct-ng config, need to unset LD_LIBRARY_PATH.
|
# As mentioned in ct-ng config, need to unset LD_LIBRARY_PATH.
|
||||||
unset LD_LIBRARY_PATH
|
unset LD_LIBRARY_PATH
|
||||||
|
# Fix build error on manylinux2014-aarch64
|
||||||
|
unset CC
|
||||||
|
unset CXX
|
||||||
|
|
||||||
# Build and install the toolchain!
|
# Build and install the toolchain!
|
||||||
# Print last 250 lines if build fail
|
# Print last 250 lines if build fail
|
||||||
|
@ -3,7 +3,8 @@ FROM dockcross/base:latest
|
|||||||
# This is for 64-bit ARM Linux machine
|
# This is for 64-bit ARM Linux machine
|
||||||
|
|
||||||
# Crosstool-ng version
|
# Crosstool-ng version
|
||||||
ENV CT_VERSION crosstool-ng-1.23.0
|
# We use a git commit while waiting for 1.25 to release (1.24 is several years old)
|
||||||
|
ENV CT_VERSION 9e10cb6fbaab6d83e1305b2d53ab585d14989667
|
||||||
|
|
||||||
#include "common.crosstool"
|
#include "common.crosstool"
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -5,6 +5,9 @@ MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
|||||||
# VFP instructions (armhf).
|
# VFP instructions (armhf).
|
||||||
# musleabi as default glibc
|
# musleabi as default glibc
|
||||||
|
|
||||||
|
# We use a git commit while waiting for 1.25 to release (1.24 is several years old)
|
||||||
|
ENV CT_VERSION 9e10cb6fbaab6d83e1305b2d53ab585d14989667
|
||||||
|
|
||||||
#include "common.crosstool"
|
#include "common.crosstool"
|
||||||
|
|
||||||
# The cross-compiling emulator
|
# The cross-compiling emulator
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,8 @@ MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
|||||||
# VFP instructions (armhf).
|
# VFP instructions (armhf).
|
||||||
|
|
||||||
# Crosstool-ng version
|
# Crosstool-ng version
|
||||||
ENV CT_VERSION crosstool-ng-1.23.0
|
# We use a git commit while waiting for 1.25 to release (1.24 is several years old)
|
||||||
|
ENV CT_VERSION 9e10cb6fbaab6d83e1305b2d53ab585d14989667
|
||||||
|
|
||||||
#include "common.crosstool"
|
#include "common.crosstool"
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,8 @@ FROM dockcross/base:latest
|
|||||||
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
||||||
|
|
||||||
# Crosstool-ng version
|
# Crosstool-ng version
|
||||||
ENV CT_VERSION crosstool-ng-1.23.0
|
# We use a git commit while waiting for 1.25 to release (1.24 is several years old)
|
||||||
|
ENV CT_VERSION 9e10cb6fbaab6d83e1305b2d53ab585d14989667
|
||||||
|
|
||||||
# This is for 32-bit ARMv7 Linux
|
# This is for 32-bit ARMv7 Linux
|
||||||
#include "common.crosstool"
|
#include "common.crosstool"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -3,8 +3,8 @@ MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
|||||||
|
|
||||||
# This is for 32-bit ARMv7 Linux
|
# This is for 32-bit ARMv7 Linux
|
||||||
|
|
||||||
# Crosstool-ng version
|
# We use a git commit while waiting for 1.25 to release (1.24 is several years old)
|
||||||
ENV CT_VERSION crosstool-ng-1.23.0
|
ENV CT_VERSION 9e10cb6fbaab6d83e1305b2d53ab585d14989667
|
||||||
|
|
||||||
#include "common.crosstool"
|
#include "common.crosstool"
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -3,7 +3,8 @@ FROM dockcross/base:latest
|
|||||||
# This is for 32-bit Big-Endian MIPS devices with hard floating point enabled
|
# This is for 32-bit Big-Endian MIPS devices with hard floating point enabled
|
||||||
|
|
||||||
# Crosstool-ng version
|
# Crosstool-ng version
|
||||||
ENV CT_VERSION crosstool-ng-1.23.0
|
# We use a git commit while waiting for 1.25 to release (1.24 is several years old)
|
||||||
|
ENV CT_VERSION 9e10cb6fbaab6d83e1305b2d53ab585d14989667
|
||||||
|
|
||||||
#include "common.crosstool"
|
#include "common.crosstool"
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,40 +0,0 @@
|
|||||||
FROM dockcross/base:latest
|
|
||||||
MAINTAINER Sergi Alvarez "pancake@nopcode.org"
|
|
||||||
|
|
||||||
# This is for ARMv5 "legacy" (mipsel) devices which do NOT support hard float
|
|
||||||
# VFP instructions (mipshf).
|
|
||||||
|
|
||||||
# From https://wiki.debian.org/CrossToolchains, installing for jessie
|
|
||||||
RUN echo "deb http://emdebian.org/tools/debian/ jessie main" > /etc/apt/sources.list.d/emdebian.list \
|
|
||||||
&& curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add - \
|
|
||||||
&& sed -i 's/httpredir.debian.org/http.debian.net/' /etc/apt/sources.list \
|
|
||||||
&& dpkg --add-architecture mipsel \
|
|
||||||
&& apt-get update && apt-get install -y crossbuild-essential-mipsel
|
|
||||||
|
|
||||||
# The cross-compiling emulator
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
qemu-user \
|
|
||||||
qemu-user-static
|
|
||||||
|
|
||||||
ENV CROSS_TRIPLE mipsel-linux-gnu
|
|
||||||
ENV CROSS_ROOT /usr/bin
|
|
||||||
ENV AS=${CROSS_ROOT}/${CROSS_TRIPLE}-as \
|
|
||||||
AR=${CROSS_ROOT}/${CROSS_TRIPLE}-ar \
|
|
||||||
CC=${CROSS_ROOT}/${CROSS_TRIPLE}-gcc \
|
|
||||||
CPP=${CROSS_ROOT}/${CROSS_TRIPLE}-cpp-4.9 \
|
|
||||||
CXX=${CROSS_ROOT}/${CROSS_TRIPLE}-g++ \
|
|
||||||
LD=${CROSS_ROOT}/${CROSS_TRIPLE}-ld \
|
|
||||||
FC=${CROSS_ROOT}/${CROSS_TRIPLE}-gfortran
|
|
||||||
|
|
||||||
ENV QEMU_LD_PREFIX ${CROSS_ROOT}/libc
|
|
||||||
ENV QEMU_SET_ENV "LD_LIBRARY_PATH=${CROSS_ROOT}/lib:${CROSS_ROOT}/libc/lib/${CROSS_TRIPLE}/"
|
|
||||||
|
|
||||||
COPY Toolchain.cmake ${CROSS_ROOT}/
|
|
||||||
ENV CMAKE_TOOLCHAIN_FILE ${CROSS_ROOT}/Toolchain.cmake
|
|
||||||
|
|
||||||
# Linux kernel cross compilation variables
|
|
||||||
ENV PATH ${PATH}:${CROSS_ROOT}/bin
|
|
||||||
ENV CROSS_COMPILE ${CROSS_TRIPLE}-
|
|
||||||
ENV ARCH mips
|
|
||||||
|
|
||||||
#include "common.label-and-env"
|
|
@ -1,16 +0,0 @@
|
|||||||
set(CMAKE_SYSTEM_NAME Linux)
|
|
||||||
set(CMAKE_SYSTEM_VERSION 1)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR mipsel)
|
|
||||||
|
|
||||||
set(cross_triple "mipsel-linux-gnu")
|
|
||||||
|
|
||||||
set(CMAKE_C_COMPILER $ENV{CC})
|
|
||||||
set(CMAKE_CXX_COMPILER $ENV{CXX})
|
|
||||||
set(CMAKE_Fortran_COMPILER $ENV{FC})
|
|
||||||
|
|
||||||
set(CMAKE_FIND_ROOT_PATH $ENV{CROSS_ROOT} $ENV{CROSS_ROOT}/libc/usr)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
|
||||||
|
|
||||||
set(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/qemu-mipsel)
|
|
@ -2,21 +2,24 @@ FROM dockcross/base:latest
|
|||||||
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
||||||
|
|
||||||
# Crosstool-ng version
|
# Crosstool-ng version
|
||||||
ENV CT_VERSION crosstool-ng-1.23.0
|
# We use a git commit while waiting for 1.25 to release (1.24 is several years old)
|
||||||
|
ENV CT_VERSION 9e10cb6fbaab6d83e1305b2d53ab585d14989667
|
||||||
|
|
||||||
|
ENV QEMU_VERSION 6.0.0
|
||||||
|
|
||||||
#include "common.crosstool"
|
#include "common.crosstool"
|
||||||
|
|
||||||
ENV CROSS_TRIPLE powerpc64le-linux-gnu
|
ENV CROSS_TRIPLE powerpc64le-unknown-linux-gnu
|
||||||
|
|
||||||
WORKDIR /usr/src
|
WORKDIR /usr/src
|
||||||
|
|
||||||
RUN apt-get install -y libglib2.0-dev zlib1g-dev libpixman-1-dev && \
|
RUN apt-get install -y libglib2.0-dev zlib1g-dev libpixman-1-dev && \
|
||||||
curl -L http://wiki.qemu-project.org/download/qemu-3.1.0.tar.bz2 | tar xj && \
|
curl -L http://wiki.qemu-project.org/download/qemu-${QEMU_VERSION}.tar.bz2 | tar xj && \
|
||||||
cd qemu-3.1.0 && \
|
cd qemu-${QEMU_VERSION} && \
|
||||||
./configure --target-list=ppc64le-linux-user --prefix=/usr && \
|
./configure --target-list=ppc64le-linux-user --prefix=/usr && \
|
||||||
make -j$(nproc) && \
|
make -j$(nproc) && \
|
||||||
make install && \
|
make install && \
|
||||||
cd .. && rm -rf qemu-3.1.0
|
cd .. && rm -rf qemu-${QEMU_VERSION}
|
||||||
|
|
||||||
ENV CROSS_ROOT ${XCC_PREFIX}/${CROSS_TRIPLE}
|
ENV CROSS_ROOT ${XCC_PREFIX}/${CROSS_TRIPLE}
|
||||||
ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
|
ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
|
||||||
@ -35,7 +38,7 @@ WORKDIR /work
|
|||||||
COPY Toolchain.cmake /usr/lib/${CROSS_TRIPLE}/
|
COPY Toolchain.cmake /usr/lib/${CROSS_TRIPLE}/
|
||||||
ENV CMAKE_TOOLCHAIN_FILE /usr/lib/${CROSS_TRIPLE}/Toolchain.cmake
|
ENV CMAKE_TOOLCHAIN_FILE /usr/lib/${CROSS_TRIPLE}/Toolchain.cmake
|
||||||
|
|
||||||
ENV PKG_CONFIG_PATH /usr/lib/powerpc64le-linux-gnu/pkgconfig
|
ENV PKG_CONFIG_PATH /usr/lib/powerpc64le-unknown-linux-gnu/pkgconfig
|
||||||
|
|
||||||
# Linux kernel cross compilation variables
|
# Linux kernel cross compilation variables
|
||||||
ENV PATH ${PATH}:${CROSS_ROOT}/bin
|
ENV PATH ${PATH}:${CROSS_ROOT}/bin
|
||||||
|
@ -2,7 +2,7 @@ set(CMAKE_SYSTEM_NAME Linux)
|
|||||||
set(CMAKE_SYSTEM_VERSION 1)
|
set(CMAKE_SYSTEM_VERSION 1)
|
||||||
set(CMAKE_SYSTEM_PROCESSOR ppc64le)
|
set(CMAKE_SYSTEM_PROCESSOR ppc64le)
|
||||||
|
|
||||||
set(cross_triple "powerpc64le-linux-gnu")
|
set(cross_triple "powerpc64le-unknown-linux-gnu")
|
||||||
set(cross_root /usr/xcc/${cross_triple})
|
set(cross_root /usr/xcc/${cross_triple})
|
||||||
|
|
||||||
set(CMAKE_C_COMPILER $ENV{CC})
|
set(CMAKE_C_COMPILER $ENV{CC})
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +0,0 @@
|
|||||||
#------------------------------------------------------------------------------#
|
|
||||||
# OFFICIAL DEBIAN REPOS
|
|
||||||
#------------------------------------------------------------------------------#
|
|
||||||
|
|
||||||
###### Debian Main Repos
|
|
||||||
deb http://deb.debian.org/debian/ oldstable main contrib non-free
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian/ oldstable-updates main contrib non-free
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian-security oldstable/updates main
|
|
35
linux-x64-clang/Dockerfile.in
Normal file
35
linux-x64-clang/Dockerfile.in
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
FROM dockcross/base:latest
|
||||||
|
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
||||||
|
# flang
|
||||||
|
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 \
|
||||||
|
&& apt-get clean --yes \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
|
&& update-alternatives --install /usr/bin/cc cc /usr/bin/clang 90 \
|
||||||
|
&& update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 90 \
|
||||||
|
&& update-alternatives --install /usr/bin/cpp cpp /usr/bin/clang++ 90 \
|
||||||
|
&& cc --version \
|
||||||
|
&& c++ --version \
|
||||||
|
&& cpp --version
|
||||||
|
|
||||||
|
ENV CROSS_TRIPLE x86_64-linux-gnu
|
||||||
|
ENV CROSS_ROOT /usr/bin
|
||||||
|
ENV CC=/usr/bin/clang \
|
||||||
|
CPP=/usr/bin/cpp \
|
||||||
|
CXX=/usr/bin/clang++ \
|
||||||
|
LD=/usr/bin/lld \
|
||||||
|
FC=/usr/bin/flang
|
||||||
|
|
||||||
|
# AS=/usr/bin/${CROSS_TRIPLE}-as
|
||||||
|
# AR=/usr/bin/${CROSS_TRIPLE}-ar
|
||||||
|
|
||||||
|
COPY ${CROSS_TRIPLE}-noop.sh /usr/bin/${CROSS_TRIPLE}-noop
|
||||||
|
|
||||||
|
COPY Toolchain.cmake /usr/lib/${CROSS_TRIPLE}/
|
||||||
|
ENV CMAKE_TOOLCHAIN_FILE /usr/lib/${CROSS_TRIPLE}/Toolchain.cmake
|
||||||
|
|
||||||
|
#include "common.label-and-env"
|
12
linux-x64-clang/Toolchain.cmake
Normal file
12
linux-x64-clang/Toolchain.cmake
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
set(CMAKE_SYSTEM_VERSION 1)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR x86_64)
|
||||||
|
|
||||||
|
set(cross_triple "x86_64-linux-gnu")
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER $ENV{CC})
|
||||||
|
set(CMAKE_CXX_COMPILER $ENV{CXX})
|
||||||
|
set(CMAKE_Fortran_COMPILER $ENV{FC})
|
||||||
|
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
|
||||||
|
|
||||||
|
set(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/${cross_triple}-noop)
|
2
linux-x64-clang/x86_64-linux-gnu-noop.sh
Executable file
2
linux-x64-clang/x86_64-linux-gnu-noop.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "$@"
|
@ -2,6 +2,7 @@ FROM quay.io/pypa/manylinux1_x86_64:latest
|
|||||||
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
||||||
|
|
||||||
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux1-x64
|
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux1-x64
|
||||||
|
ENV CMAKE_BIN true
|
||||||
|
|
||||||
#include "common.manylinux"
|
#include "common.manylinux"
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ FROM quay.io/pypa/manylinux1_i686:latest
|
|||||||
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
|
||||||
|
|
||||||
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux1-x86
|
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux1-x86
|
||||||
|
ENV CMAKE_BIN true
|
||||||
|
|
||||||
#include "common.manylinux"
|
#include "common.manylinux"
|
||||||
|
|
||||||
|
@ -6,6 +6,10 @@ FROM dockcross/manylinux2014-x64
|
|||||||
|
|
||||||
# This is for 64-bit ARM Manylinux machine
|
# This is for 64-bit ARM Manylinux machine
|
||||||
|
|
||||||
|
# Crosstool-ng version
|
||||||
|
# Issues with crosstool-ng-1.24.0 and up : https://github.com/dockcross/dockcross/issues/367
|
||||||
|
ENV CT_VERSION crosstool-ng-1.23.0
|
||||||
|
|
||||||
#include "common-manylinux.crosstool"
|
#include "common-manylinux.crosstool"
|
||||||
|
|
||||||
# The cross-compiling emulator
|
# The cross-compiling emulator
|
||||||
|
Loading…
Reference in New Issue
Block a user