Files
tubestation/taskcluster/scripts/misc/build-llvm-common.sh
Mike Hommey e89f200343 Bug 1807780 - Use -ivfsoverlay instead of liblowercase. r=firefox-build-system-reviewers,ahochheiden
Because this involves affecting the MSVC + Windows SDK packs, we need to
do this for toolchain tasks as well as Firefox builds in a single pass.

The MSVC + Windows SDK packs are altered to keep the original case
instead of lowercasing everything (except .lib files), and contain
an overlay file that we now automatically use from the WINSYSROOT.

This requires adjusting some paths to match what the original case
is, as well as removing everything related to the use of liblowercase,
which conflicts with the use of the overlay file. People using
liblowercase locally will still have a working setup as long as they
don't set WINSYSROOT (it's new, so they won't have it), and don't have
an overlay file in there (which they only would  if they ran the new
pack_vs.py).

Differential Revision: https://phabricator.services.mozilla.com/D165596
2022-12-29 00:05:49 +00:00

216 lines
5.6 KiB
Bash
Executable File

#!/bin/sh
set -e -x
artifact=$(basename $TOOLCHAIN_ARTIFACT)
dir=${artifact%.tar.*}
what=$1
shift
install=$1
shift
target=$1
shift
clang=$MOZ_FETCHES_DIR/clang/bin/clang
case "$target" in
aarch64-apple-darwin)
arch=arm64
export MACOSX_DEPLOYMENT_TARGET=11.0
compiler_wrapper() {
echo exec \$MOZ_FETCHES_DIR/clang/bin/$1 -mcpu=apple-m1 \"\$@\" > $1
chmod +x $1
}
compiler_wrapper clang
compiler_wrapper clang++
clang=$PWD/clang
;;
x86_64-apple-darwin)
arch=x86_64
export MACOSX_DEPLOYMENT_TARGET=10.12
;;
armv7-linux-android)
api_level=16
ndk_target=arm-linux-androideabi
ndk_prefix=arm-linux-androideabi
ndk_arch=arm
;;
aarch64-linux-android)
api_level=21
ndk_target=aarch64-linux-android
ndk_prefix=aarch64-linux-android
ndk_arch=arm64
;;
i686-linux-android)
api_level=16
ndk_target=i686-linux-android
ndk_prefix=x86
ndk_arch=x86
;;
x86_64-linux-android)
api_level=21
ndk_target=x86_64-linux-android
ndk_prefix=x86_64
ndk_arch=x86_64
;;
esac
case "$target" in
*-apple-darwin)
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DCMAKE_LINKER=$MOZ_FETCHES_DIR/clang/bin/ld64.lld
-DCMAKE_LIPO=$MOZ_FETCHES_DIR/clang/bin/llvm-lipo
-DCMAKE_SYSTEM_NAME=Darwin
-DCMAKE_SYSTEM_VERSION=$MACOSX_DEPLOYMENT_TARGET
-DCMAKE_OSX_SYSROOT=$MOZ_FETCHES_DIR/MacOSX11.3.sdk
-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld
-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld
-DDARWIN_osx_ARCHS=$arch
-DDARWIN_osx_SYSROOT=$MOZ_FETCHES_DIR/MacOSX11.3.sdk
-DDARWIN_macosx_OVERRIDE_SDK_VERSION=11.0
-DDARWIN_osx_BUILTIN_ARCHS=$arch
-DLLVM_DEFAULT_TARGET_TRIPLE=$target
"
# compiler-rt build script expects to find `codesign` in $PATH.
# Give it a fake one.
echo "#!/bin/sh" > codesign
chmod +x codesign
PATH="$PATH:$PWD"
;;
*-linux-android)
cflags="
--gcc-toolchain=$MOZ_FETCHES_DIR/android-ndk/toolchains/$ndk_prefix-4.9/prebuilt/linux-x86_64
-isystem $MOZ_FETCHES_DIR/android-ndk/sysroot/usr/include/$ndk_target
-isystem $MOZ_FETCHES_DIR/android-ndk/sysroot/usr/include
-D__ANDROID_API__=$api_level
"
# These flags are only necessary to pass the cmake tests.
exe_linker_flags="
--rtlib=libgcc
-L$MOZ_FETCHES_DIR/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/$ndk_target/$api_level
-L$MOZ_FETCHES_DIR/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/$ndk_target
"
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DCMAKE_SYSROOT=$MOZ_FETCHES_DIR/android-ndk/platforms/android-$api_level/arch-$ndk_arch
-DCMAKE_LINKER=$MOZ_FETCHES_DIR/clang/bin/ld.lld
-DCMAKE_C_FLAGS='-fPIC $cflags'
-DCMAKE_ASM_FLAGS='$cflags'
-DCMAKE_CXX_FLAGS='-fPIC -Qunused-arguments $cflags'
-DCMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld $exe_linker_flags'
-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld
-DANDROID=1
-DANDROID_NATIVE_API_LEVEL=$api_level
-DSANITIZER_ALLOW_CXXABI=OFF
"
;;
*-unknown-linux-gnu)
if [ -d "$MOZ_FETCHES_DIR/sysroot" ]; then
sysroot=$MOZ_FETCHES_DIR/sysroot
else
sysroot=$MOZ_FETCHES_DIR/sysroot-${target%-unknown-linux-gnu}-linux-gnu
fi
if [ "${target%-unknown-linux-gnu}" = i686 ]; then
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DLLVM_TABLEGEN=$MOZ_FETCHES_DIR/clang/bin/llvm-tblgen
"
fi
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DCMAKE_SYSROOT=$sysroot
-DCMAKE_LINKER=$MOZ_FETCHES_DIR/clang/bin/ld.lld
-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld
-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld
"
;;
*-pc-windows-msvc)
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DCMAKE_TOOLCHAIN_FILE=$MOZ_FETCHES_DIR/llvm-project/llvm/cmake/platforms/WinMsvc.cmake
-DLLVM_NATIVE_TOOLCHAIN=$MOZ_FETCHES_DIR/clang
-DHOST_ARCH=${target%-pc-windows-msvc}
-DLLVM_DISABLE_ASSEMBLY_FILES=ON
"
# LLVM 15+ uses different input variables.
if grep -q LLVM_WINSYSROOT $MOZ_FETCHES_DIR/llvm-project/llvm/cmake/platforms/WinMsvc.cmake; then
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DLLVM_WINSYSROOT=$MOZ_FETCHES_DIR/vs
"
else
# WinMsvc.cmake before LLVM 15 doesn't support spaces in WINDSK_BASE.
ln -s "windows kits/10" $MOZ_FETCHES_DIR/vs/sdk
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DMSVC_BASE=$MOZ_FETCHES_DIR/vs/vc/tools/msvc/14.29.30133
-DWINSDK_BASE=$MOZ_FETCHES_DIR/vs/sdk
-DWINSDK_VER=10.0.19041.0
"
fi
;;
*)
echo $target is not supported yet
exit 1
;;
esac
case "$target" in
*-pc-windows-msvc)
;;
*)
EXTRA_CMAKE_FLAGS="
$EXTRA_CMAKE_FLAGS
-DCMAKE_C_COMPILER=$clang
-DCMAKE_CXX_COMPILER=$clang++
-DCMAKE_AR=$MOZ_FETCHES_DIR/clang/bin/llvm-ar
-DCMAKE_RANLIB=$MOZ_FETCHES_DIR/clang/bin/llvm-ranlib
"
;;
esac
mkdir build
cd build
for patchfile in "$@"; do
case $patchfile in
*.json)
jq -r '.patches[]' $GECKO_PATH/$patchfile | while read p; do
patch -d $MOZ_FETCHES_DIR/llvm-project -p1 < $GECKO_PATH/$(dirname $patchfile)/$p
done
;;
*)
patch -d $MOZ_FETCHES_DIR/llvm-project -p1 < $GECKO_PATH/$patchfile
;;
esac
done
eval cmake \
$MOZ_FETCHES_DIR/llvm-project/$what \
-GNinja \
-DCMAKE_C_COMPILER_TARGET=$target \
-DCMAKE_CXX_COMPILER_TARGET=$target \
-DCMAKE_ASM_COMPILER_TARGET=$target \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${PWD}/${dir} \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_CONFIG_PATH=$MOZ_FETCHES_DIR/clang/bin/llvm-config \
$EXTRA_CMAKE_FLAGS
ninja -v $install
if [ "$what" = "compiler-rt" ]; then
# ninja install doesn't copy the PDBs
case "$target" in
*-pc-windows-msvc)
cp lib/windows/*pdb $dir/lib/windows/
;;
esac
fi
tar caf "$artifact" "$dir"
mkdir -p "$UPLOAD_DIR"
mv "$artifact" "$UPLOAD_DIR"