summaryrefslogtreecommitdiff
path: root/docker/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'docker/scripts')
-rw-r--r--docker/scripts/99_norecommends1
-rw-r--r--docker/scripts/binutils_align_fix.patch28
-rwxr-xr-xdocker/scripts/emsdk_install.sh37
-rwxr-xr-xdocker/scripts/jpegxl_builder.sh518
-rwxr-xr-xdocker/scripts/msan_install.sh131
-rwxr-xr-xdocker/scripts/qemu_install.sh83
6 files changed, 0 insertions, 798 deletions
diff --git a/docker/scripts/99_norecommends b/docker/scripts/99_norecommends
deleted file mode 100644
index 96d6728..0000000
--- a/docker/scripts/99_norecommends
+++ /dev/null
@@ -1 +0,0 @@
-APT::Install-Recommends "false";
diff --git a/docker/scripts/binutils_align_fix.patch b/docker/scripts/binutils_align_fix.patch
deleted file mode 100644
index 6066252..0000000
--- a/docker/scripts/binutils_align_fix.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Description: fix lack of alignment in relocations (crashes on mingw)
-See https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=73af69e74974eaa155eec89867e3ccc77ab39f6d
-From: Marc <marc@groundctl.com>
-Date: Fri, 9 Nov 2018 11:13:50 +0000
-Subject: [PATCH] Allow for compilers that do not produce aligned .rdat
- sections in PE format files.
-
---- a/upstream/ld/scripttempl/pe.sc 2020-05-12 18:45:12.000000000 +0200
-+++ b/upstream/ld/scripttempl/pe.sc 2020-05-12 18:47:12.000000000 +0200
-@@ -143,6 +143,7 @@
- .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
- {
- ${R_RDATA}
-+ . = ALIGN(4);
- ${RELOCATING+__rt_psrelocs_start = .;}
- ${RELOCATING+KEEP(*(.rdata_runtime_pseudo_reloc))}
- ${RELOCATING+__rt_psrelocs_end = .;}
---- a/upstream/ld/scripttempl/pep.sc 2020-05-12 18:45:19.000000000 +0200
-+++ b/upstream/ld/scripttempl/pep.sc 2020-05-12 18:47:18.000000000 +0200
-@@ -143,6 +143,7 @@
- .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
- {
- ${R_RDATA}
-+ . = ALIGN(4);
- ${RELOCATING+__rt_psrelocs_start = .;}
- ${RELOCATING+KEEP(*(.rdata_runtime_pseudo_reloc))}
- ${RELOCATING+__rt_psrelocs_end = .;}
-
diff --git a/docker/scripts/emsdk_install.sh b/docker/scripts/emsdk_install.sh
deleted file mode 100755
index 6cf225a..0000000
--- a/docker/scripts/emsdk_install.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) the JPEG XL Project Authors. All rights reserved.
-#
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-EMSDK_URL="https://github.com/emscripten-core/emsdk/archive/main.tar.gz"
-EMSDK_DIR="/opt/emsdk"
-
-EMSDK_RELEASE="2.0.23"
-
-set -eu -x
-
-# Temporary files cleanup hooks.
-CLEANUP_FILES=()
-cleanup() {
- if [[ ${#CLEANUP_FILES[@]} -ne 0 ]]; then
- rm -fr "${CLEANUP_FILES[@]}"
- fi
-}
-trap "{ set +x; } 2>/dev/null; cleanup" INT TERM EXIT
-
-main() {
- local workdir=$(mktemp -d --suffix=emsdk)
- CLEANUP_FILES+=("${workdir}")
-
- local emsdktar="${workdir}/emsdk.tar.gz"
- curl --output "${emsdktar}" "${EMSDK_URL}" --location
- mkdir -p "${EMSDK_DIR}"
- tar -zxf "${emsdktar}" -C "${EMSDK_DIR}" --strip-components=1
-
- cd "${EMSDK_DIR}"
- ./emsdk install --shallow "${EMSDK_RELEASE}"
- ./emsdk activate --embedded "${EMSDK_RELEASE}"
-}
-
-main "$@"
diff --git a/docker/scripts/jpegxl_builder.sh b/docker/scripts/jpegxl_builder.sh
deleted file mode 100755
index bf9f19d..0000000
--- a/docker/scripts/jpegxl_builder.sh
+++ /dev/null
@@ -1,518 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) the JPEG XL Project Authors. All rights reserved.
-#
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-# Main entry point for all the Dockerfile for jpegxl-builder. This centralized
-# file helps sharing code and configuration between Dockerfiles.
-
-set -eux
-
-MYDIR=$(dirname $(realpath "$0"))
-
-# libjpeg-turbo.
-JPEG_TURBO_RELEASE="2.0.4"
-JPEG_TURBO_URL="https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_TURBO_RELEASE}.tar.gz"
-JPEG_TURBO_SHA256="7777c3c19762940cff42b3ba4d7cd5c52d1671b39a79532050c85efb99079064"
-
-# zlib (dependency of libpng)
-ZLIB_RELEASE="1.2.11"
-ZLIB_URL="https://www.zlib.net/zlib-${ZLIB_RELEASE}.tar.gz"
-ZLIB_SHA256="c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1"
-# The name in the .pc and the .dll generated don't match in zlib for Windows
-# because they use different .dll names in Windows. We avoid that by defining
-# UNIX=1. We also install all the .dll files to ${prefix}/lib instead of the
-# default ${prefix}/bin.
-ZLIB_FLAGS='-DUNIX=1 -DINSTALL_PKGCONFIG_DIR=/${CMAKE_INSTALL_PREFIX}/lib/pkgconfig -DINSTALL_BIN_DIR=/${CMAKE_INSTALL_PREFIX}/lib'
-
-# libpng
-LIBPNG_RELEASE="1.6.37"
-LIBPNG_URL="https://github.com/glennrp/libpng/archive/v${LIBPNG_RELEASE}.tar.gz"
-LIBPNG_SHA256="ca74a0dace179a8422187671aee97dd3892b53e168627145271cad5b5ac81307"
-
-# giflib
-GIFLIB_RELEASE="5.2.1"
-GIFLIB_URL="https://netcologne.dl.sourceforge.net/project/giflib/giflib-${GIFLIB_RELEASE}.tar.gz"
-GIFLIB_SHA256="31da5562f44c5f15d63340a09a4fd62b48c45620cd302f77a6d9acf0077879bd"
-
-# A patch needed to compile GIFLIB in mingw.
-GIFLIB_PATCH_URL="https://github.com/msys2/MINGW-packages/raw/3afde38fcee7b3ba2cafd97d76cca8f06934504f/mingw-w64-giflib/001-mingw-build.patch"
-GIFLIB_PATCH_SHA256="2b2262ddea87fc07be82e10aeb39eb699239f883c899aa18a16e4d4e40af8ec8"
-
-# webp
-WEBP_RELEASE="1.0.2"
-WEBP_URL="https://codeload.github.com/webmproject/libwebp/tar.gz/v${WEBP_RELEASE}"
-WEBP_SHA256="347cf85ddc3497832b5fa9eee62164a37b249c83adae0ba583093e039bf4881f"
-
-# Google benchmark
-BENCHMARK_RELEASE="1.5.2"
-BENCHMARK_URL="https://github.com/google/benchmark/archive/v${BENCHMARK_RELEASE}.tar.gz"
-BENCHMARK_SHA256="dccbdab796baa1043f04982147e67bb6e118fe610da2c65f88912d73987e700c"
-BENCHMARK_FLAGS="-DGOOGLETEST_PATH=${MYDIR}/../../third_party/googletest"
-# attribute(format(__MINGW_PRINTF_FORMAT, ...)) doesn't work in our
-# environment, so we disable the warning.
-BENCHMARK_FLAGS="-DCMAKE_BUILD_TYPE=Release -DBENCHMARK_ENABLE_TESTING=OFF \
- -DCMAKE_CXX_FLAGS=-Wno-ignored-attributes \
- -DCMAKE_POSITION_INDEPENDENT_CODE=ON"
-
-# V8
-V8_VERSION="9.3.22"
-
-# Temporary files cleanup hooks.
-CLEANUP_FILES=()
-cleanup() {
- if [[ ${#CLEANUP_FILES[@]} -ne 0 ]]; then
- rm -fr "${CLEANUP_FILES[@]}"
- fi
-}
-trap "{ set +x; } 2>/dev/null; cleanup" INT TERM EXIT
-
-# List of Ubuntu arch names supported by the builder (such as "i386").
-LIST_ARCHS=(
- amd64
- i386
- arm64
- armhf
-)
-
-# List of target triplets supported by the builder.
-LIST_TARGETS=(
- x86_64-linux-gnu
- i686-linux-gnu
- arm-linux-gnueabihf
- aarch64-linux-gnu
-)
-LIST_MINGW_TARGETS=(
- i686-w64-mingw32
- x86_64-w64-mingw32
-)
-LIST_WASM_TARGETS=(
- wasm32
-)
-
-# Setup the apt repositories and supported architectures.
-setup_apt() {
- apt-get update -y
- apt-get install -y curl gnupg ca-certificates
-
- apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F
-
- # node sources.
- cat >/etc/apt/sources.list.d/nodesource.list <<EOF
- deb https://deb.nodesource.com/node_14.x bionic main
- deb-src https://deb.nodesource.com/node_14.x bionic main
-EOF
- curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
-
- local port_list=()
- local main_list=()
- local ubarch
- for ubarch in "${LIST_ARCHS[@]}"; do
- if [[ "${ubarch}" != "amd64" && "${ubarch}" != "i386" ]]; then
- # other archs are not part of the main mirrors, but available in
- # ports.ubuntu.com.
- port_list+=("${ubarch}")
- else
- main_list+=("${ubarch}")
- fi
- # Add the arch to the system.
- if [[ "${ubarch}" != "amd64" ]]; then
- dpkg --add-architecture "${ubarch}"
- fi
- done
-
- # Update the sources.list with the split of supported architectures.
- local bkplist="/etc/apt/sources.list.bkp"
- [[ -e "${bkplist}" ]] || \
- mv /etc/apt/sources.list "${bkplist}"
-
- local newlist="/etc/apt/sources.list.tmp"
- rm -f "${newlist}"
- port_list=$(echo "${port_list[@]}" | tr ' ' ,)
- if [[ -n "${port_list}" ]]; then
- local port_url="http://ports.ubuntu.com/ubuntu-ports/"
- grep -v -E '^#' "${bkplist}" |
- sed -E "s;^deb (http[^ ]+) (.*)\$;deb [arch=${port_list}] ${port_url} \\2;" \
- >>"${newlist}"
- fi
-
- main_list=$(echo "${main_list[@]}" | tr ' ' ,)
- grep -v -E '^#' "${bkplist}" |
- sed -E "s;^deb (http[^ ]+) (.*)\$;deb [arch=${main_list}] \\1 \\2\ndeb-src [arch=${main_list}] \\1 \\2;" \
- >>"${newlist}"
- mv "${newlist}" /etc/apt/sources.list
-}
-
-install_pkgs() {
- packages=(
- # Native compilers (minimum for SIMD is clang-7)
- clang-7 clang-format-7 clang-tidy-7
-
- # TODO: Consider adding clang-8 to every builder:
- # clang-8 clang-format-8 clang-tidy-8
-
- # For cross-compiling to Windows with mingw.
- mingw-w64
- wine64
- wine-binfmt
-
- # Native tools.
- bsdmainutils
- cmake
- extra-cmake-modules
- git
- llvm
- nasm
- ninja-build
- parallel
- pkg-config
-
- # For compiling / testing JNI wrapper. JDK8 is almost 2x smaller than JDK11
- # openjdk-8-jdk-headless would be 50MB smaller, unfortunately, CMake
- # does mistakenly thinks it does not contain JNI feature.
- openjdk-8-jdk
-
- # These are used by the ./ci.sh lint in the native builder.
- clang-format-7
- clang-format-8
-
- # For coverage builds
- gcovr
-
- # For compiling giflib documentation.
- xmlto
-
- # Common libraries.
- libstdc++-8-dev
-
- # We don't use tcmalloc on archs other than amd64. This installs
- # libgoogle-perftools4:amd64.
- google-perftools
-
- # NodeJS for running WASM tests
- nodejs
-
- # To generate API documentation.
- doxygen
-
- # Freezes version that builds (passes tests). Newer version
- # (2.30-21ubuntu1~18.04.4) claims to fix "On Intel Skylake
- # (-march=native) generated avx512 instruction can be wrong",
- # but newly added tests does not pass. Perhaps the problem is
- # that mingw package is not updated.
- binutils-source=2.30-15ubuntu1
- )
-
- # Install packages that are arch-dependent.
- local ubarch
- for ubarch in "${LIST_ARCHS[@]}"; do
- packages+=(
- # Library dependencies. These normally depend on the target architecture
- # we are compiling for and can't usually be installed for multiple
- # architectures at the same time.
- libgif7:"${ubarch}"
- libjpeg-dev:"${ubarch}"
- libpng-dev:"${ubarch}"
- libqt5x11extras5-dev:"${ubarch}"
-
- libstdc++-8-dev:"${ubarch}"
- qtbase5-dev:"${ubarch}"
-
- # For OpenEXR:
- libilmbase12:"${ubarch}"
- libopenexr22:"${ubarch}"
-
- # TCMalloc dependency
- libunwind-dev:"${ubarch}"
-
- # Cross-compiling tools per arch.
- libc6-dev-"${ubarch}"-cross
- libstdc++-8-dev-"${ubarch}"-cross
- )
- done
-
- local target
- for target in "${LIST_TARGETS[@]}"; do
- # Per target cross-compiling tools.
- if [[ "${target}" != "x86_64-linux-gnu" ]]; then
- packages+=(
- binutils-"${target}"
- gcc-"${target}"
- )
- fi
- done
-
- # Install all the manual packages via "apt install" for the main arch. These
- # will be installed for other archs via manual download and unpack.
- apt install -y "${packages[@]}" "${UNPACK_PKGS[@]}"
-}
-
-# binutils <2.32 need a patch.
-install_binutils() {
- local workdir=$(mktemp -d --suffix=_install)
- CLEANUP_FILES+=("${workdir}")
- pushd "${workdir}"
- apt source binutils-mingw-w64
- apt -y build-dep binutils-mingw-w64
- cd binutils-mingw-w64-8ubuntu1
- cp "${MYDIR}/binutils_align_fix.patch" debian/patches
- echo binutils_align_fix.patch >> debian/patches/series
- dpkg-buildpackage -b
- cd ..
- dpkg -i *deb
- popd
-}
-
-# Install a library from the source code for multiple targets.
-# Usage: install_from_source <tar_url> <sha256> <target> [<target...>]
-install_from_source() {
- local package="$1"
- shift
-
- local url
- eval "url=\${${package}_URL}"
- local sha256
- eval "sha256=\${${package}_SHA256}"
- # Optional package flags
- local pkgflags
- eval "pkgflags=\${${package}_FLAGS:-}"
-
- local workdir=$(mktemp -d --suffix=_install)
- CLEANUP_FILES+=("${workdir}")
-
- local tarfile="${workdir}"/$(basename "${url}")
- curl -L --output "${tarfile}" "${url}"
- if ! echo "${sha256} ${tarfile}" | sha256sum -c --status -; then
- echo "SHA256 mismatch for ${url}: expected ${sha256} but found:"
- sha256sum "${tarfile}"
- exit 1
- fi
-
- local target
- for target in "$@"; do
- echo "Installing ${package} for target ${target} from ${url}"
-
- local srcdir="${workdir}/source-${target}"
- mkdir -p "${srcdir}"
- tar -zxf "${tarfile}" -C "${srcdir}" --strip-components=1
-
- local prefix="/usr"
- if [[ "${target}" != "x86_64-linux-gnu" ]]; then
- prefix="/usr/${target}"
- fi
-
- # Apply patches to buildfiles.
- if [[ "${package}" == "GIFLIB" && "${target}" == *mingw32 ]]; then
- # GIFLIB Makefile has several problems so we need to fix them here. We are
- # using a patch from MSYS2 that already fixes the compilation for mingw.
- local make_patch="${srcdir}/libgif.patch"
- curl -L "${GIFLIB_PATCH_URL}" -o "${make_patch}"
- echo "${GIFLIB_PATCH_SHA256} ${make_patch}" | sha256sum -c --status -
- patch "${srcdir}/Makefile" < "${make_patch}"
- elif [[ "${package}" == "LIBPNG" && "${target}" == wasm* ]]; then
- # Cut the dependency to libm; there is pull request to fix it, so this
- # might not be needed in the future.
- sed -i 's/APPLE/EMSCRIPTEN/g' "${srcdir}/CMakeLists.txt"
- fi
-
- local cmake_args=()
- local export_args=("CC=clang-7" "CXX=clang++-7")
- local cmake="cmake"
- local make="make"
- local system_name="Linux"
- if [[ "${target}" == *mingw32 ]]; then
- system_name="Windows"
- # When compiling with clang, CMake doesn't detect that we are using mingw.
- cmake_args+=(
- -DMINGW=1
- # Googletest needs this when cross-compiling to windows
- -DCMAKE_CROSSCOMPILING=1
- -DHAVE_STD_REGEX=0
- -DHAVE_POSIX_REGEX=0
- -DHAVE_GNU_POSIX_REGEX=0
- )
- local windres=$(which ${target}-windres || true)
- if [[ -n "${windres}" ]]; then
- cmake_args+=(-DCMAKE_RC_COMPILER="${windres}")
- fi
- fi
- if [[ "${target}" == wasm* ]]; then
- system_name="WASM"
- cmake="emcmake cmake"
- make="emmake make"
- export_args=()
- cmake_args+=(
- -DCMAKE_FIND_ROOT_PATH="${prefix}"
- -DCMAKE_PREFIX_PATH="${prefix}"
- )
- # Static and shared library link to the same file -> race condition.
- nproc=1
- else
- nproc=`nproc --all`
- fi
- cmake_args+=(-DCMAKE_SYSTEM_NAME="${system_name}")
-
- if [[ "${target}" != "x86_64-linux-gnu" ]]; then
- # Cross-compiling.
- cmake_args+=(
- -DCMAKE_C_COMPILER_TARGET="${target}"
- -DCMAKE_CXX_COMPILER_TARGET="${target}"
- -DCMAKE_SYSTEM_PROCESSOR="${target%%-*}"
- )
- fi
-
- if [[ -e "${srcdir}/CMakeLists.txt" ]]; then
- # Most packages use cmake for building which is easier to configure for
- # cross-compiling.
- if [[ "${package}" == "JPEG_TURBO" && "${target}" == wasm* ]]; then
- # JT erroneously detects WASM CPU as i386 and tries to use asm.
- # Wasm/Emscripten support for dynamic linking is incomplete; disable
- # to avoid CMake warning.
- cmake_args+=(-DWITH_SIMD=0 -DENABLE_SHARED=OFF)
- fi
- (
- cd "${srcdir}"
- export ${export_args[@]}
- ${cmake} \
- -DCMAKE_INSTALL_PREFIX="${prefix}" \
- "${cmake_args[@]}" ${pkgflags}
- ${make} -j${nproc}
- ${make} install
- )
- elif [[ "${package}" == "GIFLIB" ]]; then
- # GIFLIB doesn't yet have a cmake build system. There is a pull
- # request in giflib for adding CMakeLists.txt so this might not be
- # needed in the future.
- (
- cd "${srcdir}"
- local giflib_make_flags=(
- CFLAGS="-O2 --target=${target} -std=gnu99"
- PREFIX="${prefix}"
- )
- if [[ "${target}" != wasm* ]]; then
- giflib_make_flags+=(CC=clang-7)
- fi
- # giflib make dependencies are not properly set up so parallel building
- # doesn't work for everything.
- ${make} -j${nproc} libgif.a "${giflib_make_flags[@]}"
- ${make} -j${nproc} all "${giflib_make_flags[@]}"
- ${make} install "${giflib_make_flags[@]}"
- )
- else
- echo "Don't know how to install ${package}"
- exit 1
- fi
-
- # CMake mistakenly uses ".so" libraries and EMCC fails to link properly.
- if [[ "${target}" == wasm* ]]; then
- rm -f "${prefix}/lib"/*.so*
- fi
- done
-}
-
-# Packages that are manually unpacked for each architecture.
-UNPACK_PKGS=(
- libgif-dev
- libclang-common-7-dev
-
- # For OpenEXR:
- libilmbase-dev
- libopenexr-dev
-
- # TCMalloc
- libgoogle-perftools-dev
- libtcmalloc-minimal4
- libgoogle-perftools4
-)
-
-# Main script entry point.
-main() {
- cd "${MYDIR}"
-
- # Configure the repositories with the sources for multi-arch cross
- # compilation.
- setup_apt
- apt-get update -y
- apt-get dist-upgrade -y
-
- install_pkgs
- install_binutils
- apt clean
-
- # Remove prebuilt Java classes cache.
- rm /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/classes.jsa
-
- # Manually extract packages for the target arch that can't install it directly
- # at the same time as the native ones.
- local ubarch
- for ubarch in "${LIST_ARCHS[@]}"; do
- if [[ "${ubarch}" != "amd64" ]]; then
- local pkg
- for pkg in "${UNPACK_PKGS[@]}"; do
- apt download "${pkg}":"${ubarch}"
- dpkg -x "${pkg}"_*_"${ubarch}".deb /
- done
- fi
- done
- # TODO: Add clang from the llvm repos. This is problematic since we are
- # installing libclang-common-7-dev:"${ubarch}" from the ubuntu ports repos
- # which is not available in the llvm repos so it might have a different
- # version than the ubuntu ones.
-
- # Remove the win32 libgcc version. The gcc-mingw-w64-x86-64 (and i686)
- # packages install two libgcc versions:
- # /usr/lib/gcc/x86_64-w64-mingw32/7.3-posix
- # /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32
- # (exact libgcc version number depends on the package version).
- #
- # Clang will pick the best libgcc, sorting by version, but it doesn't
- # seem to be a way to specify one or the other one, except by passing
- # -nostdlib and setting all the include paths from the command line.
- # To check which one is being used you can run:
- # clang++-7 --target=x86_64-w64-mingw32 -v -print-libgcc-file-name
- # We need to use the "posix" versions for thread support, so here we
- # just remove the other one.
- local target
- for target in "${LIST_MINGW_TARGETS[@]}"; do
- update-alternatives --set "${target}-gcc" $(which "${target}-gcc-posix")
- local gcc_win32_path=$("${target}-cpp-win32" -print-libgcc-file-name)
- rm -rf $(dirname "${gcc_win32_path}")
- done
-
- # TODO: Add msan for the target when cross-compiling. This only installs it
- # for amd64.
- ./msan_install.sh
-
- # Build and install qemu user-linux targets.
- ./qemu_install.sh
-
- # Install emscripten SDK.
- ./emsdk_install.sh
-
- # Setup environment for building WASM libraries from sources.
- source /opt/emsdk/emsdk_env.sh
-
- # Install some dependency libraries manually for the different targets.
-
- install_from_source JPEG_TURBO "${LIST_MINGW_TARGETS[@]}" "${LIST_WASM_TARGETS[@]}"
- install_from_source ZLIB "${LIST_MINGW_TARGETS[@]}" "${LIST_WASM_TARGETS[@]}"
- install_from_source LIBPNG "${LIST_MINGW_TARGETS[@]}" "${LIST_WASM_TARGETS[@]}"
- install_from_source GIFLIB "${LIST_MINGW_TARGETS[@]}" "${LIST_WASM_TARGETS[@]}"
- # webp in Ubuntu is relatively old so we install it from source for everybody.
- install_from_source WEBP "${LIST_TARGETS[@]}" "${LIST_MINGW_TARGETS[@]}"
-
- install_from_source BENCHMARK "${LIST_TARGETS[@]}" "${LIST_MINGW_TARGETS[@]}"
-
- # Install v8. v8 has better WASM SIMD support than NodeJS 14 (LTS).
- # First we need the installer to install v8.
- npm install jsvu -g
- # install specific version;
- HOME=/opt jsvu --os=linux64 "v8@${V8_VERSION}"
- ln -s "/opt/.jsvu/v8-${V8_VERSION}" "/opt/.jsvu/v8"
-
- # Cleanup.
- find /var/lib/apt/lists/ -mindepth 1 -delete
-}
-
-main "$@"
diff --git a/docker/scripts/msan_install.sh b/docker/scripts/msan_install.sh
deleted file mode 100755
index 0216f62..0000000
--- a/docker/scripts/msan_install.sh
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) the JPEG XL Project Authors. All rights reserved.
-#
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-set -eu
-
-MYDIR=$(dirname $(realpath "$0"))
-
-# Convenience flag to pass both CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
-CMAKE_FLAGS=${CMAKE_FLAGS:-}
-CMAKE_C_FLAGS=${CMAKE_C_FLAGS:-${CMAKE_FLAGS}}
-CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS:-${CMAKE_FLAGS}}
-CMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS:-}
-
-CLANG_VERSION="${CLANG_VERSION:-}"
-# Detect the clang version suffix and store it in CLANG_VERSION. For example,
-# "6.0" for clang 6 or "7" for clang 7.
-detect_clang_version() {
- if [[ -n "${CLANG_VERSION}" ]]; then
- return 0
- fi
- local clang_version=$("${CC:-clang}" --version | head -n1)
- local llvm_tag
- case "${clang_version}" in
- "clang version 6."*)
- CLANG_VERSION="6.0"
- ;;
- "clang version 7."*)
- CLANG_VERSION="7"
- ;;
- "clang version 8."*)
- CLANG_VERSION="8"
- ;;
- "clang version 9."*)
- CLANG_VERSION="9"
- ;;
- *)
- echo "Unknown clang version: ${clang_version}" >&2
- return 1
- esac
-}
-
-# Temporary files cleanup hooks.
-CLEANUP_FILES=()
-cleanup() {
- if [[ ${#CLEANUP_FILES[@]} -ne 0 ]]; then
- rm -fr "${CLEANUP_FILES[@]}"
- fi
-}
-trap "{ set +x; } 2>/dev/null; cleanup" INT TERM EXIT
-
-# Install libc++ libraries compiled with msan in the msan_prefix for the current
-# compiler version.
-cmd_msan_install() {
- local tmpdir=$(mktemp -d)
- CLEANUP_FILES+=("${tmpdir}")
- # Detect the llvm to install:
- export CC="${CC:-clang}"
- export CXX="${CXX:-clang++}"
- detect_clang_version
- local llvm_tag
- case "${CLANG_VERSION}" in
- "6.0")
- llvm_tag="llvmorg-6.0.1"
- ;;
- "7")
- llvm_tag="llvmorg-7.0.1"
- ;;
- "8")
- llvm_tag="llvmorg-8.0.0"
- ;;
- *)
- echo "Unknown clang version: ${clang_version}" >&2
- return 1
- esac
- local llvm_targz="${tmpdir}/${llvm_tag}.tar.gz"
- curl -L --show-error -o "${llvm_targz}" \
- "https://github.com/llvm/llvm-project/archive/${llvm_tag}.tar.gz"
- tar -C "${tmpdir}" -zxf "${llvm_targz}"
- local llvm_root="${tmpdir}/llvm-project-${llvm_tag}"
-
- local msan_prefix="${HOME}/.msan/${CLANG_VERSION}"
- rm -rf "${msan_prefix}"
-
- declare -A CMAKE_EXTRAS
- CMAKE_EXTRAS[libcxx]="\
- -DLIBCXX_CXX_ABI=libstdc++ \
- -DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON"
-
- for project in libcxx; do
- local proj_build="${tmpdir}/build-${project}"
- local proj_dir="${llvm_root}/${project}"
- mkdir -p "${proj_build}"
- cmake -B"${proj_build}" -H"${proj_dir}" \
- -G Ninja \
- -DCMAKE_BUILD_TYPE=Release \
- -DLLVM_USE_SANITIZER=Memory \
- -DLLVM_PATH="${llvm_root}/llvm" \
- -DLLVM_CONFIG_PATH="$(which llvm-config llvm-config-7 llvm-config-6.0 | \
- head -n1)" \
- -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}" \
- -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS}" \
- -DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS}" \
- -DCMAKE_INSTALL_PREFIX="${msan_prefix}" \
- ${CMAKE_EXTRAS[${project}]}
- cmake --build "${proj_build}"
- ninja -C "${proj_build}" install
- done
-}
-
-main() {
- set -x
- for version in 6.0 7 8; do
- if ! which "clang-${version}" >/dev/null; then
- echo "Skipping msan install for clang version ${version}"
- continue
- fi
- (
- trap "{ set +x; } 2>/dev/null; cleanup" INT TERM EXIT
- export CLANG_VERSION=${version}
- export CC=clang-${version}
- export CXX=clang++-${version}
- cmd_msan_install
- ) &
- done
- wait
-}
-
-main "$@"
diff --git a/docker/scripts/qemu_install.sh b/docker/scripts/qemu_install.sh
deleted file mode 100755
index 8106c44..0000000
--- a/docker/scripts/qemu_install.sh
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) the JPEG XL Project Authors. All rights reserved.
-#
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-QEMU_RELEASE="4.1.0"
-QEMU_URL="https://download.qemu.org/qemu-${QEMU_RELEASE}.tar.xz"
-QEMU_ARCHS=(
- aarch64
- arm
- i386
- # TODO: Consider adding these:
- # aarch64_be
- # mips64el
- # mips64
- # mips
- # ppc64
- # ppc
-)
-
-# Ubuntu packages not installed that are needed to build qemu.
-QEMU_BUILD_DEPS=(
- libglib2.0-dev
- libpixman-1-dev
- flex
- bison
-)
-
-set -eu -x
-
-# Temporary files cleanup hooks.
-CLEANUP_FILES=()
-cleanup() {
- if [[ ${#CLEANUP_FILES[@]} -ne 0 ]]; then
- rm -fr "${CLEANUP_FILES[@]}"
- fi
-}
-trap "{ set +x; } 2>/dev/null; cleanup" INT TERM EXIT
-
-main() {
- local workdir=$(mktemp -d --suffix=qemu)
- CLEANUP_FILES+=("${workdir}")
-
- apt install -y "${QEMU_BUILD_DEPS[@]}"
-
- local qemutar="${workdir}/qemu.tar.gz"
- curl --output "${qemutar}" "${QEMU_URL}"
- tar -Jxf "${qemutar}" -C "${workdir}"
- local srcdir="${workdir}/qemu-${QEMU_RELEASE}"
-
- local builddir="${workdir}/build"
- local prefixdir="${workdir}/prefix"
- mkdir -p "${builddir}"
-
- # List of targets to build.
- local targets=""
- local make_targets=()
- local target
- for target in "${QEMU_ARCHS[@]}"; do
- targets="${targets} ${target}-linux-user"
- # Build just the linux-user targets.
- make_targets+=("${target}-linux-user/all")
- done
-
- cd "${builddir}"
- "${srcdir}/configure" \
- --prefix="${prefixdir}" \
- --static --disable-system --enable-linux-user \
- --target-list="${targets}"
-
- make -j $(nproc --all || echo 1) "${make_targets[@]}"
-
- # Manually install these into the non-standard location. This script runs as
- # root anyway.
- for target in "${QEMU_ARCHS[@]}"; do
- cp "${target}-linux-user/qemu-${target}" "/usr/bin/qemu-${target}-static"
- done
-
- apt autoremove -y --purge "${QEMU_BUILD_DEPS[@]}"
-}
-
-main "$@"