Merge pull request #1 from dockcross/master

merge
This commit is contained in:
Nadav 2018-04-25 12:35:45 +03:00 committed by GitHub
commit e2c5545bf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 677 additions and 350 deletions

View File

@ -44,6 +44,25 @@ jobs:
- save_cache:
key: android-arm-assets-{{ .Revision }}
paths: ~/docker/android-arm.tar
android-arm64:
<<: *build-settings
steps:
- restore_cache:
key: base-assets-{{ .Revision }}
- run:
name: android-arm64 build
no_output_timeout: 1.5h
command: |
docker load -i ~/docker/base.tar
make android-arm64
docker save -o ~/docker/android-arm64.tar dockcross/android-arm64:latest
- run:
name: android-arm64 test
command: |
make android-arm64.test
- save_cache:
key: android-arm64-assets-{{ .Revision }}
paths: ~/docker/android-arm64.tar
browser-asmjs:
<<: *build-settings
steps:
@ -68,17 +87,18 @@ jobs:
steps:
- restore_cache:
key: base-assets-{{ .Revision }}
- run:
name: linux-arm64 build
no_output_timeout: 1.5h
command: |
docker load -i ~/docker/base.tar
make linux-arm64
docker save -o ~/docker/linux-arm64.tar dockcross/linux-arm64:latest
- run:
name: linux-arm64 test
command: |
make linux-arm64.test
# Image build currently broken. See #209
#- run:
#name: linux-arm64 build
#no_output_timeout: 1.5h
#command: |
#docker load -i ~/docker/base.tar
#make linux-arm64
#docker save -o ~/docker/linux-arm64.tar dockcross/linux-arm64:latest
#- run:
#name: linux-arm64 test
#command: |
#make linux-arm64.test
- save_cache:
key: linux-arm64-assets-{{ .Revision }}
paths: ~/docker/linux-arm64.tar
@ -87,17 +107,18 @@ jobs:
steps:
- restore_cache:
key: base-assets-{{ .Revision }}
- run:
name: linux-armv5 build
no_output_timeout: 1.5h
command: |
docker load -i ~/docker/base.tar
make linux-armv5
docker save -o ~/docker/linux-armv5.tar dockcross/linux-armv5:latest
- run:
name: linux-armv5 test
command: |
make linux-armv5.test
# Image build currently broken. See #209
#- run:
#name: linux-armv5 build
#no_output_timeout: 1.5h
#command: |
#docker load -i ~/docker/base.tar
#make linux-armv5
#docker save -o ~/docker/linux-armv5.tar dockcross/linux-armv5:latest
#- run:
#name: linux-armv5 test
#command: |
#make linux-armv5.test
- save_cache:
key: linux-armv5-assets-{{ .Revision }}
paths: ~/docker/linux-armv5.tar
@ -125,17 +146,18 @@ jobs:
steps:
- restore_cache:
key: base-assets-{{ .Revision }}
- run:
name: linux-armv7 build
no_output_timeout: 1.5h
command: |
docker load -i ~/docker/base.tar
make linux-armv7
docker save -o ~/docker/linux-armv7.tar dockcross/linux-armv7:latest
- run:
name: linux-armv7 test
command: |
make linux-armv7.test
# Image build currently broken. See #209
#- run:
#name: linux-armv7 build
#no_output_timeout: 1.5h
#command: |
#docker load -i ~/docker/base.tar
#make linux-armv7
#docker save -o ~/docker/linux-armv7.tar dockcross/linux-armv7:latest
#- run:
#name: linux-armv7 test
#command: |
#make linux-armv7.test
- save_cache:
key: linux-armv7-assets-{{ .Revision }}
paths: ~/docker/linux-armv7.tar
@ -144,17 +166,18 @@ jobs:
steps:
- restore_cache:
key: base-assets-{{ .Revision }}
- run:
name: linux-mipsel build
no_output_timeout: 1.5h
command: |
docker load -i ~/docker/base.tar
make linux-mipsel
docker save -o ~/docker/linux-mipsel.tar dockcross/linux-mipsel:latest
- run:
name: linux-mipsel test
command: |
make linux-mipsel.test
# Image build currently broken. See #209
#- run:
#name: linux-mipsel build
#no_output_timeout: 1.5h
#command: |
#docker load -i ~/docker/base.tar
#make linux-mipsel
#docker save -o ~/docker/linux-mipsel.tar dockcross/linux-mipsel:latest
#- run:
#name: linux-mipsel test
#command: |
#make linux-mipsel.test
- save_cache:
key: linux-mipsel-assets-{{ .Revision }}
paths: ~/docker/linux-mipsel.tar
@ -182,17 +205,18 @@ jobs:
steps:
- restore_cache:
key: base-assets-{{ .Revision }}
- run:
name: linux-ppc64le build
no_output_timeout: 1.5h
command: |
docker load -i ~/docker/base.tar
make linux-ppc64le
docker save -o ~/docker/linux-ppc64le.tar dockcross/linux-ppc64le:latest
- run:
name: linux-ppc64le test
command: |
make linux-ppc64le.test
# Image build currently broken. See #209
#- run:
#name: linux-ppc64le build
#no_output_timeout: 1.5h
#command: |
#docker load -i ~/docker/base.tar
#make linux-ppc64le
#docker save -o ~/docker/linux-ppc64le.tar dockcross/linux-ppc64le:latest
#- run:
#name: linux-ppc64le test
#command: |
#make linux-ppc64le.test
- save_cache:
key: linux-ppc64le-assets-{{ .Revision }}
paths: ~/docker/linux-ppc64le.tar
@ -333,6 +357,16 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/android-arm:latest
fi
- restore_cache:
key: android-arm64-assets-{{ .Revision }}
- deploy:
name: Deploy android-arm64
command: |
docker load -i ~/docker/android-arm64.tar
if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/android-arm64:latest
fi
- restore_cache:
key: browser-asmjs-assets-{{ .Revision }}
- deploy:
@ -343,26 +377,28 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/browser-asmjs:latest
fi
- restore_cache:
key: linux-arm64-assets-{{ .Revision }}
- deploy:
name: Deploy linux-arm64
command: |
docker load -i ~/docker/linux-arm64.tar
if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-arm64:latest
fi
- restore_cache:
key: linux-armv5-assets-{{ .Revision }}
- deploy:
name: Deploy linux-armv5
command: |
docker load -i ~/docker/linux-armv5.tar
if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-armv5:latest
fi
# Image build currently broken. See #209
#- restore_cache:
#key: linux-arm64-assets-{{ .Revision }}
#- deploy:
#name: Deploy linux-arm64
#command: |
#docker load -i ~/docker/linux-arm64.tar
#if [ "${CIRCLE_BRANCH}" == "master" ]; then
#docker login -u $DOCKER_USER -p $DOCKER_PASS
#docker push dockcross/linux-arm64:latest
#fi
# Image build currently broken. See #209
#- restore_cache:
#key: linux-armv5-assets-{{ .Revision }}
#- deploy:
#name: Deploy linux-armv5
#command: |
#docker load -i ~/docker/linux-armv5.tar
#if [ "${CIRCLE_BRANCH}" == "master" ]; then
#docker login -u $DOCKER_USER -p $DOCKER_PASS
#docker push dockcross/linux-armv5:latest
#fi
- restore_cache:
key: linux-armv6-assets-{{ .Revision }}
- deploy:
@ -373,26 +409,28 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-armv6:latest
fi
- restore_cache:
key: linux-armv7-assets-{{ .Revision }}
- deploy:
name: Deploy linux-armv7
command: |
docker load -i ~/docker/linux-armv7.tar
if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-armv7:latest
fi
- restore_cache:
key: linux-mipsel-assets-{{ .Revision }}
- deploy:
name: Deploy linux-mipsel
command: |
docker load -i ~/docker/linux-mipsel.tar
if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-mipsel:latest
fi
# Image build currently broken. See #209
#- restore_cache:
#key: linux-armv7-assets-{{ .Revision }}
#- deploy:
#name: Deploy linux-armv7
#command: |
#docker load -i ~/docker/linux-armv7.tar
#if [ "${CIRCLE_BRANCH}" == "master" ]; then
#docker login -u $DOCKER_USER -p $DOCKER_PASS
#docker push dockcross/linux-armv7:latest
#fi
# Image build currently broken. See #209
#- restore_cache:
#key: linux-mipsel-assets-{{ .Revision }}
#- deploy:
#name: Deploy linux-mipsel
#command: |
#docker load -i ~/docker/linux-mipsel.tar
#if [ "${CIRCLE_BRANCH}" == "master" ]; then
#docker login -u $DOCKER_USER -p $DOCKER_PASS
#docker push dockcross/linux-mipsel:latest
#fi
- restore_cache:
key: linux-s390x-assets-{{ .Revision }}
- deploy:
@ -403,16 +441,17 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-s390x:latest
fi
- restore_cache:
key: linux-ppc64le-assets-{{ .Revision }}
- deploy:
name: Deploy linux-ppc64le
command: |
docker load -i ~/docker/linux-ppc64le.tar
if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-ppc64le:latest
fi
# Image build currently broken. See #209
#- restore_cache:
#key: linux-ppc64le-assets-{{ .Revision }}
#- deploy:
#name: Deploy linux-ppc64le
#command: |
#docker load -i ~/docker/linux-ppc64le.tar
#if [ "${CIRCLE_BRANCH}" == "master" ]; then
#docker login -u $DOCKER_USER -p $DOCKER_PASS
#docker push dockcross/linux-ppc64le:latest
#fi
- restore_cache:
key: linux-x64-assets-{{ .Revision }}
- deploy:
@ -482,30 +521,38 @@ workflows:
- android-arm:
requires:
- base
- android-arm64:
requires:
- base
- browser-asmjs:
requires:
- base
- linux-arm64:
requires:
- base
- linux-armv5:
requires:
- base
# Image build currently broken. See #209
#- linux-arm64:
#requires:
#- base
# Image build currently broken. See #209
#- linux-armv5:
#requires:
#- base
- linux-armv6:
requires:
- base
- linux-armv7:
requires:
- base
- linux-mipsel:
requires:
- base
# Image build currently broken. See #209
#- linux-armv7:
#requires:
#- base
# Image build currently broken. See #209
#- linux-mipsel:
#requires:
#- base
- linux-s390x:
requires:
- base
- linux-ppc64le:
requires:
- base
# Image build currently broken. See #209
#- linux-ppc64le:
#requires:
#- base
- linux-x64:
requires:
- base
@ -528,14 +575,18 @@ workflows:
requires:
- base
- android-arm
- android-arm64
- browser-asmjs
- linux-arm64
- linux-armv5
# Image build currently broken. See #209
#- linux-arm64
#- linux-armv5
- linux-armv6
- linux-armv7
- linux-mipsel
# Image build currently broken. See #209
#- linux-armv7
#- linux-mipsel
- linux-s390x
- linux-ppc64le
# Image build currently broken. See #209
#- linux-ppc64le
- linux-x64
- linux-x86
- manylinux-x64

View File

@ -1,4 +1,4 @@
Copyright (c) 2015 Steeve Morin, Rob Burns, Matthew McCormick
Copyright (c) 2015, 2016, 2017, 2018 Steeve Morin, Rob Burns, Matthew McCormick, Jean-Christophe-Fillion-Robin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -13,7 +13,7 @@ ORG = dockcross
BIN = ./bin
# These images are built using the "build implicit rule"
STANDARD_IMAGES = linux-s390x android-arm linux-x86 linux-x64 linux-arm64 linux-armv5 linux-armv6 linux-armv7 linux-mips linux-mipsel linux-ppc64le windows-x86 windows-x64
STANDARD_IMAGES = linux-s390x android-arm android-arm64 linux-x86 linux-x64 linux-arm64 linux-armv5 linux-armv6 linux-armv7 linux-mips linux-mipsel linux-ppc64le windows-x86 windows-x64
# Generated Dockerfiles.
GEN_IMAGES = linux-s390x linux-mips manylinux-x86 manylinux-x64 browser-asmjs

View File

@ -12,6 +12,7 @@ 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.
@ -20,6 +21,61 @@ Features
* 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/>`_.
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
---------------
@ -40,6 +96,13 @@ dockcross/android-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.
.. |browser-asmjs-images| image:: https://images.microbadger.com/badges/image/dockcross/browser-asmjs.svg
:target: https://microbadger.com/images/dockcross/browser-asmjs
@ -148,44 +211,13 @@ dockcross/windows-x86
|windows-x86-images| 32-bit Windows cross-compiler based on MXE/MinGW-w64.
Installation
------------
Articles
--------
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 images are provided; a 64-bit 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.
- `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
@ -269,23 +301,6 @@ For example, commands like ``git config --global advice.detachedHead false`` can
be added to this script.
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...'`.
How to extend Dockcross images
------------------------------
In order to extend Dockcross images with your own commands, one must:
@ -296,7 +311,7 @@ In order to extend Dockcross images with your own commands, one must:
An example Dockerfile would be::
FROM dockcross/linux-armv7
ENV DEFAULT_DOCKCROSS_IMAGE my_cool_image
RUN apt-get install nano
@ -308,13 +323,13 @@ And then in the shell::
./linux-armv7 bash # Runs the helper script with the argument "bash", which starts an interactive container using your extended image.
Articles
--------
What is the difference between `dockcross` and `dockbuild` ?
------------------------------------------------------------
- `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
<http://blogs.nopcode.org/brainstorm/2016/07/26/cross-compiling-with-docker>`_
The key difference is that `dockbuild <https://github.com/dockbuild/dockbuild#readme>`_
images use the same method to conveniently isolate the build environment as
`dockcross <https://github.com/dockcross/dockcross#readme>`_ but they do **NOT** provide
a toolchain file.
---

View File

@ -11,12 +11,13 @@ ENV CROSS_TRIPLE=arm-linux-androideabi
ENV CROSS_ROOT=/usr/${CROSS_TRIPLE}
ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
AR=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ar \
CC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gcc \
CC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-clang \
CPP=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-cpp \
CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-g++ \
CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-clang++ \
LD=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ld
ENV ANDROID_NDK_REVISION 13b
ENV ANDROID_NDK_REVISION 16b
ENV ANDROID_NDK_API 16
RUN mkdir -p /build && \
cd /build && \
curl -O https://dl.google.com/android/repository/android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip && \
@ -24,7 +25,8 @@ RUN mkdir -p /build && \
cd android-ndk-r${ANDROID_NDK_REVISION} && \
./build/tools/make_standalone_toolchain.py \
--arch arm \
--api 16 \
--api ${ANDROID_NDK_API} \
--stl=libc++ \
--install-dir=${CROSS_ROOT} && \
cd / && \
rm -rf /build && \

View File

@ -6,8 +6,8 @@ set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN /usr/${cross_triple}/)
set(CMAKE_ANDROID_ARM_MODE 1)
set(CMAKE_ANDROID_ARM_NEON 1)
set(CMAKE_C_COMPILER /usr/${cross_triple}/bin/${cross_triple}-gcc)
set(CMAKE_CXX_COMPILER /usr/${cross_triple}/bin/${cross_triple}-g++)
set(CMAKE_C_COMPILER /usr/${cross_triple}/bin/${cross_triple}-clang)
set(CMAKE_CXX_COMPILER /usr/${cross_triple}/bin/${cross_triple}-clang++)
set(CMAKE_FIND_ROOT_PATH /usr/${cross_triple})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

52
android-arm64/Dockerfile Normal file
View File

@ -0,0 +1,52 @@
FROM dockcross/base:latest
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
RUN dpkg --add-architecture arm64 ; apt-get update
# The cross-compiling emulator
RUN apt-get update && apt-get install -y \
qemu-user \
qemu-user-static \
unzip
ENV CROSS_TRIPLE=aarch64-linux-android
ENV CROSS_ROOT=/usr/${CROSS_TRIPLE}
ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
AR=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ar \
CC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-clang \
CPP=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-cpp \
CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-clang++ \
LD=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ld
ENV ANDROID_NDK_REVISION 16b
ENV ANDROID_NDK_API 21
RUN mkdir -p /build && \
cd /build && \
curl -O https://dl.google.com/android/repository/android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip && \
unzip ./android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip && \
cd android-ndk-r${ANDROID_NDK_REVISION} && \
./build/tools/make_standalone_toolchain.py \
--arch arm64 \
--api ${ANDROID_NDK_API} \
--stl=libc++ \
--install-dir=${CROSS_ROOT} && \
cd / && \
rm -rf /build && \
find ${CROSS_ROOT} -exec chmod a+r '{}' \; && \
find ${CROSS_ROOT} -executable -exec chmod a+x '{}' \;
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/android-arm64
COPY Toolchain.cmake ${CROSS_ROOT}/
ENV CMAKE_TOOLCHAIN_FILE ${CROSS_ROOT}/Toolchain.cmake
# Build-time metadata as defined at http://label-schema.org
ARG BUILD_DATE
ARG IMAGE
ARG VCS_REF
ARG VCS_URL
LABEL org.label-schema.build-date=$BUILD_DATE \
org.label-schema.name=$IMAGE \
org.label-schema.vcs-ref=$VCS_REF \
org.label-schema.vcs-url=$VCS_URL \
org.label-schema.schema-version="1.0"

View File

@ -0,0 +1,19 @@
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 1)
set(cross_triple aarch64-linux-android)
set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN /usr/${cross_triple}/)
set(CMAKE_ANDROID_ARM_MODE 1)
set(CMAKE_ANDROID_ARM_NEON 1)
set(CMAKE_C_COMPILER /usr/${cross_triple}/bin/${cross_triple}-clang)
set(CMAKE_CXX_COMPILER /usr/${cross_triple}/bin/${cross_triple}-clang++)
set(CMAKE_FIND_ROOT_PATH /usr/${cross_triple})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_SYSROOT /usr/${cross_triple}/sysroot)
set(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/qemu-arm)

View File

@ -1,4 +1,4 @@
FROM trzeci/emscripten-slim:sdk-tag-1.37.29-64bit
FROM trzeci/emscripten-slim:sdk-tag-1.37.37-64bit
MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
# Revert back to "/bin/sh" as default shell
@ -9,7 +9,7 @@ RUN rm /bin/sh && ln -s /bin/dash /bin/sh
#include "common.docker"
ENV EMSCRIPTEN_VERSION 1.37.29
ENV EMSCRIPTEN_VERSION 1.37.37
ENV PATH /emsdk_portable:/emsdk_portable/llvm/clang/bin/:/emsdk_portable/sdk/:${PATH}
ENV CC=/emsdk_portable/sdk/emcc \

View File

@ -13,7 +13,7 @@ RUN apt-get update --yes && apt-get install --no-install-recommends --yes \
ca-certificates \
curl \
file \
git \
gettext \
gzip \
zip \
make \
@ -31,15 +31,16 @@ RUN apt-get update --yes && apt-get install --no-install-recommends --yes \
pax \
vim \
wget \
xz-utils && \
xz-utils \
zlib1g-dev && \
apt-get clean --yes
ENV GOSU_VERSION 1.10
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& apt-get update && rm -rf /var/lib/apt/lists/* \
&& dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
&& curl -# -o /usr/local/bin/gosu -LO "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \
&& curl -# -o /usr/local/bin/gosu.asc -LO "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \

View File

@ -1,21 +1,38 @@
WORKDIR /usr/share
RUN git clone "https://github.com/nojhan/liquidprompt.git" && \
cd liquidprompt && \
git checkout v_1.11
COPY imagefiles/.bashrc /root/
WORKDIR /usr/src
COPY imagefiles/install-openssl.sh imagefiles/install-cmake.sh /dockcross/
ARG GIT_VERSION=2.16.2
ARG CMAKE_VERSION=3.11.0
COPY imagefiles/build-and-install-git.sh \
imagefiles/utils.sh \
imagefiles/build-and-install-openssl.sh \
imagefiles/build-and-install-openssh.sh \
imagefiles/build-and-install-cmake.sh \
imagefiles/install-cmake-binary.sh \
imagefiles/build-and-install-curl.sh \
/dockcross/
RUN \
if [ "$DEFAULT_DOCKCROSS_IMAGE" = "dockcross/manylinux-x86" ]; then \
/dockcross/install-openssl.sh -32 && \
/dockcross/install-cmake.sh -32 || exit 1; \
/dockcross/build-and-install-openssl.sh -32 && \
/dockcross/build-and-install-openssh.sh && \
/dockcross/build-and-install-curl.sh && \
/dockcross/build-and-install-git.sh && \
/dockcross/build-and-install-cmake.sh -32 || exit 1; \
else \
/dockcross/install-openssl.sh && \
/dockcross/install-cmake.sh || exit 1; \
/dockcross/build-and-install-openssl.sh && \
/dockcross/build-and-install-openssh.sh && \
/dockcross/build-and-install-curl.sh && \
/dockcross/build-and-install-git.sh && \
/dockcross/install-cmake-binary.sh || exit 1; \
fi; \
rm /dockcross/install-openssl.sh /dockcross/install-cmake.sh
rm /dockcross/build-and-install-git.sh \
/dockcross/utils.sh \
/dockcross/build-and-install-openssl.sh \
/dockcross/build-and-install-openssh.sh \
/dockcross/build-and-install-cmake.sh \
/dockcross/install-cmake-binary.sh \
/dockcross/build-and-install-curl.sh
COPY imagefiles/cmake.sh /usr/local/bin/cmake
COPY imagefiles/ccmake.sh /usr/local/bin/ccmake
@ -31,13 +48,19 @@ RUN \
RUN if [ -e /opt/python/cp35-cp35m/bin/python ]; then \
: nothing to do here since it is updated by manylinux-common/install-python-packages.sh ; \
else \
wget https://bootstrap.pypa.io/get-pip.py && \
curl -# -LO https://bootstrap.pypa.io/get-pip.py && \
python get-pip.py --ignore-installed && \
rm get-pip.py || exit 1; \
fi
RUN $([ -e /opt/python/cp35-cp35m/bin/python ] && echo "/opt/python/cp35-cp35m/bin/python" || echo "python") -m pip install --ignore-installed conan
WORKDIR /usr/share
RUN git clone "https://github.com/nojhan/liquidprompt.git" && \
cd liquidprompt && \
git checkout v_1.11
COPY imagefiles/.bashrc /root/
RUN echo "root:root" | chpasswd
WORKDIR /work
ENTRYPOINT ["/dockcross/entrypoint.sh"]

View File

@ -1,10 +1,11 @@
ENV GOSU_VERSION 1.10
RUN set -x \
&& yum -y install epel-release \
&& yum -y install wget gpg \
&& yum -y install gpg \
&& yum -y install zlib-devel gettext \
&& dpkgArch=$(if test $(uname -m) = "x86_64"; then echo amd64; else echo i386; fi) \
&& wget -O /usr/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \
&& wget -O /tmp/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
&& curl -o /usr/bin/gosu -LO "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \
&& curl -o /tmp/gosu.asc -LO "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /tmp/gosu.asc /usr/bin/gosu \

View File

@ -1,17 +1,4 @@
#!/bin/bash
#
# Configure, build and install CMake
#
# Usage:
#
# install-cmake.sh [-32]
#
# Options:
#
# -32 Build CMake as a 32-bit executable
#
# Notes:
#
# * build directory is /usr/src/CMake
#
@ -19,20 +6,14 @@
#
# * after installation, archive, source and build directories are removed
#
set -e
set -o pipefail
set -ex
WRAPPER=""
CONFIG_FLAG=""
SUFFIX=64
while [ $# -gt 0 ]; do
case "$1" in
-32)
WRAPPER="linux32"
CONFIG_FLAG="-m32"
SUFFIX=32
;;
*)
echo "Usage: Usage: ${0##*/} [-32]"
@ -42,27 +23,43 @@ while [ $# -gt 0 ]; do
shift
done
if ! command -v git &> /dev/null; then
echo >&2 'error: "git" not found!'
exit 1
fi
if [[ "${CMAKE_VERSION}" == "" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1
fi
cd /usr/src
# Download
CMAKE_REV=v3.10.1
wget --progress=bar:force https://github.com/kitware/cmake/archive/$CMAKE_REV.tar.gz -O CMake.tar.gz
mkdir CMake
tar -xzvf ./CMake.tar.gz --strip-components=1 -C ./CMake
git clone git://cmake.org/cmake.git CMake
(cd CMake && git checkout v$CMAKE_VERSION)
mkdir /usr/src/CMake-build
cd /usr/src/CMake-build
pushd /usr/src/CMake-build
NUM_PROCESSOR=$(grep -c processor /proc/cpuinfo)
# Configure boostrap
${WRAPPER} /usr/src/CMake/bootstrap \
--parallel=$NUM_PROCESSOR \
--prefix=/usr
--parallel=$(grep -c processor /proc/cpuinfo)
${WRAPPER} make -j$(grep -c processor /proc/cpuinfo)
# Build and Install
${WRAPPER} make install -j$NUM_PROCESSOR
mkdir /usr/src/CMake-ssl-build
cd /usr/src/CMake-ssl-build
${WRAPPER} /usr/src/CMake-build/bin/cmake \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DBUILD_TESTING:BOOL=ON \
-DCMAKE_INSTALL_PREFIX:PATH=/usr/src/cmake-$CMAKE_VERSION \
-DCMAKE_USE_OPENSSL:BOOL=ON \
-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \
../CMake
${WRAPPER} make -j$(grep -c processor /proc/cpuinfo) install
cd /usr/src/cmake-$CMAKE_VERSION
rm -rf doc man
find . -type f -exec install -D "{}" "/usr/{}" \;
# Test
ctest -R CMake.FileDownload
@ -88,8 +85,5 @@ EOF
# Execute test script
cmake -P cmake-test-https-download.cmake
rm cmake-test-https-download.cmake
popd
rm -rf CMake*
rm -rf /usr/src/CMake*

View File

@ -0,0 +1,49 @@
#!/bin/bash
set -ex
MY_DIR=$(dirname "${BASH_SOURCE[0]}")
source $MY_DIR/utils.sh
#
# Function 'do_curl_build' and 'build_curl'
# copied from https://github.com/pypa/manylinux/tree/master/docker/build_scripts
#
CURL_ROOT=curl_7.52.1
CURL_HASH=a8984e8b20880b621f61a62d95ff3c0763a3152093a9f9ce4287cfd614add6ae
# We had to switch to a debian mirror because we can't use TLS until we
# bootstrap it with this curl + openssl
CURL_DOWNLOAD_URL=http://deb.debian.org/debian/pool/main/c/curl
function do_curl_build {
# We do this shared to avoid obnoxious linker issues where git couldn't
# link properly. If anyone wants to make this build statically go for it.
LIBS=-ldl CFLAGS=-Wl,--exclude-libs,ALL ./configure --with-ssl --disable-static > /dev/null
make > /dev/null
make install > /dev/null
}
function build_curl {
local curl_fname=$1
check_var ${curl_fname}
local curl_sha256=$2
check_var ${curl_sha256}
check_var ${CURL_DOWNLOAD_URL}
# Can't use curl here because we don't have it yet...we are building it.
wget -q ${CURL_DOWNLOAD_URL}/${curl_fname}.orig.tar.gz
check_sha256sum ${curl_fname}.orig.tar.gz ${curl_sha256}
tar -zxf ${curl_fname}.orig.tar.gz
(cd curl-* && do_curl_build)
rm -rf curl_*
}
cd /usr/src
build_curl $CURL_ROOT $CURL_HASH
(cat /etc/ld.so.conf.d/usr-local.conf 2> /dev/null | grep -q "^/usr/local/lib$") ||
echo '/usr/local/lib' >> /etc/ld.so.conf.d/usr-local.conf
ldconfig

View File

@ -0,0 +1,44 @@
#!/bin/bash
set -ex
if ! command -v curl &> /dev/null; then
echo >&2 'error: "curl" not found!'
exit 1
fi
if ! command -v tar &> /dev/null; then
echo >&2 'error: "tar" not found!'
exit 1
fi
if [[ "${GIT_VERSION}" == "" ]]; then
echo >&2 'error: GIT_VERSION env. variable must be set to a non-empty value'
exit 1
fi
(cat /etc/ld.so.conf.d/usr-local.conf 2> /dev/null | grep -q "^/usr/local/lib$") ||
echo '/usr/local/lib' >> /etc/ld.so.conf.d/usr-local.conf
ldconfig
cd /usr/src
url="https://www.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz"
echo "Downloading $url"
curl -# -LO $url
tar xvzf git-${GIT_VERSION}.tar.gz
rm -f git-${GIT_VERSION}.tar.gz
pushd git-${GIT_VERSION}
./configure --prefix=/usr/local --with-curl
make
make install
popd
ldconfig
rm -rf git-${GIT_VERSION}
# turn the detached message off
git config --global advice.detachedHead false

View File

@ -0,0 +1,22 @@
#!/bin/bash
set -ex
OPENSSH_ROOT=V_7_6_P1
cd /usr/src
curl -LO https://github.com/openssh/openssh-portable/archive/${OPENSSH_ROOT}.tar.gz
tar -xvf ${OPENSSH_ROOT}.tar.gz
rm -f ${OPENSSH_ROOT}.tar.gz
OPENSSH_SRC_DIR=openssh-portable-${OPENSSH_ROOT}
cd ${OPENSSH_SRC_DIR}
autoreconf
./configure --prefix=/usr/local
make -j1 install
cd /usr/src
rm -rf ${OPENSSH_SRC_DIR}

View File

@ -0,0 +1,81 @@
#!/bin/bash
#
# Configure, build and install OpenSSL
#
# Usage:
#
# build-and-install-openssl.sh [-32]
#
# Options:
#
# -32 Build OpenSSL as a 32-bit library
#
# Notes:
#
# * build directory is /usr/src/openssl-$OPENSSL_VERSION
#
# * install directory is /usr
#
# * after installation, build directory and archive are removed
#
set -ex
set -o pipefail
WRAPPER=""
CONFIG_FLAG="-fPIC"
while [ $# -gt 0 ]; do
case "$1" in
-32)
WRAPPER="linux32"
CONFIG_FLAG="-m32"
;;
*)
echo "Usage: Usage: ${0##*/} [-32]"
exit 1
;;
esac
shift
done
MY_DIR=$(dirname "${BASH_SOURCE[0]}")
source $MY_DIR/utils.sh
#
# Function 'do_openssl_build' and 'build_openssl'
# copied from https://github.com/pypa/manylinux/tree/master/docker/build_scripts
#
OPENSSL_ROOT=openssl-1.0.2o
# Hash from https://www.openssl.org/source/openssl-1.0.2o.tar.gz.sha256
# Matches hash at https://github.com/Homebrew/homebrew-core/blob/1766321103d9780f6e38d3ac7681b8fa42cdca86/Formula/openssl.rb#L11
OPENSSL_HASH=ec3f5c9714ba0fd45cb4e087301eb1336c317e0d20b575a125050470e8089e4d
# XXX: the official https server at www.openssl.org cannot be reached
# with the old versions of openssl and curl in Centos 5.11 hence the fallback
# to the ftp mirror:
OPENSSL_DOWNLOAD_URL=ftp://ftp.openssl.org/source
function do_openssl_build {
${WRAPPER} ./config no-ssl2 no-shared -fPIC $CONFIG_FLAG --prefix=/usr/local/ssl > /dev/null
${WRAPPER} make > /dev/null
${WRAPPER} make install_sw > /dev/null
}
function build_openssl {
local openssl_fname=$1
check_var ${openssl_fname}
local openssl_sha256=$2
check_var ${openssl_sha256}
check_var ${OPENSSL_DOWNLOAD_URL}
# Can't use curl here because we don't have it yet
curl -# -LO ${OPENSSL_DOWNLOAD_URL}/${openssl_fname}.tar.gz
check_sha256sum ${openssl_fname}.tar.gz ${openssl_sha256}
tar -xzf ${openssl_fname}.tar.gz
(cd ${openssl_fname} && do_openssl_build)
rm -rf ${openssl_fname} ${openssl_fname}.tar.gz /usr/ssl/man
}
cd /usr/src
build_openssl $OPENSSL_ROOT $OPENSSL_HASH

View File

@ -9,7 +9,9 @@ if [[ $# == 0 ]]; then
if [[ -n $DEFAULT_DOCKCROSS_IMAGE ]]; then
head -n 2 /dockcross/dockcross
echo "DEFAULT_DOCKCROSS_IMAGE=$DEFAULT_DOCKCROSS_IMAGE"
tail -n +4 /dockcross/dockcross
tail -n +4 /dockcross/dockcross |
sed -e "s@dockcross\/linux\-armv7@${DEFAULT_DOCKCROSS_IMAGE}@g" |
sed -e "s@dockcross\-linux\-armv7@${DEFAULT_DOCKCROSS_IMAGE//[\/:]/-}@g"
else
cat /dockcross/dockcross
fi

View File

@ -0,0 +1,35 @@
#!/bin/bash
set -ex
if ! command -v curl &> /dev/null; then
echo >&2 'error: "curl" not found!'
exit 1
fi
if ! command -v tar &> /dev/null; then
echo >&2 'error: "tar" not found!'
exit 1
fi
if [[ "${CMAKE_VERSION}" == "" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1
fi
cd /tmp
filename=cmake-${CMAKE_VERSION}-Centos5-x86_64
url=https://github.com/dockbuild/CMake/releases/download/v${CMAKE_VERSION}/${filename}.tar.gz
echo "Downloading $url"
curl -# -LO $url
tar -xzvf ${filename}.tar.gz
rm -f ${filename}.tar.gz
cd ${filename}
rm -rf doc man
rm -rf bin/cmake-gui
find . -type f -exec install -D "{}" "/usr/{}" \;

View File

@ -58,7 +58,7 @@ cd "${CTNG}"
# Download and install the "crosstool-ng" source.
REV=1.23.0
wget --progress=bar:force \
curl -# -LO \
"https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-${REV}.tar.gz"
tar -xf "crosstool-ng-${REV}.tar.gz"
cd "crosstool-ng-crosstool-ng-${REV}"

View File

@ -27,7 +27,7 @@ done
# Download
REV=v1.7.2
wget --progress=bar:force https://github.com/ninja-build/ninja/archive/$REV.tar.gz -O ninja.tar.gz
curl -# -o ninja.tar.gz -LO https://github.com/ninja-build/ninja/archive/$REV.tar.gz
mkdir ninja
tar -xzvf ./ninja.tar.gz --strip-components=1 -C ./ninja

View File

@ -1,83 +0,0 @@
#!/bin/bash
#
# Configure, build and install OpenSSL
#
# Usage:
#
# install-openssl.sh [-32]
#
# Options:
#
# -32 Build OpenSSL as a 32-bit library
#
# Notes:
#
# * build directory is /usr/src/openssl-$OPENSSL_VERSION
#
# * install directory is /usr
#
# * after installation, build directory and archive are removed
#
set -e
set -o pipefail
WRAPPER=""
CONFIG_FLAG="-fPIC"
SUFFIX=64
while [ $# -gt 0 ]; do
case "$1" in
-32)
WRAPPER="linux32"
CONFIG_FLAG="-m32"
SUFFIX=32
;;
*)
echo "Usage: Usage: ${0##*/} [-32]"
exit 1
;;
esac
shift
done
OPENSSL_VERSION=1.0.2j
OPENSSL_SHA256=e7aff292be21c259c6af26469c7a9b3ba26e9abaaffd325e3dccc9785256c431
cd /usr/src
# Download
if [ ! -f ./openssl-$OPENSSL_VERSION.tar.gz ]; then
wget --progress=bar:force https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz
else
rm -rf ./openssl-$OPENSSL_VERSION
fi
# Verify
sha256_openssl=`sha256sum ./openssl-$OPENSSL_VERSION.tar.gz | awk '{ print $1 }'`
if [ "$sha256_openssl" != "$OPENSSL_SHA256" ]
then
echo "SHA256 mismatch. Problem downloading OpenSSL."
echo " current [$sha256_openssl]"
echo " expected[$OPENSSL_SHA256]"
exit 1
fi
# Extract
tar -xzvf openssl-$OPENSSL_VERSION.tar.gz
pushd openssl-$OPENSSL_VERSION
# Configure
${WRAPPER} ./config --prefix=/usr $CONFIG_FLAG
# Build & Install
${WRAPPER} make install
popd
# Clean
rm -rf ./openssl-$OPENSSL_VERSION*
rm -rf /usr/ssl/man

24
imagefiles/utils.sh Normal file
View File

@ -0,0 +1,24 @@
#!/bin/bash
set -e
# Copied from https://github.com/pypa/manylinux/blob/master/docker/build_scripts/build_utils.sh
function check_var {
if [ -z "$1" ]; then
echo "required variable not defined"
exit 1
fi
}
# Copied from https://github.com/pypa/manylinux/blob/master/docker/build_scripts/build_utils.sh
function check_sha256sum {
local fname=$1
check_var ${fname}
local sha256=$2
check_var ${sha256}
echo "${sha256} ${fname}" > ${fname}.sha256
sha256sum -c ${fname}.sha256
rm -f ${fname}.sha256
}

View File

@ -34,11 +34,6 @@ ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-g++
COPY imagefiles/install-openssl.sh /dockcross/
RUN \
/dockcross/install-openssl.sh -32 && \
rm /dockcross/install-openssl.sh
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/linux-x86
# Note: Toolchain file support is currently in debian Experimental:

View File

@ -3,10 +3,10 @@ MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux-x64
#include "common.docker"
#include "common.manylinux"
#include "common.docker"
ENV CROSS_TRIPLE x86_64-linux-gnu
ENV CROSS_ROOT /opt/rh/devtoolset-2/root/usr/bin
ENV AS=${CROSS_ROOT}/as \

View File

@ -3,10 +3,10 @@ MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux-x86
#include "common.docker"
#include "common.manylinux"
#include "common.docker"
ENV CROSS_TRIPLE i686-linux-gnu
ENV CROSS_ROOT /opt/rh/devtoolset-2/root/usr/bin
ENV AS=${CROSS_ROOT}/as \