From cec8b299980b298fd3a454ddbb4ccce378951930 Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Fri, 6 Jun 2025 19:37:43 +0100 Subject: [PATCH] ci: Update CI image to use Conan 2 (#2178) I pushed this image to my fork, and will use it to test everything works --- docker/ci/Dockerfile | 39 +++++++--------------- docker/ci/README.md | 8 +++-- docker/ci/conan/clang.asan | 9 ----- docker/ci/conan/clang.profile | 11 ++++++ docker/ci/conan/clang.tsan | 9 ----- docker/ci/conan/clang.ubsan | 9 ----- docker/ci/conan/gcc.asan | 9 ----- docker/ci/conan/gcc.profile | 11 ++++++ docker/ci/conan/gcc.tsan | 9 ----- docker/ci/conan/gcc.ubsan | 9 ----- docker/ci/conan/sanitizer_template.profile | 15 +++++++++ 11 files changed, 54 insertions(+), 84 deletions(-) delete mode 100644 docker/ci/conan/clang.asan create mode 100644 docker/ci/conan/clang.profile delete mode 100644 docker/ci/conan/clang.tsan delete mode 100644 docker/ci/conan/clang.ubsan delete mode 100644 docker/ci/conan/gcc.asan create mode 100644 docker/ci/conan/gcc.profile delete mode 100644 docker/ci/conan/gcc.tsan delete mode 100644 docker/ci/conan/gcc.ubsan create mode 100644 docker/ci/conan/sanitizer_template.profile diff --git a/docker/ci/Dockerfile b/docker/ci/Dockerfile index fa9b7399..ecca5439 100644 --- a/docker/ci/Dockerfile +++ b/docker/ci/Dockerfile @@ -49,7 +49,7 @@ RUN apt-get update \ && pip3 install -q --upgrade --no-cache-dir pip \ && pip3 install -q --no-cache-dir \ cmake==3.31.6 \ - conan==1.62 \ + conan==2.17.0 \ gcovr \ pre-commit \ && apt-get clean \ @@ -88,33 +88,18 @@ COPY --from=clio-tools \ WORKDIR /root # Setup conan -RUN conan remote add --insert 0 conan-non-prod http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod +RUN conan remote add --index 0 ripple http://18.143.149.228:8081/artifactory/api/conan/dev -# Note: intentionally leaving cppstd=20 -RUN conan profile new gcc --detect \ - && conan profile update settings.compiler=gcc gcc \ - && conan profile update settings.compiler.version=12 gcc \ - && conan profile update settings.compiler.cppstd=20 gcc \ - && conan profile update settings.compiler.libcxx=libstdc++11 gcc \ - && conan profile update env.CC=/usr/bin/gcc-12 gcc \ - && conan profile update env.CXX=/usr/bin/g++-12 gcc \ - && conan profile update "conf.tools.build:compiler_executables={\"c\": \"/usr/bin/gcc-12\", \"cpp\": \"/usr/bin/g++-12\"}" gcc +WORKDIR /root/.conan2/profiles -RUN conan profile new clang --detect \ - && conan profile update settings.compiler=clang clang \ - && conan profile update settings.compiler.version=16 clang \ - && conan profile update settings.compiler.cppstd=20 clang \ - && conan profile update settings.compiler.libcxx=libc++ clang \ - && conan profile update env.CC=/usr/bin/clang-16 clang \ - && conan profile update env.CXX=/usr/bin/clang++-16 clang \ - && conan profile update env.CXXFLAGS="-DBOOST_ASIO_DISABLE_CONCEPTS" clang \ - && conan profile update "conf.tools.build:compiler_executables={\"c\": \"/usr/bin/clang-16\", \"cpp\": \"/usr/bin/clang++-16\"}" clang +COPY conan/clang.profile ./clang +COPY conan/sanitizer_template.profile ./clang.asan +COPY conan/sanitizer_template.profile ./clang.tsan +COPY conan/sanitizer_template.profile ./clang.ubsan -RUN echo "include(gcc)" >> .conan/profiles/default +COPY conan/gcc.profile ./gcc +COPY conan/sanitizer_template.profile ./gcc.asan +COPY conan/sanitizer_template.profile ./gcc.tsan +COPY conan/sanitizer_template.profile ./gcc.ubsan -COPY conan/gcc.asan /root/.conan/profiles -COPY conan/gcc.tsan /root/.conan/profiles -COPY conan/gcc.ubsan /root/.conan/profiles -COPY conan/clang.asan /root/.conan/profiles -COPY conan/clang.tsan /root/.conan/profiles -COPY conan/clang.ubsan /root/.conan/profiles +WORKDIR /root diff --git a/docker/ci/README.md b/docker/ci/README.md index efa0d626..0532dad0 100644 --- a/docker/ci/README.md +++ b/docker/ci/README.md @@ -8,12 +8,14 @@ The image is based on Ubuntu 20.04 and contains: - ccache 4.11.3 - clang 16.0.6 - ClangBuildAnalyzer 1.6.0 -- conan 1.62 +- conan 2.17.0 - doxygen 1.12 - gcc 12.3.0 - gh 2.74 - git-cliff 2.9.1 - and some other useful tools -Conan is set up to build Clio without any additional steps. There are two preset conan profiles: `clang` and `gcc` to use corresponding compiler. By default conan is setup to use `gcc`. -Sanitizer builds for `ASAN`, `TSAN` and `UBSAN` are enabled via conan profiles for each of the supported compilers. These can be selected using the following pattern (all lowercase): `[compiler].[sanitizer]` (e.g. `--profile gcc.tsan`). +Conan is set up to build Clio without any additional steps. +There are two preset conan profiles: `clang` and `gcc` to use corresponding compiler. +`ASan`, `TSan` and `UBSan` sanitizer builds are enabled via conan profiles for each of the supported compilers. +These can be selected using the following pattern (all lowercase): `[compiler].[sanitizer]` (e.g. `--profile:all gcc.tsan`). diff --git a/docker/ci/conan/clang.asan b/docker/ci/conan/clang.asan deleted file mode 100644 index 0ec72645..00000000 --- a/docker/ci/conan/clang.asan +++ /dev/null @@ -1,9 +0,0 @@ -include(clang) - -[options] -boost:extra_b2_flags="cxxflags=\"-fsanitize=address\" linkflags=\"-fsanitize=address\"" -boost:without_stacktrace=True -[env] -CFLAGS="-fsanitize=address" -CXXFLAGS="-fsanitize=address" -LDFLAGS="-fsanitize=address" diff --git a/docker/ci/conan/clang.profile b/docker/ci/conan/clang.profile new file mode 100644 index 00000000..647ca370 --- /dev/null +++ b/docker/ci/conan/clang.profile @@ -0,0 +1,11 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=clang +compiler.cppstd=20 +compiler.libcxx=libc++ +compiler.version=16 +os=Linux + +[conf] +tools.build:compiler_executables={'c': '/usr/bin/clang-16', 'cpp': '/usr/bin/clang++-16'} diff --git a/docker/ci/conan/clang.tsan b/docker/ci/conan/clang.tsan deleted file mode 100644 index 8f314ca4..00000000 --- a/docker/ci/conan/clang.tsan +++ /dev/null @@ -1,9 +0,0 @@ -include(clang) - -[options] -boost:extra_b2_flags="cxxflags=\"-fsanitize=thread\" linkflags=\"-fsanitize=thread\"" -boost:without_stacktrace=True -[env] -CFLAGS="-fsanitize=thread" -CXXFLAGS="-fsanitize=thread" -LDFLAGS="-fsanitize=thread" diff --git a/docker/ci/conan/clang.ubsan b/docker/ci/conan/clang.ubsan deleted file mode 100644 index 8f6f17d0..00000000 --- a/docker/ci/conan/clang.ubsan +++ /dev/null @@ -1,9 +0,0 @@ -include(clang) - -[options] -boost:extra_b2_flags="cxxflags=\"-fsanitize=undefined\" linkflags=\"-fsanitize=undefined\"" -boost:without_stacktrace=True -[env] -CFLAGS="-fsanitize=undefined" -CXXFLAGS="-fsanitize=undefined" -LDFLAGS="-fsanitize=undefined" diff --git a/docker/ci/conan/gcc.asan b/docker/ci/conan/gcc.asan deleted file mode 100644 index 65d85da4..00000000 --- a/docker/ci/conan/gcc.asan +++ /dev/null @@ -1,9 +0,0 @@ -include(gcc) - -[options] -boost:extra_b2_flags="cxxflags=\"-fsanitize=address\" linkflags=\"-fsanitize=address\"" -boost:without_stacktrace=True -[env] -CFLAGS="-fsanitize=address" -CXXFLAGS="-fsanitize=address" -LDFLAGS="-fsanitize=address" diff --git a/docker/ci/conan/gcc.profile b/docker/ci/conan/gcc.profile new file mode 100644 index 00000000..1575376f --- /dev/null +++ b/docker/ci/conan/gcc.profile @@ -0,0 +1,11 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=gcc +compiler.cppstd=20 +compiler.libcxx=libstdc++11 +compiler.version=12 +os=Linux + +[conf] +tools.build:compiler_executables={'c': '/usr/bin/gcc-12', 'cpp': '/usr/bin/g++-12'} diff --git a/docker/ci/conan/gcc.tsan b/docker/ci/conan/gcc.tsan deleted file mode 100644 index 1f13a071..00000000 --- a/docker/ci/conan/gcc.tsan +++ /dev/null @@ -1,9 +0,0 @@ -include(gcc) - -[options] -boost:extra_b2_flags="cxxflags=\"-fsanitize=thread\" linkflags=\"-fsanitize=thread\"" -boost:without_stacktrace=True -[env] -CFLAGS="-fsanitize=thread" -CXXFLAGS="-fsanitize=thread" -LDFLAGS="-fsanitize=thread" diff --git a/docker/ci/conan/gcc.ubsan b/docker/ci/conan/gcc.ubsan deleted file mode 100644 index ddbb0257..00000000 --- a/docker/ci/conan/gcc.ubsan +++ /dev/null @@ -1,9 +0,0 @@ -include(gcc) - -[options] -boost:extra_b2_flags="cxxflags=\"-fsanitize=undefined\" linkflags=\"-fsanitize=undefined\"" -boost:without_stacktrace=True -[env] -CFLAGS="-fsanitize=undefined" -CXXFLAGS="-fsanitize=undefined" -LDFLAGS="-fsanitize=undefined" diff --git a/docker/ci/conan/sanitizer_template.profile b/docker/ci/conan/sanitizer_template.profile new file mode 100644 index 00000000..ff601481 --- /dev/null +++ b/docker/ci/conan/sanitizer_template.profile @@ -0,0 +1,15 @@ +{% set compiler, sani = profile_name.split('.') %} + +{% set sanitizer_opt_map = {'asan': 'address', 'tsan': 'thread', 'ubsan': 'undefined'} %} +{% set sanitizer = sanitizer_opt_map[sani] %} + +include({{ compiler }}) + +[options] +boost/*:extra_b2_flags="cxxflags=\"-fsanitize={{ sanitizer }}\" linkflags=\"-fsanitize={{ sanitizer }}\"" +boost/*:without_stacktrace=True + +[conf] +tools.build:cflags+=["-fsanitize={{ sanitizer }}"] +tools.build:cxxflags+=["-fsanitize={{ sanitizer }}"] +tools.build:exelinkflags+=["-fsanitize={{ sanitizer }}"]