Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/docker-images
  • funman/docker-buildbots
  • chouquette/docker-images
  • rom1v/docker-images
  • ePirat/docker-images
  • haasn/docker-images
  • thresh/docker-images
  • janne/docker-images
  • mstorsjo/docker-images
  • Garf/docker-images
  • 126tufthorn/docker-images
  • f3ndot/docker-images
  • robUx4/docker-images
  • jahan/docker-images
  • jgh-/docker-images
  • mfkl/docker-images
  • jdek/docker-images
  • another/docker-images
  • nullgemm/docker-images
  • mamoru9999/vlc-docker-image
  • Grubshka/docker-images
  • chub/docker-images
  • Luni-4/docker-images
  • b1ue/docker-images
  • poowadolkosuma/docker-images
  • jill/docker-images
  • tguillem/docker-images
  • bbbui/docker-images
  • r8420/docker-images
  • asenat/docker-images
  • saschaschumachers857/docker-images
  • bravo696/docker-images
  • JohannesKauffmann/docker-images
  • dholeey7/docker-images
  • kasper93/docker-images
  • alexandre-janniaux/docker-images
  • fcartegnie/docker-images
  • huynhsontung/docker-images
  • HecaiYuan/docker-images
  • fuzun/docker-images
40 results
Show changes
Commits on Source (56)
Showing
with 213 additions and 272 deletions
......@@ -27,7 +27,7 @@ stages:
cat > generated-config.jsonnet << __EOF__
local job(j) =
{
image: "docker:20.10.12",
image: "docker:27.5.1",
stage: "build",
tags: [ "dind-amd64" ],
rules: [ { "if": "\$CI_PIPELINE_SOURCE == \"parent_pipeline\"" } ],
......@@ -62,7 +62,7 @@ stages:
},
"default": {
"services": [
"docker:20.10.12-dind"
"docker:27.5.1-dind"
],
"before_script": [
"docker info",
......@@ -87,7 +87,7 @@ variables:
default:
services:
- docker:20.10.12-dind
- docker:27.5.1-dind
before_script:
- docker info
- apk add git jsonnet
......@@ -97,7 +97,7 @@ generate:
tags:
- dind-amd64
image:
name: docker:20.10.4
name: docker:27.5.1
script:
- *generate-jobs
only:
......
FROM debian:buster-20231009-slim
FROM debian:buster-20240612-slim
MAINTAINER VideoLAN roots <roots@videolan.org>
......
FROM debian:sid-20240211-slim
FROM debian:sid-20250113-slim
MAINTAINER VideoLAN roots <roots@videolan.org>
......@@ -18,27 +18,27 @@ RUN groupadd --gid ${VIDEOLAN_UID} videolan && \
apt-get -y dist-upgrade && \
apt-get install --no-install-suggests --no-install-recommends -y \
lftp ca-certificates curl git build-essential \
nasm clang-17 libclang-rt-17-dev mold meson ninja-build gcovr \
nasm clang-19 libclang-rt-19-dev mold meson ninja-build gcovr \
wine wine64 procps doxygen graphviz libsdl2-dev ripgrep \
zstd && \
ln -s clang-17 /usr/bin/clang && \
ln -s clang++-17 /usr/bin/clang++ && \
ln -s clang-19 /usr/bin/clang && \
ln -s clang++-19 /usr/bin/clang++ && \
dpkg --add-architecture i386 && \
apt-get update && \
apt-get install --no-install-suggests --no-install-recommends -y \
gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 \
gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools \
gcc-multilib g++-multilib \
libc6-dev:i386 libgcc-13-dev:i386 wine32 qemu-user && \
libc6-dev:i386 libgcc-14-dev:i386 wine32 qemu-user && \
apt-get install --no-install-suggests --no-install-recommends -y \
gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-dev-riscv64-cross && \
apt-get install --no-install-suggests --no-install-recommends -y \
gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross && \
apt-get clean -y && rm -rf /var/lib/apt/lists/*
RUN LOONG_TOOLCHAIN_NAME="CLFS-loongarch64-8.1-x86_64-cross-tools-gcc-glibc.tar.xz" && \
LOONG_TOOLCHAIN_SHA256="cd7c98499e1d7476df144cca22ade2140d3f311be0b4204591bdf8466971ba27" && \
curl --location --remote-name "https://github.com/loongson/build-tools/releases/download/2023.08.08/$LOONG_TOOLCHAIN_NAME" && \
RUN LOONG_TOOLCHAIN_NAME="x86_64-cross-tools-loongarch64-binutils_2.43.1-gcc_14.2.0-glibc_2.40.tar.xz" && \
LOONG_TOOLCHAIN_SHA256="3405faee1cb757d9e42962013a3fe0dfb62ebf44b4c0739833f4b9528a99a017" && \
curl --location --remote-name "https://github.com/loongson/build-tools/releases/download/2024.11.01/$LOONG_TOOLCHAIN_NAME" && \
echo "$LOONG_TOOLCHAIN_SHA256 $LOONG_TOOLCHAIN_NAME" | sha256sum -c && \
tar -xf "$LOONG_TOOLCHAIN_NAME" -C /opt && \
rm "$LOONG_TOOLCHAIN_NAME"
......
FROM debian:bookworm-20230522-slim
FROM debian:bookworm-20240311-slim
MAINTAINER VideoLAN roots <roots@videolan.org>
ENV IMAGE_DATE=202306021100
COPY crossfiles/ /opt/crossfiles/
ENV ANDROID_NDK="/sdk/android-ndk" \
ANDROID_SDK="/sdk/android-sdk-linux"
......@@ -18,24 +16,31 @@ ARG VIDEOLAN_CI_UID=499
ARG CORES=8
ENV PATH=/sdk/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/:/opt/tools/bin:$PATH
ENV RUST_HOME=/opt/rust
ENV RUSTUP_HOME=$RUST_HOME/rustup
ENV CARGO_HOME=$RUST_HOME/cargo
ENV PATH=/sdk/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/:/opt/tools/bin:/opt/tools/libexec:$CARGO_HOME/bin:$PATH
RUN groupadd --gid ${VIDEOLAN_CI_UID} videolan && \
useradd --uid ${VIDEOLAN_CI_UID} --gid videolan --create-home --shell /bin/bash videolan && \
echo "videolan:videolan" | chpasswd && \
mkdir -p $RUST_HOME && chown videolan $RUST_HOME && \
mkdir -p /usr/share/man/man1 && \
apt-get update && \
apt-get -y dist-upgrade && \
apt-get install --no-install-suggests --no-install-recommends -y \
openjdk-17-jdk-headless ca-certificates autoconf m4 automake ant autopoint bison \
flex build-essential libtool libtool-bin patch pkg-config cmake meson \
git yasm ragel g++ gettext ninja-build \
git yasm g++ gettext ninja-build \
wget expect unzip python3 python3-venv python3-setuptools python3-mako \
locales libltdl-dev curl nasm gperf && \
locales libltdl-dev curl nasm gperf \
&& \
apt-get clean -y && rm -rf /var/lib/apt/lists/* && \
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
echo "export ANDROID_NDK=${ANDROID_NDK}" >> /etc/profile.d/vlc_env.sh && \
echo "export ANDROID_SDK=${ANDROID_SDK}" >> /etc/profile.d/vlc_env.sh && \
mkdir sdk && cd sdk && \
mkdir /sdk && cd /sdk && \
ANDROID_NDK_VERSION=26b && \
ANDROID_NDK_SHA256=ad73c0370f0b0a87d1671ed2fd5a9ac9acfd1eb5c43a7fbfbd330f85d19dd632 && \
wget -q https://dl.google.com/android/repository/android-ndk-r$ANDROID_NDK_VERSION-linux.zip && \
......@@ -55,25 +60,35 @@ RUN groupadd --gid ${VIDEOLAN_CI_UID} videolan && \
echo $SDK_TOOLS_SHA256 $SDK_TOOLS_FILENAME | sha256sum -c && \
unzip $SDK_TOOLS_FILENAME && \
rm -f $SDK_TOOLS_FILENAME && \
cd / && \
cd sdk/android-sdk-linux && \
cd /sdk/android-sdk-linux && \
cmdline-tools/bin/sdkmanager --sdk_root=/sdk/android-sdk-linux/ "build-tools;26.0.1" "platform-tools" "platforms;android-26" && \
chown -R videolan /sdk && \
mkdir /build && cd /build && \
PROTOBUF_VERSION=3.4.1 && \
PROTOBUF_SHA256=2bb34b4a8211a30d12ef29fd8660995023d119c99fbab2e5fe46f17528c9cc78 && \
wget -q https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-cpp-$PROTOBUF_VERSION.tar.gz && \
echo $PROTOBUF_SHA256 protobuf-cpp-$PROTOBUF_VERSION.tar.gz | sha256sum -c && \
tar xzfo protobuf-cpp-$PROTOBUF_VERSION.tar.gz && \
cd protobuf-$PROTOBUF_VERSION && \
# force include <algorithm> \
sed -i.orig 's,#ifdef _MSC_VER,#if 1,' "src/google/protobuf/repeated_field.h" && \
cmake -S cmake -B build -DBUILD_SHARED_LIBS=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=OFF && \
cmake --build build --parallel $CORES && cmake --install build --prefix /opt/tools && \
mkdir /build && \
cd /build && \
VLC_TOOLS_HASH=0ef4d6151ce7a4443d88269fcb6f78bc0a442e98 && \
git clone -b master https://code.videolan.org/videolan/vlc.git && cd vlc && git checkout ${VLC_TOOLS_HASH} && \
cd contrib && mkdir build-contribs && cd build-contribs && \
TARGET_TUPLE=aarch64-linux-android && \
ANDROID_ABI=arm64-v8a ANDROID_API=21 ../bootstrap --host=$TARGET_TUPLE --prefix=/opt/tools/dummy --enable-ad-clauses && \
make -j$CORES list && \
make -j$CORES tools && \
rm -rf /build
ENV LANG en_US.UTF-8
USER videolan
RUN RUST_TARGETS="aarch64-linux-android x86_64-linux-android i686-linux-android" && \
mkdir $RUST_HOME/build && \
cd $RUST_HOME/build && \
RUST_VERSION=1.79.0 && \
RUSTUP_VERSION=1.27.1 && \
RUSTUP_SHA256=f5ba37f2ba68efec101198dca1585e6e7dd7640ca9c526441b729a79062d3b77 && \
wget -q "https://github.com/rust-lang/rustup/archive/refs/tags/$RUSTUP_VERSION.tar.gz" -O rustup-$RUSTUP_VERSION.tar.gz && \
echo $RUSTUP_SHA256 rustup-$RUSTUP_VERSION.tar.gz | sha256sum -c && \
tar xzfo rustup-$RUSTUP_VERSION.tar.gz && \
cd rustup-$RUSTUP_VERSION && \
./rustup-init.sh --default-toolchain $RUST_VERSION --profile minimal -y --target $RUST_TARGETS && \
rm -rf $RUST_HOME/build
RUN git config --global user.name "VLC Android" && \
git config --global user.email buildbot@videolan.org
# Automatically generated by contrib makefile
[binaries]
c = 'aarch64-linux-android21-clang'
cpp = 'aarch64-linux-android21-clang++'
ar = 'aarch64-linux-android-ar'
strip = 'aarch64-linux-android-strip'
pkgconfig = 'pkg-config'
windres = 'aarch64-linux-android-windres'
[properties]
needs_exe_wrapper = true
c_args = ['-g', '-O2', '-fPIC', '-fdata-sections', '-ffunction-sections', '-funwind-tables', '-fstack-protector-strong', '-no-canonical-prefixes']
cpp_args = ['-g', '-O2', '-fPIC', '-fdata-sections', '-ffunction-sections', '-funwind-tables', '-fstack-protector-strong', '-no-canonical-prefixes', '-fexceptions', '-frtti']
[host_machine]
system = 'android'
cpu_family = 'aarch64'
endian = 'little'
cpu = 'aarch64'
# Automatically generated by contrib makefile
[binaries]
c = 'armv7a-linux-androideabi17-clang'
cpp = 'armv7a-linux-androideabi17-clang++'
ar = 'arm-linux-androideabi-ar'
strip = 'arm-linux-androideabi-strip'
pkgconfig = 'pkg-config'
windres = 'arm-linux-androideabi-windres'
[properties]
needs_exe_wrapper = true
c_args = ['-g', '-O2', '-fPIC', '-fdata-sections', '-ffunction-sections', '-funwind-tables', '-fstack-protector-strong', '-no-canonical-prefixes', '-U_FILE_OFFSET_BITS']
cpp_args = ['-g', '-O2', '-fPIC', '-fdata-sections', '-ffunction-sections', '-funwind-tables', '-fstack-protector-strong', '-no-canonical-prefixes', '-fexceptions', '-frtti']
[host_machine]
system = 'android'
cpu_family = 'arm'
endian = 'little'
cpu = 'arm'
FROM debian:bookworm-20231009-slim
FROM debian:bookworm-20240311-slim
MAINTAINER VideoLAN roots <roots@videolan.org>
ENV IMAGE_DATE=202211290000
ENV IMAGE_DATE=202405241004
# The wine SDK path differs from version to version, starting from the one in buster, it's
# located in /usr/include/wine/wine/windows/ instead of
# /usr/include/wine/windows/
ENV WINE_SDK_PATH=/usr/include/wine/wine/windows
ENV RUST_HOME=/opt/rust
ENV RUSTUP_HOME=$RUST_HOME/rustup
ENV CARGO_HOME=$RUST_HOME/cargo
RUN apt-get update -qq && mkdir -p /usr/share/man/man1 && \
apt-get -y dist-upgrade && \
apt-get install -qqy --no-install-suggests --no-install-recommends \
git wget bzip2 file unzip libtool-bin pkg-config build-essential \
automake yasm gettext autopoint vim ninja-build ant libgl-dev libegl-dev \
winbind flex ragel bison zip dos2unix p7zip-full gperf nsis nasm cmake \
winbind flex bison zip dos2unix p7zip-full gperf nsis nasm cmake \
python3 python3-venv python3-setuptools python3-mako locales meson help2man libltdl-dev \
ca-certificates curl default-jdk-headless gnupg procps libcurl4-gnutls-dev && \
ca-certificates curl default-jdk-headless gnupg procps libcurl4-gnutls-dev \
&& \
dpkg --add-architecture i386 && \
wget -nc -O /etc/apt/keyrings/winehq.asc https://dl.winehq.org/wine-builds/winehq.key && \
echo "deb [ signed-by=/etc/apt/keyrings/winehq.asc ] https://dl.winehq.org/wine-builds/debian/ bookworm main" > /etc/apt/sources.list.d/winehq.list && \
......@@ -49,20 +54,9 @@ RUN cd /build/ && \
autoreconf -vif && mkdir build && cd build && \
../configure --enable-tools --disable-processor --prefix=/opt/breakpad && \
make -j$CORES && make install && \
cd /build && \
PROTOBUF_VERSION=3.4.1 && \
PROTOBUF_SHA256=2bb34b4a8211a30d12ef29fd8660995023d119c99fbab2e5fe46f17528c9cc78 && \
wget -q https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-cpp-$PROTOBUF_VERSION.tar.gz && \
echo $PROTOBUF_SHA256 protobuf-cpp-$PROTOBUF_VERSION.tar.gz | sha256sum -c && \
tar xzfo protobuf-cpp-$PROTOBUF_VERSION.tar.gz && \
cd protobuf-$PROTOBUF_VERSION && \
# force include <algorithm> \
sed -i.orig 's,#ifdef _MSC_VER,#if 1,' "src/google/protobuf/repeated_field.h" && \
cmake -S cmake -B build -DBUILD_SHARED_LIBS=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=OFF && \
cmake --build build --parallel $CORES && cmake --install build --prefix /opt/tools && \
rm -rf /build/*
ENV PATH=/opt/tools/bin:$PATH
ENV PATH=/opt/tools/bin:/opt/tools/libexec:$CARGO_HOME/bin:$PATH
ARG TOOLCHAIN_ARCHS="i686 x86_64 armv7 aarch64"
......@@ -74,7 +68,7 @@ COPY wrappers/*.sh wrappers/*.c wrappers/*.h ./wrappers/
RUN ./build-llvm.sh $TOOLCHAIN_PREFIX && \
./strip-llvm.sh $TOOLCHAIN_PREFIX && \
./install-wrappers.sh $TOOLCHAIN_PREFIX && \
MINGW_W64_VERSION=c3e587c067a00a561899d49d3e63a659e38802ec ./build-mingw-w64.sh $TOOLCHAIN_PREFIX --with-default-msvcrt=$DEFAULT_CRT && \
MINGW_W64_VERSION=819a6ec2ea87c19814b287e21d65e0dc7f05abba ./build-mingw-w64.sh $TOOLCHAIN_PREFIX --with-default-msvcrt=$DEFAULT_CRT && \
./build-mingw-w64-tools.sh $TOOLCHAIN_PREFIX && \
./build-compiler-rt.sh $TOOLCHAIN_PREFIX && \
./build-libcxx.sh $TOOLCHAIN_PREFIX && \
......@@ -101,6 +95,19 @@ RUN chmod +x /opt/wine/wait_process.sh && \
echo $WINE_MONO_SHA256 /usr/share/wine/mono/wine-mono-$WINE_MONO_VERSION.msi | sha256sum -c && \
chmod +x /usr/share/wine/mono/wine-mono-$WINE_MONO_VERSION.msi
ENV PATH=$TOOLCHAIN_PREFIX/bin:$PATH
# Build VLC tools
RUN cd /build && \
VLC_TOOLS_HASH=0ef4d6151ce7a4443d88269fcb6f78bc0a442e98 && \
git clone -b master https://code.videolan.org/videolan/vlc.git && cd vlc && git checkout ${VLC_TOOLS_HASH} && \
cd contrib && mkdir build-contribs && cd build-contribs && \
TARGET_TUPLE=x86_64-w64-mingw32 && \
../bootstrap --host=$TARGET_TUPLE --prefix=/opt/tools/dummy --enable-ad-clauses && \
make -j$CORES list && \
make -j$CORES tools && \
rm -rf /build/*
# If someone wants to use VideoLAN docker images on a local machine and does
# not want to be disturbed by the videolan user, we should not take an uid/gid
# in the user range of main distributions, which means:
......@@ -110,16 +117,26 @@ ARG VIDEOLAN_UID=499
RUN addgroup --quiet --gid ${VIDEOLAN_UID} videolan && \
adduser --quiet --uid ${VIDEOLAN_UID} --ingroup videolan videolan && \
echo "videolan:videolan" | chpasswd
echo "videolan:videolan" | chpasswd && \
mkdir -p $RUST_HOME && chown videolan $RUST_HOME
USER videolan
RUN RUST_TARGETS="x86_64-pc-windows-gnullvm aarch64-pc-windows-gnullvm i686-pc-windows-gnullvm" && \
mkdir $RUST_HOME/build && \
cd $RUST_HOME/build && \
RUST_VERSION=1.79.0 && \
RUSTUP_VERSION=1.27.1 && \
RUSTUP_SHA256=f5ba37f2ba68efec101198dca1585e6e7dd7640ca9c526441b729a79062d3b77 && \
wget -q "https://github.com/rust-lang/rustup/archive/refs/tags/$RUSTUP_VERSION.tar.gz" -O rustup-$RUSTUP_VERSION.tar.gz && \
echo $RUSTUP_SHA256 rustup-$RUSTUP_VERSION.tar.gz | sha256sum -c && \
tar xzfo rustup-$RUSTUP_VERSION.tar.gz && \
cd rustup-$RUSTUP_VERSION && \
./rustup-init.sh --default-toolchain $RUST_VERSION --profile minimal -y --target $RUST_TARGETS && \
rm -rf $RUST_HOME/build
RUN wine wineboot --init && \
/opt/wine/wait_process.sh wineserver && \
/opt/wine/winetricks --unattended dotnet48 dotnet_verifier && \
rm -rf ~/.cache/winetricks && \
rm -rf /tmp/.wine-*
ENV PATH=$TOOLCHAIN_PREFIX/bin:$PATH
COPY crossfiles /opt/crossfiles
......@@ -41,13 +41,13 @@ export PATH="$PREFIX/bin:$PATH"
: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}}
ANY_ARCH=$(echo $ARCHS | awk '{print $1}')
CLANG_VERSION=$(basename "$(dirname "$(dirname "$(dirname "$("$PREFIX/bin/$ANY_ARCH-w64-mingw32-clang" --print-libgcc-file-name -rtlib=compiler-rt)")")")")
CLANG_RESOURCE_DIR="$("$PREFIX/bin/$ANY_ARCH-w64-mingw32-clang" --print-resource-dir)"
if [ ! -d llvm-project/compiler-rt ] || [ -n "$SYNC" ]; then
CHECKOUT_ONLY=1 ./build-llvm.sh
fi
if [ -n "$(which ninja)" ]; then
if command -v ninja >/dev/null; then
CMAKE_GENERATOR="Ninja"
NINJA=1
BUILDCMD=ninja
......@@ -86,7 +86,7 @@ for arch in $ARCHS; do
cmake \
${CMAKE_GENERATOR+-G} "$CMAKE_GENERATOR" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$PREFIX/lib/clang/$CLANG_VERSION" \
-DCMAKE_INSTALL_PREFIX="$CLANG_RESOURCE_DIR" \
-DCMAKE_C_COMPILER=$arch-w64-mingw32-clang \
-DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \
-DCMAKE_SYSTEM_NAME=Windows \
......@@ -95,13 +95,14 @@ for arch in $ARCHS; do
-DCMAKE_C_COMPILER_TARGET=$arch-windows-gnu \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=TRUE \
-DCOMPILER_RT_USE_BUILTINS_LIBRARY=TRUE \
-DLLVM_CONFIG_PATH="" \
-DSANITIZER_CXX_ABI=libc++ \
$SRC_DIR
$BUILDCMD ${CORES+-j$CORES}
$BUILDCMD install
mkdir -p "$PREFIX/$arch-w64-mingw32/bin"
if [ -n "$SANITIZERS" ]; then
mv "$PREFIX/lib/clang/$CLANG_VERSION/lib/windows/"*.dll "$PREFIX/$arch-w64-mingw32/bin"
mv "$CLANG_RESOURCE_DIR/lib/windows/"*.dll "$PREFIX/$arch-w64-mingw32/bin"
fi
cd ..
done
......@@ -16,18 +16,18 @@
set -e
BUILD_STATIC=1
BUILD_SHARED=1
BUILD_STATIC=ON
BUILD_SHARED=ON
while [ $# -gt 0 ]; do
if [ "$1" = "--disable-shared" ]; then
BUILD_SHARED=
BUILD_SHARED=OFF
elif [ "$1" = "--enable-shared" ]; then
BUILD_SHARED=1
BUILD_SHARED=ON
elif [ "$1" = "--disable-static" ]; then
BUILD_STATIC=
BUILD_STATIC=OFF
elif [ "$1" = "--enable-static" ]; then
BUILD_STATIC=1
BUILD_STATIC=ON
else
PREFIX="$1"
fi
......@@ -55,7 +55,7 @@ LLVM_PATH="$(pwd)/llvm"
cd runtimes
if [ -n "$(which ninja)" ]; then
if command -v ninja >/dev/null; then
CMAKE_GENERATOR="Ninja"
NINJA=1
BUILDCMD=ninja
......@@ -74,62 +74,42 @@ else
BUILDCMD=make
fi
build_all() {
type="$1"
CMAKEFLAGS=""
if [ "$type" = "shared" ]; then
SHARED=TRUE
STATIC=FALSE
CMAKEFLAGS="$CMAKEFLAGS -DLIBCXXABI_USE_LLVM_UNWINDER=ON"
else
SHARED=FALSE
STATIC=TRUE
fi
for arch in $ARCHS; do
[ -z "$CLEAN" ] || rm -rf build-$arch-$type
mkdir -p build-$arch-$type
cd build-$arch-$type
cmake \
${CMAKE_GENERATOR+-G} "$CMAKE_GENERATOR" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$PREFIX/$arch-w64-mingw32" \
-DCMAKE_C_COMPILER=$arch-w64-mingw32-clang \
-DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \
-DCMAKE_CXX_COMPILER_TARGET=$arch-w64-windows-gnu \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER_WORKS=TRUE \
-DCMAKE_CXX_COMPILER_WORKS=TRUE \
-DLLVM_PATH="$LLVM_PATH" \
-DCMAKE_AR="$PREFIX/bin/llvm-ar" \
-DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \
-DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \
-DLIBUNWIND_USE_COMPILER_RT=TRUE \
-DLIBUNWIND_ENABLE_SHARED=$SHARED \
-DLIBUNWIND_ENABLE_STATIC=$STATIC \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_ENABLE_SHARED=$SHARED \
-DLIBCXX_ENABLE_STATIC=$STATIC \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \
-DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_LIBDIR_SUFFIX="" \
-DLIBCXX_INCLUDE_TESTS=FALSE \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \
-DLIBCXXABI_USE_COMPILER_RT=ON \
-DLIBCXXABI_ENABLE_SHARED=OFF \
-DLIBCXXABI_LIBDIR_SUFFIX="" \
$CMAKEFLAGS \
..
$BUILDCMD ${CORES+-j$CORES}
$BUILDCMD install
cd ..
done
}
# Build shared first and static afterwards; the headers for static linking also
# work when linking against the DLL, but not vice versa.
[ -z "$BUILD_SHARED" ] || build_all shared
[ -z "$BUILD_STATIC" ] || build_all static
for arch in $ARCHS; do
[ -z "$CLEAN" ] || rm -rf build-$arch
mkdir -p build-$arch
cd build-$arch
cmake \
${CMAKE_GENERATOR+-G} "$CMAKE_GENERATOR" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$PREFIX/$arch-w64-mingw32" \
-DCMAKE_C_COMPILER=$arch-w64-mingw32-clang \
-DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \
-DCMAKE_CXX_COMPILER_TARGET=$arch-w64-windows-gnu \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER_WORKS=TRUE \
-DCMAKE_CXX_COMPILER_WORKS=TRUE \
-DLLVM_PATH="$LLVM_PATH" \
-DCMAKE_AR="$PREFIX/bin/llvm-ar" \
-DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \
-DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \
-DLIBUNWIND_USE_COMPILER_RT=TRUE \
-DLIBUNWIND_ENABLE_SHARED=$BUILD_SHARED \
-DLIBUNWIND_ENABLE_STATIC=$BUILD_STATIC \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_ENABLE_SHARED=$BUILD_SHARED \
-DLIBCXX_ENABLE_STATIC=$BUILD_STATIC \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \
-DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_LIBDIR_SUFFIX="" \
-DLIBCXX_INCLUDE_TESTS=FALSE \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \
-DLIBCXXABI_USE_COMPILER_RT=ON \
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
-DLIBCXXABI_ENABLE_SHARED=OFF \
-DLIBCXXABI_LIBDIR_SUFFIX="" \
..
$BUILDCMD ${CORES+-j$CORES}
$BUILDCMD install
cd ..
done
......@@ -51,7 +51,7 @@ if [ -n "$SYNC" ] || [ -n "$CHECKOUT" ]; then
cd ..
fi
if [ -n "$(which ninja)" ]; then
if command -v ninja >/dev/null; then
CMAKE_GENERATOR="Ninja"
NINJA=1
BUILDCMD=ninja
......@@ -92,7 +92,6 @@ if [ -n "$HOST" ]; then
BUILDDIR=$BUILDDIR-$HOST
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_SYSTEM_NAME=Windows"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_CROSSCOMPILING=TRUE"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_C_COMPILER=$HOST-gcc"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_CXX_COMPILER=$HOST-g++"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_RC_COMPILER=$HOST-windres"
......
......@@ -16,7 +16,7 @@
set -e
: ${LLVM_VERSION:=llvmorg-14.0.0}
: ${LLVM_VERSION:=llvmorg-15.0.0}
ASSERTS=OFF
unset HOST
BUILDDIR="build"
......@@ -125,7 +125,7 @@ fi
[ -z "$CHECKOUT_ONLY" ] || exit 0
if [ -n "$(which ninja)" ]; then
if command -v ninja >/dev/null; then
CMAKE_GENERATOR="Ninja"
NINJA=1
BUILDCMD=ninja
......@@ -144,42 +144,61 @@ else
BUILDCMD=make
fi
if [ -n "$HOST" ]; then
find_native_tools() {
if [ -d llvm-project/llvm/build/bin ]; then
echo $(pwd)/llvm-project/llvm/build/bin
elif [ -d llvm-project/llvm/build-asserts/bin ]; then
echo $(pwd)/llvm-project/llvm/build-asserts/bin
elif [ -d llvm-project/llvm/build-noasserts/bin ]; then
echo $(pwd)/llvm-project/llvm/build-noasserts/bin
elif [ -n "$(which llvm-tblgen)" ]; then
echo $(dirname $(which llvm-tblgen))
fi
}
CMAKEFLAGS="$LLVM_CMAKEFLAGS"
if [ -n "$HOST" ]; then
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_SYSTEM_NAME=Windows"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_CROSSCOMPILING=TRUE"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_C_COMPILER=$HOST-gcc"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_CXX_COMPILER=$HOST-g++"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_RC_COMPILER=$HOST-windres"
CMAKEFLAGS="$CMAKEFLAGS -DCROSS_TOOLCHAIN_FLAGS_NATIVE="
native=$(find_native_tools)
if [ -n "$native" ]; then
native=""
for dir in llvm-project/llvm/build/bin llvm-project/llvm/build-asserts/bin; do
if [ -x "$dir/llvm-tblgen.exe" ]; then
native="$(pwd)/$dir"
suffix=".exe"
break
elif [ -x "$dir/llvm-tblgen" ]; then
native="$(pwd)/$dir"
suffix=""
break
fi
done
if [ -z "$native" ] && command -v llvm-tblgen >/dev/null; then
native="$(dirname $(command -v llvm-tblgen))"
suffix=""
if [ -f $native/llvm-tblgen.exe ]; then
if [ -x "$native/llvm-tblgen.exe" ]; then
suffix=".exe"
fi
CMAKEFLAGS="$CMAKEFLAGS -DLLVM_TABLEGEN=$native/llvm-tblgen$suffix"
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_TABLEGEN=$native/clang-tblgen$suffix"
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_TABLEGEN=$native/lldb-tblgen$suffix"
CMAKEFLAGS="$CMAKEFLAGS -DLLVM_CONFIG_PATH=$native/llvm-config$suffix"
fi
CROSS_ROOT=$(cd $(dirname $(which $HOST-gcc))/../$HOST && pwd)
if [ -n "$native" ]; then
if [ -x "$native/llvm-tblgen$suffix" ]; then
CMAKEFLAGS="$CMAKEFLAGS -DLLVM_TABLEGEN=$native/llvm-tblgen$suffix"
fi
if [ -x "$native/clang-tblgen$suffix" ]; then
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_TABLEGEN=$native/clang-tblgen$suffix"
fi
if [ -x "$native/lldb-tblgen$suffix" ]; then
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_TABLEGEN=$native/lldb-tblgen$suffix"
fi
if [ -x "$native/llvm-config$suffix" ]; then
CMAKEFLAGS="$CMAKEFLAGS -DLLVM_CONFIG_PATH=$native/llvm-config$suffix"
fi
if [ -x "$native/clang-pseudo-gen$suffix" ]; then
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_PSEUDO_GEN=$native/clang-pseudo-gen$suffix"
fi
if [ -x "$native/clang-tidy-confusable-chars-gen$suffix" ]; then
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_TIDY_CONFUSABLE_CHARS_GEN=$native/clang-tidy-confusable-chars-gen$suffix"
fi
fi
CROSS_ROOT=$(cd $(dirname $(command -v $HOST-gcc))/../$HOST && pwd)
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_FIND_ROOT_PATH=$CROSS_ROOT"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY"
CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY"
# Custom, llvm-mingw specific defaults. We normally set these in
# the frontend wrappers, but this makes sure they are enabled by
......@@ -191,21 +210,23 @@ if [ -n "$HOST" ]; then
BUILDDIR=$BUILDDIR-$HOST
if [ -n "$WITH_PYTHON" ]; then
PYTHON_VER="3.9"
# The python3-config script requires executing with bash. It outputs
# an extra trailing space, which the extra 'echo' layer gets rid of.
EXT_SUFFIX="$(echo $(bash $PREFIX/python/bin/python3-config --extension-suffix))"
PYTHON_RELATIVE_PATH="$(cd "$PREFIX" && echo python/lib/python*/site-packages)"
PYTHON_INCLUDE_DIR="$(echo $PREFIX/python/include/python*)"
PYTHON_LIB="$(echo $PREFIX/python/lib/libpython*.dll.a)"
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_ENABLE_PYTHON=ON"
CMAKEFLAGS="$CMAKEFLAGS -DPYTHON_HOME=$PREFIX/python"
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_PYTHON_HOME=../python"
# Relative to the lldb install root
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_PYTHON_RELATIVE_PATH=python/lib/python$PYTHON_VER/site-packages"
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_PYTHON_RELATIVE_PATH=$PYTHON_RELATIVE_PATH"
# Relative to LLDB_PYTHON_HOME
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_PYTHON_EXE_RELATIVE_PATH=bin/python3.exe"
CMAKEFLAGS="$CMAKEFLAGS -DLLDB_PYTHON_EXT_SUFFIX=$EXT_SUFFIX"
CMAKEFLAGS="$CMAKEFLAGS -DPython3_INCLUDE_DIRS=$PREFIX/python/include/python$PYTHON_VER"
CMAKEFLAGS="$CMAKEFLAGS -DPython3_LIBRARIES=$PREFIX/python/lib/libpython$PYTHON_VER.dll.a"
CMAKEFLAGS="$CMAKEFLAGS -DPython3_INCLUDE_DIRS=$PYTHON_INCLUDE_DIR"
CMAKEFLAGS="$CMAKEFLAGS -DPython3_LIBRARIES=$PYTHON_LIB"
fi
elif [ -n "$STAGE2" ]; then
# Build using an earlier built and installed clang in the target directory
......
......@@ -42,10 +42,13 @@ for lib in winpthreads winstorecompat; do
[ -z "$CLEAN" ] || rm -rf build-$arch
mkdir -p build-$arch
cd build-$arch
../configure --host=$arch-w64-mingw32 --prefix="$PREFIX/$arch-w64-mingw32" --libdir="$PREFIX/$arch-w64-mingw32/lib"
arch_prefix="$PREFIX/$arch-w64-mingw32"
../configure --host=$arch-w64-mingw32 --prefix="$arch_prefix" --libdir="$arch_prefix/lib"
make -j$CORES
make install
cd ..
mkdir -p "$arch_prefix/share/mingw32"
install -m644 COPYING "$arch_prefix/share/mingw32/COPYING.${lib}.txt"
done
cd ..
done
......@@ -49,7 +49,7 @@ fi
cd mingw-w64
MAKE=make
if [ -n "$(which gmake)" ]; then
if command -v gmake >/dev/null; then
MAKE=gmake
fi
......@@ -92,6 +92,8 @@ cd build${CROSS_NAME}
../configure --prefix="$PREFIX" $CONFIGFLAGS
$MAKE -j$CORES
$MAKE install-strip
mkdir -p "$PREFIX/share/gendef"
install -m644 ../COPYING "$PREFIX/share/gendef"
cd ../../widl
[ -z "$CLEAN" ] || rm -rf build${CROSS_NAME}
mkdir -p build${CROSS_NAME}
......@@ -99,6 +101,8 @@ cd build${CROSS_NAME}
../configure --prefix="$PREFIX" --target=$ANY_ARCH-w64-mingw32 --with-widl-includedir="$INCLUDEDIR" $CONFIGFLAGS
$MAKE -j$CORES
$MAKE install-strip
mkdir -p "$PREFIX/share/widl"
install -m644 ../../../COPYING "$PREFIX/share/widl"
cd ..
cd "$PREFIX/bin"
# The build above produced $ANY_ARCH-w64-mingw32-widl, add symlinks to it
......
......@@ -18,7 +18,7 @@ set -e
: ${DEFAULT_WIN32_WINNT:=0x601}
: ${DEFAULT_MSVCRT:=ucrt}
: ${MINGW_W64_VERSION:=a3f6d363d534e9d5563a0b7c677889101e6bbd42}
: ${MINGW_W64_VERSION:=d4a0c84d908243a45255a06dc293d3d7c06db98c}
while [ $# -gt 0 ]; do
case "$1" in
......@@ -62,7 +62,7 @@ fi
[ -z "$CHECKOUT_ONLY" ] || exit 0
MAKE=make
if [ -n "$(which gmake)" ]; then
if command -v gmake >/dev/null; then
MAKE=gmake
fi
......@@ -124,3 +124,10 @@ for arch in $ARCHS; do
cd ..
done
cd ..
for arch in $ARCHS; do
mkdir -p "$PREFIX/$arch-w64-mingw32/share/mingw32"
for file in COPYING COPYING.MinGW-w64/COPYING.MinGW-w64.txt COPYING.MinGW-w64-runtime/COPYING.MinGW-w64-runtime.txt; do
install -m644 "$file" "$PREFIX/$arch-w64-mingw32/share/mingw32"
done
done
......@@ -35,7 +35,7 @@ fi
cd llvm-project/openmp
if [ -n "$(which ninja)" ]; then
if command -v ninja >/dev/null; then
CMAKE_GENERATOR="Ninja"
NINJA=1
BUILDCMD=ninja
......@@ -80,7 +80,6 @@ for arch in $ARCHS; do
-DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \
-DCMAKE_RC_COMPILER=$arch-w64-mingw32-windres \
-DCMAKE_ASM_MASM_COMPILER=llvm-ml \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_AR="$PREFIX/bin/llvm-ar" \
-DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \
......
[binaries]
c = 'aarch64-w64-mingw32-clang'
cpp = 'aarch64-w64-mingw32-clang++'
ar = 'aarch64-w64-mingw32-ar'
strip = 'aarch64-w64-mingw32-strip'
pkgconfig = 'pkg-config'
windres = 'aarch64-w64-mingw32-windres'
[properties]
c_link_args = ['-static-libgcc']
[host_machine]
system = 'windows'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
[binaries]
c = 'armv7-w64-mingw32-clang'
cpp = 'armv7-w64-mingw32-clang++'
ar = 'armv7-w64-mingw32-ar'
strip = 'armv7-w64-mingw32-strip'
pkgconfig = 'pkg-config'
windres = 'armv7-w64-mingw32-windres'
[properties]
c_link_args = ['-static-libgcc']
[host_machine]
system = 'windows'
cpu_family = 'arm'
cpu = 'armv7'
endian = 'little'
[binaries]
c = 'i686-w64-mingw32-clang'
cpp = 'i686-w64-mingw32-clang++'
ar = 'i686-w64-mingw32-ar'
strip = 'i686-w64-mingw32-strip'
windres = 'i686-w64-mingw32-windres'
pkgconfig = 'pkg-config'
exe_wrapper = ['wine']
[properties]
c_link_args = ['-static-libgcc']
needs_exe_wrapper = true
[host_machine]
system = 'windows'
cpu_family = 'x86'
cpu = 'i686'
endian = 'little'
[binaries]
c = 'x86_64-w64-mingw32-clang'
cpp = 'x86_64-w64-mingw32-clang++'
ar = 'x86_64-w64-mingw32-ar'
strip = 'x86_64-w64-mingw32-strip'
windres = 'x86_64-w64-mingw32-windres'
pkgconfig = 'pkg-config'
exe_wrapper = ['wine']
[properties]
c_link_args = ['-static-libgcc']
needs_exe_wrapper = true
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
......@@ -85,7 +85,7 @@ fi
cd "$PREFIX/bin"
for arch in $ARCHS; do
for target_os in $TARGET_OSES; do
for exec in clang clang++ gcc g++ cc c99 c11 c++ as; do
for exec in clang clang++ gcc g++ c++ as; do
ln -sf clang-target-wrapper$CTW_SUFFIX $arch-w64-$target_os-$exec$CTW_LINK_SUFFIX
done
for exec in addr2line ar ranlib nm objcopy readelf strings strip; do
......@@ -117,9 +117,12 @@ if [ -n "$EXEEXT" ]; then
# we are installing wrappers for.
case $ARCHS in
*$HOST_ARCH*)
for exec in clang clang++ gcc g++ cc c99 c11 c++ addr2line ar dlltool ranlib nm objcopy readelf strings strip windres; do
for exec in clang clang++ gcc g++ c++ addr2line ar dlltool ranlib nm objcopy readelf strings strip windres; do
ln -sf $HOST-$exec$EXEEXT $exec$EXEEXT
done
for exec in cc c99 c11; do
ln -sf clang$EXEEXT $exec$EXEEXT
done
for exec in ld objdump; do
ln -sf $HOST-$exec $exec
done
......