tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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"