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: - save_cache:
key: android-arm-assets-{{ .Revision }} key: android-arm-assets-{{ .Revision }}
paths: ~/docker/android-arm.tar 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: browser-asmjs:
<<: *build-settings <<: *build-settings
steps: steps:
@ -68,17 +87,18 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
key: base-assets-{{ .Revision }} key: base-assets-{{ .Revision }}
- run: # Image build currently broken. See #209
name: linux-arm64 build #- run:
no_output_timeout: 1.5h #name: linux-arm64 build
command: | #no_output_timeout: 1.5h
docker load -i ~/docker/base.tar #command: |
make linux-arm64 #docker load -i ~/docker/base.tar
docker save -o ~/docker/linux-arm64.tar dockcross/linux-arm64:latest #make linux-arm64
- run: #docker save -o ~/docker/linux-arm64.tar dockcross/linux-arm64:latest
name: linux-arm64 test #- run:
command: | #name: linux-arm64 test
make linux-arm64.test #command: |
#make linux-arm64.test
- save_cache: - save_cache:
key: linux-arm64-assets-{{ .Revision }} key: linux-arm64-assets-{{ .Revision }}
paths: ~/docker/linux-arm64.tar paths: ~/docker/linux-arm64.tar
@ -87,17 +107,18 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
key: base-assets-{{ .Revision }} key: base-assets-{{ .Revision }}
- run: # Image build currently broken. See #209
name: linux-armv5 build #- run:
no_output_timeout: 1.5h #name: linux-armv5 build
command: | #no_output_timeout: 1.5h
docker load -i ~/docker/base.tar #command: |
make linux-armv5 #docker load -i ~/docker/base.tar
docker save -o ~/docker/linux-armv5.tar dockcross/linux-armv5:latest #make linux-armv5
- run: #docker save -o ~/docker/linux-armv5.tar dockcross/linux-armv5:latest
name: linux-armv5 test #- run:
command: | #name: linux-armv5 test
make linux-armv5.test #command: |
#make linux-armv5.test
- save_cache: - save_cache:
key: linux-armv5-assets-{{ .Revision }} key: linux-armv5-assets-{{ .Revision }}
paths: ~/docker/linux-armv5.tar paths: ~/docker/linux-armv5.tar
@ -125,17 +146,18 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
key: base-assets-{{ .Revision }} key: base-assets-{{ .Revision }}
- run: # Image build currently broken. See #209
name: linux-armv7 build #- run:
no_output_timeout: 1.5h #name: linux-armv7 build
command: | #no_output_timeout: 1.5h
docker load -i ~/docker/base.tar #command: |
make linux-armv7 #docker load -i ~/docker/base.tar
docker save -o ~/docker/linux-armv7.tar dockcross/linux-armv7:latest #make linux-armv7
- run: #docker save -o ~/docker/linux-armv7.tar dockcross/linux-armv7:latest
name: linux-armv7 test #- run:
command: | #name: linux-armv7 test
make linux-armv7.test #command: |
#make linux-armv7.test
- save_cache: - save_cache:
key: linux-armv7-assets-{{ .Revision }} key: linux-armv7-assets-{{ .Revision }}
paths: ~/docker/linux-armv7.tar paths: ~/docker/linux-armv7.tar
@ -144,17 +166,18 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
key: base-assets-{{ .Revision }} key: base-assets-{{ .Revision }}
- run: # Image build currently broken. See #209
name: linux-mipsel build #- run:
no_output_timeout: 1.5h #name: linux-mipsel build
command: | #no_output_timeout: 1.5h
docker load -i ~/docker/base.tar #command: |
make linux-mipsel #docker load -i ~/docker/base.tar
docker save -o ~/docker/linux-mipsel.tar dockcross/linux-mipsel:latest #make linux-mipsel
- run: #docker save -o ~/docker/linux-mipsel.tar dockcross/linux-mipsel:latest
name: linux-mipsel test #- run:
command: | #name: linux-mipsel test
make linux-mipsel.test #command: |
#make linux-mipsel.test
- save_cache: - save_cache:
key: linux-mipsel-assets-{{ .Revision }} key: linux-mipsel-assets-{{ .Revision }}
paths: ~/docker/linux-mipsel.tar paths: ~/docker/linux-mipsel.tar
@ -182,17 +205,18 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
key: base-assets-{{ .Revision }} key: base-assets-{{ .Revision }}
- run: # Image build currently broken. See #209
name: linux-ppc64le build #- run:
no_output_timeout: 1.5h #name: linux-ppc64le build
command: | #no_output_timeout: 1.5h
docker load -i ~/docker/base.tar #command: |
make linux-ppc64le #docker load -i ~/docker/base.tar
docker save -o ~/docker/linux-ppc64le.tar dockcross/linux-ppc64le:latest #make linux-ppc64le
- run: #docker save -o ~/docker/linux-ppc64le.tar dockcross/linux-ppc64le:latest
name: linux-ppc64le test #- run:
command: | #name: linux-ppc64le test
make linux-ppc64le.test #command: |
#make linux-ppc64le.test
- save_cache: - save_cache:
key: linux-ppc64le-assets-{{ .Revision }} key: linux-ppc64le-assets-{{ .Revision }}
paths: ~/docker/linux-ppc64le.tar paths: ~/docker/linux-ppc64le.tar
@ -333,6 +357,16 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/android-arm:latest docker push dockcross/android-arm:latest
fi 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: - restore_cache:
key: browser-asmjs-assets-{{ .Revision }} key: browser-asmjs-assets-{{ .Revision }}
- deploy: - deploy:
@ -343,26 +377,28 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/browser-asmjs:latest docker push dockcross/browser-asmjs:latest
fi fi
- restore_cache: # Image build currently broken. See #209
key: linux-arm64-assets-{{ .Revision }} #- restore_cache:
- deploy: #key: linux-arm64-assets-{{ .Revision }}
name: Deploy linux-arm64 #- deploy:
command: | #name: Deploy linux-arm64
docker load -i ~/docker/linux-arm64.tar #command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then #docker load -i ~/docker/linux-arm64.tar
docker login -u $DOCKER_USER -p $DOCKER_PASS #if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker push dockcross/linux-arm64:latest #docker login -u $DOCKER_USER -p $DOCKER_PASS
fi #docker push dockcross/linux-arm64:latest
- restore_cache: #fi
key: linux-armv5-assets-{{ .Revision }} # Image build currently broken. See #209
- deploy: #- restore_cache:
name: Deploy linux-armv5 #key: linux-armv5-assets-{{ .Revision }}
command: | #- deploy:
docker load -i ~/docker/linux-armv5.tar #name: Deploy linux-armv5
if [ "${CIRCLE_BRANCH}" == "master" ]; then #command: |
docker login -u $DOCKER_USER -p $DOCKER_PASS #docker load -i ~/docker/linux-armv5.tar
docker push dockcross/linux-armv5:latest #if [ "${CIRCLE_BRANCH}" == "master" ]; then
fi #docker login -u $DOCKER_USER -p $DOCKER_PASS
#docker push dockcross/linux-armv5:latest
#fi
- restore_cache: - restore_cache:
key: linux-armv6-assets-{{ .Revision }} key: linux-armv6-assets-{{ .Revision }}
- deploy: - deploy:
@ -373,26 +409,28 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-armv6:latest docker push dockcross/linux-armv6:latest
fi fi
- restore_cache: # Image build currently broken. See #209
key: linux-armv7-assets-{{ .Revision }} #- restore_cache:
- deploy: #key: linux-armv7-assets-{{ .Revision }}
name: Deploy linux-armv7 #- deploy:
command: | #name: Deploy linux-armv7
docker load -i ~/docker/linux-armv7.tar #command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then #docker load -i ~/docker/linux-armv7.tar
docker login -u $DOCKER_USER -p $DOCKER_PASS #if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker push dockcross/linux-armv7:latest #docker login -u $DOCKER_USER -p $DOCKER_PASS
fi #docker push dockcross/linux-armv7:latest
- restore_cache: #fi
key: linux-mipsel-assets-{{ .Revision }} # Image build currently broken. See #209
- deploy: #- restore_cache:
name: Deploy linux-mipsel #key: linux-mipsel-assets-{{ .Revision }}
command: | #- deploy:
docker load -i ~/docker/linux-mipsel.tar #name: Deploy linux-mipsel
if [ "${CIRCLE_BRANCH}" == "master" ]; then #command: |
docker login -u $DOCKER_USER -p $DOCKER_PASS #docker load -i ~/docker/linux-mipsel.tar
docker push dockcross/linux-mipsel:latest #if [ "${CIRCLE_BRANCH}" == "master" ]; then
fi #docker login -u $DOCKER_USER -p $DOCKER_PASS
#docker push dockcross/linux-mipsel:latest
#fi
- restore_cache: - restore_cache:
key: linux-s390x-assets-{{ .Revision }} key: linux-s390x-assets-{{ .Revision }}
- deploy: - deploy:
@ -403,16 +441,17 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push dockcross/linux-s390x:latest docker push dockcross/linux-s390x:latest
fi fi
- restore_cache: # Image build currently broken. See #209
key: linux-ppc64le-assets-{{ .Revision }} #- restore_cache:
- deploy: #key: linux-ppc64le-assets-{{ .Revision }}
name: Deploy linux-ppc64le #- deploy:
command: | #name: Deploy linux-ppc64le
docker load -i ~/docker/linux-ppc64le.tar #command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then #docker load -i ~/docker/linux-ppc64le.tar
docker login -u $DOCKER_USER -p $DOCKER_PASS #if [ "${CIRCLE_BRANCH}" == "master" ]; then
docker push dockcross/linux-ppc64le:latest #docker login -u $DOCKER_USER -p $DOCKER_PASS
fi #docker push dockcross/linux-ppc64le:latest
#fi
- restore_cache: - restore_cache:
key: linux-x64-assets-{{ .Revision }} key: linux-x64-assets-{{ .Revision }}
- deploy: - deploy:
@ -482,30 +521,38 @@ workflows:
- android-arm: - android-arm:
requires: requires:
- base - base
- android-arm64:
requires:
- base
- browser-asmjs: - browser-asmjs:
requires: requires:
- base - base
- linux-arm64: # Image build currently broken. See #209
requires: #- linux-arm64:
- base #requires:
- linux-armv5: #- base
requires: # Image build currently broken. See #209
- base #- linux-armv5:
#requires:
#- base
- linux-armv6: - linux-armv6:
requires: requires:
- base - base
- linux-armv7: # Image build currently broken. See #209
requires: #- linux-armv7:
- base #requires:
- linux-mipsel: #- base
requires: # Image build currently broken. See #209
- base #- linux-mipsel:
#requires:
#- base
- linux-s390x: - linux-s390x:
requires: requires:
- base - base
- linux-ppc64le: # Image build currently broken. See #209
requires: #- linux-ppc64le:
- base #requires:
#- base
- linux-x64: - linux-x64:
requires: requires:
- base - base
@ -528,14 +575,18 @@ workflows:
requires: requires:
- base - base
- android-arm - android-arm
- android-arm64
- browser-asmjs - browser-asmjs
- linux-arm64 # Image build currently broken. See #209
- linux-armv5 #- linux-arm64
#- linux-armv5
- linux-armv6 - linux-armv6
- linux-armv7 # Image build currently broken. See #209
- linux-mipsel #- linux-armv7
#- linux-mipsel
- linux-s390x - linux-s390x
- linux-ppc64le # Image build currently broken. See #209
#- linux-ppc64le
- linux-x64 - linux-x64
- linux-x86 - linux-x86
- manylinux-x64 - 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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -13,7 +13,7 @@ ORG = dockcross
BIN = ./bin BIN = ./bin
# These images are built using the "build implicit rule" # These images are built using the "build implicit rule"
STANDARD_IMAGES = linux-s390x android-arm 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. # Generated Dockerfiles.
GEN_IMAGES = linux-s390x linux-mips manylinux-x86 manylinux-x64 browser-asmjs 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. * Pre-built and configured toolchains for cross compiling.
* Most images also contain an emulator for the target system. * 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). * 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. * 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. * Recent `CMake <https://cmake.org>`_ and ninja are precompiled.
@ -20,6 +21,61 @@ Features
* Current directory is mounted as the container's workdir, ``/work``. * 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/>`_. * 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 Cross compilers
--------------- ---------------
@ -40,6 +96,13 @@ dockcross/android-arm
architecture. 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 .. |browser-asmjs-images| image:: https://images.microbadger.com/badges/image/dockcross/browser-asmjs.svg
:target: https://microbadger.com/images/dockcross/browser-asmjs :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. |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 - `dockcross: C++ Write Once, Run Anywhere
to execute build commands on source code existing on the local host filesystem. This <https://nbviewer.jupyter.org/format/slides/github/dockcross/cxx-write-once-run-anywhere/blob/master/dockcross_CXX_Write_Once_Run_Anywhere.ipynb#/>`_
script is bundled with the image. - `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>`_
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.
Built-in update commands Built-in update commands
@ -269,23 +301,6 @@ For example, commands like ``git config --global advice.detachedHead false`` can
be added to this script. 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 How to extend Dockcross images
------------------------------ ------------------------------
In order to extend Dockcross images with your own commands, one must: 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:: An example Dockerfile would be::
FROM dockcross/linux-armv7 FROM dockcross/linux-armv7
ENV DEFAULT_DOCKCROSS_IMAGE my_cool_image ENV DEFAULT_DOCKCROSS_IMAGE my_cool_image
RUN apt-get install nano 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. ./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 The key difference is that `dockbuild <https://github.com/dockbuild/dockbuild#readme>`_
<https://nbviewer.jupyter.org/format/slides/github/dockcross/cxx-write-once-run-anywhere/blob/master/dockcross_CXX_Write_Once_Run_Anywhere.ipynb#/>`_ images use the same method to conveniently isolate the build environment as
- `Cross-compiling binaries for multiple architectures with Docker `dockcross <https://github.com/dockcross/dockcross#readme>`_ but they do **NOT** provide
<http://blogs.nopcode.org/brainstorm/2016/07/26/cross-compiling-with-docker>`_ a toolchain file.
--- ---

View File

@ -11,12 +11,13 @@ ENV CROSS_TRIPLE=arm-linux-androideabi
ENV CROSS_ROOT=/usr/${CROSS_TRIPLE} ENV CROSS_ROOT=/usr/${CROSS_TRIPLE}
ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \ ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
AR=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ar \ 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 \ 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 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 && \ RUN mkdir -p /build && \
cd /build && \ cd /build && \
curl -O https://dl.google.com/android/repository/android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip && \ 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} && \ cd android-ndk-r${ANDROID_NDK_REVISION} && \
./build/tools/make_standalone_toolchain.py \ ./build/tools/make_standalone_toolchain.py \
--arch arm \ --arch arm \
--api 16 \ --api ${ANDROID_NDK_API} \
--stl=libc++ \
--install-dir=${CROSS_ROOT} && \ --install-dir=${CROSS_ROOT} && \
cd / && \ cd / && \
rm -rf /build && \ 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_MODE 1)
set(CMAKE_ANDROID_ARM_NEON 1) set(CMAKE_ANDROID_ARM_NEON 1)
set(CMAKE_C_COMPILER /usr/${cross_triple}/bin/${cross_triple}-gcc) set(CMAKE_C_COMPILER /usr/${cross_triple}/bin/${cross_triple}-clang)
set(CMAKE_CXX_COMPILER /usr/${cross_triple}/bin/${cross_triple}-g++) set(CMAKE_CXX_COMPILER /usr/${cross_triple}/bin/${cross_triple}-clang++)
set(CMAKE_FIND_ROOT_PATH /usr/${cross_triple}) set(CMAKE_FIND_ROOT_PATH /usr/${cross_triple})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 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" MAINTAINER Matt McCormick "matt.mccormick@kitware.com"
# Revert back to "/bin/sh" as default shell # 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" #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 PATH /emsdk_portable:/emsdk_portable/llvm/clang/bin/:/emsdk_portable/sdk/:${PATH}
ENV CC=/emsdk_portable/sdk/emcc \ 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 \ ca-certificates \
curl \ curl \
file \ file \
git \ gettext \
gzip \ gzip \
zip \ zip \
make \ make \
@ -31,15 +31,16 @@ RUN apt-get update --yes && apt-get install --no-install-recommends --yes \
pax \ pax \
vim \ vim \
wget \ wget \
xz-utils && \ xz-utils \
zlib1g-dev && \
apt-get clean --yes apt-get clean --yes
ENV GOSU_VERSION 1.10 ENV GOSU_VERSION 1.10
RUN set -x \ 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 }')" \ && 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" \ && curl -# -o /usr/local/bin/gosu -LO "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.asc -LO "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
&& export GNUPGHOME="$(mktemp -d)" \ && export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ && 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 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 \ RUN \
if [ "$DEFAULT_DOCKCROSS_IMAGE" = "dockcross/manylinux-x86" ]; then \ if [ "$DEFAULT_DOCKCROSS_IMAGE" = "dockcross/manylinux-x86" ]; then \
/dockcross/install-openssl.sh -32 && \ /dockcross/build-and-install-openssl.sh -32 && \
/dockcross/install-cmake.sh -32 || exit 1; \ /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 \ else \
/dockcross/install-openssl.sh && \ /dockcross/build-and-install-openssl.sh && \
/dockcross/install-cmake.sh || exit 1; \ /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; \ 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/cmake.sh /usr/local/bin/cmake
COPY imagefiles/ccmake.sh /usr/local/bin/ccmake COPY imagefiles/ccmake.sh /usr/local/bin/ccmake
@ -31,13 +48,19 @@ RUN \
RUN if [ -e /opt/python/cp35-cp35m/bin/python ]; then \ 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 ; \ : nothing to do here since it is updated by manylinux-common/install-python-packages.sh ; \
else \ else \
wget https://bootstrap.pypa.io/get-pip.py && \ curl -# -LO https://bootstrap.pypa.io/get-pip.py && \
python get-pip.py --ignore-installed && \ python get-pip.py --ignore-installed && \
rm get-pip.py || exit 1; \ rm get-pip.py || exit 1; \
fi fi
RUN $([ -e /opt/python/cp35-cp35m/bin/python ] && echo "/opt/python/cp35-cp35m/bin/python" || echo "python") -m pip install --ignore-installed conan 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 RUN echo "root:root" | chpasswd
WORKDIR /work WORKDIR /work
ENTRYPOINT ["/dockcross/entrypoint.sh"] ENTRYPOINT ["/dockcross/entrypoint.sh"]

View File

@ -1,10 +1,11 @@
ENV GOSU_VERSION 1.10 ENV GOSU_VERSION 1.10
RUN set -x \ RUN set -x \
&& yum -y install epel-release \ && 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) \ && 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" \ && curl -o /usr/bin/gosu -LO "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 /tmp/gosu.asc -LO "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
&& export GNUPGHOME="$(mktemp -d)" \ && export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /tmp/gosu.asc /usr/bin/gosu \ && gpg --batch --verify /tmp/gosu.asc /usr/bin/gosu \

View File

@ -1,17 +1,4 @@
#!/bin/bash #!/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 # * build directory is /usr/src/CMake
# #
@ -19,20 +6,14 @@
# #
# * after installation, archive, source and build directories are removed # * after installation, archive, source and build directories are removed
# #
set -ex
set -e
set -o pipefail
WRAPPER="" WRAPPER=""
CONFIG_FLAG=""
SUFFIX=64
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
-32) -32)
WRAPPER="linux32" WRAPPER="linux32"
CONFIG_FLAG="-m32"
SUFFIX=32
;; ;;
*) *)
echo "Usage: Usage: ${0##*/} [-32]" echo "Usage: Usage: ${0##*/} [-32]"
@ -42,27 +23,43 @@ while [ $# -gt 0 ]; do
shift shift
done 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 cd /usr/src
# Download git clone git://cmake.org/cmake.git CMake
CMAKE_REV=v3.10.1
wget --progress=bar:force https://github.com/kitware/cmake/archive/$CMAKE_REV.tar.gz -O CMake.tar.gz (cd CMake && git checkout v$CMAKE_VERSION)
mkdir CMake
tar -xzvf ./CMake.tar.gz --strip-components=1 -C ./CMake
mkdir /usr/src/CMake-build 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 \ ${WRAPPER} /usr/src/CMake/bootstrap \
--parallel=$NUM_PROCESSOR \ --parallel=$(grep -c processor /proc/cpuinfo)
--prefix=/usr ${WRAPPER} make -j$(grep -c processor /proc/cpuinfo)
# Build and Install mkdir /usr/src/CMake-ssl-build
${WRAPPER} make install -j$NUM_PROCESSOR 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 # Test
ctest -R CMake.FileDownload ctest -R CMake.FileDownload
@ -88,8 +85,5 @@ EOF
# Execute test script # Execute test script
cmake -P cmake-test-https-download.cmake cmake -P cmake-test-https-download.cmake
rm cmake-test-https-download.cmake
popd rm -rf /usr/src/CMake*
rm -rf 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 if [[ -n $DEFAULT_DOCKCROSS_IMAGE ]]; then
head -n 2 /dockcross/dockcross head -n 2 /dockcross/dockcross
echo "DEFAULT_DOCKCROSS_IMAGE=$DEFAULT_DOCKCROSS_IMAGE" 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 else
cat /dockcross/dockcross cat /dockcross/dockcross
fi 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. # Download and install the "crosstool-ng" source.
REV=1.23.0 REV=1.23.0
wget --progress=bar:force \ curl -# -LO \
"https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-${REV}.tar.gz" "https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-${REV}.tar.gz"
tar -xf "crosstool-ng-${REV}.tar.gz" tar -xf "crosstool-ng-${REV}.tar.gz"
cd "crosstool-ng-crosstool-ng-${REV}" cd "crosstool-ng-crosstool-ng-${REV}"

View File

@ -27,7 +27,7 @@ done
# Download # Download
REV=v1.7.2 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 mkdir ninja
tar -xzvf ./ninja.tar.gz --strip-components=1 -C ./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++ 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 ENV DEFAULT_DOCKCROSS_IMAGE dockcross/linux-x86
# Note: Toolchain file support is currently in debian Experimental: # 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 ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux-x64
#include "common.docker"
#include "common.manylinux" #include "common.manylinux"
#include "common.docker"
ENV CROSS_TRIPLE x86_64-linux-gnu ENV CROSS_TRIPLE x86_64-linux-gnu
ENV CROSS_ROOT /opt/rh/devtoolset-2/root/usr/bin ENV CROSS_ROOT /opt/rh/devtoolset-2/root/usr/bin
ENV AS=${CROSS_ROOT}/as \ 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 ENV DEFAULT_DOCKCROSS_IMAGE dockcross/manylinux-x86
#include "common.docker"
#include "common.manylinux" #include "common.manylinux"
#include "common.docker"
ENV CROSS_TRIPLE i686-linux-gnu ENV CROSS_TRIPLE i686-linux-gnu
ENV CROSS_ROOT /opt/rh/devtoolset-2/root/usr/bin ENV CROSS_ROOT /opt/rh/devtoolset-2/root/usr/bin
ENV AS=${CROSS_ROOT}/as \ ENV AS=${CROSS_ROOT}/as \