mirror of
https://github.com/bensuperpc/dockcross.git
synced 2024-11-10 05:07:26 +01:00
commit
e2c5545bf6
@ -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
|
||||
|
2
LICENSE
2
LICENSE
@ -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
|
||||
|
2
Makefile
2
Makefile
@ -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
|
||||
|
135
README.rst
135
README.rst
@ -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:
|
||||
@ -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.
|
||||
|
||||
|
||||
---
|
||||
|
@ -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 && \
|
||||
|
@ -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
52
android-arm64/Dockerfile
Normal 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"
|
19
android-arm64/Toolchain.cmake
Normal file
19
android-arm64/Toolchain.cmake
Normal 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)
|
||||
|
@ -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 \
|
||||
|
@ -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 \
|
||||
|
@ -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"]
|
||||
|
@ -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 \
|
||||
|
@ -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*
|
49
imagefiles/build-and-install-curl.sh
Executable file
49
imagefiles/build-and-install-curl.sh
Executable 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
|
||||
|
44
imagefiles/build-and-install-git.sh
Executable file
44
imagefiles/build-and-install-git.sh
Executable 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
|
22
imagefiles/build-and-install-openssh.sh
Executable file
22
imagefiles/build-and-install-openssh.sh
Executable 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}
|
81
imagefiles/build-and-install-openssl.sh
Executable file
81
imagefiles/build-and-install-openssl.sh
Executable 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
|
@ -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
|
||||
|
35
imagefiles/install-cmake-binary.sh
Executable file
35
imagefiles/install-cmake-binary.sh
Executable 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/{}" \;
|
@ -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}"
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
24
imagefiles/utils.sh
Normal 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
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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 \
|
||||
|
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user