From 607fba975716ec054ce055daf8071de7e81417a9 Mon Sep 17 00:00:00 2001 From: abeimler Date: Fri, 4 Nov 2022 20:18:23 +0100 Subject: [PATCH 1/6] fix: ci image --- Dockerfile.ci | 4 ---- Dockerfile.ci-windows | 4 ---- build-images.all.sh | 6 +++--- scripts/docker-entrypoint.ci.sh | 7 ------- 4 files changed, 3 insertions(+), 18 deletions(-) delete mode 100755 scripts/docker-entrypoint.ci.sh diff --git a/Dockerfile.ci b/Dockerfile.ci index be20e04..61137d6 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -109,7 +109,3 @@ ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV PROJECT_DIR /home/project WORKDIR /home/project RUN mkdir build - -COPY ./scripts/docker-entrypoint.ci.sh /docker-entrypoint.sh -ENTRYPOINT ["/bin/bash", "-c", "/docker-entrypoint.sh"] -CMD ["/bin/bash"] \ No newline at end of file diff --git a/Dockerfile.ci-windows b/Dockerfile.ci-windows index 3692dd2..d81ed5d 100644 --- a/Dockerfile.ci-windows +++ b/Dockerfile.ci-windows @@ -137,7 +137,3 @@ COPY ./scripts/docker-build.ci-mingw.sh ./docker-build.sh ENV PROJECT_DIR /home/project WORKDIR /home/project RUN mkdir build - -COPY ./scripts/docker-entrypoint.ci.sh /docker-entrypoint.sh -ENTRYPOINT ["/bin/bash", "-c", "/docker-entrypoint.sh"] -CMD ["/bin/bash"] \ No newline at end of file diff --git a/build-images.all.sh b/build-images.all.sh index b79b273..38ee961 100755 --- a/build-images.all.sh +++ b/build-images.all.sh @@ -7,9 +7,9 @@ ./build-images.arm.sh -./build-images.android.sh -./build-images.android-21.sh -./build-images.android-24.sh +#./build-images.android.sh +#./build-images.android-21.sh +#./build-images.android-24.sh #./build-images.arm.crosstool.sh #./build-images.rpi.sh diff --git a/scripts/docker-entrypoint.ci.sh b/scripts/docker-entrypoint.ci.sh deleted file mode 100755 index 45ab867..0000000 --- a/scripts/docker-entrypoint.ci.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -set -e - -#$CC --version | head -1 -#$CXX --version | head -1 - -exec "$@" \ No newline at end of file From ce54b189aaf2ab60909026b531867e49caf0ecad Mon Sep 17 00:00:00 2001 From: abeimler Date: Fri, 30 Dec 2022 15:53:04 +0100 Subject: [PATCH 2/6] feat: add task --- Dockerfile.base | 5 ++++- Dockerfile.ci | 9 +++++++++ Dockerfile.ci-setup-cpp | 4 ++-- Dockerfile.ci-windows | 5 +++++ VERSION | 2 +- build-images.sh | 2 +- tests/ci-test.yaml | 4 ++++ 7 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Dockerfile.base b/Dockerfile.base index abfc35a..0d71d1a 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -28,10 +28,13 @@ RUN cd / # install extra packages from AUR RUN runuser -l yay -c \ "yay -Syu --noconfirm && yay -S --noconfirm \ - extra-cmake-modules-git lcov cccc" && \ + extra-cmake-modules-git lcov cccc go-task-bin" && \ runuser -l yay -c "yay -Scc --noconfirm" && \ rm -rf /home/yay/.cache/* +# install task +RUN sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin + # Install conan RUN python -m pip install --upgrade pip setuptools && \ python -m pip install conan && \ diff --git a/Dockerfile.ci b/Dockerfile.ci index 61137d6..7d9330e 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -32,6 +32,10 @@ RUN python3 -m pip install --upgrade pip setuptools && \ RUN python3 -m pip install --upgrade pip setuptools && \ python3 -m pip install cogapp coverage cmake-format cmakelint +# install task +RUN sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin + + # thx to https://github.com/lefticus/cpp_starter_project/pull/121 # By default, anything you run in Docker is done as superuser. @@ -91,6 +95,11 @@ RUN shasum -a 256 -c codecov.SHA256SUM RUN chmod +x codecov ENV CODECOV "/home/codecov/codecov" +# install task +ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh +RUN chmod +x /tmp/taskfile_install.sh +RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh + # setup project env WORKDIR /home/project COPY ./scripts/docker-build.sh ./docker-build.sh diff --git a/Dockerfile.ci-setup-cpp b/Dockerfile.ci-setup-cpp index b7ad946..fcac87a 100644 --- a/Dockerfile.ci-setup-cpp +++ b/Dockerfile.ci-setup-cpp @@ -29,12 +29,12 @@ RUN chmod +x codecov ENV CODECOV "/home/codecov/codecov" # download setup_cpp -ARG setup_cpp_linux_version="0.21.0" +ARG setup_cpp_linux_version="0.24.1" ARG setup_cpp_linux_download_url="https://github.com/aminya/setup-cpp/releases/download/v${setup_cpp_linux_version}/setup_cpp_linux" # add setup_cpp RUN wget --no-verbose ${setup_cpp_linux_download_url} -O /setup_cpp_linux RUN chmod +x /setup_cpp_linux -RUN /setup_cpp_linux --compiler llvm --gcc true --make true --cmake true --ninja true --ccache true --doxygen true --gcovr true --cppcheck true --clangtidy true --clangformat true --conan true +RUN /setup_cpp_linux --compiler llvm --gcc true --make true --cmake true --ninja true --ccache true --doxygen true --gcovr true --cppcheck true --clangtidy true --clangformat true --conan true --task true RUN rm -rf /tmp/* #RUN cp /root/.cpprc /root/.bashrc diff --git a/Dockerfile.ci-windows b/Dockerfile.ci-windows index d81ed5d..2750291 100644 --- a/Dockerfile.ci-windows +++ b/Dockerfile.ci-windows @@ -129,6 +129,11 @@ ENV CMAKE_GENERATOR $cmake_generator ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" +# install task +ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh +RUN chmod +x /tmp/taskfile_install.sh +RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh + # setup project env WORKDIR /home/project COPY ./cmake /home/cmake diff --git a/VERSION b/VERSION index dc1e644..bd8bf88 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.6.0 +1.7.0 diff --git a/build-images.sh b/build-images.sh index 99d3907..b542442 100755 --- a/build-images.sh +++ b/build-images.sh @@ -3,7 +3,7 @@ docker build --force-rm=true -f ./Dockerfile.base -t abeimler/simple-cppbuilder:base . docker build --force-rm=true -t abeimler/simple-cppbuilder . -#docker build --force-rm=true -t abeimler/simple-cppbuilder:1.5.0 . +#docker build --force-rm=true -t abeimler/simple-cppbuilder:1.7.0 . docker build --force-rm=true -f ./Dockerfile.without-vcpkg -t abeimler/simple-cppbuilder:without-vcpkg . diff --git a/tests/ci-test.yaml b/tests/ci-test.yaml index de641fb..e087ce5 100644 --- a/tests/ci-test.yaml +++ b/tests/ci-test.yaml @@ -29,6 +29,10 @@ commandTests: command: cppcheck args: ["--version"] expectedOutput: [".*Cppcheck.*"] +- name: task + command: task + args: ["--version"] + expectedOutput: [".*Task.*"] fileExistenceTests: From 0a7759d067b069f0de54c9264563d66ec4b4aacb Mon Sep 17 00:00:00 2001 From: abeimler Date: Mon, 2 Jan 2023 21:56:04 +0100 Subject: [PATCH 3/6] feat: add taskfiles --- Dockerfile | 2 + Dockerfile.android | 12 +- Dockerfile.android-v | 12 +- Dockerfile.base | 6 +- Dockerfile.ci | 8 +- Dockerfile.ci-setup-cpp | 5 +- Dockerfile.ci-windows | 2 + Dockerfile.cross | 7 +- Dockerfile.crosstool-ng | 7 +- Dockerfile.rpi => Dockerfile.crosstool-ng-rpi | 2 + Dockerfile.emscripten | 5 + Dockerfile.gcc | 2 + Dockerfile.mxe | 2 + Dockerfile.rpi-without-tools | 2 + Dockerfile.without-vcpkg | 2 + Taskfile.yml | 5 + build-images.all.sh | 18 -- build-images.android-21.sh | 29 -- build-images.android-24.sh | 29 -- build-images.android.sh | 25 -- build-images.arm.crosstool.sh | 19 -- build-images.arm.sh | 25 -- build-images.emscripten.sh | 3 - build-images.gcc.sh | 10 - build-images.mingw.mxe.sh | 28 -- build-images.mingw.sh | 36 --- build-images.rpi.sh | 37 --- build-images.sh | 19 -- scripts/docker-test.setup-cpp.sh | 2 + taskfiles/.dockerignore | 1 + taskfiles/TaskfileCross.yml | 39 +++ taskfiles/TaskfileDefault.yml | 46 +++ taskfiles/TaskfileSetupCpp.yml | 45 +++ taskfiles/TaskfileSetupCppCross.yml | 49 +++ taskfiles/TaskfileWithoutVcpkgToolchain.yml | 30 ++ taskfiles/docker/Build.yml | 288 ++++++++++++++++++ taskfiles/docker/Test.yml | 59 ++++ 37 files changed, 627 insertions(+), 291 deletions(-) rename Dockerfile.rpi => Dockerfile.crosstool-ng-rpi (97%) create mode 100644 Taskfile.yml delete mode 100755 build-images.all.sh delete mode 100755 build-images.android-21.sh delete mode 100755 build-images.android-24.sh delete mode 100755 build-images.android.sh delete mode 100755 build-images.arm.crosstool.sh delete mode 100755 build-images.arm.sh delete mode 100755 build-images.emscripten.sh delete mode 100755 build-images.gcc.sh delete mode 100644 build-images.mingw.mxe.sh delete mode 100755 build-images.mingw.sh delete mode 100755 build-images.rpi.sh delete mode 100755 build-images.sh create mode 100644 taskfiles/.dockerignore create mode 100644 taskfiles/TaskfileCross.yml create mode 100644 taskfiles/TaskfileDefault.yml create mode 100644 taskfiles/TaskfileSetupCpp.yml create mode 100644 taskfiles/TaskfileSetupCppCross.yml create mode 100644 taskfiles/TaskfileWithoutVcpkgToolchain.yml create mode 100644 taskfiles/docker/Build.yml create mode 100644 taskfiles/docker/Test.yml diff --git a/Dockerfile b/Dockerfile index 32ed487..8f43a3d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,6 +33,8 @@ WORKDIR /home/project COPY ./scripts/docker-build.sh ./docker-build.sh COPY ./scripts/docker-test.sh ./docker-test.sh COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileDefault.yml /home/taskfiles/Taskfile.yml # install vcpkg ENV VCPKG_DISABLE_METRICS 1 diff --git a/Dockerfile.android b/Dockerfile.android index 6cabef5..c82ca21 100644 --- a/Dockerfile.android +++ b/Dockerfile.android @@ -36,6 +36,8 @@ RUN runuser -l yay -c \ # setup project env WORKDIR /home/project COPY ./scripts/docker-build.android.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml # install vcpkg ## https://github.com/microsoft/vcpkg/blob/master/docs/users/android.md @@ -63,9 +65,12 @@ ARG cmake_toolchain_file="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmak ENV CROSS_TOOLCHAIN "${ANDROID_TOOLCHAIN_FILE}" ENV ANDROID_BUILD_TOOLS "${ANDROID_HOME}/build-tools/$ANDROID_BUILD_TOOLS_REVISION" -ARG setup_env_script="android-env $android_abi" +ARG setup_env_script="android-env" +ARG setup_env_script_args="$android_abi" ENV SETUP_ENV_SCRIPT $setup_env_script -RUN . $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +#RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile +RUN . $setup_env_script $setup_env_script_args ENV CMAKE $CROSS_CMAKE ENV MAKE $CROSS_MAKE @@ -76,7 +81,8 @@ ENV BUILD_TYPE "Release" ENV CMAKE_GENERATOR $cmake_generator ENV VCPKG_TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" -ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file +ENV CHAINLOAD_TOOLCHAIN_FILE $ANDROID_TOOLCHAIN_FILE +ENV CROSS_CMAKE_ARGS -DANDROID_ABI="$ANDROID_ABI" ENV CMAKE_ARGS "" RUN mkdir build diff --git a/Dockerfile.android-v b/Dockerfile.android-v index 9d16dab..a04dcaf 100644 --- a/Dockerfile.android-v +++ b/Dockerfile.android-v @@ -41,6 +41,8 @@ RUN runuser -l yay -c \ # setup project env WORKDIR /home/project COPY ./scripts/docker-build.android.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml # install vcpkg ## https://github.com/microsoft/vcpkg/blob/master/docs/users/android.md @@ -68,9 +70,12 @@ ENV ANDROID_PLATFORM_TOOLS "${ANDROID_HOME}/platform-tools" ARG cmake_toolchain_file="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" ENV CROSS_TOOLCHAIN "${ANDROID_TOOLCHAIN_FILE}" -ARG setup_env_script="android-env $android_abi" +ARG setup_env_script="android-env" +ARG setup_env_script_args="$android_abi" ENV SETUP_ENV_SCRIPT $setup_env_script -RUN . $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +#RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile +RUN . $setup_env_script $setup_env_script_args ENV CMAKE $CROSS_CMAKE ENV MAKE $CROSS_MAKE @@ -81,7 +86,8 @@ ENV BUILD_TYPE "Release" ENV CMAKE_GENERATOR $cmake_generator ENV VCPKG_TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" -ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file +ENV CHAINLOAD_TOOLCHAIN_FILE $ANDROID_TOOLCHAIN_FILE +ENV CROSS_CMAKE_ARGS -DANDROID_ABI="$ANDROID_ABI" ENV CMAKE_ARGS "" RUN mkdir build \ No newline at end of file diff --git a/Dockerfile.base b/Dockerfile.base index 0d71d1a..d32b4e7 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -28,12 +28,14 @@ RUN cd / # install extra packages from AUR RUN runuser -l yay -c \ "yay -Syu --noconfirm && yay -S --noconfirm \ - extra-cmake-modules-git lcov cccc go-task-bin" && \ + extra-cmake-modules-git lcov cccc" && \ runuser -l yay -c "yay -Scc --noconfirm" && \ rm -rf /home/yay/.cache/* # install task -RUN sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin +ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh +RUN chmod +x /tmp/taskfile_install.sh +RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh # Install conan RUN python -m pip install --upgrade pip setuptools && \ diff --git a/Dockerfile.ci b/Dockerfile.ci index 7d9330e..1677d31 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -22,7 +22,7 @@ RUN apt-get update -yqq && \ valgrind gcovr linux-tools-common linux-tools-generic google-perftools \ neovim emacs nano && \ apt-get clean && rm -rf /var/lib/apt/lists/* -#bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" +#ADD https://apt.llvm.org/llvm.sh /tmp/llvm.sh # Install conan RUN python3 -m pip install --upgrade pip setuptools && \ @@ -33,7 +33,9 @@ RUN python3 -m pip install --upgrade pip setuptools && \ python3 -m pip install cogapp coverage cmake-format cmakelint # install task -RUN sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin +ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh +RUN chmod +x /tmp/taskfile_install.sh +RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh # thx to https://github.com/lefticus/cpp_starter_project/pull/121 @@ -105,6 +107,8 @@ WORKDIR /home/project COPY ./scripts/docker-build.sh ./docker-build.sh COPY ./scripts/docker-test.sh ./docker-test.sh COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileDefault.yml /home/taskfiles/Taskfile.yml # install vcpkg ENV VCPKG_DISABLE_METRICS 1 diff --git a/Dockerfile.ci-setup-cpp b/Dockerfile.ci-setup-cpp index fcac87a..49fe417 100644 --- a/Dockerfile.ci-setup-cpp +++ b/Dockerfile.ci-setup-cpp @@ -32,10 +32,11 @@ ENV CODECOV "/home/codecov/codecov" ARG setup_cpp_linux_version="0.24.1" ARG setup_cpp_linux_download_url="https://github.com/aminya/setup-cpp/releases/download/v${setup_cpp_linux_version}/setup_cpp_linux" # add setup_cpp -RUN wget --no-verbose ${setup_cpp_linux_download_url} -O /setup_cpp_linux +ADD ${setup_cpp_linux_download_url} /setup_cpp_linux RUN chmod +x /setup_cpp_linux RUN /setup_cpp_linux --compiler llvm --gcc true --make true --cmake true --ninja true --ccache true --doxygen true --gcovr true --cppcheck true --clangtidy true --clangformat true --conan true --task true RUN rm -rf /tmp/* +RUN echo 'source /root/.cpprc' >> $HOME/.bash_profile #RUN cp /root/.cpprc /root/.bashrc # Install more tools from standard repos @@ -124,6 +125,8 @@ WORKDIR /home/project COPY ./scripts/docker-build.setup-cpp.sh ./docker-build.sh COPY ./scripts/docker-test.setup-cpp.sh ./docker-test.sh COPY ./scripts/docker-test-coverage.setup-cpp.sh ./docker-test-coverage.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileSetupCpp.yml /home/taskfiles/Taskfile.yml RUN mkdir build RUN bash -c 'source ~/.cpprc' \ No newline at end of file diff --git a/Dockerfile.ci-windows b/Dockerfile.ci-windows index 2750291..6029d08 100644 --- a/Dockerfile.ci-windows +++ b/Dockerfile.ci-windows @@ -138,6 +138,8 @@ RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh WORKDIR /home/project COPY ./cmake /home/cmake COPY ./scripts/docker-build.ci-mingw.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileSetupCppCross.yml /home/taskfiles/Taskfile.yml ENV PROJECT_DIR /home/project WORKDIR /home/project diff --git a/Dockerfile.cross b/Dockerfile.cross index 5a193bf..a0fb2cc 100644 --- a/Dockerfile.cross +++ b/Dockerfile.cross @@ -86,14 +86,19 @@ COPY ./cmake /home/cmake WORKDIR /home/project ARG docker_build_script "docker-build.cross.sh" COPY ./scripts/$docker_build_script ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml # compiler env settings # e.g. mingw-env, emsdk_env.sh RUN mkdir -p /home/cross RUN touch /home/cross/.bashrc ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script -RUN . $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile +RUN . $setup_env_script $setup_env_script_args ENV PROJECT_DIR /home/project WORKDIR /home/project diff --git a/Dockerfile.crosstool-ng b/Dockerfile.crosstool-ng index a089a15..7b28fda 100644 --- a/Dockerfile.crosstool-ng +++ b/Dockerfile.crosstool-ng @@ -88,12 +88,17 @@ ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE WORKDIR /home/project COPY ./cmake /home/cmake COPY ./scripts/docker-build.crosstool-ng.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml RUN mkdir -p /home/cross RUN touch /home/cross/.bashrc ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script -RUN . $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile +RUN . $setup_env_script $setup_env_script_args ENV PROJECT_DIR /home/project WORKDIR /home/project diff --git a/Dockerfile.rpi b/Dockerfile.crosstool-ng-rpi similarity index 97% rename from Dockerfile.rpi rename to Dockerfile.crosstool-ng-rpi index 64d6f30..2478c9f 100644 --- a/Dockerfile.rpi +++ b/Dockerfile.crosstool-ng-rpi @@ -52,6 +52,8 @@ ENV CXX "g++" WORKDIR /home/project COPY ./cmake /home/cmake COPY ./scripts/docker-build.rpi.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml # install vcpkg ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host diff --git a/Dockerfile.emscripten b/Dockerfile.emscripten index 48d094f..e834162 100644 --- a/Dockerfile.emscripten +++ b/Dockerfile.emscripten @@ -35,7 +35,10 @@ RUN runuser -l yay -c \ RUN /usr/lib/emsdk/emsdk install latest && /usr/lib/emsdk/emsdk activate latest ARG setup_env_script="/usr/lib/emsdk/emsdk_env.sh" +ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile RUN . $setup_env_script @@ -90,6 +93,8 @@ WORKDIR /home/project COPY ./cmake ./cmake COPY ./scripts/docker-build.setup-env.sh ./docker-build.sh COPY ./scripts/docker-test.setup-env.sh ./docker-test.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml ENV PROJECT_DIR /home/project WORKDIR /home/project diff --git a/Dockerfile.gcc b/Dockerfile.gcc index 8c4b7ba..df2dcfc 100644 --- a/Dockerfile.gcc +++ b/Dockerfile.gcc @@ -45,6 +45,8 @@ WORKDIR /home/project COPY ./scripts/docker-build.sh ./docker-build.sh COPY ./scripts/docker-test.sh ./docker-test.sh COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileDefault.yml /home/taskfiles/Taskfile.yml # build script settings diff --git a/Dockerfile.mxe b/Dockerfile.mxe index 386f760..0b1d716 100644 --- a/Dockerfile.mxe +++ b/Dockerfile.mxe @@ -92,6 +92,8 @@ ENV CMAKE_ARGS "" WORKDIR /home/project COPY ./cmake /home/cmake COPY ./scripts/docker-build.mxe.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml ENV PROJECT_DIR /home/project WORKDIR /home/project diff --git a/Dockerfile.rpi-without-tools b/Dockerfile.rpi-without-tools index 0b024d8..0b6e4d7 100644 --- a/Dockerfile.rpi-without-tools +++ b/Dockerfile.rpi-without-tools @@ -52,6 +52,8 @@ ENV CXX "g++" WORKDIR /home/project COPY ./cmake /home/cmake COPY ./scripts/docker-build.rpi.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml # install vcpkg ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host diff --git a/Dockerfile.without-vcpkg b/Dockerfile.without-vcpkg index b28066e..40750ad 100644 --- a/Dockerfile.without-vcpkg +++ b/Dockerfile.without-vcpkg @@ -32,5 +32,7 @@ WORKDIR /home/project COPY ./scripts/docker-build-without-toolchain.sh ./docker-build.sh COPY ./scripts/docker-test.sh ./docker-test.sh COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileWithoutVcpkgToolchain.yml /home/taskfiles/Taskfile.yml RUN mkdir build \ No newline at end of file diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..1e0143f --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,5 @@ +version: '3' + +includes: + build: ./taskfiles/docker/Build.yml + test: ./taskfiles/docker/Test.yml \ No newline at end of file diff --git a/build-images.all.sh b/build-images.all.sh deleted file mode 100755 index 38ee961..0000000 --- a/build-images.all.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -./build-images.sh - -./build-images.mingw.sh -./build-images.emscripten.sh - -./build-images.arm.sh - -#./build-images.android.sh -#./build-images.android-21.sh -#./build-images.android-24.sh - -#./build-images.arm.crosstool.sh -#./build-images.rpi.sh - -#./build-images.gcc.sh -#./build-images.mingw.mxe.sh \ No newline at end of file diff --git a/build-images.android-21.sh b/build-images.android-21.sh deleted file mode 100755 index 4f48a5e..0000000 --- a/build-images.android-21.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="arm-android" \ - --build-arg cmake="android-armv7a-eabi-cmake" \ - --build-arg android_abi="armeabi-v7a" \ - --build-arg android_target="21" \ - -t abeimler/simple-cppbuilder:arm-android-21 . - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="arm64-android" \ - --build-arg cmake="android-aarch64-cmake" \ - --build-arg android_abi="arm64-v8a" \ - --build-arg android_target="21" \ - -t abeimler/simple-cppbuilder:arm64-android21 . - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="x86-android" \ - --build-arg cmake="android-x86-cmake" \ - --build-arg android_abi="x86" \ - --build-arg android_target="21" \ - -t abeimler/simple-cppbuilder:x86-android-21 . - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="x64-android" \ - --build-arg cmake="android-x86-64-cmake" \ - --build-arg android_abi="x86_64" \ - --build-arg android_target="21" \ - -t abeimler/simple-cppbuilder:x64-android-21 . \ No newline at end of file diff --git a/build-images.android-24.sh b/build-images.android-24.sh deleted file mode 100755 index 75c1835..0000000 --- a/build-images.android-24.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="arm-android" \ - --build-arg cmake="android-armv7a-eabi-cmake" \ - --build-arg android_abi="armeabi-v7a" \ - --build-arg android_target="24" \ - -t abeimler/simple-cppbuilder:arm-android-24 . - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="arm64-android" \ - --build-arg cmake="android-aarch64-cmake" \ - --build-arg android_abi="arm64-v8a" \ - --build-arg android_target="24" \ - -t abeimler/simple-cppbuilder:arm64-android24 . - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="x86-android" \ - --build-arg cmake="android-x86-cmake" \ - --build-arg android_abi="x86" \ - --build-arg android_target="24" \ - -t abeimler/simple-cppbuilder:x86-android-24 . - -docker build --force-rm=true -f ./Dockerfile.android-v \ - --build-arg vcpkg_target_triplet="x64-android" \ - --build-arg cmake="android-x86-64-cmake" \ - --build-arg android_abi="x86_64" \ - --build-arg android_target="24" \ - -t abeimler/simple-cppbuilder:x64-android-24 . \ No newline at end of file diff --git a/build-images.android.sh b/build-images.android.sh deleted file mode 100755 index de82dd1..0000000 --- a/build-images.android.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.android \ - --build-arg vcpkg_target_triplet="arm-android" \ - --build-arg cmake="android-armv7a-eabi-cmake" \ - --build-arg android_abi="armeabi-v7a" \ - -t abeimler/simple-cppbuilder:arm-android . - -docker build --force-rm=true -f ./Dockerfile.android \ - --build-arg vcpkg_target_triplet="arm64-android" \ - --build-arg cmake="android-aarch64-cmake" \ - --build-arg android_abi="arm64-v8a" \ - -t abeimler/simple-cppbuilder:arm64-android . - -docker build --force-rm=true -f ./Dockerfile.android \ - --build-arg vcpkg_target_triplet="x86-android" \ - --build-arg cmake="android-x86-cmake" \ - --build-arg android_abi="x86" \ - -t abeimler/simple-cppbuilder:x86-android . - -docker build --force-rm=true -f ./Dockerfile.android \ - --build-arg vcpkg_target_triplet="x64-android" \ - --build-arg cmake="android-x86-64-cmake" \ - --build-arg android_abi="x86_64" \ - -t abeimler/simple-cppbuilder:x64-android . \ No newline at end of file diff --git a/build-images.arm.crosstool.sh b/build-images.arm.crosstool.sh deleted file mode 100755 index 2c41faf..0000000 --- a/build-images.arm.crosstool.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.crosstool-ng \ - --build-arg vcpkg_target_triplet="arm-linux" \ - --build-arg cross_triple="arm-unknown-linux-gnueabi" \ - --build-arg cmake_toolchain_file="/home/cmake/arm-toolchain.cmake" \ - -t abeimler/simple-cppbuilder:arm-unknown-linux-gnueabi . - -#docker build --force-rm=true -f ./Dockerfile.crosstool-ng \ -# --build-arg vcpkg_target_triplet="avr" \ -# --build-arg cross_triple="avr" \ -# --build-arg cmake_toolchain_file="/home/cmake/avr-toolchain.cmake" \ -# -t abeimler/simple-cppbuilder:avr . - -#docker build --force-rm=true -f ./Dockerfile.crosstool-ng \ -# --build-arg vcpkg_target_triplet="ppc64le-linux" \ -# --build-arg cross_triple="powerpc64le-unknown-linux-gnu" \ -# --build-arg cmake_toolchain_file="/home/cmake/ppc64le-toolchain.cmake" \ -# -t abeimler/simple-cppbuilder:powerpc64le-unknown-linux-gnu . \ No newline at end of file diff --git a/build-images.arm.sh b/build-images.arm.sh deleted file mode 100755 index 72cf09d..0000000 --- a/build-images.arm.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.cross \ - --build-arg vcpkg_target_triplet="arm64-linux" \ - --build-arg cross_triple="aarch64-linux-gnu" \ - --build-arg install_toolchain="aarch64-linux-gnu-gcc" \ - --build-arg cmake_generator="Ninja" \ - --build-arg make="ninja" \ - --build-arg cmake="cmake" \ - --build-arg cross_make="ninja" \ - --build-arg cross_cmake="cmake" \ - --build-arg cmake_toolchain_file="/home/cmake/aarch64.toolchain.cmake" \ - -t abeimler/simple-cppbuilder:aarch64-linux . - - -## @FIXME: https://aur.archlinux.org/packages/arm-linux-gnueabihf-gcc-stage1/#pinned-806072 -#docker build --force-rm=true -f ./Dockerfile.cross \ -# --build-arg vcpkg_target_triplet="arm-linux" \ -# --build-arg cross_triple="arm-linux-gnueabihf" \ -# --build-arg install_toolchain="arm-linux-gnueabihf-gcc-stage1 arm-linux-gnueabihf-gcc-stage2 arm-linux-gnueabihf-gcc" \ -# --build-arg cmake_generator="Ninja" \ -# --build-arg make="ninja" \ -# --build-arg cmake="cmake" \ -# --build-arg cmake_toolchain_file="/home/cmake/arm.toolchain.cmake" \ -# -t abeimler/simple-cppbuilder:arm-linux-gnueabihf . \ No newline at end of file diff --git a/build-images.emscripten.sh b/build-images.emscripten.sh deleted file mode 100755 index 78dd063..0000000 --- a/build-images.emscripten.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.emscripten -t abeimler/simple-cppbuilder:emscripten . diff --git a/build-images.gcc.sh b/build-images.gcc.sh deleted file mode 100755 index 9636de8..0000000 --- a/build-images.gcc.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -#docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=11 -t abeimler/simple-cppbuilder:gcc-11 . -docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=10 -t abeimler/simple-cppbuilder:gcc-10 . -docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=9 -t abeimler/simple-cppbuilder:gcc-9 . -#docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=8 -t abeimler/simple-cppbuilder:gcc-8 . -#docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=7 -t abeimler/simple-cppbuilder:gcc-7 . -#docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=6 -t abeimler/simple-cppbuilder:gcc-6 . -#docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=5 -t abeimler/simple-cppbuilder:gcc-5 . -#docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=49 -t abeimler/simple-cppbuilder:gcc-4.9 . \ No newline at end of file diff --git a/build-images.mingw.mxe.sh b/build-images.mingw.mxe.sh deleted file mode 100644 index fe29ae2..0000000 --- a/build-images.mingw.mxe.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.mxe \ - --build-arg vcpkg_target_triplet="x64-mingw-dynamic" \ - --build-arg cross_triplet="x86_64-w64-mingw32.shared" \ - --build-arg processor="x86_64" \ - -t abeimler/simple-cppbuilder:x64-mingw-w64-mxe . - -docker build --force-rm=true -f ./Dockerfile.mxe \ - --build-arg vcpkg_target_triplet="x86-mingw-dynamic" \ - --build-arg cross_triplet="i686-w64-mingw32.shared" \ - --build-arg processor="i686" \ - -t abeimler/simple-cppbuilder:x86-mingw-w64-mxe . - - -docker build --force-rm=true -f ./Dockerfile.mxe \ - --build-arg vcpkg_target_triplet="x64-mingw-static" \ - --build-arg cross_triplet="x86_64-w64-mingw32.static" \ - --build-arg processor="x86_64" \ - -t abeimler/simple-cppbuilder:x64-mingw-w64-mxe-static . - -docker build --force-rm=true -f ./Dockerfile.mxe \ - --build-arg vcpkg_target_triplet="x86-mingw-static" \ - --build-arg cross_triplet="i686-w64-mingw32.static" \ - --build-arg processor="i686" \ - -t abeimler/simple-cppbuilder:x86-mingw-w64-mxe-static . - - diff --git a/build-images.mingw.sh b/build-images.mingw.sh deleted file mode 100755 index e6be072..0000000 --- a/build-images.mingw.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.cross \ - --build-arg vcpkg_target_triplet="x64-mingw-dynamic" \ - --build-arg cross_triple="x86_64-w64-mingw32" \ - --build-arg install_toolchain="mingw-w64-toolchain" \ - --build-arg install_extras_toolchain="mingw-w64-pkg-config mingw-w64-cmake mingw-w64-configure mingw-w64-make mingw-w64-environment powershell-bin" \ - --build-arg cmake_generator="Ninja" \ - --build-arg make="make" \ - --build-arg cmake="cmake" \ - --build-arg cross_make="x86_64-w64-mingw32-make" \ - --build-arg cross_cmake="x86_64-w64-mingw32-cmake" \ - --build-arg setup_env_script="mingw-env" \ - --build-arg cmake_toolchain_file="/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake" \ - --build-arg docker_build_script="docker-build.mingw.sh" \ - --build-arg docker_test_script="docker-test.mingw.sh" \ - --build-arg docker_entrypoint="docker-entrypoint.mingw.sh" \ - -t abeimler/simple-cppbuilder:x64-mingw-w64 . - -docker build --force-rm=true -f ./Dockerfile.cross \ - --build-arg vcpkg_target_triplet="x86-mingw-dynamic" \ - --build-arg cross_triple="i686-w64-mingw32" \ - --build-arg install_toolchain="mingw-w64-toolchain" \ - --build-arg install_extras_toolchain="mingw-w64-pkg-config mingw-w64-cmake mingw-w64-configure mingw-w64-make mingw-w64-environment powershell-bin" \ - --build-arg cmake_generator="Ninja" \ - --build-arg make="make" \ - --build-arg cmake="cmake" \ - --build-arg cross_make="i686-w64-mingw32-make" \ - --build-arg cross_cmake="i686-w64-mingw32-cmake" \ - --build-arg setup_env_script="mingw-env" \ - --build-arg cmake_toolchain_file="/usr/share/mingw/toolchain-i686-w64-mingw32.cmake" \ - --build-arg docker_build_script="docker-build.mingw.sh" \ - --build-arg docker_test_script="docker-test.mingw.sh" \ - --build-arg docker_entrypoint="docker-entrypoint.mingw.sh" \ - -t abeimler/simple-cppbuilder:x86-mingw-w64 . - diff --git a/build-images.rpi.sh b/build-images.rpi.sh deleted file mode 100755 index ff75b97..0000000 --- a/build-images.rpi.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.rpi \ - --build-arg vcpkg_target_triplet="arm-linux" \ - --build-arg cross_triple="armv8-rpi4-linux-gnueabihf" \ - --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ - -t abeimler/simple-cppbuilder:rpi4 . - -docker build --force-rm=true -f ./Dockerfile.rpi \ - --build-arg vcpkg_target_triplet="arm-linux" \ - --build-arg cross_triple="armv8-rpi3-linux-gnueabihf" \ - --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ - -t abeimler/simple-cppbuilder:rpi3 . - -docker build --force-rm=true -f ./Dockerfile.rpi \ - --build-arg vcpkg_target_triplet="arm-linux" \ - --build-arg cross_triple="armv7-rpi2-linux-gnueabihf" \ - --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ - -t abeimler/simple-cppbuilder:rpi2 . - -docker build --force-rm=true -f ./Dockerfile.rpi \ - --build-arg vcpkg_target_triplet="arm-linux" \ - --build-arg cross_triple="armv6-unknown-linux-gnueabihf" \ - --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ - -t abeimler/simple-cppbuilder:rpi1 . - -docker build --force-rm=true -f ./Dockerfile.rpi \ - --build-arg vcpkg_target_triplet="arm64-linux" \ - --build-arg cross_triple="aarch64-rpi4-linux-gnu" \ - --build-arg cmake_toolchain_file="/home/cmake/aarch64-rpi-toolchain.cmake" \ - -t abeimler/simple-cppbuilder:rpi4-aarch64 . - -docker build --force-rm=true -f ./Dockerfile.rpi \ - --build-arg vcpkg_target_triplet="arm64-linux" \ - --build-arg cross_triple="aarch64-rpi3-linux-gnu" \ - --build-arg cmake_toolchain_file="/home/cmake/aarch64-rpi-toolchain.cmake" \ - -t abeimler/simple-cppbuilder:rpi3-aarch64 . \ No newline at end of file diff --git a/build-images.sh b/build-images.sh deleted file mode 100755 index b542442..0000000 --- a/build-images.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -docker build --force-rm=true -f ./Dockerfile.base -t abeimler/simple-cppbuilder:base . - -docker build --force-rm=true -t abeimler/simple-cppbuilder . -#docker build --force-rm=true -t abeimler/simple-cppbuilder:1.7.0 . - -docker build --force-rm=true -f ./Dockerfile.without-vcpkg -t abeimler/simple-cppbuilder:without-vcpkg . - -docker build --force-rm=true -f ./Dockerfile.clang -t abeimler/simple-cppbuilder:clang . - -docker build --force-rm=true --build-arg extra_libraries="mesa glu glfw-x11 libx11 libxrender libxext libxcursor libxrandr libxinerama xorg-server-devel" -t abeimler/simple-cppbuilder:opengl-libs . -docker build --force-rm=true --build-arg extra_libraries="boost" -t abeimler/simple-cppbuilder:boost . -docker build --force-rm=true --build-arg extra_libraries="abseil-cpp" -t abeimler/simple-cppbuilder:abseil-cpp . -docker build --force-rm=true -f ./Dockerfile.clang --build-arg extra_libraries="libc++" -t abeimler/simple-cppbuilder:libcpp . - -docker build --force-rm=true -f ./Dockerfile.ci -t abeimler/simple-cppbuilder:ci . -docker build --force-rm=true -f ./Dockerfile.ci-setup-cpp -t abeimler/simple-cppbuilder:ci-setup-cpp . -docker build --force-rm=true -f ./Dockerfile.ci-windows -t abeimler/simple-cppbuilder:ci-x64-mingw-w64 . \ No newline at end of file diff --git a/scripts/docker-test.setup-cpp.sh b/scripts/docker-test.setup-cpp.sh index bddf649..f065fb7 100755 --- a/scripts/docker-test.setup-cpp.sh +++ b/scripts/docker-test.setup-cpp.sh @@ -1,5 +1,7 @@ #!/bin/bash +source ~/.cpprc + set -euo pipefail ${CMAKE} -B build -S . -G "${CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN_FILE}" ${CMAKE_ARGS} diff --git a/taskfiles/.dockerignore b/taskfiles/.dockerignore new file mode 100644 index 0000000..deb2648 --- /dev/null +++ b/taskfiles/.dockerignore @@ -0,0 +1 @@ +docker/ \ No newline at end of file diff --git a/taskfiles/TaskfileCross.yml b/taskfiles/TaskfileCross.yml new file mode 100644 index 0000000..c89755b --- /dev/null +++ b/taskfiles/TaskfileCross.yml @@ -0,0 +1,39 @@ +--- +version: "3" + +vars: + VCPKG_ROOT: '{{.VCPKG_ROOT | default "./vcpkg"}}' + PROJECT_DIR: '{{.PROJECT_DIR | default "."}}' + CMAKE: '{{.CMAKE | default "cmake"}}' + MAKE: '{{.MAKE | default "make"}}' + CROSS_CMAKE: '{{.CROSS_CMAKE | default "cmake"}}' + CROSS_MAKE: '{{.CROSS_MAKE | default "make"}}' + TARGET: '{{.TARGET | default "all"}}' + CMAKE_GENERATOR: '{{.CMAKE_GENERATOR | default "Ninja Multi-Config"}}' + BUILD_TYPE: '{{.BUILD_TYPE | default "Release"}}' + TOOLCHAIN_FILE: '{{.TOOLCHAIN_FILE | default "./vcpkg/scripts/buildsystems/vcpkg.cmake"}}' + +tasks: + configure: + dir: '{{.PROJECT_DIR}}' + cmds: + - . {{.SETUP_ENV_SCRIPT}} {{.SETUP_ENV_SCRIPT_ARGS}} + - > + {{.CROSS_CMAKE}} -B build -S . -G "{{.CMAKE_GENERATOR}}" \ + -DCMAKE_BUILD_TYPE="{{.BUILD_TYPE}}" \ + -DCMAKE_TOOLCHAIN_FILE="{{.TOOLCHAIN_FILE}}" \ + -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE="{{.CHAINLOAD_TOOLCHAIN_FILE}}" \ + -DVCPKG_TARGET_TRIPLET="{{.TARGET_TRIPLET}}" \ + {{.CROSS_CMAKE_ARGS}} {{.CMAKE_ARGS}} + + build: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: configure + - cd build && {{.CROSS_MAKE}} "{{.TARGET}}" + + test: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: build + - ctest --build-test diff --git a/taskfiles/TaskfileDefault.yml b/taskfiles/TaskfileDefault.yml new file mode 100644 index 0000000..afd037e --- /dev/null +++ b/taskfiles/TaskfileDefault.yml @@ -0,0 +1,46 @@ +--- +version: "3" + +includes: + without-vcpkg-toolchain: ./TaskfileWithoutVcpkgToolchain.yml + cross: ./TaskfileCross.yml + +vars: + VCPKG_ROOT: '{{.VCPKG_ROOT | default "./vcpkg"}}' + PROJECT_DIR: '{{.PROJECT_DIR | default "."}}' + CMAKE: '{{.CMAKE | default "cmake"}}' + MAKE: '{{.MAKE | default "make"}}' + TARGET: '{{.TARGET | default "all"}}' + CMAKE_GENERATOR: '{{.CMAKE_GENERATOR | default "Ninja Multi-Config"}}' + BUILD_TYPE: '{{.BUILD_TYPE | default "Release"}}' + TOOLCHAIN_FILE: '{{.TOOLCHAIN_FILE | default "./vcpkg/scripts/buildsystems/vcpkg.cmake"}}' + +tasks: + configure: + dir: '{{.PROJECT_DIR}}' + cmds: + - > + {{.CMAKE}} -B build -S . -G "{{.CMAKE_GENERATOR}}" \ + -DCMAKE_BUILD_TYPE="{{.BUILD_TYPE}}" \ + {{.CMAKE_ARGS}} + + configure:with-vcpkg: + dir: '{{.PROJECT_DIR}}' + cmds: + - > + {{.CMAKE}} -B build -S . -G "{{.CMAKE_GENERATOR}}" \ + -DCMAKE_BUILD_TYPE="{{.BUILD_TYPE}}" \ + -DCMAKE_TOOLCHAIN_FILE="{{.TOOLCHAIN_FILE}}" \ + {{.CMAKE_ARGS}} + + build: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: configure + - '{{.CMAKE}} --build build --target "{{.TARGET}}"' + + test: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: build + - ctest --build-test --test-dir build diff --git a/taskfiles/TaskfileSetupCpp.yml b/taskfiles/TaskfileSetupCpp.yml new file mode 100644 index 0000000..d0e77bd --- /dev/null +++ b/taskfiles/TaskfileSetupCpp.yml @@ -0,0 +1,45 @@ +--- +version: "3" + +vars: + PROJECT_DIR: '{{.PROJECT_DIR | default "."}}' + CMAKE: '{{.CMAKE | default "cmake"}}' + MAKE: '{{.MAKE | default "make"}}' + TARGET: '{{.TARGET | default "all"}}' + CMAKE_GENERATOR: '{{.CMAKE_GENERATOR | default "Ninja Multi-Config"}}' + BUILD_TYPE: '{{.BUILD_TYPE | default "Release"}}' + +tasks: + configure: + dir: '{{.PROJECT_DIR}}' + cmds: + - source ~/.cpprc + - > + {{.CMAKE}} -B build -S . -G "{{.CMAKE_GENERATOR}}" \ + -DCMAKE_BUILD_TYPE="{{.BUILD_TYPE}}" \ + {{.CMAKE_ARGS}} + + build: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: configure + - '{{.CMAKE}} --build build --target "{{.TARGET}}"' + + test: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: build + - ctest --build-test --test-dir build + + coverage: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: test + - lcov --capture --directory build --output-file build/coverage.info + - lcov --remove build/coverage.info '/usr/*' --output-file build/coverage.info + + coverage:debug: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: coverage + - lcov --list build/coverage.info diff --git a/taskfiles/TaskfileSetupCppCross.yml b/taskfiles/TaskfileSetupCppCross.yml new file mode 100644 index 0000000..5ac0384 --- /dev/null +++ b/taskfiles/TaskfileSetupCppCross.yml @@ -0,0 +1,49 @@ +--- +version: "3" + +vars: + PROJECT_DIR: '{{.PROJECT_DIR | default "."}}' + CMAKE: '{{.CMAKE | default "cmake"}}' + MAKE: '{{.MAKE | default "make"}}' + CROSS_CMAKE: '{{.CROSS_CMAKE | default "cmake"}}' + CROSS_MAKE: '{{.CROSS_MAKE | default "make"}}' + TARGET: '{{.TARGET | default "all"}}' + CMAKE_GENERATOR: '{{.CMAKE_GENERATOR | default "Ninja Multi-Config"}}' + BUILD_TYPE: '{{.BUILD_TYPE | default "Release"}}' + +tasks: + configure: + dir: '{{.PROJECT_DIR}}' + cmds: + - source ~/.cpprc + - > + {{.CROSS_CMAKE}} -B build -S . -G "{{.CMAKE_GENERATOR}}" \ + -DCMAKE_BUILD_TYPE="{{.BUILD_TYPE}}" \ + -DCMAKE_TOOLCHAIN_FILE="{{.TOOLCHAIN_FILE}}" \ + -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE="{{.CHAINLOAD_TOOLCHAIN_FILE}}" \ + -DVCPKG_TARGET_TRIPLET="{{.TARGET_TRIPLET}}" \ + {{.CMAKE_ARGS}} + build: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: configure + - cd build && {{.CROSS_MAKE}} "{{.TARGET}}" + + test: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: build + - ctest --build-test --test-dir build + + coverage: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: test + - lcov --capture --directory build --output-file build/coverage.info + - lcov --remove build/coverage.info '/usr/*' --output-file build/coverage.info + + coverage:debug: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: coverage + - lcov --list build/coverage.info diff --git a/taskfiles/TaskfileWithoutVcpkgToolchain.yml b/taskfiles/TaskfileWithoutVcpkgToolchain.yml new file mode 100644 index 0000000..1b8703f --- /dev/null +++ b/taskfiles/TaskfileWithoutVcpkgToolchain.yml @@ -0,0 +1,30 @@ +--- +version: "3" + +vars: + PROJECT_DIR: '{{.PROJECT_DIR | default "."}}' + CMAKE: '{{.CMAKE | default "cmake"}}' + MAKE: '{{.MAKE | default "make"}}' + TARGET: '{{.TARGET | default "all"}}' + CMAKE_GENERATOR: '{{.CMAKE_GENERATOR | default "Ninja Multi-Config"}}' + BUILD_TYPE: '{{.BUILD_TYPE | default "Release"}}' + +tasks: + configure: + dir: '{{.PROJECT_DIR}}' + cmds: + - > + {{.CMAKE}} -B build -S . -G "{{.CMAKE_GENERATOR}}" \ + -DCMAKE_BUILD_TYPE="{{.BUILD_TYPE}}" {{.CMAKE_ARGS}} + + build: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: configure + - '{{.CMAKE}} --build build --target "{{.TARGET}}"' + + test: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: build + - ctest --build-test --test-dir build diff --git a/taskfiles/docker/Build.yml b/taskfiles/docker/Build.yml new file mode 100644 index 0000000..19f34bc --- /dev/null +++ b/taskfiles/docker/Build.yml @@ -0,0 +1,288 @@ +version: '3' + +tasks: + base: + - docker build --force-rm=true -f ./Dockerfile.base -t abeimler/simple-cppbuilder:base . + - docker build --force-rm=true -t abeimler/simple-cppbuilder . + #docker build --force-rm=true -t abeimler/simple-cppbuilder:1.7.0 . + + base:libs: + - task: base + - docker build --force-rm=true -f ./Dockerfile.without-vcpkg -t abeimler/simple-cppbuilder:without-vcpkg . + - docker build --force-rm=true -f ./Dockerfile.clang -t abeimler/simple-cppbuilder:clang . + - docker build --force-rm=true --build-arg extra_libraries="mesa glu glfw-x11 libx11 libxrender libxext libxcursor libxrandr libxinerama xorg-server-devel" -t abeimler/simple-cppbuilder:opengl-libs . + - docker build --force-rm=true --build-arg extra_libraries="boost" -t abeimler/simple-cppbuilder:boost . + - docker build --force-rm=true --build-arg extra_libraries="abseil-cpp" -t abeimler/simple-cppbuilder:abseil-cpp . + - docker build --force-rm=true -f ./Dockerfile.clang --build-arg extra_libraries="libc++" -t abeimler/simple-cppbuilder:libcpp . + + ci: + - docker build --force-rm=true -f ./Dockerfile.ci -t abeimler/simple-cppbuilder:ci . + - docker build --force-rm=true -f ./Dockerfile.ci-windows -t abeimler/simple-cppbuilder:ci-x64-mingw-w64 . + - docker build --force-rm=true -f ./Dockerfile.ci-setup-cpp -t abeimler/simple-cppbuilder:ci-setup-cpp . + + emscripten: + - task: base + - docker build --force-rm=true -f ./Dockerfile.emscripten -t abeimler/simple-cppbuilder:emscripten . + + mingw: + - task: base + - | + docker build --force-rm=true -f ./Dockerfile.cross \ + --build-arg vcpkg_target_triplet="x64-mingw-dynamic" \ + --build-arg cross_triple="x86_64-w64-mingw32" \ + --build-arg install_toolchain="mingw-w64-toolchain" \ + --build-arg install_extras_toolchain="mingw-w64-pkg-config mingw-w64-cmake mingw-w64-configure mingw-w64-make mingw-w64-environment powershell-bin" \ + --build-arg cmake_generator="Ninja" \ + --build-arg make="make" \ + --build-arg cmake="cmake" \ + --build-arg cross_make="x86_64-w64-mingw32-make" \ + --build-arg cross_cmake="x86_64-w64-mingw32-cmake" \ + --build-arg setup_env_script="mingw-env" \ + --build-arg setup_env_script_args="x86_64-w64-mingw32" \ + --build-arg cmake_toolchain_file="/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake" \ + --build-arg docker_build_script="docker-build.mingw.sh" \ + --build-arg docker_test_script="docker-test.mingw.sh" \ + --build-arg docker_entrypoint="docker-entrypoint.mingw.sh" \ + -t abeimler/simple-cppbuilder:x64-mingw-w64 . + - | + docker build --force-rm=true -f ./Dockerfile.cross \ + --build-arg vcpkg_target_triplet="x86-mingw-dynamic" \ + --build-arg cross_triple="i686-w64-mingw32" \ + --build-arg install_toolchain="mingw-w64-toolchain" \ + --build-arg install_extras_toolchain="mingw-w64-pkg-config mingw-w64-cmake mingw-w64-configure mingw-w64-make mingw-w64-environment powershell-bin" \ + --build-arg cmake_generator="Ninja" \ + --build-arg make="make" \ + --build-arg cmake="cmake" \ + --build-arg cross_make="i686-w64-mingw32-make" \ + --build-arg cross_cmake="i686-w64-mingw32-cmake" \ + --build-arg setup_env_script="mingw-env" \ + --build-arg setup_env_script_args="i686-w64-mingw32" \ + --build-arg cmake_toolchain_file="/usr/share/mingw/toolchain-i686-w64-mingw32.cmake" \ + --build-arg docker_build_script="docker-build.mingw.sh" \ + --build-arg docker_test_script="docker-test.mingw.sh" \ + --build-arg docker_entrypoint="docker-entrypoint.mingw.sh" \ + -t abeimler/simple-cppbuilder:x86-mingw-w64 . + + arm: + - task: base + - | + docker build --force-rm=true -f ./Dockerfile.cross \ + --build-arg vcpkg_target_triplet="arm64-linux" \ + --build-arg cross_triple="aarch64-linux-gnu" \ + --build-arg install_toolchain="aarch64-linux-gnu-gcc" \ + --build-arg cmake_generator="Ninja" \ + --build-arg make="ninja" \ + --build-arg cmake="cmake" \ + --build-arg cross_make="ninja" \ + --build-arg cross_cmake="cmake" \ + --build-arg cmake_toolchain_file="/home/cmake/aarch64.toolchain.cmake" \ + -t abeimler/simple-cppbuilder:aarch64-linux . + - | + docker build --force-rm=true -f ./Dockerfile.cross \ + --build-arg vcpkg_target_triplet="arm-linux" \ + --build-arg cross_triple="arm-none-eabi" \ + --build-arg install_toolchain="arm-none-eabi-gcc" \ + --build-arg cmake_generator="Ninja" \ + --build-arg make="ninja" \ + --build-arg cmake="cmake" \ + --build-arg cross_make="ninja" \ + --build-arg cross_cmake="cmake" \ + --build-arg cmake_toolchain_file="/home/cmake/gnueabihf.toolchain.cmake" \ + -t abeimler/simple-cppbuilder:arm-eabi . + ## @FIXME: https://aur.archlinux.org/packages/arm-linux-gnueabihf-gcc-stage1/#pinned-806072 + #- | + # docker build --force-rm=true -f ./Dockerfile.cross \ + # --build-arg vcpkg_target_triplet="arm-linux" \ + # --build-arg cross_triple="arm-linux-gnueabihf" \ + # --build-arg install_toolchain="arm-linux-gnueabihf-gcc-stage1 arm-linux-gnueabihf-gcc-stage2 arm-linux-gnueabihf-gcc" \ + # --build-arg cmake_generator="Ninja" \ + # --build-arg make="ninja" \ + # --build-arg cmake="cmake" \ + # --build-arg cmake_toolchain_file="/home/cmake/arm.toolchain.cmake" \ + # -t abeimler/simple-cppbuilder:arm-linux-gnueabihf . + + arm:cross: + - task: base + - | + docker build --force-rm=true -f ./Dockerfile.crosstool-ng \ + --build-arg vcpkg_target_triplet="arm-linux" \ + --build-arg cross_triple="arm-unknown-linux-gnueabi" \ + --build-arg cmake_toolchain_file="/home/cmake/arm-toolchain.cmake" \ + -t abeimler/simple-cppbuilder:arm-unknown-linux-gnueabi . + #- | + # docker build --force-rm=true -f ./Dockerfile.crosstool-ng \ + # --build-arg vcpkg_target_triplet="avr" \ + # --build-arg cross_triple="avr" \ + # --build-arg cmake_toolchain_file="/home/cmake/avr-toolchain.cmake" \ + # -t abeimler/simple-cppbuilder:avr . + #- | + # docker build --force-rm=true -f ./Dockerfile.crosstool-ng \ + # --build-arg vcpkg_target_triplet="ppc64le-linux" \ + # --build-arg cross_triple="powerpc64le-unknown-linux-gnu" \ + # --build-arg cmake_toolchain_file="/home/cmake/ppc64le-toolchain.cmake" \ + # -t abeimler/simple-cppbuilder:powerpc64le-unknown-linux-gnu . + + arm:rpi: + - task: base + - | + docker build --force-rm=true -f ./Dockerfile.crosstool-ng-rpi \ + --build-arg vcpkg_target_triplet="arm-linux" \ + --build-arg cross_triple="armv8-rpi4-linux-gnueabihf" \ + --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ + -t abeimler/simple-cppbuilder:rpi4 . + - | + docker build --force-rm=true -f ./Dockerfile.crosstool-ng-rpi \ + --build-arg vcpkg_target_triplet="arm-linux" \ + --build-arg cross_triple="armv8-rpi3-linux-gnueabihf" \ + --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ + -t abeimler/simple-cppbuilder:rpi3 . + - | + docker build --force-rm=true -f ./Dockerfile.crosstool-ng-rpi \ + --build-arg vcpkg_target_triplet="arm-linux" \ + --build-arg cross_triple="armv7-rpi2-linux-gnueabihf" \ + --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ + -t abeimler/simple-cppbuilder:rpi2 . + - | + docker build --force-rm=true -f ./Dockerfile.crosstool-ng-rpi \ + --build-arg vcpkg_target_triplet="arm-linux" \ + --build-arg cross_triple="armv6-unknown-linux-gnueabihf" \ + --build-arg cmake_toolchain_file="/home/cmake/arm-rpi-toolchain.cmake" \ + -t abeimler/simple-cppbuilder:rpi1 . + - | + docker build --force-rm=true -f ./Dockerfile.crosstool-ng-rpi \ + --build-arg vcpkg_target_triplet="arm64-linux" \ + --build-arg cross_triple="aarch64-rpi4-linux-gnu" \ + --build-arg cmake_toolchain_file="/home/cmake/aarch64-rpi-toolchain.cmake" \ + -t abeimler/simple-cppbuilder:rpi4-aarch64 . + - | + docker build --force-rm=true -f ./Dockerfile.crosstool-ng-rpi \ + --build-arg vcpkg_target_triplet="arm64-linux" \ + --build-arg cross_triple="aarch64-rpi3-linux-gnu" \ + --build-arg cmake_toolchain_file="/home/cmake/aarch64-rpi-toolchain.cmake" \ + -t abeimler/simple-cppbuilder:rpi3-aarch64 . + + android-template: + internal: true + cmds: + - task: base + - | + docker build --force-rm=true -f ./Dockerfile.android-v \ + --build-arg vcpkg_target_triplet="arm-android" \ + --build-arg cmake="android-armv7a-eabi-cmake" \ + --build-arg android_abi="armeabi-v7a" \ + --build-arg android_target="{{.ANDROID_TARGET}}" \ + -t abeimler/simple-cppbuilder:arm-android-{{.ANDROID_TARGET}} . + - | + docker build --force-rm=true -f ./Dockerfile.android-v \ + --build-arg vcpkg_target_triplet="arm64-android" \ + --build-arg cmake="android-aarch64-cmake" \ + --build-arg android_abi="arm64-v8a" \ + --build-arg android_target="{{.ANDROID_TARGET}}" \ + -t abeimler/simple-cppbuilder:arm64-android{{.ANDROID_TARGET}} . + - | + docker build --force-rm=true -f ./Dockerfile.android-v \ + --build-arg vcpkg_target_triplet="x86-android" \ + --build-arg cmake="android-x86-cmake" \ + --build-arg android_abi="x86" \ + --build-arg android_target="{{.ANDROID_TARGET}}" \ + -t abeimler/simple-cppbuilder:x86-android-{{.ANDROID_TARGET}} . + - | + docker build --force-rm=true -f ./Dockerfile.android-v \ + --build-arg vcpkg_target_triplet="x64-android" \ + --build-arg cmake="android-x86-64-cmake" \ + --build-arg android_abi="x86_64" \ + --build-arg android_target="{{.ANDROID_TARGET}}" \ + -t abeimler/simple-cppbuilder:x64-android-{{.ANDROID_TARGET}} . + + android:21: + cmds: + - task: android-template + vars: + ANDROID_TARGET: 21 + + android:24: + cmds: + - task: android-template + vars: + ANDROID_TARGET: 24 + + android: + - task: base + - | + docker build --force-rm=true -f ./Dockerfile.android \ + --build-arg vcpkg_target_triplet="arm-android" \ + --build-arg cmake="android-armv7a-eabi-cmake" \ + --build-arg android_abi="armeabi-v7a" \ + -t abeimler/simple-cppbuilder:arm-android . + - | + docker build --force-rm=true -f ./Dockerfile.android \ + --build-arg vcpkg_target_triplet="arm64-android" \ + --build-arg cmake="android-aarch64-cmake" \ + --build-arg android_abi="arm64-v8a" \ + -t abeimler/simple-cppbuilder:arm64-android . + - | + docker build --force-rm=true -f ./Dockerfile.android \ + --build-arg vcpkg_target_triplet="x86-android" \ + --build-arg cmake="android-x86-cmake" \ + --build-arg android_abi="x86" \ + -t abeimler/simple-cppbuilder:x86-android . + - | + docker build --force-rm=true -f ./Dockerfile.android \ + --build-arg vcpkg_target_triplet="x64-android" \ + --build-arg cmake="android-x86-64-cmake" \ + --build-arg android_abi="x86_64" \ + -t abeimler/simple-cppbuilder:x64-android . + + mingw:mxe: + - task: base + - | + docker build --force-rm=true -f ./Dockerfile.mxe \ + --build-arg vcpkg_target_triplet="x64-mingw-dynamic" \ + --build-arg cross_triplet="x86_64-w64-mingw32.shared" \ + --build-arg processor="x86_64" \ + -t abeimler/simple-cppbuilder:x64-mingw-w64-mxe . + - | + docker build --force-rm=true -f ./Dockerfile.mxe \ + --build-arg vcpkg_target_triplet="x86-mingw-dynamic" \ + --build-arg cross_triplet="i686-w64-mingw32.shared" \ + --build-arg processor="i686" \ + -t abeimler/simple-cppbuilder:x86-mingw-w64-mxe . + - | + docker build --force-rm=true -f ./Dockerfile.mxe \ + --build-arg vcpkg_target_triplet="x64-mingw-static" \ + --build-arg cross_triplet="x86_64-w64-mingw32.static" \ + --build-arg processor="x86_64" \ + -t abeimler/simple-cppbuilder:x64-mingw-w64-mxe-static . + - | + docker build --force-rm=true -f ./Dockerfile.mxe \ + --build-arg vcpkg_target_triplet="x86-mingw-static" \ + --build-arg cross_triplet="i686-w64-mingw32.static" \ + --build-arg processor="i686" \ + -t abeimler/simple-cppbuilder:x86-mingw-w64-mxe-static . + + gcc: + - task: base + #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=11 -t abeimler/simple-cppbuilder:gcc-11 . + - docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=10 -t abeimler/simple-cppbuilder:gcc-10 . + - docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=9 -t abeimler/simple-cppbuilder:gcc-9 . + #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=8 -t abeimler/simple-cppbuilder:gcc-8 . + #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=7 -t abeimler/simple-cppbuilder:gcc-7 . + #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=6 -t abeimler/simple-cppbuilder:gcc-6 . + #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=5 -t abeimler/simple-cppbuilder:gcc-5 . + #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=49 -t abeimler/simple-cppbuilder:gcc-4.9 . + + + all: + - task: base + - task: base:libs + - task: ci + - task: emscripten + - task: mingw + - task: arm + - task: android + #- task: android:21 + #- task: android:24 + #- task: arm:cross + #- task: arm:rpi + #- task: gcc + #- task: mingw:mxe diff --git a/taskfiles/docker/Test.yml b/taskfiles/docker/Test.yml new file mode 100644 index 0000000..8b594a0 --- /dev/null +++ b/taskfiles/docker/Test.yml @@ -0,0 +1,59 @@ +version: '3' + +tasks: + base: + - container-structure-test test --image abeimler/simple-cppbuilder:base --config tests/base-test.yaml + - container-structure-test test --image abeimler/simple-cppbuilder --config tests/test.yaml + - docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-build + - docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-build-make + - docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-test + - docker-compose -f examples/example/docker-compose.yml up --build example-gcc-release-build + - docker-compose -f examples/example/docker-compose.yml up --build example-gcc-release-test + - docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-test-cov + - docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-test-lcov + - docker-compose -f examples/example/docker-compose.yml down --volumes --rmi local + + clang: + - container-structure-test test --image abeimler/simple-cppbuilder:clang --config tests/clang-test.yaml + - docker-compose -f examples/example/docker-compose.yml up --build example-clang-debug-build + - docker-compose -f examples/example/docker-compose.yml up --build example-clang-debug-test + - docker-compose -f examples/example/docker-compose.yml up --build example-clang-release-build + - docker-compose -f examples/example/docker-compose.yml up --build example-clang-release-test + - docker-compose -f examples/example/docker-compose.yml down --volumes --rmi local + + cpp_starter_project: + - docker-compose -f examples/cpp_starter_project/docker-compose.yml up --build cpp_starter_project-gcc-debug-build cpp_starter_project-gcc-debug-test + - docker-compose -f examples/cpp_starter_project/docker-compose.yml up --build cpp_starter_project-clang-debug-build cpp_starter_project-clang-release-build + - docker-compose -f examples/cpp_starter_project/docker-compose.yml up --build cpp_starter_project-gcc-debug-test-cov + - docker-compose -f examples/cpp_starter_project/docker-compose.yml up --build cpp_starter_project-fltk-clang-release-build + - docker-compose -f examples/cpp_starter_project/docker-compose.yml up --build cpp_starter_project-gtkmm-clang-release-build + - docker-compose -f examples/cpp_starter_project/docker-compose.yml down --volumes --rmi local + + ci: + - container-structure-test test --image abeimler/simple-cppbuilder:ci --config tests/ci-test.yaml + - container-structure-test test --image abeimler/simple-cppbuilder:ci-x64-mingw-w64 --config tests/ci-windows-test.yaml + - container-structure-test test --image abeimler/simple-cppbuilder:ci-setup-cpp --config tests/ci-setup-cpp-test.yaml + - docker-compose -f examples/example-ci/docker-compose.yml up --build example-gcc-build + - docker-compose -f examples/example-ci/docker-compose.yml up --build example-gcc-test + - docker-compose -f examples/example-ci/docker-compose.yml up --build example-gcc-test-cov + - docker-compose -f examples/example-ci/docker-compose.yml up --build example-windows-build + - docker-compose -f examples/example-ci/docker-compose.yml down --volumes --rmi local + + single: + - docker run -it --rm --name my-cpp-project -v "$PWD/examples/single":/home/project -w /home/project abeimler/simple-cppbuilder ./docker-build.sh + - docker run -it --rm --name my-cpp-project -v "$PWD/examples/single":/home/project -w /home/project abeimler/simple-cppbuilder task -t /home/taskfiles/Taskfile.yml build + + emscripten: + - container-structure-test test --image abeimler/simple-cppbuilder:emscripten --config tests/emscripten-test.yaml + - docker-compose -f examples/web-example/docker-compose.yml up --build + - docker-compose -f examples/web-example/docker-compose.yml down --volumes --rmi local + + mingw: + - container-structure-test test --image abeimler/simple-cppbuilder:x64-mingw-w64 --config tests/mingw-test.yaml + - docker-compose -f examples/example/docker-compose.cross.yml up --build example-mingw-release-build + - docker-compose -f examples/example/docker-compose.cross.yml down --volumes --rmi local + + android: + - container-structure-test test --image abeimler/simple-cppbuilder:arm-android --config tests/arm-android-test.yaml + - docker-compose -f examples/android-example/docker-compose.yml up --build + - docker-compose -f examples/android-example/docker-compose.yml down --volumes --rmi local \ No newline at end of file From 2db2b5292ebe63527560e58f182ffe6a92666e06 Mon Sep 17 00:00:00 2001 From: abeimler Date: Tue, 3 Jan 2023 19:05:53 +0100 Subject: [PATCH 4/6] feat: update examples with taskfile * clean up docker files --- Dockerfile | 22 +++--- Dockerfile.android | 52 ++++++++------ Dockerfile.android-v | 51 +++++++------ Dockerfile.ci | 47 ++++++------ Dockerfile.ci-setup-cpp | 41 ++++++----- Dockerfile.ci-windows | 48 ++++++++----- Dockerfile.cross | 51 +++++++------ Dockerfile.crosstool-ng | 44 ++++++------ Dockerfile.crosstool-ng-rpi | 37 +++++----- Dockerfile.emscripten | 32 +++++---- Dockerfile.gcc | 13 ++-- Dockerfile.mxe | 35 +++++---- Dockerfile.rpi-without-tools | 39 +++++----- Dockerfile.without-vcpkg | 2 + LICENSE | 2 +- examples/android-example/Dockerfile | 2 +- examples/cpp_starter_project/Dockerfile | 16 ++--- examples/example-ci/Dockerfile | 6 +- examples/example/Dockerfile | 16 ++--- examples/web-example/Dockerfile | 2 +- taskfiles/docker/Test.yml | 19 ++++- test.sh | 96 ------------------------- tests/arm-android-test.yaml | 11 ++- tests/ci-setup-cpp-test.yaml | 3 + tests/emscripten-test.yaml | 3 + 25 files changed, 336 insertions(+), 354 deletions(-) delete mode 100755 test.sh diff --git a/Dockerfile b/Dockerfile index 8f43a3d..d869b45 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,13 +21,22 @@ ENV CXX "g++" ENV CMAKE "cmake" ENV MAKE "make" +# install vcpkg +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg +RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + +ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" + + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" ENV CMAKE_GENERATOR "Ninja" ENV CMAKE_ARGS "" - # setup project env WORKDIR /home/project COPY ./scripts/docker-build.sh ./docker-build.sh @@ -36,13 +45,6 @@ COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh COPY ./taskfiles/*.yml /home/taskfiles/ COPY ./taskfiles/TaskfileDefault.yml /home/taskfiles/Taskfile.yml -# install vcpkg -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg -RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" - -ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" -ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" - +ENV PROJECT_DIR /home/project +WORKDIR /home/project RUN mkdir build \ No newline at end of file diff --git a/Dockerfile.android b/Dockerfile.android index c82ca21..f3e0bf6 100644 --- a/Dockerfile.android +++ b/Dockerfile.android @@ -33,29 +33,7 @@ RUN runuser -l yay -c \ rm -rf /home/yay/.cache/* && \ ln -s /opt/android-ndk /opt/android-sdk/ndk-bundle -# setup project env -WORKDIR /home/project -COPY ./scripts/docker-build.android.sh ./docker-build.sh -COPY ./taskfiles/*.yml /home/taskfiles/ -COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml -# install vcpkg -## https://github.com/microsoft/vcpkg/blob/master/docs/users/android.md -ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git -RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" - -# cross compiler settings -ENV CC $cc -ENV CXX $cxx -ENV PROCESSOR $processor -ENV ANDROID_ABI $android_abi -ENV TARGET_TRIPLET $vcpkg_target_triplet -ENV CROSS_CMAKE $cmake -ENV CROSS_MAKE $make ENV ANDROID_HOME "/opt/android-sdk" ENV ANDROID_NDK_HOME "/opt/android-ndk" ENV ANDROID_TOOLCHAIN "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64" @@ -69,12 +47,32 @@ ARG setup_env_script="android-env" ARG setup_env_script_args="$android_abi" ENV SETUP_ENV_SCRIPT $setup_env_script ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args -#RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile RUN . $setup_env_script $setup_env_script_args + +# cross compiler settings +ENV CC $cc +ENV CXX $cxx +ENV PROCESSOR $processor +ENV ANDROID_ABI $android_abi +ENV TARGET_TRIPLET $vcpkg_target_triplet +ENV CROSS_CMAKE $cmake +ENV CROSS_MAKE $make + ENV CMAKE $CROSS_CMAKE ENV MAKE $CROSS_MAKE +# install vcpkg +## https://github.com/microsoft/vcpkg/blob/master/docs/users/android.md +ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git +RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" @@ -85,4 +83,12 @@ ENV CHAINLOAD_TOOLCHAIN_FILE $ANDROID_TOOLCHAIN_FILE ENV CROSS_CMAKE_ARGS -DANDROID_ABI="$ANDROID_ABI" ENV CMAKE_ARGS "" +# setup project env +WORKDIR /home/project +COPY ./scripts/docker-build.android.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml + +ENV PROJECT_DIR /home/project +WORKDIR /home/project RUN mkdir build diff --git a/Dockerfile.android-v b/Dockerfile.android-v index a04dcaf..0336e82 100644 --- a/Dockerfile.android-v +++ b/Dockerfile.android-v @@ -38,29 +38,7 @@ RUN runuser -l yay -c \ runuser -l yay -c "yay -Scc --noconfirm" && \ rm -rf /home/yay/.cache/* -# setup project env -WORKDIR /home/project -COPY ./scripts/docker-build.android.sh ./docker-build.sh -COPY ./taskfiles/*.yml /home/taskfiles/ -COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml - -# install vcpkg -## https://github.com/microsoft/vcpkg/blob/master/docs/users/android.md -ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git -RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" -# cross compiler settings -ENV CC $cc -ENV CXX $cxx -ENV PROCESSOR $processor -ENV ANDROID_ABI $android_abi -ENV TARGET_TRIPLET $vcpkg_target_triplet -ENV CROSS_CMAKE $cmake -ENV CROSS_MAKE $make ENV ANDROID_HOME "/opt/android-sdk" ENV ANDROID_NDK "/opt/android-ndk" ENV ANDROID_NDK_HOME "/opt/android-ndk" @@ -74,12 +52,31 @@ ARG setup_env_script="android-env" ARG setup_env_script_args="$android_abi" ENV SETUP_ENV_SCRIPT $setup_env_script ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args -#RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile RUN . $setup_env_script $setup_env_script_args +# cross compiler settings +ENV CC $cc +ENV CXX $cxx +ENV PROCESSOR $processor +ENV ANDROID_ABI $android_abi +ENV TARGET_TRIPLET $vcpkg_target_triplet +ENV CROSS_CMAKE $cmake +ENV CROSS_MAKE $make + ENV CMAKE $CROSS_CMAKE ENV MAKE $CROSS_MAKE +# install vcpkg +## https://github.com/microsoft/vcpkg/blob/master/docs/users/android.md +ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git +RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" @@ -90,4 +87,12 @@ ENV CHAINLOAD_TOOLCHAIN_FILE $ANDROID_TOOLCHAIN_FILE ENV CROSS_CMAKE_ARGS -DANDROID_ABI="$ANDROID_ABI" ENV CMAKE_ARGS "" +# setup project env +WORKDIR /home/project +COPY ./scripts/docker-build.android.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml + +ENV PROJECT_DIR /home/project +WORKDIR /home/project RUN mkdir build \ No newline at end of file diff --git a/Dockerfile.ci b/Dockerfile.ci index 1677d31..016968f 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -73,18 +73,10 @@ RUN apt-get update -y && \ curl gnupg coreutils && \ apt-get clean && rm -rf /var/lib/apt/lists/* - -# set default compiler -ENV CC "gcc" -ENV CXX "g++" -ENV CMAKE "cmake" -ENV MAKE "ninja" - -# build script settings -ENV TARGET "all" -ENV BUILD_TYPE "Release" -ENV CMAKE_GENERATOR "Ninja" -ENV CMAKE_ARGS "" +# install task +ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh +RUN chmod +x /tmp/taskfile_install.sh +RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh # install CodeCov WORKDIR /home/codecov @@ -97,18 +89,12 @@ RUN shasum -a 256 -c codecov.SHA256SUM RUN chmod +x codecov ENV CODECOV "/home/codecov/codecov" -# install task -ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh -RUN chmod +x /tmp/taskfile_install.sh -RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh -# setup project env -WORKDIR /home/project -COPY ./scripts/docker-build.sh ./docker-build.sh -COPY ./scripts/docker-test.sh ./docker-test.sh -COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh -COPY ./taskfiles/*.yml /home/taskfiles/ -COPY ./taskfiles/TaskfileDefault.yml /home/taskfiles/Taskfile.yml +# set default compiler +ENV CC "gcc" +ENV CXX "g++" +ENV CMAKE "cmake" +ENV MAKE "ninja" # install vcpkg ENV VCPKG_DISABLE_METRICS 1 @@ -119,6 +105,21 @@ ENV VCPKG_ROOT "/home/project/vcpkg" ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" + +# build script settings +ENV TARGET "all" +ENV BUILD_TYPE "Release" +ENV CMAKE_GENERATOR "Ninja" +ENV CMAKE_ARGS "" + +# setup project env +WORKDIR /home/project +COPY ./scripts/docker-build.sh ./docker-build.sh +COPY ./scripts/docker-test.sh ./docker-test.sh +COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileDefault.yml /home/taskfiles/Taskfile.yml + ENV PROJECT_DIR /home/project WORKDIR /home/project RUN mkdir build diff --git a/Dockerfile.ci-setup-cpp b/Dockerfile.ci-setup-cpp index 49fe417..9963ab9 100644 --- a/Dockerfile.ci-setup-cpp +++ b/Dockerfile.ci-setup-cpp @@ -1,5 +1,5 @@ ## base image -FROM ubuntu:20.04 AS base +FROM ubuntu:22.04 AS base ARG extra_libraries @@ -28,7 +28,8 @@ RUN shasum -a 256 -c codecov.SHA256SUM RUN chmod +x codecov ENV CODECOV "/home/codecov/codecov" -# download setup_cpp +# download setup_cpp https://github.com/aminya/setup-cpp +WORKDIR / ARG setup_cpp_linux_version="0.24.1" ARG setup_cpp_linux_download_url="https://github.com/aminya/setup-cpp/releases/download/v${setup_cpp_linux_version}/setup_cpp_linux" # add setup_cpp @@ -36,7 +37,7 @@ ADD ${setup_cpp_linux_download_url} /setup_cpp_linux RUN chmod +x /setup_cpp_linux RUN /setup_cpp_linux --compiler llvm --gcc true --make true --cmake true --ninja true --ccache true --doxygen true --gcovr true --cppcheck true --clangtidy true --clangformat true --conan true --task true RUN rm -rf /tmp/* -RUN echo 'source /root/.cpprc' >> $HOME/.bash_profile +RUN echo 'source /root/.cpprc' >> /root/.bash_profile #RUN cp /root/.cpprc /root/.bashrc # Install more tools from standard repos @@ -66,18 +67,24 @@ ENV CONAN_SYSREQUIRES_SUDO 0 # leaving this flag undefined can cause some installation failures. ENV CONAN_SYSREQUIRES_MODE enabled - -ENV SETUP_ENV_SCRIPT ~/.cpprc - # set default compiler ENV CC "/root/llvm/bin/clang" ENV CXX "/root/llvm/bin/clang++" ENV CMAKE "cmake" ENV MAKE "/root/ninja/ninja" +# compiler env settings +# e.g. mingw-env, emsdk_env.sh +ARG setup_env_script="/root/.cpprc" +ARG setup_env_script_args="" +ENV SETUP_ENV_SCRIPT $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN bash -c 'source $setup_env_script $setup_env_script_args' + # setup project env WORKDIR /home/project -RUN bash -c 'source ~/.cpprc' +RUN bash -c 'source /root/.cpprc' COPY ./scripts/docker-entrypoint.setup-cpp.sh /docker-entrypoint.sh ENTRYPOINT ["/bin/bash", "-c", "/docker-entrypoint.sh"] @@ -104,6 +111,14 @@ ENV CXX "/root/llvm/bin/clang++" ENV CMAKE "cmake" ENV MAKE "/root/ninja/ninja" +# install vcpkg +ENV VCPKG_DISABLE_METRICS 1 +RUN /setup_cpp_linux --vcpkg true +ENV VCPKG_ROOT "/root/vcpkg" +RUN /root/vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" + + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" @@ -112,13 +127,6 @@ ENV VCPKG_TOOLCHAIN_FILE "/root/vcpkg/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "/root/vcpkg/scripts/buildsystems/vcpkg.cmake" ENV CMAKE_ARGS "" -# install vcpkg -ENV VCPKG_DISABLE_METRICS 1 -RUN /setup_cpp_linux --vcpkg true -ENV VCPKG_ROOT "/root/vcpkg" -RUN /root/vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" - # setup project env ENV PROJECT_DIR /home/project WORKDIR /home/project @@ -127,6 +135,7 @@ COPY ./scripts/docker-test.setup-cpp.sh ./docker-test.sh COPY ./scripts/docker-test-coverage.setup-cpp.sh ./docker-test-coverage.sh COPY ./taskfiles/*.yml /home/taskfiles/ COPY ./taskfiles/TaskfileSetupCpp.yml /home/taskfiles/Taskfile.yml -RUN mkdir build -RUN bash -c 'source ~/.cpprc' \ No newline at end of file +ENV PROJECT_DIR /home/project +WORKDIR /home/project +RUN mkdir build diff --git a/Dockerfile.ci-windows b/Dockerfile.ci-windows index 6029d08..f157c0b 100644 --- a/Dockerfile.ci-windows +++ b/Dockerfile.ci-windows @@ -56,6 +56,12 @@ RUN python3 -m pip install --upgrade pip setuptools && \ RUN python3 -m pip install --upgrade pip setuptools && \ python3 -m pip install cogapp coverage cmake-format cmakelint +# install task +ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh +RUN chmod +x /tmp/taskfile_install.sh +RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh + + # thx to https://github.com/lefticus/cpp_starter_project/pull/121 # By default, anything you run in Docker is done as superuser. @@ -95,18 +101,17 @@ ARG cmake_generator="Ninja" ARG cmake_toolchain_file="/home/cmake/x86_64-w64-mingw32.toolchain.cmake" ARG cross_root "/usr/x86_64-w64-mingw32" -# install vcpkg -## https://github.com/microsoft/vcpkg/blob/master/docs/users/mingw.md -ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/vcpkg -RUN /home/vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/vcpkg" - -ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" -ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +# compiler env settings +# e.g. mingw-env, emsdk_env.sh +RUN mkdir -p /home/cross +RUN touch /home/cross/.bashrc +ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" +ENV SETUP_ENV_SCRIPT $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN . $setup_env_script $setup_env_script_args # cross compiler settings ENV CC $cc @@ -122,6 +127,20 @@ ENV CROSS "${cross_triple}-" ENV CROSS_ROOT $cross_root ENV CROSS_TOOLCHAIN $cmake_toolchain_file + +# install vcpkg +## https://github.com/microsoft/vcpkg/blob/master/docs/users/mingw.md +ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/vcpkg +RUN /home/vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/vcpkg" + +ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" + + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" @@ -129,17 +148,12 @@ ENV CMAKE_GENERATOR $cmake_generator ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" -# install task -ADD https://taskfile.dev/install.sh /tmp/taskfile_install.sh -RUN chmod +x /tmp/taskfile_install.sh -RUN /tmp/taskfile_install.sh -d -b /usr/local/bin && rm /tmp/taskfile_install.sh - # setup project env WORKDIR /home/project COPY ./cmake /home/cmake COPY ./scripts/docker-build.ci-mingw.sh ./docker-build.sh COPY ./taskfiles/*.yml /home/taskfiles/ -COPY ./taskfiles/TaskfileSetupCppCross.yml /home/taskfiles/Taskfile.yml +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml ENV PROJECT_DIR /home/project WORKDIR /home/project diff --git a/Dockerfile.cross b/Dockerfile.cross index a0fb2cc..6344cea 100644 --- a/Dockerfile.cross +++ b/Dockerfile.cross @@ -41,19 +41,16 @@ RUN runuser -l yay -c \ runuser -l yay -c "yay -Scc --noconfirm" && \ rm -rf /home/yay/.cache/* - -# install vcpkg -## https://github.com/microsoft/vcpkg/blob/master/docs/users/mingw.md -ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg -RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" - -ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" -ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" - +# compiler env settings +# e.g. mingw-env, emsdk_env.sh +RUN mkdir -p /home/cross +RUN touch /home/cross/.bashrc +ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" +ENV SETUP_ENV_SCRIPT $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN . $setup_env_script $setup_env_script_args # cross compiler settings ENV CC $cc @@ -71,6 +68,20 @@ ENV CROSS_ROOT $cross_root ENV CROSS_TOOLCHAIN $cmake_toolchain_file +# install vcpkg +## https://github.com/microsoft/vcpkg/blob/master/docs/users/mingw.md +ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg +RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + +ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE +ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" + + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" @@ -78,9 +89,6 @@ ENV CMAKE_GENERATOR $cmake_generator ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" -ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE - - # setup project env COPY ./cmake /home/cmake WORKDIR /home/project @@ -89,17 +97,6 @@ COPY ./scripts/$docker_build_script ./docker-build.sh COPY ./taskfiles/*.yml /home/taskfiles/ COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml -# compiler env settings -# e.g. mingw-env, emsdk_env.sh -RUN mkdir -p /home/cross -RUN touch /home/cross/.bashrc -ARG setup_env_script="/home/cross/.bashrc" -ARG setup_env_script_args="" -ENV SETUP_ENV_SCRIPT $setup_env_script -ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args -RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile -RUN . $setup_env_script $setup_env_script_args - ENV PROJECT_DIR /home/project WORKDIR /home/project RUN mkdir build diff --git a/Dockerfile.crosstool-ng b/Dockerfile.crosstool-ng index 7b28fda..98547e1 100644 --- a/Dockerfile.crosstool-ng +++ b/Dockerfile.crosstool-ng @@ -47,17 +47,6 @@ ARG cxx="${cross_triple}-g++" # compiler env settings #RUN cp ${crosstool_dir}/bash-completion/ct-ng /etc/bash_completion.d/ct-ng -# install vcpkg -ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg -RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" - -ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" -ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" - # set default compiler ENV CC $cc ENV CXX $cxx @@ -74,6 +63,28 @@ ENV CROSS "${cross_triple}-" ENV CROSS_ROOT $cross_root ENV CROSS_TOOLCHAIN $cmake_toolchain_file +RUN mkdir -p /home/cross +RUN touch /home/cross/.bashrc +ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" +ENV SETUP_ENV_SCRIPT $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN . $setup_env_script $setup_env_script_args + + +# install vcpkg +ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg +RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + +ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE + # build script settings ENV TARGET "all" @@ -82,8 +93,6 @@ ENV CMAKE_GENERATOR $cmake_generator ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" -ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE - # setup project env WORKDIR /home/project COPY ./cmake /home/cmake @@ -91,15 +100,6 @@ COPY ./scripts/docker-build.crosstool-ng.sh ./docker-build.sh COPY ./taskfiles/*.yml /home/taskfiles/ COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml -RUN mkdir -p /home/cross -RUN touch /home/cross/.bashrc -ARG setup_env_script="/home/cross/.bashrc" -ARG setup_env_script_args="" -ENV SETUP_ENV_SCRIPT $setup_env_script -ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args -RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile -RUN . $setup_env_script $setup_env_script_args - ENV PROJECT_DIR /home/project WORKDIR /home/project RUN mkdir build \ No newline at end of file diff --git a/Dockerfile.crosstool-ng-rpi b/Dockerfile.crosstool-ng-rpi index 2478c9f..ace0c3a 100644 --- a/Dockerfile.crosstool-ng-rpi +++ b/Dockerfile.crosstool-ng-rpi @@ -48,21 +48,6 @@ ARG cxx="${cross_triple}-g++" ENV CC "gcc" ENV CXX "g++" -# setup project env -WORKDIR /home/project -COPY ./cmake /home/cmake -COPY ./scripts/docker-build.rpi.sh ./docker-build.sh -COPY ./taskfiles/*.yml /home/taskfiles/ -COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml - -# install vcpkg -ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git -RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" - # cross compiler settings ENV CC $cc ENV CXX $cxx @@ -96,12 +81,23 @@ ENV RASPBERRYPI_TOOLS_DIR $raspberrypi_tools_source_dir RUN mkdir -p /home/cross RUN touch /home/cross/.bashrc ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script -RUN . $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN . $setup_env_script $setup_env_script_args ENV CMAKE $CROSS_CMAKE ENV MAKE $CROSS_MAKE +# install vcpkg +ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git +RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" @@ -111,4 +107,13 @@ ENV TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" +# setup project env +WORKDIR /home/project +COPY ./cmake /home/cmake +COPY ./scripts/docker-build.rpi.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml + +ENV PROJECT_DIR /home/project +WORKDIR /home/project RUN mkdir build diff --git a/Dockerfile.emscripten b/Dockerfile.emscripten index e834162..19415f8 100644 --- a/Dockerfile.emscripten +++ b/Dockerfile.emscripten @@ -34,12 +34,29 @@ RUN runuser -l yay -c \ rm -rf /home/yay/.cache/* RUN /usr/lib/emsdk/emsdk install latest && /usr/lib/emsdk/emsdk activate latest +# compiler env settings +ENV EMSDK "/usr/lib/emsdk" +ENV EM_CONFIG "/usr/lib/emsdk/.emscripten" +ENV EM_CACHE "/usr/lib/emsdk/upstream/emscripten/cache" +ENV EMSDK_PATH "/usr/lib/emsdk" +ENV EMSCRIPTEN_PATH "/usr/lib/emscripten" +ENV CLANG_PATH "/opt/emscripten-llvm/bin" +ENV PYTHON_PATH "/usr/bin" +ENV NODE_PATH "/usr/bin" +ENV PATH="${EMSDK_PATH}:${EMSCRIPTEN_PATH}:${CLANG_PATH}:${NODE_PATH}:${PYTHON_PATH}:${PATH}" + ARG setup_env_script="/usr/lib/emsdk/emsdk_env.sh" ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args -RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> $HOME/.bash_profile -RUN . $setup_env_script +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN /usr/lib/emsdk/emsdk construct_env +RUN . $setup_env_script $setup_env_script_args +# FIXME: https://github.com/emscripten-core/emsdk/issues/430 +RUN mkdir -p /home/cross +RUN touch /home/cross/.bashrc +ENV SETUP_ENV_SCRIPT "/home/cross/.bashrc" +ENV SETUP_ENV_SCRIPT_ARGS "" # cross compiler settings @@ -54,17 +71,6 @@ ENV CROSS_CMAKE $cross_cmake ENV CROSS_MAKE $cross_make ENV CROSS_TOOLCHAIN $cmake_toolchain_file -# compiler env settings -ENV EMSDK "/usr/lib/emsdk" -ENV EM_CONFIG "/usr/lib/emsdk/.emscripten" -ENV EM_CACHE "/usr/lib/emsdk/upstream/emscripten/cache" -ENV EMSDK_PATH "/usr/lib/emsdk" -ENV EMSCRIPTEN_PATH "/usr/lib/emscripten" -ENV CLANG_PATH "/opt/emscripten-llvm/bin" -ENV PYTHON_PATH "/usr/bin" -ENV NODE_PATH "/usr/bin" -ENV PATH="${EMSDK_PATH}:${EMSCRIPTEN_PATH}:${CLANG_PATH}:${NODE_PATH}:${PYTHON_PATH}:${PATH}" - # install vcpkg ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet diff --git a/Dockerfile.gcc b/Dockerfile.gcc index df2dcfc..41c5278 100644 --- a/Dockerfile.gcc +++ b/Dockerfile.gcc @@ -40,6 +40,12 @@ ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +# build script settings +ENV TARGET "all" +ENV BUILD_TYPE "Release" +ENV CMAKE_GENERATOR "Unix Makefiles" +ENV CMAKE_ARGS "" + # setup project env WORKDIR /home/project COPY ./scripts/docker-build.sh ./docker-build.sh @@ -48,13 +54,6 @@ COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh COPY ./taskfiles/*.yml /home/taskfiles/ COPY ./taskfiles/TaskfileDefault.yml /home/taskfiles/Taskfile.yml - -# build script settings -ENV TARGET "all" -ENV BUILD_TYPE "Release" -ENV CMAKE_GENERATOR "Unix Makefiles" -ENV CMAKE_ARGS "" - ENV PROJECT_DIR /home/project WORKDIR /home/project RUN mkdir build \ No newline at end of file diff --git a/Dockerfile.mxe b/Dockerfile.mxe index 0b1d716..90a9f3f 100644 --- a/Dockerfile.mxe +++ b/Dockerfile.mxe @@ -46,20 +46,6 @@ ENV PATH="${mxe_source_dir}/usr/bin:${PATH}" ARG cross_root="${mxe_source_dir}/usr" ARG cmake_toolchain_file="${cross_root}/${cross_triplet}/share/cmake/mxe-conf.cmake" -# install vcpkg -## https://github.com/microsoft/vcpkg/blob/master/docs/users/mingw.md -WORKDIR /home/project -ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg -RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" - -ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" -ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" - - # cross compiler settings ENV CC $cc ENV CXX $cxx @@ -75,11 +61,30 @@ ENV CROSS "${cross_triplet}-" ENV CROSS_ROOT $cross_root ENV CROSS_TOOLCHAIN $cmake_toolchain_file +# compiler env settings +# e.g. mingw-env, emsdk_env.sh RUN mkdir -p /home/cross RUN touch /home/cross/.bashrc ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script -RUN . $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN . $setup_env_script $setup_env_script_args + +# install vcpkg +## https://github.com/microsoft/vcpkg/blob/master/docs/users/mingw.md +WORKDIR /home/project +ENV VCPKG_DEFAULT_HOST_TRIPLET $vcpkg_host_triplet +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcpkg +RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + +ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" +ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" + # build script settings ENV TARGET "all" diff --git a/Dockerfile.rpi-without-tools b/Dockerfile.rpi-without-tools index 0b6e4d7..a9c7bed 100644 --- a/Dockerfile.rpi-without-tools +++ b/Dockerfile.rpi-without-tools @@ -48,21 +48,6 @@ ARG cxx="${cross_triple}-g++" ENV CC "gcc" ENV CXX "g++" -# setup project env -WORKDIR /home/project -COPY ./cmake /home/cmake -COPY ./scripts/docker-build.rpi.sh ./docker-build.sh -COPY ./taskfiles/*.yml /home/taskfiles/ -COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml - -# install vcpkg -ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host -ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet -ENV VCPKG_DISABLE_METRICS 1 -RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git -RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics -ENV VCPKG_ROOT "/home/project/vcpkg" - # cross compiler settings ENV CC $cc ENV CXX $cxx @@ -77,15 +62,28 @@ ENV CROSS_TOOLCHAIN $cmake_toolchain_file # compiler env settings #COPY ${crosstool_dir}/bash-completion/ct-ng /etc/bash_completion.d/ct-ng +# compiler env settings +# e.g. mingw-env, emsdk_env.sh RUN mkdir -p /home/cross RUN touch /home/cross/.bashrc ARG setup_env_script="/home/cross/.bashrc" +ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script -RUN . $setup_env_script +ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args +RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile +RUN . $setup_env_script $setup_env_script_args ENV CMAKE $CROSS_CMAKE ENV MAKE $CROSS_MAKE +# install vcpkg +ENV VCPKG_DEFAULT_HOST_TRIPLET $triplet_host +ENV VCPKG_DEFAULT_TRIPLET $vcpkg_target_triplet +ENV VCPKG_DISABLE_METRICS 1 +RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git +RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics +ENV VCPKG_ROOT "/home/project/vcpkg" + # build script settings ENV TARGET "all" ENV BUILD_TYPE "Release" @@ -95,4 +93,13 @@ ENV TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" +# setup project env +WORKDIR /home/project +COPY ./cmake /home/cmake +COPY ./scripts/docker-build.rpi.sh ./docker-build.sh +COPY ./taskfiles/*.yml /home/taskfiles/ +COPY ./taskfiles/TaskfileCross.yml /home/taskfiles/Taskfile.yml + +ENV PROJECT_DIR /home/project +WORKDIR /home/project RUN mkdir build diff --git a/Dockerfile.without-vcpkg b/Dockerfile.without-vcpkg index 40750ad..aa448d8 100644 --- a/Dockerfile.without-vcpkg +++ b/Dockerfile.without-vcpkg @@ -35,4 +35,6 @@ COPY ./scripts/docker-test-coverage.sh ./docker-test-coverage.sh COPY ./taskfiles/*.yml /home/taskfiles/ COPY ./taskfiles/TaskfileWithoutVcpkgToolchain.yml /home/taskfiles/Taskfile.yml +ENV PROJECT_DIR /home/project +WORKDIR /home/project RUN mkdir build \ No newline at end of file diff --git a/LICENSE b/LICENSE index 2105043..f38e770 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2021 Alex Beimler +Copyright 2021-2023 Alex Beimler Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/examples/android-example/Dockerfile b/examples/android-example/Dockerfile index 01ae83c..b396d57 100644 --- a/examples/android-example/Dockerfile +++ b/examples/android-example/Dockerfile @@ -7,4 +7,4 @@ RUN ./vcpkg/vcpkg install jsoncpp:$TARGET_TRIPLET ## build stage FROM base as build COPY . . -CMD ["./docker-build.sh"] \ No newline at end of file +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] \ No newline at end of file diff --git a/examples/cpp_starter_project/Dockerfile b/examples/cpp_starter_project/Dockerfile index 27928b1..7d63f85 100644 --- a/examples/cpp_starter_project/Dockerfile +++ b/examples/cpp_starter_project/Dockerfile @@ -27,11 +27,11 @@ ENV CXX clang++ ## build stage FROM gcc AS build COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## test stage FROM build AS test -CMD ["./docker-test.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "test"] @@ -42,7 +42,7 @@ RUN runuser -l yay -c "yay -Syu --noconfirm && yay -S --noconfirm fltk fluid" # set CMake Args ENV CMAKE_ARGS -DCPP_STARTER_USE_FLTK=ON COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] FROM base AS gtkmm @@ -51,14 +51,14 @@ RUN runuser -l yay -c "yay -Syu --noconfirm && yay -S --noconfirm gtkmm" # set CMake Args ENV CMAKE_ARGS -DCPP_STARTER_USE_GTKMM=ON COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] FROM base-opengl-libs AS imgui # set CMake Args ENV CMAKE_ARGS -DCPP_STARTER_USE_IMGUI=ON COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] FROM base AS qt5 @@ -67,7 +67,7 @@ RUN runuser -l yay -c "yay -Syu --noconfirm && yay -S --noconfirm qt5-base" # set CMake Args ENV CMAKE_ARGS -DCPP_STARTER_USE_QT=ON COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] FROM base AS sdl @@ -76,7 +76,7 @@ RUN runuser -l yay -c "yay -Syu --noconfirm && yay -S --noconfirm sdl2" # set CMake Args ENV CMAKE_ARGS -DCPP_STARTER_USE_SDL=ON COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] FROM base-opengl-libs AS nana @@ -85,4 +85,4 @@ RUN runuser -l yay -c "yay -Syu --noconfirm && yay -S --noconfirm nana alsa-lib # set CMake Args ENV CMAKE_ARGS -DCPP_STARTER_USE_NANA=ON -DWARNINGS_AS_ERRORS=FALSE COPY . . -CMD ["./docker-build.sh"] \ No newline at end of file +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] \ No newline at end of file diff --git a/examples/example-ci/Dockerfile b/examples/example-ci/Dockerfile index 5ddfd73..47de3c2 100644 --- a/examples/example-ci/Dockerfile +++ b/examples/example-ci/Dockerfile @@ -5,13 +5,13 @@ COPY . . ## build stage FROM base as build COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## test stage FROM build as test -CMD ["./docker-test.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "test"] ## build for windows FROM abeimler/simple-cppbuilder:ci-x64-mingw-w64 as build-windows COPY . . -CMD ["./docker-build.sh"] \ No newline at end of file +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] \ No newline at end of file diff --git a/examples/example/Dockerfile b/examples/example/Dockerfile index ba44d31..2e82b00 100644 --- a/examples/example/Dockerfile +++ b/examples/example/Dockerfile @@ -6,11 +6,11 @@ RUN git pull origin master ### copy project WORKDIR $PROJECT_DIR COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## test stage FROM build as test -CMD ["./docker-test.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## test (coverage) stage FROM test as test-coverage @@ -26,10 +26,10 @@ RUN git pull origin master ### copy project WORKDIR $PROJECT_DIR COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## test stage FROM build-clang as test-clang -CMD ["./docker-test.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "test"] ## build for windows @@ -40,7 +40,7 @@ RUN git pull origin master ### copy project WORKDIR $PROJECT_DIR COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## build for aarch64 @@ -51,7 +51,7 @@ RUN git pull origin master ### copy project WORKDIR $PROJECT_DIR COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## build for aarch64 @@ -62,7 +62,7 @@ RUN git pull origin master ### copy project WORKDIR $PROJECT_DIR COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## build for web @@ -73,4 +73,4 @@ RUN git pull origin master ### copy project WORKDIR $PROJECT_DIR COPY . . -CMD ["./docker-build.sh"] \ No newline at end of file +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] \ No newline at end of file diff --git a/examples/web-example/Dockerfile b/examples/web-example/Dockerfile index 19f36cb..a4bdfc4 100644 --- a/examples/web-example/Dockerfile +++ b/examples/web-example/Dockerfile @@ -4,4 +4,4 @@ FROM abeimler/simple-cppbuilder:emscripten as base ## build stage FROM base as build COPY . . -CMD ["./docker-build.sh"] \ No newline at end of file +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] \ No newline at end of file diff --git a/taskfiles/docker/Test.yml b/taskfiles/docker/Test.yml index 8b594a0..fb5885f 100644 --- a/taskfiles/docker/Test.yml +++ b/taskfiles/docker/Test.yml @@ -56,4 +56,21 @@ tasks: android: - container-structure-test test --image abeimler/simple-cppbuilder:arm-android --config tests/arm-android-test.yaml - docker-compose -f examples/android-example/docker-compose.yml up --build - - docker-compose -f examples/android-example/docker-compose.yml down --volumes --rmi local \ No newline at end of file + - docker-compose -f examples/android-example/docker-compose.yml down --volumes --rmi local + + arm:rpi: + - container-structure-test test --image abeimler/simple-cppbuilder:aarch64-linux --config tests/aarch64-test.yaml + - docker-compose -f examples/example/docker-compose.cross.yml up --build example-arm64-release-build + - docker-compose -f examples/example/docker-compose.cross.yml down --volumes --rmi local + + rpi: + - container-structure-test test --image abeimler/simple-cppbuilder:rpi4 --config tests/rpi4-test.yaml + - docker-compose -f examples/example/docker-compose.cross.yml up --build example-rpi4-release-build + - docker-compose -f examples/example/docker-compose.cross.yml down --volumes --rmi local + + mingw:mxe: + - container-structure-test test --image abeimler/simple-cppbuilder:x64-mingw-w64-mxe --config tests/mxe-test.yaml + + gcc: + - container-structure-test test --image abeimler/simple-cppbuilder:gcc-10 --config tests/gcc10-test.yaml + - container-structure-test test --image abeimler/simple-cppbuilder:gcc-9 --config tests/gcc9-test.yaml \ No newline at end of file diff --git a/test.sh b/test.sh deleted file mode 100755 index 4d75b3e..0000000 --- a/test.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -## install https://github.com/GoogleContainerTools/container-structure-test - -## gcc -### ./build-images.sh -container-structure-test test --image abeimler/simple-cppbuilder:base --config tests/base-test.yaml -container-structure-test test --image abeimler/simple-cppbuilder --config tests/test.yaml -container-structure-test test --image abeimler/simple-cppbuilder:without-vcpkg --config tests/without-vcpkg-test.yaml -docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-build-make example-gcc-debug-build -docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-test -docker-compose -f examples/example/docker-compose.yml up --build example-gcc-release-build example-gcc-release-test -docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-test-cov -docker-compose -f examples/example/docker-compose.yml up --build example-gcc-debug-test-lcov -docker-compose -f examples/example/docker-compose.yml up --build example-gcc-release-with-raylib -docker-compose -f examples/example/docker-compose.yml down --volumes --rmi local - - -## clang -### ./build-images.sh -container-structure-test test --image abeimler/simple-cppbuilder:clang --config tests/clang-test.yaml -docker-compose -f examples/example/docker-compose.yml up --build example-clang-debug-build example-clang-debug-test -docker-compose -f examples/example/docker-compose.yml up --build example-clang-release-build example-clang-release-test -docker-compose -f examples/example/docker-compose.yml down --volumes --rmi local - -## test example -### ./build-images.sh -docker-compose -f examples/cpp_starter_project/docker-compose.yml up --build -docker-compose -f examples/cpp_starter_project/docker-compose.yml down --volumes --rmi local - - -## CI -### ./build-images.sh -container-structure-test test --image abeimler/simple-cppbuilder:ci --config tests/ci-test.yaml -container-structure-test test --image abeimler/simple-cppbuilder:ci-x64-mingw-w64 --config tests/ci-windows-test.yaml -container-structure-test test --image abeimler/simple-cppbuilder:ci-setup-cpp --config tests/ci-setup-cpp-test.yaml -docker-compose -f examples/example-ci/docker-compose.yml up --build example-gcc-build -docker-compose -f examples/example-ci/docker-compose.yml up --build example-gcc-test -docker-compose -f examples/example-ci/docker-compose.yml up --build example-gcc-test-cov -docker-compose -f examples/example-ci/docker-compose.yml up --build example-windows-build -docker-compose -f examples/example-ci/docker-compose.yml down --volumes --rmi local - - -## single run -### ./build-images.sh -docker run -it --rm --name my-cpp-project -v "$PWD/examples/single":/home/project -w /home/project abeimler/simple-cppbuilder ./docker-build.sh -#docker run -it --rm --name my-cpp-project -v "$PWD/examples/single":/home/project -w /home/project abeimler/simple-cppbuilder:ci ./docker-build.sh -#docker run -it --rm --name my-cpp-project -v "$PWD/examples/single":/home/project -w /home/project abeimler/simple-cppbuilder:ci-setup-cpp ./docker-build.sh - - - -## emscripten -### ./build-images.emscripten.sh -container-structure-test test --image abeimler/simple-cppbuilder:emscripten --config tests/emscripten-test.yaml -docker-compose -f examples/web-example/docker-compose.yml up --build -docker-compose -f examples/web-example/docker-compose.yml down --volumes --rmi local - - -## mingw -### ./build-images.mingw.sh -container-structure-test test --image abeimler/simple-cppbuilder:x64-mingw-w64 --config tests/mingw-test.yaml -docker-compose -f examples/example/docker-compose.cross.yml up --build example-mingw-release-build -docker-compose -f examples/example/docker-compose.cross.yml down --volumes --rmi local - - -## Android -### ./build-images.android.sh -### ./build-images.android-21.sh -container-structure-test test --image abeimler/simple-cppbuilder:arm-android --config tests/arm-android-test.yaml -docker-compose -f examples/android-example/docker-compose.yml up --build -docker-compose -f examples/android-example/docker-compose.yml down --volumes --rmi local - - -## ARM/RPI -### ./build-images.arm.sh -container-structure-test test --image abeimler/simple-cppbuilder:aarch64-linux --config tests/aarch64-test.yaml -docker-compose -f examples/example/docker-compose.cross.yml up --build example-arm64-release-build -docker-compose -f examples/example/docker-compose.cross.yml down --volumes --rmi local - - - -## RPI -### ./build-images.rpi.sh -container-structure-test test --image abeimler/simple-cppbuilder:rpi4 --config tests/rpi4-test.yaml -docker-compose -f examples/example/docker-compose.cross.yml up --build example-rpi4-release-build -docker-compose -f examples/example/docker-compose.cross.yml down --volumes --rmi local - - -# mingw (alt) -container-structure-test test --image abeimler/simple-cppbuilder:x64-mingw-w64-mxe --config tests/mxe-test.yaml - - -## gcc (alt) -container-structure-test test --image abeimler/simple-cppbuilder:gcc-10 --config tests/gcc10-test.yaml -container-structure-test test --image abeimler/simple-cppbuilder:gcc-9 --config tests/gcc9-test.yaml - diff --git a/tests/arm-android-test.yaml b/tests/arm-android-test.yaml index 02d7883..168f024 100644 --- a/tests/arm-android-test.yaml +++ b/tests/arm-android-test.yaml @@ -23,19 +23,16 @@ fileExistenceTests: path: '/home/project/vcpkg/vcpkg' shouldExist: true - name: 'cmake toolchain' - path: $CROSS_TOOLCHAIN - shouldExist: true -- name: 'android toolchain' - path: $ANDROID_TOOLCHAIN_FILE + path: '/opt/android-ndk/build/cmake/android.toolchain.cmake' shouldExist: true - name: 'android home' - path: $ANDROID_HOME + path: '/opt/android-sdk' shouldExist: true - name: 'android ndk' - path: $ANDROID_NDK_HOME + path: '/opt/android-ndk' shouldExist: true - name: 'android platform tools' - path: $ANDROID_PLATFORM_TOOLS + path: '/opt/android-sdk/build-tools' shouldExist: true metadataTest: diff --git a/tests/ci-setup-cpp-test.yaml b/tests/ci-setup-cpp-test.yaml index 51a7b10..45d8a97 100644 --- a/tests/ci-setup-cpp-test.yaml +++ b/tests/ci-setup-cpp-test.yaml @@ -33,6 +33,9 @@ fileExistenceTests: - name: 'cmake toolchain' path: '/root/vcpkg/scripts/buildsystems/vcpkg.cmake' shouldExist: true +- name: "cpprc" + path: "/root/.cpprc" + shouldExist: true metadataTest: env: diff --git a/tests/emscripten-test.yaml b/tests/emscripten-test.yaml index 3ba08b0..06a586c 100644 --- a/tests/emscripten-test.yaml +++ b/tests/emscripten-test.yaml @@ -47,6 +47,9 @@ fileExistenceTests: - name: 'em env' path: '/usr/lib/emsdk/emsdk_env.sh' shouldExist: true +- name: 'emsdk binary' + path: '/usr/lib/emsdk/emsdk' + shouldExist: true metadataTest: From eaf8a0c7a8dea040b44e77c0a5ac4ae9d6eb411c Mon Sep 17 00:00:00 2001 From: abeimler Date: Tue, 3 Jan 2023 20:21:56 +0100 Subject: [PATCH 5/6] wip: add android-ndk in android images --- Dockerfile.android | 19 ++++++++++++------- Dockerfile.android-v | 5 ++++- Dockerfile.cross | 2 +- Dockerfile.crosstool-ng | 2 +- Dockerfile.emscripten | 5 ++--- taskfiles/docker/Build.yml | 13 +++++++++++++ tests/arm-android-test.yaml | 10 +++++----- 7 files changed, 38 insertions(+), 18 deletions(-) diff --git a/Dockerfile.android b/Dockerfile.android index f3e0bf6..5d88de3 100644 --- a/Dockerfile.android +++ b/Dockerfile.android @@ -27,21 +27,21 @@ RUN pacman-db-upgrade && \ # install android stuff RUN runuser -l yay -c \ "yay -Syu --noconfirm && yay -S --noconfirm \ - jdk-openjdk android-platform android-sdk-build-tools \ - android-pkg-config android-cmake android-environment" && \ + jdk-openjdk android-platform android-sdk-build-tools android-sdk-cmdline-tools-latest \ + android-pkg-config android-cmake android-environment android-ndk" && \ runuser -l yay -c "yay -Scc --noconfirm" && \ rm -rf /home/yay/.cache/* && \ ln -s /opt/android-ndk /opt/android-sdk/ndk-bundle ENV ANDROID_HOME "/opt/android-sdk" +ENV ANDROID_NDK "/opt/android-ndk" ENV ANDROID_NDK_HOME "/opt/android-ndk" +ENV ANDROID_SDK_ROOT "/opt/android-sdk" ENV ANDROID_TOOLCHAIN "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64" -ENV ANDROID_TOOLCHAIN_FILE "${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" ENV ANDROID_PLATFORM_TOOLS "${ANDROID_HOME}/platform-tools" -ARG cmake_toolchain_file="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" -ENV CROSS_TOOLCHAIN "${ANDROID_TOOLCHAIN_FILE}" -ENV ANDROID_BUILD_TOOLS "${ANDROID_HOME}/build-tools/$ANDROID_BUILD_TOOLS_REVISION" +ENV ANDROID_BUILD_TOOLS "${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS_REVISION}" +ENV PATH="${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${PATH}" ARG setup_env_script="android-env" ARG setup_env_script_args="$android_abi" @@ -49,6 +49,7 @@ ENV SETUP_ENV_SCRIPT $setup_env_script ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile RUN . $setup_env_script $setup_env_script_args +RUN . /etc/profile.d/android-ndk.sh # cross compiler settings @@ -72,6 +73,10 @@ RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git RUN ./vcpkg/bootstrap-vcpkg.sh -disableMetrics ENV VCPKG_ROOT "/home/project/vcpkg" +ENV ANDROID_TOOLCHAIN_FILE "${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" +ARG cmake_toolchain_file="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" +ENV CROSS_TOOLCHAIN "${cmake_toolchain_file}" + # build script settings ENV TARGET "all" @@ -79,7 +84,7 @@ ENV BUILD_TYPE "Release" ENV CMAKE_GENERATOR $cmake_generator ENV VCPKG_TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "/home/project/vcpkg/scripts/buildsystems/vcpkg.cmake" -ENV CHAINLOAD_TOOLCHAIN_FILE $ANDROID_TOOLCHAIN_FILE +ENV CHAINLOAD_TOOLCHAIN_FILE $CROSS_TOOLCHAIN ENV CROSS_CMAKE_ARGS -DANDROID_ABI="$ANDROID_ABI" ENV CMAKE_ARGS "" diff --git a/Dockerfile.android-v b/Dockerfile.android-v index 0336e82..4365acf 100644 --- a/Dockerfile.android-v +++ b/Dockerfile.android-v @@ -8,6 +8,7 @@ ARG processor="x86_64" ARG vcpkg_target_triplet="arm-android" ARG android_abi="armeabi-v7a" ARG android_target="30" +ARG android_ndk_version="" ARG cmake="android-${android_abi}-cmake" ARG cmake_generator="Ninja" @@ -34,7 +35,7 @@ RUN pacman-db-upgrade && \ RUN runuser -l yay -c \ "yay -Syu --noconfirm && yay -S --noconfirm \ jdk-openjdk android-platform-${android_target} android-sdk-build-tools-${android_target} \ - android-pkg-config android-cmake android-environment" && \ + android-pkg-config android-cmake android-environment android-ndk${android_ndk_version}" && \ runuser -l yay -c "yay -Scc --noconfirm" && \ rm -rf /home/yay/.cache/* @@ -42,6 +43,7 @@ RUN runuser -l yay -c \ ENV ANDROID_HOME "/opt/android-sdk" ENV ANDROID_NDK "/opt/android-ndk" ENV ANDROID_NDK_HOME "/opt/android-ndk" +ENV ANDROID_SDK_ROOT "/opt/android-sdk" ENV ANDROID_TOOLCHAIN "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64" ENV ANDROID_TOOLCHAIN_FILE "${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" ENV ANDROID_PLATFORM_TOOLS "${ANDROID_HOME}/platform-tools" @@ -54,6 +56,7 @@ ENV SETUP_ENV_SCRIPT $setup_env_script ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile RUN . $setup_env_script $setup_env_script_args +RUN . /etc/profile.d/android-ndk.sh # cross compiler settings ENV CC $cc diff --git a/Dockerfile.cross b/Dockerfile.cross index 6344cea..06cb65f 100644 --- a/Dockerfile.cross +++ b/Dockerfile.cross @@ -77,6 +77,7 @@ RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcp RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics ENV VCPKG_ROOT "/home/project/vcpkg" +ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" @@ -86,7 +87,6 @@ ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV TARGET "all" ENV BUILD_TYPE "Release" ENV CMAKE_GENERATOR $cmake_generator -ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" # setup project env diff --git a/Dockerfile.crosstool-ng b/Dockerfile.crosstool-ng index 98547e1..b24f157 100644 --- a/Dockerfile.crosstool-ng +++ b/Dockerfile.crosstool-ng @@ -81,6 +81,7 @@ RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcp RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics ENV VCPKG_ROOT "/home/project/vcpkg" +ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE @@ -90,7 +91,6 @@ ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE ENV TARGET "all" ENV BUILD_TYPE "Release" ENV CMAKE_GENERATOR $cmake_generator -ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" # setup project env diff --git a/Dockerfile.emscripten b/Dockerfile.emscripten index 19415f8..904288d 100644 --- a/Dockerfile.emscripten +++ b/Dockerfile.emscripten @@ -80,6 +80,8 @@ RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git /home/project/vcp RUN /home/project/vcpkg/bootstrap-vcpkg.sh -disableMetrics ENV VCPKG_ROOT "/home/project/vcpkg" +ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file +ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE ENV VCPKG_TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" @@ -88,11 +90,8 @@ ENV TOOLCHAIN_FILE "$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" ENV TARGET "all" ENV BUILD_TYPE "Release" ENV CMAKE_GENERATOR $cmake_generator -ENV CHAINLOAD_TOOLCHAIN_FILE $cmake_toolchain_file ENV CMAKE_ARGS "" -ENV VCPKG_CHAINLOAD_TOOLCHAIN_FILE $CHAINLOAD_TOOLCHAIN_FILE - # setup project env ENV PROJECT_DIR /home/project WORKDIR /home/project diff --git a/taskfiles/docker/Build.yml b/taskfiles/docker/Build.yml index 19f34bc..5322a81 100644 --- a/taskfiles/docker/Build.yml +++ b/taskfiles/docker/Build.yml @@ -171,6 +171,7 @@ tasks: --build-arg cmake="android-armv7a-eabi-cmake" \ --build-arg android_abi="armeabi-v7a" \ --build-arg android_target="{{.ANDROID_TARGET}}" \ + --build-arg android_ndk_version="{{.ANDROID_NDK_VERSION}}" \ -t abeimler/simple-cppbuilder:arm-android-{{.ANDROID_TARGET}} . - | docker build --force-rm=true -f ./Dockerfile.android-v \ @@ -178,6 +179,7 @@ tasks: --build-arg cmake="android-aarch64-cmake" \ --build-arg android_abi="arm64-v8a" \ --build-arg android_target="{{.ANDROID_TARGET}}" \ + --build-arg android_ndk_version="{{.ANDROID_NDK_VERSION}}" \ -t abeimler/simple-cppbuilder:arm64-android{{.ANDROID_TARGET}} . - | docker build --force-rm=true -f ./Dockerfile.android-v \ @@ -185,6 +187,7 @@ tasks: --build-arg cmake="android-x86-cmake" \ --build-arg android_abi="x86" \ --build-arg android_target="{{.ANDROID_TARGET}}" \ + --build-arg android_ndk_version="{{.ANDROID_NDK_VERSION}}" \ -t abeimler/simple-cppbuilder:x86-android-{{.ANDROID_TARGET}} . - | docker build --force-rm=true -f ./Dockerfile.android-v \ @@ -192,6 +195,7 @@ tasks: --build-arg cmake="android-x86-64-cmake" \ --build-arg android_abi="x86_64" \ --build-arg android_target="{{.ANDROID_TARGET}}" \ + --build-arg android_ndk_version="{{.ANDROID_NDK_VERSION}}" \ -t abeimler/simple-cppbuilder:x64-android-{{.ANDROID_TARGET}} . android:21: @@ -199,12 +203,21 @@ tasks: - task: android-template vars: ANDROID_TARGET: 21 + ANDROID_NDK_VERSION: "-21" android:24: cmds: - task: android-template vars: ANDROID_TARGET: 24 + ANDROID_NDK_VERSION: "-beta" + + android:25: + cmds: + - task: android-template + vars: + ANDROID_TARGET: 25 + ANDROID_NDK_VERSION: "" android: - task: base diff --git a/tests/arm-android-test.yaml b/tests/arm-android-test.yaml index 168f024..12bd2b7 100644 --- a/tests/arm-android-test.yaml +++ b/tests/arm-android-test.yaml @@ -22,17 +22,17 @@ fileExistenceTests: - name: 'vcpkg' path: '/home/project/vcpkg/vcpkg' shouldExist: true -- name: 'cmake toolchain' - path: '/opt/android-ndk/build/cmake/android.toolchain.cmake' - shouldExist: true - name: 'android home' path: '/opt/android-sdk' shouldExist: true +- name: 'android platform tools' + path: '/opt/android-sdk/build-tools' + shouldExist: true - name: 'android ndk' path: '/opt/android-ndk' shouldExist: true -- name: 'android platform tools' - path: '/opt/android-sdk/build-tools' +- name: 'cmake toolchain' + path: '/opt/android-ndk/build/cmake/android.toolchain.cmake' shouldExist: true metadataTest: From 13d074e46ed48646b3ec3db685ae5eb5645bb1f8 Mon Sep 17 00:00:00 2001 From: abeimler Date: Thu, 5 Jan 2023 09:22:49 +0100 Subject: [PATCH 6/6] update README --- Dockerfile.ci-setup-cpp | 4 +-- README.md | 53 ++++++++++++++++++++++++++++---------- taskfiles/docker/Build.yml | 3 +-- taskfiles/docker/Test.yml | 16 +++++++++++- 4 files changed, 58 insertions(+), 18 deletions(-) diff --git a/Dockerfile.ci-setup-cpp b/Dockerfile.ci-setup-cpp index 9963ab9..3eea004 100644 --- a/Dockerfile.ci-setup-cpp +++ b/Dockerfile.ci-setup-cpp @@ -38,7 +38,7 @@ RUN chmod +x /setup_cpp_linux RUN /setup_cpp_linux --compiler llvm --gcc true --make true --cmake true --ninja true --ccache true --doxygen true --gcovr true --cppcheck true --clangtidy true --clangformat true --conan true --task true RUN rm -rf /tmp/* RUN echo 'source /root/.cpprc' >> /root/.bash_profile -#RUN cp /root/.cpprc /root/.bashrc +RUN cp /root/.cpprc /root/.bashrc # Install more tools from standard repos RUN apt-get update -y && \ @@ -80,7 +80,7 @@ ARG setup_env_script_args="" ENV SETUP_ENV_SCRIPT $setup_env_script ENV SETUP_ENV_SCRIPT_ARGS $setup_env_script_args RUN echo 'source "$SETUP_ENV_SCRIPT $SETUP_ENV_SCRIPT_ARGS"' >> /root/.bash_profile -RUN bash -c 'source $setup_env_script $setup_env_script_args' +RUN . $setup_env_script $setup_env_script_args # setup project env WORKDIR /home/project diff --git a/README.md b/README.md index d665c41..ec0c1b2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Simple C++ Builder with compilers, buildtools and dependency manager. ## Features - Pre-installed Compilers and Tools -- Ready to use build scripts ([docker-build.sh](https://github.com/abeimler/simple-cppbuilder/blob/main/scripts/docker-build.sh) and [docker-test.sh](https://github.com/abeimler/simple-cppbuilder/blob/main/scripts/docker-test.sh)) +- Ready to use ~~build scripts ([docker-build.sh](https://github.com/abeimler/simple-cppbuilder/blob/main/scripts/docker-build.sh) and [docker-test.sh](https://github.com/abeimler/simple-cppbuilder/blob/main/scripts/docker-test.sh))~~ [Taskfiles](https://github.com/abeimler/simple-cppbuilder/blob/main/taskfiles/TaskfileDefault.sh) ## What's included @@ -32,11 +32,11 @@ You can find a full C++ project example [here](https://github.com/abeimler/simpl ## build stage FROM abeimler/simple-cppbuilder as build COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ## test stage FROM build as test -CMD ["./docker-test.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "test"] ``` 2. Build and run the Docker image: @@ -141,7 +141,7 @@ RUN pacman-db-upgrade && pacman -S --noconfirm \ # build stage FROM base as build COPY . . -CMD ["./docker-build.sh"] +CMD ["task", "-t", "/home/taskfiles/Taskfile.yml", "build"] ``` ### Dockerfile using AUR @@ -206,18 +206,43 @@ services: $ docker-compose up --build ``` -### Use your custom build script +### ~~Use your custom build script~~ Better use a [Taskfile](https://taskfile.dev/usage/) -#### `my-build.sh` +#### ~~`my-build.sh`~~ -```bash -#!/bin/bash +#### `Taskfile.yml` -mkdir build -cd build -cmake -G "Ninja" -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_C_COMPILER=clang -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_COMPILER_TARGET=arm-linux-gnueabihf .. +```yml +--- +version: "3" + +vars: + PROJECT_DIR: '{{.PROJECT_DIR | default "."}}' + TARGET: '{{.TARGET | default "all"}}' + CMAKE_GENERATOR: '{{.CMAKE_GENERATOR | default "Ninja Multi-Config"}}' + BUILD_TYPE: '{{.BUILD_TYPE | default "Release"}}' + +tasks: + configure: + dir: '{{.PROJECT_DIR}}' + cmds: + - > + cmake -B build -S . -G "{{.CMAKE_GENERATOR}}" \ + -DCMAKE_BUILD_TYPE="{{.BUILD_TYPE}}" \ + {{.CMAKE_ARGS}} + + build: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: configure + - 'cmake --build build --target "{{.TARGET}}"' + + test: + dir: '{{.PROJECT_DIR}}' + cmds: + - task: build + - ctest --build-test --test-dir build -make my-app -j 4 ``` #### `Dockerfile` @@ -229,7 +254,8 @@ FROM abeimler/simple-cppbuilder as base # build stage FROM base as build COPY . . -CMD ["./my-build.sh"] +#CMD ["./my-build.sh"] +CMD ["task", "build"] ``` #### `docker-compose.yml` @@ -365,5 +391,6 @@ As for any pre-built image usage, it is the image user's responsibility to ensur - [simple-cppbuilder DockerHub](https://hub.docker.com/r/abeimler/simple-cppbuilder) - [simple-cppbuilder GitHub](https://github.com/abeimler/simple-cppbuilder) - [cpp_starter_project](https://github.com/lefticus/cpp_starter_project) +- [cpp_vcpkg_project](https://github.com/abeimler/cpp_vcpkg_project/tree/v2) - [cppdock](https://github.com/ricejasonf/cppdock) - Icon made by [me](https://hub.docker.com/u/abeimler) using C++-Icon made by [Freepik](https://www.freepik.com) from [Flaticon](https://www.flaticon.com/) diff --git a/taskfiles/docker/Build.yml b/taskfiles/docker/Build.yml index 5322a81..858f828 100644 --- a/taskfiles/docker/Build.yml +++ b/taskfiles/docker/Build.yml @@ -284,8 +284,7 @@ tasks: #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=5 -t abeimler/simple-cppbuilder:gcc-5 . #- docker build --force-rm=true -f ./Dockerfile.gcc --build-arg gcc_version=49 -t abeimler/simple-cppbuilder:gcc-4.9 . - - all: + default: - task: base - task: base:libs - task: ci diff --git a/taskfiles/docker/Test.yml b/taskfiles/docker/Test.yml index fb5885f..ea056a9 100644 --- a/taskfiles/docker/Test.yml +++ b/taskfiles/docker/Test.yml @@ -73,4 +73,18 @@ tasks: gcc: - container-structure-test test --image abeimler/simple-cppbuilder:gcc-10 --config tests/gcc10-test.yaml - - container-structure-test test --image abeimler/simple-cppbuilder:gcc-9 --config tests/gcc9-test.yaml \ No newline at end of file + - container-structure-test test --image abeimler/simple-cppbuilder:gcc-9 --config tests/gcc9-test.yaml + + default: + - task: base + - task: clang + - task: single + #- task: cpp_starter_project + - task: ci + - task: emscripten + - task: mingw + #- task: android + #- task: arm:rpi + #- task: rpi + #- task: mingw:mxe + #- task: gcc \ No newline at end of file