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`