tor-browser

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

build-cctools-port.sh (4392B)


      1 #!/bin/bash
      2 
      3 # cctools sometimes needs to be rebuilt when clang is modified.
      4 # Until bug 1471905 is addressed, increase the following number
      5 # when a forced rebuild of cctools is necessary: 1
      6 
      7 set -x -e -v
      8 
      9 # This script is for building cctools (Apple's binutils) for Linux using
     10 # cctools-port (https://github.com/tpoechtrager/cctools-port).
     11 WORKSPACE=$HOME/workspace
     12 
     13 # Set some crosstools-port and libtapi directories
     14 CROSSTOOLS_SOURCE_DIR=$MOZ_FETCHES_DIR/cctools-port
     15 CROSSTOOLS_CCTOOLS_DIR=$CROSSTOOLS_SOURCE_DIR/cctools
     16 CROSSTOOLS_BUILD_DIR=$WORKSPACE/cctools
     17 LIBTAPI_SOURCE_DIR=$MOZ_FETCHES_DIR/apple-libtapi
     18 LIBTAPI_BUILD_DIR=$WORKSPACE/libtapi-build
     19 LIBDISPATCH_SOURCE_DIR=$MOZ_FETCHES_DIR/apple-libdispatch
     20 LIBDISPATCH_BUILD_DIR=$WORKSPACE/libdispatch-build
     21 LDID_SOURCE_DIR=$MOZ_FETCHES_DIR/ldid
     22 CLANG_DIR=$MOZ_FETCHES_DIR/clang
     23 
     24 # Create our directories
     25 mkdir -p $CROSSTOOLS_BUILD_DIR $LIBTAPI_BUILD_DIR $LIBDISPATCH_BUILD_DIR
     26 
     27 # Apply a minor libtapi tweak so cmake from outside of the srcdir works.
     28 cd $LIBTAPI_SOURCE_DIR
     29 patch -p1 < $GECKO_PATH/taskcluster/scripts/misc/libtapi.patch
     30 
     31 # Build libtapi; the included build.sh is not sufficient for our purposes.
     32 cd $LIBTAPI_BUILD_DIR
     33 # Common setup for libtapi and cctools
     34 export CC=$CLANG_DIR/bin/clang
     35 export CXX=$CLANG_DIR/bin/clang++
     36 # We also need this LD_LIBRARY_PATH at build time, since tapi builds bits of
     37 # clang build tools, and then executes those tools.
     38 export LD_LIBRARY_PATH=$CLANG_DIR/lib
     39 
     40 # Value taken from build.sh
     41 TAPI_VERSION=1600.0.11.8
     42 
     43 cmake -G Ninja $LIBTAPI_SOURCE_DIR/src/llvm \
     44      -DLLVM_INCLUDE_TESTS=OFF \
     45      -DCMAKE_BUILD_TYPE=RELEASE \
     46      -DLLVM_ENABLE_PROJECTS="tapi;clang" \
     47      -DLLVM_ENABLE_ZSTD=OFF \
     48      -DCMAKE_INSTALL_PREFIX=$CROSSTOOLS_BUILD_DIR \
     49      -DCMAKE_SYSROOT=$MOZ_FETCHES_DIR/sysroot \
     50      -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld \
     51      -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld \
     52      -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" \
     53      -DTAPI_REPOSITORY_STRING=$TAPI_VERSION \
     54      -DTAPI_FULL_VERSION=$TAPI_VERSION
     55 
     56 ninja clangBasic vt_gen -v
     57 ninja libtapi install-libtapi install-tapi-headers -v
     58 
     59 cd $LIBDISPATCH_BUILD_DIR
     60 cmake -G Ninja $LIBDISPATCH_SOURCE_DIR \
     61      -DCMAKE_BUILD_TYPE=RELEASE \
     62      -DCMAKE_INSTALL_PREFIX=$CROSSTOOLS_BUILD_DIR \
     63      -DCMAKE_SYSROOT=$MOZ_FETCHES_DIR/sysroot \
     64      -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld \
     65      -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld
     66 
     67 ninja -v
     68 ninja install -v
     69 
     70 # Setup LDFLAGS late so run-at-build-time tools in the basic clang build don't
     71 # pick up the possibly-incompatible libstdc++ from clang.
     72 # Also set it up such that loading libtapi doesn't require a LD_LIBRARY_PATH.
     73 # (this requires two dollars and extra backslashing because it's used verbatim
     74 # via a Makefile)
     75 export LDFLAGS="-fuse-ld=lld -lpthread -Wl,-rpath-link,$MOZ_FETCHES_DIR/sysroot/lib/x86_64-linux-gnu -Wl,-rpath-link,$MOZ_FETCHES_DIR/sysroot/usr/lib/x86_64-linux-gnu -Wl,-rpath,\\\$\$ORIGIN/../lib,-rpath,\\\$\$ORIGIN/../../clang/lib"
     76 
     77 export CC="$CC --sysroot=$MOZ_FETCHES_DIR/sysroot"
     78 export CXX="$CXX --sysroot=$MOZ_FETCHES_DIR/sysroot"
     79 
     80 # Configure crosstools-port
     81 cd $CROSSTOOLS_CCTOOLS_DIR
     82 
     83 # Force re-libtoolization to overwrite files with the new libtool bits.
     84 perl -pi -e 's/(LIBTOOLIZE -c)/\1 -f/' autogen.sh
     85 ./autogen.sh
     86 ./configure \
     87    --prefix=$CROSSTOOLS_BUILD_DIR \
     88    --target=x86_64-apple-darwin \
     89    --with-llvm-config=$CLANG_DIR/bin/llvm-config \
     90    --enable-lto-support \
     91    --enable-tapi-support \
     92    --with-libtapi=$CROSSTOOLS_BUILD_DIR \
     93    --with-libdispatch=$CROSSTOOLS_BUILD_DIR \
     94    --with-libblocksruntime=$CROSSTOOLS_BUILD_DIR
     95 
     96 # Build cctools
     97 make -j `nproc --all` install
     98 
     99 # Build ldid
    100 cd $LDID_SOURCE_DIR
    101 # The crypto library in the sysroot cannot be linked in a PIE executable so we use -no-pie
    102 make -j `nproc --all` install INSTALLPREFIX=$CROSSTOOLS_BUILD_DIR LDFLAGS="-no-pie -Wl,-Bstatic -lcrypto -Wl,-Bdynamic -ldl -pthread"
    103 
    104 strip $CROSSTOOLS_BUILD_DIR/bin/*
    105 # various build scripts based on cmake want to find `lipo` without a prefix
    106 cp $CROSSTOOLS_BUILD_DIR/bin/x86_64-apple-darwin-lipo $CROSSTOOLS_BUILD_DIR/bin/lipo
    107 
    108 (cd $CROSSTOOLS_BUILD_DIR/bin/; for i in x86_64-apple-darwin-*; do
    109    ln $i aarch64${i#x86_64}
    110 done)
    111 
    112 # Put a tarball in the artifacts dir
    113 mkdir -p $UPLOAD_DIR
    114 tar caf $UPLOAD_DIR/cctools.tar.zst -C $CROSSTOOLS_BUILD_DIR/.. `basename $CROSSTOOLS_BUILD_DIR`