From 63478434b87fd29b717f5a6ca383493f50334084 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Tue, 16 Feb 2021 16:37:59 -0500 Subject: [PATCH 1/2] linux-fresh: Add Clang 12 from llvm.org Adds the Clang compiler from apt.llvm.org to linux-fresh. The intention is to run two instances of linux-fresh when checking CI on yuzu, one compiles with GCC and the other with Clang. This includes a workaround in Conan where the default configuration file is not set up to permit using Clang 12. settings.yml is there to allow using Clang 12. --- linux-fresh/Dockerfile | 16 +++++- linux-fresh/settings.yml | 117 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 linux-fresh/settings.yml diff --git a/linux-fresh/Dockerfile b/linux-fresh/Dockerfile index a3ade76..e567eba 100644 --- a/linux-fresh/Dockerfile +++ b/linux-fresh/Dockerfile @@ -1,6 +1,7 @@ FROM ubuntu:18.04 MAINTAINER yuzu +ENV CLANG_VER=12 ENV CMAKE_VER=3.16.3 ENV GCC_VER=10 ENV QT_PKG_VER=512 @@ -15,6 +16,7 @@ RUN useradd -m -u 1027 -s /bin/bash yuzu && \ ccache \ file \ git \ + gpg-agent \ liblz4-dev \ libopus-dev \ libssl-dev \ @@ -47,8 +49,17 @@ RUN add-apt-repository -y ppa:beineri/opt-qt-${QT_VER}-${UBUNTU_VER} && \ qt${QT_PKG_VER}tools \ qt${QT_PKG_VER}webengine && \ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_VER} ${GCC_VER} && \ - update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCC_VER} ${GCC_VER} && \ - apt-get clean autoclean && \ + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCC_VER} ${GCC_VER} +# Install clang from apt.llvm.org +RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ + echo "deb http://apt.llvm.org/${UBUNTU_VER}/ llvm-toolchain-${UBUNTU_VER}-${CLANG_VER} main" >> /etc/apt/sources.list && \ + apt-get update -y && \ + DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ + clang-${CLANG_VER} && \ + ln -s $(which clang-${CLANG_VER}) /usr/bin/clang && \ + ln -s $(which clang++-${CLANG_VER}) /usr/bin/clang++ && \ + dpkg-reconfigure ccache +RUN apt-get clean autoclean && \ apt-get autoremove --yes && \ rm -rf /var/lib/apt /var/lib/dpkg /var/lib/cache /var/lib/log # Install glslangValidator from upstream @@ -68,6 +79,7 @@ RUN cd /tmp && \ ENV LD_LIBRARY_PATH=/opt/qt${QT_PKG_VER}/lib:${LD_LIBRARY_PATH} ENV PATH=/opt/qt${QT_PKG_VER}/bin:${PATH} USER 1027 +COPY --chown=yuzu:yuzu settings.yml /home/yuzu/.conan/settings.yml RUN conan install boost/1.73.0@ -s compiler.libcxx=libstdc++11 --build=missing && \ conan install catch2/2.13.0@ -s compiler.libcxx=libstdc++11 --build=missing && \ conan install fmt/7.1.2@ -s compiler.libcxx=libstdc++11 --build=missing && \ diff --git a/linux-fresh/settings.yml b/linux-fresh/settings.yml new file mode 100644 index 0000000..6ee14e6 --- /dev/null +++ b/linux-fresh/settings.yml @@ -0,0 +1,117 @@ +# Only for cross building, 'os_build/arch_build' is the system that runs Conan +os_build: [Windows, WindowsStore, Linux, Macos, FreeBSD, SunOS, AIX] +arch_build: [x86, x86_64, ppc32be, ppc32, ppc64le, ppc64, armv5el, armv5hf, armv6, armv7, armv7hf, armv7s, armv7k, armv8, armv8_32, armv8.3, sparc, sparcv9, mips, mips64, avr, s390, s390x, sh4le, e2k-v2, e2k-v3, e2k-v4, e2k-v5, e2k-v6, e2k-v7] + +# Only for building cross compilation tools, 'os_target/arch_target' is the system for +# which the tools generate code +os_target: [Windows, Linux, Macos, Android, iOS, watchOS, tvOS, FreeBSD, SunOS, AIX, Arduino, Neutrino] +arch_target: [x86, x86_64, ppc32be, ppc32, ppc64le, ppc64, armv5el, armv5hf, armv6, armv7, armv7hf, armv7s, armv7k, armv8, armv8_32, armv8.3, sparc, sparcv9, mips, mips64, avr, s390, s390x, asm.js, wasm, sh4le, e2k-v2, e2k-v3, e2k-v4, e2k-v5, e2k-v6, e2k-v7] + +# Rest of the settings are "host" settings: +# - For native building/cross building: Where the library/program will run. +# - For building cross compilation tools: Where the cross compiler will run. +os: + Windows: + subsystem: [None, cygwin, msys, msys2, wsl] + WindowsStore: + version: ["8.1", "10.0"] + WindowsCE: + platform: ANY + version: ["5.0", "6.0", "7.0", "8.0"] + Linux: + Macos: + version: [None, "10.6", "10.7", "10.8", "10.9", "10.10", "10.11", "10.12", "10.13", "10.14", "10.15", "11.0", "13.0"] + sdk: [None, "macosx"] + subsystem: [None, catalyst] + Android: + api_level: ANY + iOS: + version: ["7.0", "7.1", "8.0", "8.1", "8.2", "8.3", "9.0", "9.1", "9.2", "9.3", "10.0", "10.1", "10.2", "10.3", "11.0", "11.1", "11.2", "11.3", "11.4", "12.0", "12.1", "12.2", "12.3", "12.4", "13.0", "13.1", "13.2", "13.3", "13.4", "13.5", "13.6"] + sdk: [None, "iphoneos", "iphonesimulator"] + watchOS: + version: ["4.0", "4.1", "4.2", "4.3", "5.0", "5.1", "5.2", "5.3", "6.0", "6.1"] + sdk: [None, "watchos", "watchsimulator"] + tvOS: + version: ["11.0", "11.1", "11.2", "11.3", "11.4", "12.0", "12.1", "12.2", "12.3", "12.4", "13.0"] + sdk: [None, "appletvos", "appletvsimulator"] + FreeBSD: + SunOS: + AIX: + Arduino: + board: ANY + Emscripten: + Neutrino: + version: ["6.4", "6.5", "6.6", "7.0", "7.1"] +arch: [x86, x86_64, ppc32be, ppc32, ppc64le, ppc64, armv4, armv4i, armv5el, armv5hf, armv6, armv7, armv7hf, armv7s, armv7k, armv8, armv8_32, armv8.3, sparc, sparcv9, mips, mips64, avr, s390, s390x, asm.js, wasm, sh4le, e2k-v2, e2k-v3, e2k-v4, e2k-v5, e2k-v6, e2k-v7] +compiler: + sun-cc: + version: ["5.10", "5.11", "5.12", "5.13", "5.14", "5.15"] + threads: [None, posix] + libcxx: [libCstd, libstdcxx, libstlport, libstdc++] + gcc: &gcc + version: ["4.1", "4.4", "4.5", "4.6", "4.7", "4.8", "4.9", + "5", "5.1", "5.2", "5.3", "5.4", "5.5", + "6", "6.1", "6.2", "6.3", "6.4", "6.5", + "7", "7.1", "7.2", "7.3", "7.4", "7.5", + "8", "8.1", "8.2", "8.3", "8.4", + "9", "9.1", "9.2", "9.3", + "10", "10.1"] + libcxx: [libstdc++, libstdc++11] + threads: [None, posix, win32] # Windows MinGW + exception: [None, dwarf2, sjlj, seh] # Windows MinGW + cppstd: [None, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20] + Visual Studio: &visual_studio + runtime: [MD, MT, MTd, MDd] + version: ["8", "9", "10", "11", "12", "14", "15", "16"] + toolset: [None, v90, v100, v110, v110_xp, v120, v120_xp, + v140, v140_xp, v140_clang_c2, LLVM-vs2012, LLVM-vs2012_xp, + LLVM-vs2013, LLVM-vs2013_xp, LLVM-vs2014, LLVM-vs2014_xp, + LLVM-vs2017, LLVM-vs2017_xp, v141, v141_xp, v141_clang_c2, v142, + llvm, ClangCL] + cppstd: [None, 14, 17, 20] + msvc: + version: ["19.0", + "19.1", "19.10", "19.11", "19.12", "19.13", "19.14", "19.15", "19.16", + "19.2", "19.20", "19.21", "19.22", "19.23", "19.24", "19.25", "19.26", "19.27", "19.28"] + runtime: [static, dynamic] + runtime_type: [Debug, Release] + cppstd: [14, 17, 20] + clang: + version: ["3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "4.0", + "5.0", "6.0", "7.0", "7.1", + "8", "9", "10", "11", "12"] + libcxx: [None, libstdc++, libstdc++11, libc++, c++_shared, c++_static] + cppstd: [None, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20] + runtime: [None, MD, MT, MTd, MDd] + apple-clang: &apple_clang + version: ["5.0", "5.1", "6.0", "6.1", "7.0", "7.3", "8.0", "8.1", "9.0", "9.1", "10.0", "11.0", "12.0"] + libcxx: [libstdc++, libc++] + cppstd: [None, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20] + intel: + version: ["11", "12", "13", "14", "15", "16", "17", "18", "19", "19.1"] + base: + gcc: + <<: *gcc + threads: [None] + exception: [None] + Visual Studio: + <<: *visual_studio + apple-clang: + <<: *apple_clang + qcc: + version: ["4.4", "5.4", "8.3"] + libcxx: [cxx, gpp, cpp, cpp-ne, accp, acpp-ne, ecpp, ecpp-ne] + cppstd: [None, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17] + mcst-lcc: + version: ["1.19", "1.20", "1.21", "1.22", "1.23", "1.24", "1.25"] + base: + gcc: + <<: *gcc + threads: [None] + exceptions: [None] + +build_type: [None, Debug, Release, RelWithDebInfo, MinSizeRel] + + +cppstd: [None, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20] # Deprecated, use compiler.cppstd + From 1c37df5677a9cd5bf08fd5aa257719a0e89b5bf7 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Thu, 18 Feb 2021 01:22:58 -0500 Subject: [PATCH 2/2] linux-fresh: Set DEBIAN_FRONTEND as environment variable Prevents repeating the same code text over and over each time apt-get is used. This is a required variable to use apt-get in a non-interactive container, so it should be set globally, anyways. --- linux-fresh/Dockerfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/linux-fresh/Dockerfile b/linux-fresh/Dockerfile index e567eba..ca03dfe 100644 --- a/linux-fresh/Dockerfile +++ b/linux-fresh/Dockerfile @@ -3,6 +3,7 @@ MAINTAINER yuzu ENV CLANG_VER=12 ENV CMAKE_VER=3.16.3 +ENV DEBIAN_FRONTEND=noninteractive ENV GCC_VER=10 ENV QT_PKG_VER=512 ENV QT_VER=5.12.6 @@ -10,8 +11,8 @@ ENV UBUNTU_VER=bionic # Create a user account yuzu (UID 1027) that the container will run as RUN useradd -m -u 1027 -s /bin/bash yuzu && \ - DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y full-upgrade && \ - DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ + apt-get update && apt-get -y full-upgrade && \ + apt-get install --no-install-recommends -y \ build-essential \ ccache \ file \ @@ -38,7 +39,7 @@ RUN add-apt-repository -y ppa:beineri/opt-qt-${QT_VER}-${UBUNTU_VER} && \ add-apt-repository -y ppa:jonathonf/ffmpeg-4 && \ add-apt-repository -y ppa:ubuntu-toolchain-r/test && \ apt-get update -y && \ - DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ + apt-get install --no-install-recommends -y \ g++-${GCC_VER} \ gcc-${GCC_VER} \ libavcodec-dev \ @@ -54,7 +55,7 @@ RUN add-apt-repository -y ppa:beineri/opt-qt-${QT_VER}-${UBUNTU_VER} && \ RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ echo "deb http://apt.llvm.org/${UBUNTU_VER}/ llvm-toolchain-${UBUNTU_VER}-${CLANG_VER} main" >> /etc/apt/sources.list && \ apt-get update -y && \ - DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ + apt-get install --no-install-recommends -y \ clang-${CLANG_VER} && \ ln -s $(which clang-${CLANG_VER}) /usr/bin/clang && \ ln -s $(which clang++-${CLANG_VER}) /usr/bin/clang++ && \