Source code

Revision control

Copy as Markdown

Other Tools

#!/bin/bash
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
set -e -u -x
OPENH264_SRC="$MOZ_FETCHES_DIR/openh264"
OPENH264_VERSION=$(awk '/^FULL_VERSION\s*:=/ { print $3 }' "$OPENH264_SRC/Makefile")
: "${OPENH264_VERSION:?Could not determine OpenH264 version from Makefile}"
PRIVATE_DIR="/builds/worker/artifacts/private"
PUBLIC_DIR="/builds/worker/artifacts/public"
mkdir -p "$PRIVATE_DIR" "$PUBLIC_DIR"
cp -a "$MOZ_FETCHES_DIR/gmp-api" "$OPENH264_SRC/gmp-api"
# Assume 64-bit builds by default unless overridden for 32-bit targets.
ENABLE64BIT=Yes
case "$TARGET" in
i686-unknown-linux-gnu)
PLATFORM=linux32
MAKE_OS=linux
MAKE_ARCH=x86
ENABLE64BIT=No
CROSS_FLAGS="-target i686-linux-gnu --sysroot $MOZ_FETCHES_DIR/sysroot-i686-linux-gnu"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/binutils/bin:$MOZ_FETCHES_DIR/nasm:$PATH"
CC=clang; CXX=clang++
;;
x86_64-unknown-linux-gnu)
PLATFORM=linux64
MAKE_OS=linux
MAKE_ARCH=x86_64
CROSS_FLAGS="-target x86_64-linux-gnu --sysroot $MOZ_FETCHES_DIR/sysroot-x86_64-linux-gnu"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/binutils/bin:$MOZ_FETCHES_DIR/nasm:$PATH"
CC=clang; CXX=clang++
;;
aarch64-unknown-linux-gnu)
PLATFORM=linux64-aarch64
MAKE_OS=linux
MAKE_ARCH=arm64
CROSS_FLAGS="-target aarch64-linux-gnu --sysroot $MOZ_FETCHES_DIR/sysroot-aarch64-linux-gnu"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/binutils/bin:$PATH"
CC=clang; CXX=clang++
;;
x86_64-apple-darwin)
PLATFORM=macosx64
MAKE_OS=darwin
MAKE_ARCH=x86_64
MACOS_SDK=$(ls -d "$MOZ_FETCHES_DIR"/MacOSX*.sdk)
CROSS_FLAGS="-target x86_64-apple-darwin -isysroot $MACOS_SDK -mmacosx-version-min=10.12"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/cctools/bin:$MOZ_FETCHES_DIR/nasm:$PATH"
CC=clang; CXX=clang++
;;
aarch64-apple-darwin)
PLATFORM=macosx64-aarch64
MAKE_OS=darwin
MAKE_ARCH=arm64
MACOS_SDK=$(ls -d "$MOZ_FETCHES_DIR"/MacOSX*.sdk)
CROSS_FLAGS="-target aarch64-apple-darwin -mcpu=apple-a12 -isysroot $MACOS_SDK -mmacosx-version-min=11.0"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/cctools/bin:$PATH"
CC=clang; CXX=clang++
;;
i686-pc-windows-msvc)
PLATFORM=win32
MAKE_OS=msvc
MAKE_ARCH=x86
ENABLE64BIT=No
CROSS_FLAGS="--target=i686-pc-windows-msvc"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/nasm:$PATH"
CC=clang-cl; CXX=clang-cl
;;
x86_64-pc-windows-msvc)
PLATFORM=win64
MAKE_OS=msvc
MAKE_ARCH=x86_64
CROSS_FLAGS="--target=x86_64-pc-windows-msvc"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$MOZ_FETCHES_DIR/nasm:$PATH"
CC=clang-cl; CXX=clang-cl
;;
aarch64-pc-windows-msvc)
PLATFORM=win64-aarch64
MAKE_OS=msvc
MAKE_ARCH=arm64
CROSS_FLAGS="--target=aarch64-pc-windows-msvc"
export PATH="$MOZ_FETCHES_DIR/clang/bin:$PATH"
CC=clang-cl; CXX=clang-cl
;;
*)
echo "Unknown target: $TARGET" >&2
exit 1
;;
esac
case "$TARGET" in
*-windows-*)
OVERLAY="-Xclang -ivfsoverlay -Xclang $MOZ_FETCHES_DIR/vs/overlay.yaml"
export CFLAGS="$CROSS_FLAGS $OVERLAY"
CXX_LINK_O="$CROSS_FLAGS -nologo -fuse-ld=lld -Fe\$@"
. "$GECKO_PATH/taskcluster/scripts/misc/vs-setup.sh"
;;
*)
export CFLAGS="$CROSS_FLAGS"
export LDFLAGS="$CROSS_FLAGS"
;;
esac
MAKE_PARAMS=(
"OS=$MAKE_OS"
"ARCH=$MAKE_ARCH"
"ENABLE64BIT=$ENABLE64BIT"
"CC=$CC"
"CXX=$CXX"
)
if [ -n "${CXX_LINK_O:-}" ]; then
MAKE_PARAMS+=("CXX_LINK_O=$CXX_LINK_O")
fi
make -C "$OPENH264_SRC" plugin "${MAKE_PARAMS[@]}"
cd "$OPENH264_SRC"
mapfile -t PLUGIN_FILES < <(ls libgmpopenh264.so gmpopenh264.dll libgmpopenh264.dylib gmpopenh264.info 2>/dev/null)
: "${PLUGIN_FILES[0]:?No plugin files found in build output}"
ARTIFACT_ZIP="$PRIVATE_DIR/openh264-v$OPENH264_VERSION-$PLATFORM.zip"
zip "$ARTIFACT_ZIP" "${PLUGIN_FILES[@]}"
SYMBOL_ZIP="$PUBLIC_DIR/openh264-v$OPENH264_VERSION-$PLATFORM.symbols.zip"
DUMP_SYMS="$MOZ_FETCHES_DIR/dump_syms/dump_syms"
for f in "${PLUGIN_FILES[@]}"; do
case "$f" in
*.info) ;;
*) LIBRARY_FILE="$OPENH264_SRC/$f" ;;
esac
done
: "${LIBRARY_FILE:?No library file found in build output}"
python3 "$GECKO_PATH/testing/mozharness/external_tools/packagesymbols.py" \
--symbol-zip "$SYMBOL_ZIP" \
"$DUMP_SYMS" \
"$LIBRARY_FILE"