Giter VIP home page Giter VIP logo

dockcross / dockcross Goto Github PK

View Code? Open in Web Editor NEW

This project forked from steeve/cross-compiler

3.1K 3.1K 395.0 1.48 MB

Cross compiling toolchains in Docker images

Home Page: https://hub.docker.com/u/dockcross

License: MIT License

Shell 42.20% Makefile 12.05% CMake 37.13% C++ 0.13% C 0.11% Python 5.56% Dockerfile 2.83%
c c-plus-plus cmake cmake-toolchains cpp cross-compiler cross-compiler-toolchain cross-platform crossplatform crosstool-ng debian dockbuild dockcross docker dockerized fortran kitware ninja-build toolchains

dockcross's Introduction

dockcross

Cross compiling toolchains in Docker images.

image Shellcheck CI

GitHub GitHub commit activity

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, CXX, LD, AS etc) are set to point to the appropriate tools in the container.
  • Recent CMake and ninja are precompiled.
  • Meson is pre-installed.
  • 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 and Docker for Windows.
  • Support using alternative container executor by setting OCI_EXE environment variable. By default, it searches for docker and podman executable.
  • crosstool-ng and buildroot configuration files.

Examples

  1. dockcross make: Build the Makefile in the current directory.
  2. dockcross cmake -Bbuild -S. -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>"

Contributing

See CONTRIBUTING.md.

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:

git clone https://github.com/dockcross/dockcross.git
cd 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 or $CXX 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.

Summary cross compilers

Image name Target arch Compiler Target OS
dockcross/base - - -
dockcross/android-arm ARMv7 Clang Android
dockcross/android-arm64 ARMv8 Clang Android
dockcross/android-x86 x86 Clang Android
dockcross/android-x86_64 x86_64 Clang Android
dockcross/linux-arm64 ARMv8 GCC Linux
dockcross/linux-arm64-lts ARMv8 GCC 8.5.0 + Glibc 2.27 Linux
dockcross/linux-arm64-full ARMv8 GCC + libs Linux
dockcross/linux-arm64-musl ARMv8 GCC + musl Linux
dockcross/linux-armv5 ARMv5 GCC Linux
dockcross/linux-armv5-musl ARMv5 GCC + musl Linux
dockcross/linux-armv5-uclibc ARMv5 GCC + uclibc Linux
dockcross/linux-armv6 ARMv6 GCC Linux
dockcross/linux-armv6-lts ARMv6 GCC 8.5.0 + Glibc 2.28 Linux
dockcross/linux-armv6-musl ARMv6 GCC + musl Linux
dockcross/linux-armv7 ARMv7 GCC Linux
dockcross/linux-armv7-lts ARMv7 GCC 8.5.0 + Glibc 2.28 Linux
dockcross/linux-armv7a ARMv7a GCC Linux
dockcross/linux-armv7l-musl ARMv7l GCC + musl Linux
dockcross/linux-mips mips GCC Linux
dockcross/linux-mips-uclibc mips GCC + uclibc Linux
dockcross/linux-mips-lts mips GCC 8.5.0 + Glibc 2.28 Linux
dockcross/linux-mipsel-lts mipsel GCC 8.5.0 + Glibc 2.28 Linux
dockcross/linux-s390x s390x GCC Linux
dockcross/linux-ppc64le ppc64le GCC Linux
dockcross/linux-ppc64le-lts ppc64le GCC 8.5.0 + Glibc 2.28 Linux
dockcross/linux-riscv32 riscv32 GCC Linux
dockcross/linux-riscv64 riscv64 GCC Linux
dockcross/linux-m68k-uclibc m68k GCC + uclibc Linux
dockcross/linux-xtensa-uclibc xtensa GCC + uclibc Linux
dockcross/manylinux_2_28-x64 x86_64 GCC Linux
dockcross/manylinux2014-x86 x86 GCC Linux
dockcross/manylinux2014-x64 x86_64 GCC Linux
dockcross/linux-i686 x86 GCC Linux
dockcross/linux-x86 x86 GCC Linux
dockcross/linux-x64 x86_64 GCC Linux
dockcross/linux-x86_64-full x86_64 GCC + libs Linux
dockcross/linux-x64-clang x86_64 Clang Linux
dockcross/linux-x64-tinycc x86_64 tinycc + GCC Linux
dockcross/web-wasm Wasm LLVM Web (JS)
dockcross/web-wasi Wasm LLVM Web (Universal)
dockcross/web-wasi-threads Wasm LLVM Web (Universal)
dockcross/windows-shared-x86 x86 GCC Windows
dockcross/windows-shared-x64 x86_64 GCC Windows
dockcross/windows-shared-x64-posix x86_64 GCC Windows
dockcross/windows-static-x86 x86 GCC Windows
dockcross/windows-static-x64 x86_64 GCC Windows
dockcross/windows-static-x64-posix x86_64 GCC Windows
dockcross/windows-armv7 ARMv7 Clang Windows
dockcross/windows-arm64 ARMv8 Clang Windows

The list of docker images that are no longer maintained.

Image name Target arch Compiler Target OS End of life (EOL)
dockcross/manylinux-x86 x86 GCC manylinux 2019-05-22
dockcross/manylinux-x64 x86 GCC manylinux 2019-05-22
dockcross/linux-mipsel mipsel GCC 4.9 Debian 8 2021-06-27
dockcross/manylinux1-x86 x86 GCC manylinux 2021-08-05
dockcross/manylinux1-x64 x86_64 GCC manylinux 2021-08-05
dockcross/manylinux2010-x86 x86 GCC manylinux 2021-08-05
dockcross/manylinux2010-x64 x86_64 GCC manylinux 2021-08-05
dockcross/manylinux_2_24-x64 x86_64 GCC manylinux 2022-07-05, pypa/manylinux#1332

Cross compilers

dockcross/base

Docker Image Size (tag) Docker Pulls Docker Stars

Base image for other toolchain images. From Debian Bookworm with GCC, make, autotools, CMake, Ninja, Git, and Python.

dockcross/android-arm

Docker Image Size (tag) Docker Pulls

The Android NDK standalone toolchain for the arm architecture.

dockcross/android-arm64

Docker Image Size (tag) Docker Pulls

The Android NDK standalone toolchain for the arm64 architecture.

dockcross/android-x86

Docker Image Size (tag) Docker Pulls

The Android NDK standalone toolchain for the x86 architecture.

dockcross/android-x86_64

Docker Image Size (tag) Docker Pulls

The Android NDK standalone toolchain for the x86_64 architecture.

dockcross/linux-arm64

Docker Image Size (tag) Docker Pulls

Cross compiler for the 64-bit ARM platform on Linux, also known as AArch64.

dockcross/linux-arm64-lts

Docker Image Size (tag) Docker Pulls

Cross compiler for the 64-bit ARM platform on Linux, also known as AArch64, with Long-term support (For Ubuntu 18.04 or Debian Buster). With GCC 8.5.0 and GLibc 2.27.

dockcross/linux-arm64-full

Docker Image Size (tag) Docker Pulls

Cross compiler for the 64-bit ARM platform on Linux, with cross-libs: SDL2, OpenSSL, Boost, OpenCV and Qt5 (minimal).

dockcross/linux-arm64-musl

Docker Image Size (tag) Docker Pulls

Cross compiler for the 64-bit ARM platform on Linux (also known as AArch64), using musl as base "libc".

dockcross/linux-armv5

Docker Image Size (tag) Docker Pulls

Linux armv5 cross compiler toolchain for legacy devices like the Parrot AR Drone.

dockcross/linux-armv5-musl

Docker Image Size (tag) Docker Pulls

Linux armv5 cross compiler toolchain using musl as base "libc".

dockcross/linux-armv5-uclibc

Docker Image Size (tag) Docker Pulls

Linux armv5 cross compiler toolchain for legacy devices like wrt routers Linux kernel 2.6 uclibc as base "libc".

dockcross/linux-armv6

Docker Image Size (tag) Docker Pulls

Linux ARMv6 cross compiler toolchain for the Raspberry Pi

dockcross/linux-armv6-lts

Docker Image Size (tag) Docker Pulls

Linux ARMv6 cross compiler toolchain for the Raspberry Pi (Debian buster...)

dockcross/linux-armv6-musl

Docker Image Size (tag) Docker Pulls

Linux ARMv6 cross compiler toolchain for the Raspberry Pi, etc, using musl as base "libc".

dockcross/linux-armv7

Docker Image Size (tag) Docker Pulls

Generic Linux armv7 cross compiler toolchain.

dockcross/linux-armv7-lts

Docker Image Size (tag) Docker Pulls

Linux ARMv7 cross compiler toolchain for the Raspberry Pi (Debian buster...)

dockcross/linux-armv7a

Docker Image Size (tag) Docker Pulls

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) Docker Pulls

Toolchain configured for ARMv7-L, using musl as base "libc".

dockcross/linux-mips

Docker Image Size (tag) Docker Pulls

Linux mips cross compiler toolchain for big endian 32-bit hard float MIPS GNU systems.

dockcross/linux-mips

Docker Image Size (tag) Docker Pulls

Linux mips cross compiler toolchain for big endian 32-bit hard float MIPS GNU systems, with GCC 8.5.0, Glibc 2.28 ....

dockcross/linux-mipsel-lts

Docker Image Size (tag) Docker Pulls

Linux mips cross compiler toolchain for little endian 32-bit soft float MIPS GNU systems.

dockcross/linux-s390x

Docker Image Size (tag) Docker Pulls

Linux s390x cross compiler toolchain for S390X GNU systems.

dockcross/linux-riscv64

Docker Image Size (tag) Docker Pulls

Linux risc-v 64bit cross compiler toolchain for risc-v 64bit GNU systems.

dockcross/linux-riscv32

Docker Image Size (tag) Docker Pulls

Linux risc-v 32bit cross compiler toolchain for risc-v 32bit GNU systems.

dockcross/linux-m68k-uclibc

Docker Image Size (tag) Docker Pulls

Linux m68k cross compiler toolchain for m68k GNU systems (http://www.mac.linux-m68k.org/ and http://www.linux-m68k.org/).

dockcross/linux-ppc64le

Docker Image Size (tag) Docker Pulls

Linux PowerPC 64 little endian cross compiler toolchain for the POWER8, etc.

dockcross/linux-ppc64le-lts

Docker Image Size (tag) Docker Pulls

Linux PowerPC 64 little endian cross compiler toolchain for the POWER8, with GCC 8.5.0, Glibc 2.28 ....

dockcross/linux-x64

Docker Image Size (tag) Docker Pulls

Linux x86_64/amd64 compiler. Since the Docker image is natively x86_64, this is not actually a cross compiler.

dockcross/linux-x86_64-full

Docker Image Size (tag) Docker Pulls

Linux x86_64/amd64 compiler with libs: SDL2, OpenSSL, Boost, OpenCV and Qt5 (minimal).

dockcross/linux-x64-clang

Docker Image Size (tag) Docker Pulls

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) Docker Pulls

Linux x86_64 32bit (i686) toolchain using gcc/g++ multilib. Multilib is a mechanism to support building and running code for different ABIs for the same CPU family on the host system. Most commonly it is used to support 32-bit code on 64-bit systems and 64-bit code on 32-bit systems with a 64-bit kernel. Since the Docker image is natively x86_64, this is not actually a cross compiler, it just adds capability to the existing host toolchain.

dockcross/linux-x64-tinycc

Docker Image Size (tag) Docker Pulls

Linux tcc compiler for C compiler, and GCC for C++ compiler, for linux x86_64/amd64 arch.

dockcross/linux-i686

Docker Image Size (tag) Docker Pulls

Standalone Linux i686 cross compiler.

dockcross/manylinux_2_28-x64

Docker Image Size (tag) Docker Pulls

Docker manylinux_2_28 image for building Linux x86_64 / amd64 Python wheel packages. It includes Python 3.6, 3.7, 3.8, 3.9, 3.10 and 3.11. Also has support for the dockcross script, and it has installations of CMake, Ninja, and scikit-build. For CMake, it sets MANYLINUX_2_28 to "TRUE" in the toolchain.

dockcross/manylinux2014-x64

Docker Image Size (tag) Docker Pulls

Docker manylinux2014 image for building Linux x86_64 / amd64 Python wheel packages. 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. For CMake, it sets MANYLINUX2014 to "TRUE" in the toolchain.

dockcross/manylinux2014-x86

Docker Image Size (tag) Docker Pulls

Docker manylinux2014 image for building Linux i686 Python wheel packages. 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. For CMake, it sets MANYLINUX2014 to "TRUE" in the toolchain.

dockcross/manylinux2014-aarch64

Docker Image Size (tag) Docker Pulls

Docker manylinux2014 image for building Linux aarch64 / arm64 Python wheel packages. 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. For CMake, it sets MANYLINUX2014 to "TRUE" in the toolchain.

dockcross/web-wasm

Docker Image Size (tag) Docker Pulls

The Emscripten WebAssembly/JavaScript cross compiler.

dockcross/web-wasi

Docker Image Size (tag) Docker Pulls

The WebAssembly System Interface (WASI) SDK LLVM/Clang/WASI Sysroot cross compiler.

dockcross/web-wasi-threads

Docker Image Size (tag) Docker Pulls

The WebAssembly System Interface (WASI) SDK LLVM/Clang/WASI Sysroot cross compiler with the toolchain configured to enable the wasm threading proposal.

dockcross/windows-static-x64

Docker Image Size (tag) Docker Pulls

64-bit Windows cross-compiler based on MXE/MinGW-w64 with win32 threads and static linking.

dockcross/windows-static-x64-posix

Docker Image Size (tag) Docker Pulls

64-bit Windows cross-compiler based on MXE/MinGW-w64 with posix threads and static linking.

dockcross/windows-static-x86

Docker Image Size (tag) Docker Pulls

32-bit Windows cross-compiler based on MXE/MinGW-w64 with win32 threads and static linking.

dockcross/windows-shared-x64

Docker Image Size (tag) Docker Pulls

64-bit Windows cross-compiler based on MXE/MinGW-w64 with win32 threads and dynamic linking.

dockcross/windows-shared-x64-posix

Docker Image Size (tag) Docker Pulls

64-bit Windows cross-compiler based on MXE/MinGW-w64 with posix threads and dynamic linking.

dockcross/windows-shared-x86

Docker Image Size (tag) Docker Pulls

32-bit Windows cross-compiler based on MXE/MinGW-w64 with win32 threads and dynamic linking.

dockcross/windows-armv7

Docker Image Size (tag) Docker Pulls

ARMv7 32-bit Windows cross-compiler based on LLVM/MinGW-w64

dockcross/windows-arm64

Docker Image Size (tag) Docker Pulls

ARMv8 64-bit Windows cross-compiler based on llvm-mingw

Articles

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 -y 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 images do NOT provide a toolchain file but they use the same method to conveniently isolate the build environment as dockcross.

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.

Build images by yourself

Prebuilt images available on Docker hub are single architecture amd64 images. Those images work even on different architectures: for example, if you run a dockcross image on Docker running on an Apple M1, the image will run in emulation mode, meaning that it will still work as expected, although it will be slower than running on native hardware (you can expect a factor or 10 or more).

To overcome this limitation, you can build your own images on non-amd64 architectures. To do so, you can use the Makefile provided in this repository. For example, to build the linux-armv7 image, and provided that your Docker hub organization name is ACME, you can run:

$ make ORG=ACME base
$ make ORG=ACME linux-armv7

This will create the Docker images ACME/base and ACME/linux-armv7, so that you can later launch a container using the ACME/linux-armv7 image:

$ docker run --rm ACME/linux-armv7 uname -a
Linux 89b164ee8d90 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 aarch64 GNU/Linux

Note that the architecture is now aarch64 instead of amd64, so it runs natively on the Apple M1.

---

Credits:

dockcross's People

Contributors

bbarbieru avatar bensuperpc avatar brainstorm avatar brandonros avatar chent11 avatar dependabot[bot] avatar dzenanz avatar ftapajos avatar gjacquenot avatar jcfr avatar jonasvautherin avatar josiahsams avatar jspanchu avatar kalledk avatar le91688 avatar lebeg avatar mayeut avatar ngenetzky avatar pbosetti avatar pj-zetier avatar rburns avatar rhelmke avatar sabelka avatar sfo avatar smo-ddemerre avatar steeve avatar svenihoney avatar thewtex avatar tresf avatar veblush avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dockcross's Issues

Add documentation on how to add a new toolchain

Document steps. Partial list:

  • Create new directory and populate Dockerfile and Toolchain.cmake
    • When and how to use Debian / embedian / manylinux / centos / crosstool-ng
  • Add to the Makefile for build and test targets for the image
  • Add to .circleci/config.yml
  • Add to README.md
  • Push to DockerHub
  • Add to MicroBadger

ndk-gcc missing from android-arm docker container?

[root:/] # find /usr/arm-linux-androideabi/ -iname ndk-gcc
[root:/] # find /usr/ -iname ndk-gcc
[root:/] # find /usr/ -iname ndk-gcc*
[root:/] # find / -iname ndk-gcc*
[root:/] # find / -iname ndk-g*
/usr/arm-linux-androideabi/bin/ndk-gdb.py
/usr/arm-linux-androideabi/bin/ndk-gdb

Add example where we build against a dependency

Since it may not be common knowledge, we should add an explicit, small, self-contained example of building against a dependency.

Two strategies can be demonstrated -- if it is a CMake project, we can show how to build against the dependency build tree by passing <depname>_DIR. We can also show how to install into a common local install prefix directory, then use it with CMake.

We should use a relatively small, simple dependency for the example.

Suggested-by: @fbudin69500

linux-armv6 Compiler not usable on Windows Host

I am trying to run armv6 cross compiler on docker for windows.

bahri@BGASUS MINGW64 /c/workspace/test-pi-cross
$ docker run --rm dockcross/linux-armv6 > ./dockcross

bahri@BGASUS MINGW64 /c/workspace/test-pi-cross
$ ./dockcross bash
[root:/work] # ls
CMakeLists.txt HelloWorld.cpp build-lin-x64 dockcross helloworld.c
[root:/work] # echo "int main(){return 0;}" > test.c
[root:/work] # cat test.c
int main(){return 0;}
[root:/work] # $CC test.c
cc1: fatal error: test.c: Value too large for defined data type
compilation terminated.
[root:/work] 1 # cp test.c /tmp/
[root:/work] # $CC /tmp/test.c
[root:/work] # exit
exit

I think this bug is related to docker/for-win#15, ie, the cross compiler executable itself is not build with large file offset support. Same problem does not occur with linux-x64 cross compiler image.

wrong env CROSS_TRIPLE in Dockfile for mipsel

When I try to compile something use dockcross/linux-mipsel, I got an error:

make: /usr/bin/mips-linux-gnueabi-gcc: Command not found

I found lots of file named mipsel-linux-gnu-* in /usr/bin. Then I modified envirment and the error is gone.

export CROSS_TRIPLE=mipsel-linux-gnu
export AS=/usr/bin/mipsel-linux-gnu-as
export AR=/usr/bin/mipsel-linux-gnu-ar
export CC=/usr/bin/mipsel-linux-gnu-gcc
export CPP=/usr/bin/mipsel-linux-gnu-cpp-4.9
export CXX=/usr/bin/mipsel-linux-gnu-g++
export LD=/usr/bin/mipsel-linux-gnu-ld

I think the value of CROSS_TRIPLE should be "mipsel-linux-gnu" in Dockerfile.

Building yocto filesystem

I'm trying to use dockcross to provide a pre-setup environment for building yocto.

I am currently using the dockcross-linux-x64 image and installing the following additional dependencies.

gosu root apt-get install gawk diffstat unzip texinfo chrpath socat cpio gcc-multilib

Technically since Yocto builds the toolchain, I don't need the cross compile setup provided in the linux-x64 image.

However I'm not sure how best to add this ability to dockcross. These packages could be added to common.debian. Or a dockcross-yocto image could be created.

Any input would be appreciated.

Hub images not updated?

The image on the hub is 16 hours old, but does not contain the conan part? Is this by design or an error ?

Any way to run `sudo` in running container?

Hi, I ran dockcross-linux-armv7 bash and want to get a root privilege to install packages (via apt-get), however sudo command not found, and I don't know password of root user so cannot su root. Any chance to add sudo or any related utils in order to gain root access?

dockcross doesn't work in another docker container

Hi there, I'am using dockcross in jenkins docker container

I built my jenkins docker image for android support, just call it ci_service

I ran jenkins docker with this:

docker run -d -p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/dev/jenkins:/var/jenkins_home \
-v /opt/jenkins-extra/android-sdk:/opt/android-sdk \
-v /opt/jenkins-extra/bin:/opt/docker-cross \
-v /opt/jenkins-extra/gradle-3.4.1:/opt/gradle \
--name=ci_service ci_service:0.1

After running jenkins in detached mode, I executed

docker exec -u root -it ci_service bash

and obtained a cli session, then I went to the jenkins project directory, executed dockcross scripts, but got errors:

root@048fb1b14d84:/var/jenkins_home/workspace/c_test# ls
LICENSE  README.md  hello.c

root@048fb1b14d84:/var/jenkins_home/workspace/c_test# /opt/docker-cross/linux-armv7 bash -c '$CC hello.c -o hello_arm'
cp: target '/home/root/' is not a directory
chown: cannot access '/home/root/*': No such file or directory
arm-linux-gnueabihf-gcc: error: main.c: No such file or directory
arm-linux-gnueabihf-gcc: fatal error: no input files
compilation terminated.

and when I ran it as user jenkins, I got this:

jenkins@048fb1b14d84:~/workspace/c_test$ /opt/docker-cross/linux-armv7 bash -c '$CC hello.c -o hello_arm'
arm-linux-gnueabihf-gcc: error: hello.c: No such file or directory
arm-linux-gnueabihf-gcc: fatal error: no input files
compilation terminated.

It seems current directory was not copied to container.

But it works great in native host.

are there anything wrong with my operation? I am pretty new to dockcross, thanks a lot

dockcross: update, update-image and update-script options are not handled

For example, the following fails:

$ docker pull dockcross/manylinux-x64 
$ docker run --rm dockcross/manylinux-x64 > ~/bin/dockcross-manylinux-x64
$ chmod u+x ~/bin/dockcross-manylinux-x64
$ dockcross-manylinux-x64 update-image
chpst: fatal: unable to run: update-image: file does not exist

Script `imagefiles/cmake.sh` prevents use of scikit-build

Since internally scikit-build runs command like cmake --build <dir> ..., systematically passing -DCMAKE_TOOLCHAIN_FILE:FILEPATH=... is problematic.

Path forward:

Few options:

  1. Find a way to exclude the following from common.docker:
COPY imagefiles/cmake.sh /usr/local/bin/cmake
COPY imagefiles/ccmake.sh /usr/local/bin/ccmake
  1. We could update imagefiles/cmake.sh and imagefiles/ccmake.sh so that these scripts conditionally pass -DCMAKE_TOOLCHAIN_FILE.

    a. Invoke with -DCMAKE_TOOLCHAIN_FILE only if environment variable DOCKCROSS_CMAKE_WITH_TOOLCHAIN is set to 1, all docker images would have this environment variable set expect the manylinux one.

    b. Or the other way around, the environment variable could be DOCKCROSS_CMAKE_WITHOUT_TOOLCHAIN and build a wheel would have to be done calling DOCKCROSS_CMAKE_WITHOUT_TOOLCHAIN=1 /opt/python/cp27-cp27m/bin/python setup.py bdist_wheel

I will most likely go with option 2a

"linux-mipsel" missing from CI, "dockcross/linux-mipsel" is stale.

It looks like "linux-mipsel" is missing from the .circleci-matrix.yml file, causing the dockcross/linux-mipsel image to be stale.

I noticed that CROSS_TRIPLE should be using "mipsel-linux-gnu", but the current dockcross/linux-mipsel image is stale and uses mips-linux-gnu, which is invalid. It looks like this was fixed
upstream.

Reproduction:

$ docker pull dockcross/linux-mips
$ docker run -ti dockcross/linux-mipsel bash
$ echo $CROSS_TRIPLE
mips-linux-gnueabi
$ echo $CC
/usr/bin/mips-linux-gnueabi-gcc
        "RepoTags": [
            "dockcross/linux-mipsel:latest"
        ],
        "RepoDigests": [
            "dockcross/linux-mipsel@sha256:27bee874a434a2f5ff8fda1d393076c47eac6cea8e4db8c686a119da2f4dc35f"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2017-01-22T23:45:36.797142644Z",
        "Container": "b276e0c4e9612551d195fb9e896d4551c98b522322e9c71b6dbad063c7610066",

Fix "Driver btrfs failed to remove root filesystem " when using images on circleci

Error deleting container: Error response from daemon: Driver btrfs failed to remove root filesystem 4f624cfcf5b2362e35b564958f257669bd631081e8bd74544aeea9a623f6684a: Failed to destroy btrfs snapshot /var/lib/docker/btrfs/subvolumes for 4f624cfcf5b2362e35b564958f257669bd631081e8bd74544aeea9a623f6684a: operation not permitted

As specified here, we could build the images specifying --rm=false. That said, then, we would have to probably explicitly delete the intermediate container.

An other related read is https://discuss.circleci.com/t/docker-error-removing-intermediate-container/70

and some relevant part of the discussion copied below:

User:

That would be great to get this issue fixed so that docker run --rm works. I use --rm to clean up
containers after they have been run locally on my development machine. It would be a shame to add
special code for tests to pass on CircleCI.

CircleCI support:

Not sure if this can be fixed since the problem appears to be related to docker
running in an unprivileged LXC container. CircleCI will likely never use privileged LXC containers for
builds. This would need to be fixed upstream on the Docker/LXC side.

Resources:

linux-armv7 wrong CPP reference

This looks similar to #123. The latest build of "linux-armv7" seems to have the incorrect CPP environment variable:

$ echo $CPP
/usr/bin/arm-linux-gnueabihf-cpp
$ ls -la $CPP*
-rwxr-xr-x 1 root root 801656 Mar 14  2015 /usr/bin/arm-linux-gnueabihf-cpp-4.9

Container linux-armv7:latest:

        "Id": "sha256:731002bfb477f8627b783d9f4f4bdda9a487280b093682be560c58cc0c6ac1be",

use makefile to build code doesn't work

Hi :
My test OS is ubuntu 15.04 on a X64 machine

I used ./dokcross-win-86 bash -c '$CC hello.c -o hello' to test the usage,
it worked great.

But when I use the ./dokcross-win-86 in a project containing a make file , it failed
I used it like ::
./dokcross-win-86 make
And then I filed the output file, it returned ::
ELF 64-bit LSB executable, x86-64, version 1 (SYSV)......

the cross compile failed, then I thought maybe I could force the make command run in the container
So i tried ::
./dokcross-win-86 -- make
it still didn't work

Did I miss anything?

Thanks for your help

Using Alpine base images

Hi guys,

Hope you are all well !

I was wondering if some docker base images could be shrinked in size by using an Alpine for the base.

Have a great day !

Cheers,
Richard

Error when git cloning inside docker container

Hi,

I am trying to compile SimpleITK using dockercross. When the SuperBuild tries to git clone ITK, I get the following error:

[ 17%] Performing download step (git clone) for 'ITK'
Cloning into 'ITK'...
error: SSL: certificate subject name '*.kitware.com' does not match target host name 'itk.org' while accessing http://itk.org/ITK.git/info/refs?service=git-upload-pack

What am I missing?

Extending the images with custom packages

Thanks for maintaining this great project, it sure saves a lot of hassle in managing toolchains!

Apologies for the n00bish question, but I was wondering how would I go about including python-dev, for example. I need that to compile some swig related C library, which is searching for Python.h header file:#include <Python.h>.

I am thinking that simply modifying the Dockerfile to include the needed package would do the trick, but was wondering if this project comes with more elegant solutions.

dockcross/linux-x86 no sudo

dockcross/linux-x86 has no sudo installed, as a result it is not possible to install new packages

 docker run --rm dockcross/linux-x86 > ./dockcross
./dockcross bash -c 'sudo -i'
bash: sudo: command not found

MacOS: /proc/version: No such file or directory

Following the instructions in the readme generates an error on MacOS.

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'
grep: /proc/version: No such file or directory
grep: /proc/version: No such file or directory

There is no /proc filesystem on MacOS.
This does not appear to be a fatal error, and the executable is still produced.

dockcross: update-script does not remove docker containers

dockcross update-script creates docker containers, but does not remove them.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
$ ./dockcross-linux-x64 update-script
./dockcross-linux-x64 is up to date
$ docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS               NAMES
a2cd23e296cd        dockcross/linux-x64   "/dockcross/entrypoin"   4 seconds ago       Exited (0) 3 seconds ago                       happy_goldstine

dockcross permission denied

What's the docker trying to do when permission is denied? Note that this directory is NFS mounted but I can manually create directories. Let me know if there is some debugging I can do.

 $ dockcross-linux-armv5 gcc -v
docker: Error response from daemon: mkdir /home/jcormier/projects/l138/mtd-utils: permission denied.
 $ mkdir test
 $ echo $?
0
 $ pwd
/home/jcormier/projects/l138/mtd-utils/tests/fs-tests/integrity

Add test checking dockcross is usable on MacOSX

Rational: check for issue like the one reported in #94

Considering CircleCi can not be used to run images on both Linux and OSX at the same time, a solution could be to use travis-ci.

Test on travis would have to be triggered only if the dockcross tests are successful.

This could be done by creating a dummy branch named successful-build-log, after successful execution of all dockcross tests and upload of images on dockerhub, a commit would be added to this branch ... this commit would trigger build on travis-ci.

how to compile for mips (big endian)

I successfully compiled haproxy for mipsel(little endine), but my device is mips(big endian). Is there some way use dockcross/linux-mipsel to compile for mips? Maybe set some switch?

Linux images are restricted to "crossbuild-*" package support (crosstool-ng).

Linux dockcross images current operate by:

  1. Installing a base debian:jessie-based image.
  2. Installing a crossbuild-essential- toolchain variant.
  3. Hook that variant up to the environment.

This works so long as a crossbuild-* variant is available for the intended platform. It also is worth noting that crossbuild-* packages seem to have been deprecated after Jessie, and the new roadmap doesn't seem really known or straightforward.

While trying to build a big-endian MIPS compiler, I encountered a problem where Jessie didn't have a prebuilt package for that architecture. The solution that I settled on uses crosstool-ng, a really cool versatile toolchain builder project.

I created a branch to try and solve two problems at once: remove dependency on Debian's hairy cross-compiler story, and enable support for a much wider variety of configurations. The approach that I took can be seen here: https://github.com/danjacques/dockcross/tree/linux-mips (compare).

Notably, this add support for an alternative toolchain construction using crosstool-ng. A target that uses this approach defines a Makefile and Toolchain.cmake, similar to current Linux targets, as well as a new crosstool-ng config which specializes the cross-compiler suite that gets installed.

I'm interested in opinions on this approach, or other ideas for how to add support for a more general set of platforms to dockcross (if this is actually something the project wants to do).

Failed to run llvm optimizations

I want to use dockcross/browser-asmjs to build c code to js,
error occured while linking
All DICompileUnits must be listed in llvm.dbg.cu
/emsdk_portable/clang/tag-e1.37.3/build_tag-e1.37.3_64/bin/opt: CMakeFiles/fjwDecodec_lib.dir/fjwDecodec/HEVC_DCT_QUANTIZATION/dct_zigzag.c.o: error: input module is broken!
Traceback (most recent call last):
File "/emsdk_portable/emscripten/tag-1.37.3/emcc", line 13, in
emcc.run()
File "/emsdk_portable/emscripten/tag-1.37.3/emcc.py", line 1631, in run
final = shared.Building.llvm_opt(final, link_opts, DEFAULT_FINAL)
File "/emsdk_portable/emscripten/tag-1.37.3/tools/shared.py", line 1751, in llvm_opt
assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:
CMakeFiles/fjwDecodec_lib.dir/build.make:4984: recipe for target 'fjwDecodec_lib.js' failed
make[2]: *** [fjwDecodec_lib.js] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/fjwDecodec_lib.dir/all' failed
make[1]: *** [CMakeFiles/fjwDecodec_lib.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

and i donot know how to do

Radare2 compilation on mipsel

I would like to compile Radare2 project https://radare.org/r/ through dockcross/linux-mipsel but I have got problem with missing "/usr/bin/mips-linux-gnueabi-gcc".

Below my compile log:

$ git clone https://github.com/radare/radare2.git
$ docker run --rm dockcross/linux-mipsel > ./dockcross
$ chmod +x dockcross
...
$ ./dockcross ./sys/install.sh

WARNING: Updating from remote repository
Already up-to-date.
sudo: not found

export USE_R2_CAPSTONE

configure-plugins: Loading ./plugins.def.cfg ..
configure-plugins: Generating libr/config.h ..
configure-plugins: Generating libr/config.mk ..
SHARED: io.shm
STATIC: anal.6502 anal.8051 anal.arc anal.arm_cs anal.arm_gnu anal.avr anal.bf anal.cr16 anal.cris anal.dalvik anal.ebc anal.gb anal.h8300 anal.i4004 anal.i8080 anal.java anal.m68k_cs anal.malbolge anal.mips_cs anal.mips_gnu anal.msp430 anal.nios2 anal.null anal.pic18c anal.ppc_cs anal.ppc_gnu anal.riscv anal.rsp anal.sh anal.snes anal.sparc_cs anal.sparc_gnu anal.sysz anal.tms320 anal.v810 anal.v850 anal.vax anal.ws anal.x86_cs anal.x86_udis anal.xap anal.xcore_cs anal.xtensa anal.z80 asm.6502 asm.8051 asm.arc asm.arm_as asm.arm_cs asm.arm_gnu asm.arm_winedbg asm.avr asm.bf asm.cr16 asm.cris_gnu asm.dalvik asm.dcpu16 asm.ebc asm.gb asm.h8300 asm.hppa_gnu asm.i4004 asm.i8080 asm.java asm.lanai_gnu asm.lh5801 asm.lm32 asm.m68k_cs asm.malbolge asm.mcs96 asm.mips_cs asm.mips_gnu asm.msp430 asm.nios2 asm.pic18c asm.ppc_cs asm.ppc_gnu asm.rar asm.riscv asm.rsp asm.sh asm.snes asm.sparc_cs asm.sparc_gnu asm.spc700 asm.sysz asm.tms320 asm.tricore asm.v810 asm.v850 asm.vax asm.wasm asm.ws asm.x86_as asm.x86_cs asm.x86_nasm asm.x86_nz asm.x86_udis asm.xap asm.xcore_cs asm.xtensa asm.z80 bin.any bin.art bin.avr bin.bf bin.bflt bin.bios bin.bootimg bin.cgc bin.coff bin.dex bin.dol bin.dyldcache bin.elf bin.elf64 bin.fs bin.java bin.mach0 bin.mach064 bin.mbn bin.menuet bin.mz bin.nes bin.nin3ds bin.ninds bin.ningb bin.ningba bin.nro bin.omf bin.p9 bin.pe bin.pe64 bin.pebble bin.psxexe bin.rar bin.smd bin.sms bin.spc700 bin.te bin.vsf bin.wasm bin.xbe bin.zimg bin_xtr.fatmach0 bin_xtr.xtr_dyldcache bp.arm bp.bf bp.mips bp.ppc bp.x86 core.anal core.java crypto.aes crypto.aes_cbc crypto.base64 crypto.base91 crypto.blowfish crypto.cps2 crypto.des crypto.punycode crypto.rc2 crypto.rc4 crypto.rc6 crypto.rol crypto.ror crypto.rot crypto.xor debug.bf debug.bochs debug.esil debug.gdb debug.io debug.native debug.qnx debug.rap debug.wind egg.exec egg.xor fs.cpio fs.ext2 fs.fat fs.fb fs.hfs fs.hfsplus fs.iso9660 fs.jfs fs.minix fs.ntfs fs.posix fs.reiserfs fs.sfs fs.squash fs.tar fs.udf fs.ufs fs.xfs io.bfdbg io.bochs io.debug io.default io.gdb io.gzip io.http io.ihex io.mach io.malloc io.mmap io.procpid io.ptrace io.qnx io.r2k io.r2pipe io.r2web io.rap io.self io.shm io.sparse io.tcp io.w32 io.w32dbg io.windbg io.zip lang.vala parse.6502_pseudo parse.arm_pseudo parse.att2intel parse.dalvik_pseudo parse.m68k_pseudo parse.mips_pseudo parse.mreplace parse.ppc_pseudo parse.x86_pseudo
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for working directories... current
using prefix '/usr'
checking for c compiler... no
cleaning temporally files... done
ERROR: /usr/bin/mips-linux-gnueabi-gcc cannot create executables

$ ./dockcross bash -c '$CC ./configure'
bash: /usr/bin/mips-linux-gnueabi-gcc: No such file or directory

Tested on:

Linux 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

and

Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux

Maybe I do it somethin wrong.

Thank you

manylinux-x64: CMake built does not seem to work with ssl

Note the manylinux-x64 used here include patch associated with #38

Here is the error I get when trying to build the wheel for CMake:

$ git clone [email protected]:jcfr/cmake-python-distributions.git
$ cd cmake-python-distributions
$ dockcross-manylinux-x64 /opt/python/cp27-cp27m/bin/python setup.py build
[...]
-- verifying file...
       file='/work/_skbuild/cmake-build/CMakeProject-src-download-prefix/src/cmake-3.6.2.tar.gz'
-- SHA256 hash of
    /work/_skbuild/cmake-build/CMakeProject-src-download-prefix/src/cmake-3.6.2.tar.gz
  does not match expected value
    expected: '189ae32a6ac398bb2f523ae77f70d463a6549926cde1544cd9cc7c6609f8b346'
      actual: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
-- File already exists but hash mismatch. Removing...
-- downloading...
       src='https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz'
       dst='/work/_skbuild/cmake-build/CMakeProject-src-download-prefix/src/cmake-3.6.2.tar.gz'
       timeout='none'
error: downloading 'https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz' failed
  status_code: 1
  status_string: "Unsupported protocol"
  log:

linux-armv6 Compiler cannot compile without hard-float

Using dockcross/linux-armv6 works great expect for the special case where the device has no hard-float because the linking is done against:

/lib/ld-linux-armhf.so.3 .

I have this special case that one of my device does not support hard-float and has only /lib/ld-linux.so.3 .

Trying to use arm-linux-gnueabi-gcc fails because it is not present in the image.

I would be nice if both (soft-float and hard-float) would be supported.

Improve manylinux images to allow upgrade of pip and other packages

When the version of pip provided by the image is not the latest, running command the one reported below fails.

Few approaches:

  • Allow manylinux images to update imagefiles/entrypoint.sh to check for a pre_chown_hook to give an opportunity for the script to change the ownership of the site-packages folder associated with the different python installs.
  • hack imagefiles/entrypoint.sh and hardcode the expected behavior
[scikit-ci] Executing: ./dockcross /opt/python/cp27-cp27mu/bin/python -m pip install --disable-pip-version-check --upgrade pip
Collecting pip
  Downloading pip-9.0.0-py2.py3-none-any.whl (1.3MB)
Installing collected packages: pip
  Found existing installation: pip 8.1.2
    Uninstalling pip-8.1.2:
Exception:
Traceback (most recent call last):
  File "/opt/python/cp27-cp27mu/lib/python2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/opt/python/cp27-cp27mu/lib/python2.7/site-packages/pip/commands/install.py", line 317, in run
    prefix=options.prefix_path,
  File "/opt/python/cp27-cp27mu/lib/python2.7/site-packages/pip/req/req_set.py", line 736, in install
    requirement.uninstall(auto_confirm=True)
  File "/opt/python/cp27-cp27mu/lib/python2.7/site-packages/pip/req/req_install.py", line 742, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/opt/python/cp27-cp27mu/lib/python2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/opt/python/cp27-cp27mu/lib/python2.7/site-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/opt/python/cp27-cp27mu/lib/python2.7/shutil.py", line 303, in move
    os.unlink(src)
OSError: [Errno 13] Permission denied: '/opt/_internal/cpython-2.7.11-ucs4/bin/pip'

Plans for dockcross images based on debian/stretch

Just a question or maybe an enhancement request.
Is there any plan for updating the dockcross images to be based on stretch instead of jessie?
How would that look? A separate branch? fork? or just advance master?
BTW - I think these images are great.

CMake https download fails

To reproduce:

  1. create a file named test-download.cmake with the following content:
message(STATUS "Downloading ... ")
file(
  DOWNLOAD 
   "https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz"
   "/work/cmake-3.6.2.tar.gz"
  STATUS status
  SHOW_PROGRESS
  )

message("status:${status}")
  1. Execute:
± cmake -P test-download.cmake 
-- Downloading ... 
status:1;"Unsupported protocol"

Version of cmake is:

± cmake --version
cmake version 3.7.20161102-gab2ae4

base image: sh: 1: [: =: unexpected operator

When building the base image, the following error is printed. Notes:

  • it doesn't prevent the build from completing.
  • it doesn't happen for the manylinux images

Code causing triggering the error is in common.docker:

  WRAPPER=$( [ "$DEFAULT_DOCKCROSS_IMAGE" = "dockcross/manylinux-x86" ] && echo "linux32" || echo "") && \
  CONFIG_FLAG=$( [ "$DEFAULT_DOCKCROSS_IMAGE" = "dockcross/manylinux-x86" ] && echo "-m32" || echo "") && \

Add tags/versions/releases to images

Running on latest of anything is almost never preferable, instead one should keep versioning completely under control to avoid "it worked before"-kind of issues.

So, as title says:
Please add tags to the images (preferably the git-repo too).

Anyways, great work with it all! :) 💯👍

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.