diff --git a/.circleci/config.yml b/.circleci/config.yml index 34e74439..cb27b5ba 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -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 @@ -334,35 +358,47 @@ jobs: docker push dockcross/android-arm:latest fi - restore_cache: - key: browser-asmjs-assets-{{ .Revision }} - - deploy: - name: Deploy browser-asmjs - command: | - docker load -i ~/docker/browser-asmjs.tar - if [ "${CIRCLE_BRANCH}" == "master" ]; then - docker login -u $DOCKER_USER -p $DOCKER_PASS - docker push dockcross/browser-asmjs:latest - fi - - restore_cache: - key: linux-arm64-assets-{{ .Revision }} + key: android-arm64-assets-{{ .Revision }} - deploy: - name: Deploy linux-arm64 + name: Deploy android-arm64 command: | - docker load -i ~/docker/linux-arm64.tar + docker load -i ~/docker/android-arm64.tar if [ "${CIRCLE_BRANCH}" == "master" ]; then docker login -u $DOCKER_USER -p $DOCKER_PASS - docker push dockcross/linux-arm64:latest + docker push dockcross/android-arm64:latest fi - restore_cache: - key: linux-armv5-assets-{{ .Revision }} + key: browser-asmjs-assets-{{ .Revision }} - deploy: - name: Deploy linux-armv5 + name: Deploy browser-asmjs command: | - docker load -i ~/docker/linux-armv5.tar + docker load -i ~/docker/browser-asmjs.tar if [ "${CIRCLE_BRANCH}" == "master" ]; then docker login -u $DOCKER_USER -p $DOCKER_PASS - docker push dockcross/linux-armv5:latest + docker push dockcross/browser-asmjs: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 - - browser-asmjs: - requires: - - base - - linux-arm64: + - android-arm64: requires: - base - - linux-armv5: + - browser-asmjs: 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 diff --git a/LICENSE b/LICENSE index b9b9447c..6f3c9978 100644 --- a/LICENSE +++ b/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 diff --git a/Makefile b/Makefile index 765d5d87..b2c7eff7 100644 --- a/Makefile +++ b/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 diff --git a/README.rst b/README.rst index 38e527e4..025a64d3 100644 --- a/README.rst +++ b/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 `_ 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 `_ and `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 ------------- - -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...] +Articles +-------- -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 + `_ +- `Cross-compiling binaries for multiple architectures with Docker + `_ Built-in update commands @@ -269,23 +301,6 @@ For example, commands like ``git config --global advice.detachedHead false`` can be added to this script. -Examples --------- - -1. ``dockcross make``: Build the *Makefile* in the current directory. -2. ``dockcross cmake -Bbuild -H. -GNinja``: Run CMake with a build directory - ``./build`` for a *CMakeLists.txt* file in the current directory and generate - ``ninja`` build configuration files. -3. ``dockcross ninja -Cbuild``: Run ninja in the ``./build`` directory. -4. ``dockcross bash -c '$CC test/C/hello.c -o hello'``: Build the *hello.c* file - with the compiler identified with the ``CC`` environmental variable in the - build environment. -5. ``dockcross bash``: Run an interactive shell in the build environment. - -Note that commands are executed verbatim. If any shell processing for -environment variable expansion or redirection is required, please use -`bash -c 'command args...'`. - How to extend Dockcross images ------------------------------ In order to extend Dockcross images with your own commands, one must: @@ -296,7 +311,7 @@ In order to extend Dockcross images with your own commands, one must: An example Dockerfile would be:: FROM dockcross/linux-armv7 - + ENV DEFAULT_DOCKCROSS_IMAGE my_cool_image RUN apt-get install nano @@ -308,13 +323,13 @@ And then in the shell:: ./linux-armv7 bash # Runs the helper script with the argument "bash", which starts an interactive container using your extended image. -Articles --------- +What is the difference between `dockcross` and `dockbuild` ? +------------------------------------------------------------ -- `dockcross: C++ Write Once, Run Anywhere - `_ -- `Cross-compiling binaries for multiple architectures with Docker - `_ +The key difference is that `dockbuild `_ +images use the same method to conveniently isolate the build environment as +`dockcross `_ but they do **NOT** provide +a toolchain file. --- diff --git a/android-arm/Dockerfile b/android-arm/Dockerfile index 8c7791af..9a28c15b 100644 --- a/android-arm/Dockerfile +++ b/android-arm/Dockerfile @@ -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 && \ diff --git a/android-arm/Toolchain.cmake b/android-arm/Toolchain.cmake index 713fffa8..1399fee4 100644 --- a/android-arm/Toolchain.cmake +++ b/android-arm/Toolchain.cmake @@ -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) diff --git a/android-arm64/Dockerfile b/android-arm64/Dockerfile new file mode 100644 index 00000000..dda6733b --- /dev/null +++ b/android-arm64/Dockerfile @@ -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" diff --git a/android-arm64/Toolchain.cmake b/android-arm64/Toolchain.cmake new file mode 100644 index 00000000..86452751 --- /dev/null +++ b/android-arm64/Toolchain.cmake @@ -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) + diff --git a/browser-asmjs/Dockerfile.in b/browser-asmjs/Dockerfile.in index adb7ac1d..acc9ec71 100644 --- a/browser-asmjs/Dockerfile.in +++ b/browser-asmjs/Dockerfile.in @@ -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 \ diff --git a/common.debian b/common.debian index 7a607834..f258190e 100644 --- a/common.debian +++ b/common.debian @@ -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 \ diff --git a/common.docker b/common.docker index 10c8d1e8..e01c9a18 100644 --- a/common.docker +++ b/common.docker @@ -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"] diff --git a/common.manylinux b/common.manylinux index 0d1a60a7..3f9a83d0 100644 --- a/common.manylinux +++ b/common.manylinux @@ -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 \ diff --git a/imagefiles/install-cmake.sh b/imagefiles/build-and-install-cmake.sh similarity index 50% rename from imagefiles/install-cmake.sh rename to imagefiles/build-and-install-cmake.sh index c0891cd7..7a6fd070 100755 --- a/imagefiles/install-cmake.sh +++ b/imagefiles/build-and-install-cmake.sh @@ -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 -cd /usr/src +if ! command -v git &> /dev/null; then + echo >&2 'error: "git" not found!' + exit 1 +fi -# 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 +if [[ "${CMAKE_VERSION}" == "" ]]; then + echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value' + exit 1 +fi -mkdir /usr/src/CMake-build +cd /usr/src -pushd /usr/src/CMake-build +git clone git://cmake.org/cmake.git CMake -NUM_PROCESSOR=$(grep -c processor /proc/cpuinfo) +(cd CMake && git checkout v$CMAKE_VERSION) -# Configure boostrap -${WRAPPER} /usr/src/CMake/bootstrap \ - --parallel=$NUM_PROCESSOR \ - --prefix=/usr +mkdir /usr/src/CMake-build +cd /usr/src/CMake-build -# Build and Install -${WRAPPER} make install -j$NUM_PROCESSOR +${WRAPPER} /usr/src/CMake/bootstrap \ + --parallel=$(grep -c processor /proc/cpuinfo) +${WRAPPER} make -j$(grep -c processor /proc/cpuinfo) + +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* diff --git a/imagefiles/build-and-install-curl.sh b/imagefiles/build-and-install-curl.sh new file mode 100755 index 00000000..59fc2813 --- /dev/null +++ b/imagefiles/build-and-install-curl.sh @@ -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 + diff --git a/imagefiles/build-and-install-git.sh b/imagefiles/build-and-install-git.sh new file mode 100755 index 00000000..fb7a8c28 --- /dev/null +++ b/imagefiles/build-and-install-git.sh @@ -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 diff --git a/imagefiles/build-and-install-openssh.sh b/imagefiles/build-and-install-openssh.sh new file mode 100755 index 00000000..ebf54fc1 --- /dev/null +++ b/imagefiles/build-and-install-openssh.sh @@ -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} diff --git a/imagefiles/build-and-install-openssl.sh b/imagefiles/build-and-install-openssl.sh new file mode 100755 index 00000000..5d8f1777 --- /dev/null +++ b/imagefiles/build-and-install-openssl.sh @@ -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 diff --git a/imagefiles/entrypoint.sh b/imagefiles/entrypoint.sh index b4dcab09..13886c36 100755 --- a/imagefiles/entrypoint.sh +++ b/imagefiles/entrypoint.sh @@ -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 diff --git a/imagefiles/install-cmake-binary.sh b/imagefiles/install-cmake-binary.sh new file mode 100755 index 00000000..4b710cf5 --- /dev/null +++ b/imagefiles/install-cmake-binary.sh @@ -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/{}" \; diff --git a/imagefiles/install-crosstool-ng-toolchain.sh b/imagefiles/install-crosstool-ng-toolchain.sh index a4076295..ccf535c7 100755 --- a/imagefiles/install-crosstool-ng-toolchain.sh +++ b/imagefiles/install-crosstool-ng-toolchain.sh @@ -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}" diff --git a/imagefiles/install-ninja.sh b/imagefiles/install-ninja.sh index 3ae06148..8d63883b 100755 --- a/imagefiles/install-ninja.sh +++ b/imagefiles/install-ninja.sh @@ -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 diff --git a/imagefiles/install-openssl.sh b/imagefiles/install-openssl.sh deleted file mode 100755 index 460f6bd2..00000000 --- a/imagefiles/install-openssl.sh +++ /dev/null @@ -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 - diff --git a/imagefiles/utils.sh b/imagefiles/utils.sh new file mode 100644 index 00000000..2122f699 --- /dev/null +++ b/imagefiles/utils.sh @@ -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 +} + diff --git a/linux-x86/Dockerfile b/linux-x86/Dockerfile index 6ea2e11c..6a2d39cb 100644 --- a/linux-x86/Dockerfile +++ b/linux-x86/Dockerfile @@ -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: diff --git a/manylinux-x64/Dockerfile.in b/manylinux-x64/Dockerfile.in index 27db9979..b57784fa 100644 --- a/manylinux-x64/Dockerfile.in +++ b/manylinux-x64/Dockerfile.in @@ -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 \ diff --git a/manylinux-x86/Dockerfile.in b/manylinux-x86/Dockerfile.in index 6a587dbb..a823e92a 100644 --- a/manylinux-x86/Dockerfile.in +++ b/manylinux-x86/Dockerfile.in @@ -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 \