forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			201 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
	
		
			5.3 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
 | |
|   ;;
 | |
| 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/MacOSX14.4.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/MacOSX14.4.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
 | |
|   # cmake makes decisions based on the output of the mac-only sw_vers, which is
 | |
|   # obviously missing when cross-compiling, so create a fake one. The exact
 | |
|   # version doesn't really matter: as of writing, cmake checks at most for 10.5.
 | |
|   echo "#!/bin/sh" > sw_vers
 | |
|   echo echo 10.12 >> sw_vers
 | |
|   chmod +x sw_vers
 | |
|   PATH="$PATH:$PWD"
 | |
|   ;;
 | |
| *-linux-android)
 | |
|   case "$target" in
 | |
|   armv7-linux-android)
 | |
|     arch=arm
 | |
|     ;;
 | |
|   *-linux-android)
 | |
|     arch=${target%-linux-android}
 | |
|     ;;
 | |
|   esac
 | |
|   api_level=21
 | |
|   target=$target$api_level
 | |
|   # These flags are only necessary to pass the cmake tests. They don't end up
 | |
|   # actually using libgcc, so use an empty library instead of trying to find
 | |
|   # where it is in the NDK.
 | |
|   if [ "$what" = "compiler-rt" ]; then
 | |
|     exe_linker_flags="--rtlib=libgcc -L$PWD"
 | |
|     touch libgcc.a
 | |
|   fi
 | |
|   EXTRA_CMAKE_FLAGS="
 | |
|     $EXTRA_CMAKE_FLAGS
 | |
|     -DCMAKE_SYSROOT=$MOZ_FETCHES_DIR/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot
 | |
|     -DCMAKE_LINKER=$MOZ_FETCHES_DIR/clang/bin/ld.lld
 | |
|     -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
 | |
|     -DLLVM_DEFAULT_TARGET_TRIPLE=$arch-unknown-linux-android
 | |
|   "
 | |
|   ;;
 | |
| *-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
 | |
|     -DLLVM_ENABLE_TERMINFO=OFF
 | |
|   "
 | |
|   ;;
 | |
| *-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.39.33519
 | |
|       -DWINSDK_BASE=$MOZ_FETCHES_DIR/vs/sdk
 | |
|       -DWINSDK_VER=10.0.22621.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"
 | 
