From 49e3a25a5a3e365cbbdedbacdae2a07c9c4c9a4c Mon Sep 17 00:00:00 2001 From: Jean-Marie HENAFF Date: Tue, 16 Nov 2021 10:53:58 +0100 Subject: [PATCH 1/4] Add a conan-docker-tools-based Docker image to build Android dependencies --- docker/android-clang_8/.dockerignore | 7 ++++ docker/android-clang_8/Dockerfile | 51 ++++++++++++++++++++++++++++ docker/android-clang_8/README.md | 50 +++++++++++++++++++++++++++ docker/android-clang_8/build.sh | 2 ++ docker/android-clang_8/cmake-wrapper | 37 ++++++++++++++++++++ docker/android-clang_8/run.sh | 2 ++ 6 files changed, 149 insertions(+) create mode 100644 docker/android-clang_8/.dockerignore create mode 100644 docker/android-clang_8/Dockerfile create mode 100644 docker/android-clang_8/README.md create mode 100755 docker/android-clang_8/build.sh create mode 100755 docker/android-clang_8/cmake-wrapper create mode 100755 docker/android-clang_8/run.sh diff --git a/docker/android-clang_8/.dockerignore b/docker/android-clang_8/.dockerignore new file mode 100644 index 0000000..5bf906c --- /dev/null +++ b/docker/android-clang_8/.dockerignore @@ -0,0 +1,7 @@ +.git/ +.idea/ + +*.md +*.py +*.yml +**/*.sh diff --git a/docker/android-clang_8/Dockerfile b/docker/android-clang_8/Dockerfile new file mode 100644 index 0000000..acbe1fd --- /dev/null +++ b/docker/android-clang_8/Dockerfile @@ -0,0 +1,51 @@ + +FROM conanio/android-clang8 + +LABEL maintainer="Luis Martinez de Bartolome " + +ARG CONAN_VERSION + +ENV ANDROID_ABI=arm64-v8a \ + CC=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android21-clang \ + CXX=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android21-clang++ \ + LD=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-ld \ + AR=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-ar \ + AS=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-as \ + RANLIB=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-ranlib \ + STRIP=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-strip \ + ADDR2LINE=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-addr2line \ + NM=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-nm \ + OBJCOPY=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-objcopy \ + OBJDUMP=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-objdump \ + READELF=$STANDALONE_TOOLCHAIN/bin/aarch64-linux-android-readelf + +RUN pip install conan==1.39.0 \ + && conan profile update settings.arch=armv8 default \ + && conan profile update settings.os=Android default \ + && conan profile update settings.os.api_level=21 default \ + && conan profile update settings.compiler.libcxx=libc++ default + +RUN conan profile update settings.compiler.cppstd=17 default + +RUN conan remote add conan-solar https://artifact.b-com.com/api/conan/solar-conan-local -i 0 + +RUN conan remote add conan-bcom https://artifact.b-com.com/api/conan/bcom-conan-local -i 1 + +RUN conan profile new host \ + && conan profile update settings.arch=armv8 host \ + && conan profile update settings.build_type=Release host \ + && conan profile update settings.compiler=clang host \ + && conan profile update settings.compiler.libcxx=libc++ host \ + && conan profile update settings.compiler.version=8 host \ + && conan profile update settings.os=Android host \ + && conan profile update settings.os.api_level=21 host \ + && conan profile update settings.compiler.cppstd=17 host + +RUN conan profile new build \ + && conan profile update settings.arch=x86_64 build \ + && conan profile update settings.build_type=Release build \ + && conan profile update settings.compiler=gcc build \ + && conan profile update settings.compiler.libcxx=libstdc++ build \ + && conan profile update settings.compiler.version=7 build \ + && conan profile update settings.os=Linux build \ + && conan profile update settings.compiler.cppstd=17 build diff --git a/docker/android-clang_8/README.md b/docker/android-clang_8/README.md new file mode 100644 index 0000000..ce3dac9 --- /dev/null +++ b/docker/android-clang_8/README.md @@ -0,0 +1,50 @@ +# Docker image to build Android dependencies of SolAR + +## Description + +This image defines a `build` and a `host` conan profiles and also adds `conan-bcom` and `conan-solar` remotes. + +It is based on the android-clang8 image provided by the [ conan-docker-tools](https://github.com/conan-io/conan-docker-tools/tree/master/android-clang_8) + +## How to use + +### Build image +``` +./build.sh +``` + +### Run container and connect open a Bash session +``` +./run.sh +``` + +### Build dependency + +For example you can run `conan install`, but don't forget to specify the `build` and `host` profiles. + +``` +conan install -pr:b build -pr:h host boost/1.74.0@ -o zlib=False -o bzip2=False -o numa=False -o shared=True -o without_stacktrace=True --build=missing +``` + +The built binaries will be located by default in your `~/.conan/data` by default, as specified in `run.sh`. + +If you want to select another location for the build output, edit `run.sh`. + + + + + + + + + + + + + + + + + + + diff --git a/docker/android-clang_8/build.sh b/docker/android-clang_8/build.sh new file mode 100755 index 0000000..c634331 --- /dev/null +++ b/docker/android-clang_8/build.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +sudo docker build --no-cache -t conanio/android-clang8 . diff --git a/docker/android-clang_8/cmake-wrapper b/docker/android-clang_8/cmake-wrapper new file mode 100755 index 0000000..548f69d --- /dev/null +++ b/docker/android-clang_8/cmake-wrapper @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +ALL_ARGS=$@ + +BUILD=no +for i in "$@": +do + case $i in + --build) + BUILD=yes + ;; + *) + ;; + esac +done + +# https://gitlab.kitware.com/cmake/cmake/issues/18739 Android: NDK r19 support +# https://github.com/conan-io/conan/issues/2402 Android and CONAN_LIBCXX do not play well together +# https://github.com/conan-io/conan/issues/4537 Pass ANDROID_ABI & ANDROID_NDK variables to cmake +# https://github.com/conan-io/conan/issues/4629 set(CMAKE_FIND_ROOT_PATH_MODE_* ONLY) when cross-compiling, for Android at least + +if [ $BUILD == "yes" ]; then + cmake "$@" +else + cmake \ + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=$CMAKE_FIND_ROOT_PATH_MODE_PROGRAM \ + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=$CMAKE_FIND_ROOT_PATH_MODE_LIBRARY \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=$CMAKE_FIND_ROOT_PATH_MODE_INCLUDE \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=$CMAKE_FIND_ROOT_PATH_MODE_PACKAGE \ + -DANDROID_STL=$ANDROID_STL \ + -DANDROID_NDK=$ANDROID_NDK \ + -DANDROID_ABI=$ANDROID_ABI \ + -DANDROID_PLATFORM=$ANDROID_PLATFORM \ + -DANDROID_TOOLCHAIN=$ANDROID_TOOLCHAIN \ + "$@" +fi + diff --git a/docker/android-clang_8/run.sh b/docker/android-clang_8/run.sh new file mode 100755 index 0000000..7f13c0d --- /dev/null +++ b/docker/android-clang_8/run.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +sudo docker run --rm -v ~/.conan/data:/home/conan/.conan/data -it conanio/android-clang8 /bin/bash From 0275a5e07c0dbafe075eb0388f20746cbce1d359 Mon Sep 17 00:00:00 2001 From: Jean-Marie HENAFF Date: Tue, 16 Nov 2021 10:56:47 +0100 Subject: [PATCH 2/4] Remove useless trailing blank lines --- docker/android-clang_8/README.md | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/docker/android-clang_8/README.md b/docker/android-clang_8/README.md index ce3dac9..ca9105f 100644 --- a/docker/android-clang_8/README.md +++ b/docker/android-clang_8/README.md @@ -30,21 +30,3 @@ The built binaries will be located by default in your `~/.conan/data` by default If you want to select another location for the build output, edit `run.sh`. - - - - - - - - - - - - - - - - - - From e25705d95bbeb8eedd169cf77a9ae9aaccb25849 Mon Sep 17 00:00:00 2001 From: Jean-Marie HENAFF Date: Tue, 16 Nov 2021 11:18:23 +0100 Subject: [PATCH 3/4] Remove maintainer name --- docker/android-clang_8/Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker/android-clang_8/Dockerfile b/docker/android-clang_8/Dockerfile index acbe1fd..7904105 100644 --- a/docker/android-clang_8/Dockerfile +++ b/docker/android-clang_8/Dockerfile @@ -1,8 +1,6 @@ FROM conanio/android-clang8 -LABEL maintainer="Luis Martinez de Bartolome " - ARG CONAN_VERSION ENV ANDROID_ABI=arm64-v8a \ From e5fa996f31e01b36eae513852cb5f5d9914e6c16 Mon Sep 17 00:00:00 2001 From: Jean-Marie HENAFF Date: Tue, 16 Nov 2021 11:42:15 +0100 Subject: [PATCH 4/4] Change image name to avoid confusion DO not reuse the conanio name, use a b-com/SolAR-specific name --- docker/android-clang_8/build.sh | 2 +- docker/android-clang_8/run.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/android-clang_8/build.sh b/docker/android-clang_8/build.sh index c634331..0e82c1d 100755 --- a/docker/android-clang_8/build.sh +++ b/docker/android-clang_8/build.sh @@ -1,2 +1,2 @@ #!/usr/bin/env bash -sudo docker build --no-cache -t conanio/android-clang8 . +sudo docker build --no-cache -t b-com/android-clang8-solar . diff --git a/docker/android-clang_8/run.sh b/docker/android-clang_8/run.sh index 7f13c0d..e713a5f 100755 --- a/docker/android-clang_8/run.sh +++ b/docker/android-clang_8/run.sh @@ -1,2 +1,2 @@ #!/usr/bin/env bash -sudo docker run --rm -v ~/.conan/data:/home/conan/.conan/data -it conanio/android-clang8 /bin/bash +sudo docker run --rm -v ~/.conan/data:/home/conan/.conan/data -it b-com/android-clang8-solar /bin/bash