build-llvm-common.sh (5874B)
1 #!/bin/sh 2 3 set -e -x 4 5 artifact=$(basename $TOOLCHAIN_ARTIFACT) 6 dir=${artifact%.tar.*} 7 what=$1 8 shift 9 install=$1 10 shift 11 target=$1 12 shift 13 14 clang=$MOZ_FETCHES_DIR/clang/bin/clang 15 16 case "$target" in 17 aarch64-apple-darwin) 18 arch=arm64 19 export MACOSX_DEPLOYMENT_TARGET=11.0 20 compiler_wrapper() { 21 echo exec \$MOZ_FETCHES_DIR/clang/bin/$1 -mcpu=apple-m1 \"\$@\" > $1 22 chmod +x $1 23 } 24 compiler_wrapper clang 25 compiler_wrapper clang++ 26 clang=$PWD/clang 27 ;; 28 x86_64-apple-darwin) 29 arch=x86_64 30 export MACOSX_DEPLOYMENT_TARGET=10.15 31 ;; 32 esac 33 34 case "$target" in 35 *-apple-darwin) 36 EXTRA_CMAKE_FLAGS=" 37 $EXTRA_CMAKE_FLAGS 38 -DCMAKE_LINKER=$MOZ_FETCHES_DIR/clang/bin/ld64.lld 39 -DCMAKE_LIPO=$MOZ_FETCHES_DIR/clang/bin/llvm-lipo 40 -DCMAKE_SYSTEM_NAME=Darwin 41 -DCMAKE_SYSTEM_VERSION=$MACOSX_DEPLOYMENT_TARGET 42 -DCMAKE_OSX_SYSROOT=$MOZ_FETCHES_DIR/MacOSX26.2.sdk 43 -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld 44 -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld 45 -DDARWIN_osx_ARCHS=$arch 46 -DDARWIN_osx_SYSROOT=$MOZ_FETCHES_DIR/MacOSX26.2.sdk 47 -DDARWIN_macosx_OVERRIDE_SDK_VERSION=11.0 48 -DDARWIN_osx_BUILTIN_ARCHS=$arch 49 -DLLVM_DEFAULT_TARGET_TRIPLE=$target 50 " 51 # compiler-rt build script expects to find `codesign` in $PATH. 52 # Give it a fake one. 53 echo "#!/bin/sh" > codesign 54 chmod +x codesign 55 # cmake makes decisions based on the output of the mac-only sw_vers, which is 56 # obviously missing when cross-compiling, so create a fake one. The exact 57 # version doesn't really matter: as of writing, cmake checks at most for 10.5. 58 echo "#!/bin/sh" > sw_vers 59 echo echo 10.15 >> sw_vers 60 chmod +x sw_vers 61 PATH="$PATH:$PWD" 62 ;; 63 *-linux-android) 64 case "$target" in 65 armv7-linux-android) 66 arch=arm 67 ;; 68 *-linux-android) 69 arch=${target%-linux-android} 70 ;; 71 esac 72 # Keep this in sync with min_android_version in android-ndk.configure. 73 api_level=26 74 target=$target$api_level 75 # These flags are only necessary to pass the cmake tests. They don't end up 76 # actually using libgcc, so use an empty library instead of trying to find 77 # where it is in the NDK. 78 if [ "$what" = "compiler-rt" ]; then 79 exe_linker_flags="--rtlib=libgcc -L$PWD" 80 touch libgcc.a 81 fi 82 EXTRA_CMAKE_FLAGS=" 83 $EXTRA_CMAKE_FLAGS 84 -DCMAKE_SYSROOT=$MOZ_FETCHES_DIR/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot 85 -DCMAKE_LINKER=$MOZ_FETCHES_DIR/clang/bin/ld.lld 86 -DCMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld $exe_linker_flags' 87 -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld 88 -DANDROID=1 89 -DANDROID_NATIVE_API_LEVEL=$api_level 90 -DSANITIZER_ALLOW_CXXABI=OFF 91 -DLLVM_DEFAULT_TARGET_TRIPLE=$arch-unknown-linux-android 92 " 93 ;; 94 *-unknown-linux-gnu) 95 if [ -d "$MOZ_FETCHES_DIR/sysroot" ]; then 96 sysroot=$MOZ_FETCHES_DIR/sysroot 97 else 98 sysroot=$MOZ_FETCHES_DIR/sysroot-${target%-unknown-linux-gnu}-linux-gnu 99 fi 100 if [ "${target%-unknown-linux-gnu}" = i686 ]; then 101 EXTRA_CMAKE_FLAGS=" 102 $EXTRA_CMAKE_FLAGS 103 -DLLVM_TABLEGEN=$MOZ_FETCHES_DIR/clang/bin/llvm-tblgen 104 " 105 fi 106 EXTRA_CMAKE_FLAGS=" 107 $EXTRA_CMAKE_FLAGS 108 -DCMAKE_SYSROOT=$sysroot 109 -DCMAKE_LINKER=$MOZ_FETCHES_DIR/clang/bin/ld.lld 110 -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld 111 -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld 112 -DLLVM_ENABLE_TERMINFO=OFF 113 " 114 ;; 115 *-pc-windows-msvc) 116 EXTRA_CMAKE_FLAGS=" 117 $EXTRA_CMAKE_FLAGS 118 -DCMAKE_TOOLCHAIN_FILE=$MOZ_FETCHES_DIR/llvm-project/llvm/cmake/platforms/WinMsvc.cmake 119 -DLLVM_NATIVE_TOOLCHAIN=$MOZ_FETCHES_DIR/clang 120 -DHOST_ARCH=${target%-pc-windows-msvc} 121 -DLLVM_DISABLE_ASSEMBLY_FILES=ON 122 " 123 # LLVM 15+ uses different input variables. 124 if grep -q LLVM_WINSYSROOT $MOZ_FETCHES_DIR/llvm-project/llvm/cmake/platforms/WinMsvc.cmake; then 125 EXTRA_CMAKE_FLAGS=" 126 $EXTRA_CMAKE_FLAGS 127 -DLLVM_WINSYSROOT=$MOZ_FETCHES_DIR/vs 128 " 129 else 130 # WinMsvc.cmake before LLVM 15 doesn't support spaces in WINDSK_BASE. 131 ln -s "windows kits/10" $MOZ_FETCHES_DIR/vs/sdk 132 EXTRA_CMAKE_FLAGS=" 133 $EXTRA_CMAKE_FLAGS 134 -DMSVC_BASE=$MOZ_FETCHES_DIR/vs/vc/tools/msvc/14.39.33519 135 -DWINSDK_BASE=$MOZ_FETCHES_DIR/vs/sdk 136 -DWINSDK_VER=10.0.22621.0 137 " 138 fi 139 ;; 140 *) 141 echo $target is not supported yet 142 exit 1 143 ;; 144 esac 145 146 case "$target" in 147 *-pc-windows-msvc) 148 ;; 149 *) 150 EXTRA_CMAKE_FLAGS=" 151 $EXTRA_CMAKE_FLAGS 152 -DCMAKE_C_COMPILER=$clang 153 -DCMAKE_CXX_COMPILER=$clang++ 154 -DCMAKE_AR=$MOZ_FETCHES_DIR/clang/bin/llvm-ar 155 -DCMAKE_RANLIB=$MOZ_FETCHES_DIR/clang/bin/llvm-ranlib 156 " 157 ;; 158 esac 159 160 mkdir build 161 cd build 162 163 for patchfile in "$@"; do 164 case $patchfile in 165 *.json) 166 jq -r '.patches[]' $GECKO_PATH/$patchfile | while read p; do 167 patch -d $MOZ_FETCHES_DIR/llvm-project -p1 < $GECKO_PATH/$(dirname $patchfile)/$p 168 done 169 ;; 170 *) 171 patch -d $MOZ_FETCHES_DIR/llvm-project -p1 < $GECKO_PATH/$patchfile 172 ;; 173 esac 174 done 175 176 eval cmake \ 177 $MOZ_FETCHES_DIR/llvm-project/$what \ 178 -GNinja \ 179 -DCMAKE_C_COMPILER_TARGET=$target \ 180 -DCMAKE_CXX_COMPILER_TARGET=$target \ 181 -DCMAKE_ASM_COMPILER_TARGET=$target \ 182 -DCMAKE_BUILD_TYPE=Release \ 183 -DCMAKE_INSTALL_PREFIX=${PWD}/${dir} \ 184 -DLLVM_ENABLE_ASSERTIONS=OFF \ 185 -DLLVM_CONFIG_PATH=$MOZ_FETCHES_DIR/clang/bin/llvm-config \ 186 $EXTRA_CMAKE_FLAGS 187 188 ninja -v $install 189 190 if [ "$what" = "compiler-rt" ]; then 191 # ninja install doesn't copy the PDBs, if any 192 case "$target" in 193 aarch64-pc-windows-msvc) 194 # No pdb generated in that platform/arch configuration since 195 # https://github.com/llvm/llvm-project/commit/655933070219f2b6f3a457c7e5af7edd4b5291b4 196 if echo "$@" | grep -q -v 'clang-\(1[0-9]\|20\)' 197 then 198 test -z "$(find -name "*.pdb")" 199 else 200 cp lib/windows/*pdb $dir/lib/windows/ 201 fi 202 ;; 203 *-pc-windows-msvc) 204 cp lib/windows/*pdb $dir/lib/windows/ 205 ;; 206 esac 207 fi 208 209 tar caf "$artifact" "$dir" 210 211 mkdir -p "$UPLOAD_DIR" 212 mv "$artifact" "$UPLOAD_DIR"