Stefan Reinauer (stefan.reinauer@coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10415
-gerrit
commit 944b11c2e466a408352ed21db1ecdcead458fe75 Author: Stefan Reinauer stefan.reinauer@coreboot.org Date: Wed Jun 3 17:13:23 2015 -0700
crossgcc: Add clang support
Add a new script, buildclang, which builds and installs a clang based toolchain, similarly to our buildgcc script. This toolchain will carry the required patches needed to successfully build coreboot, and also install clang's famous scan-build script.
Change-Id: I1aea7cd6002edc4f3bb2b46dc1f69a212ad18f77 Signed-off-by: Stefan Reinauer stefan.reinauer@coreboot.org --- util/crossgcc/buildgcc | 229 ++++++++++++++------- util/crossgcc/patches/cfe-3.6.1.src_frontend.patch | 75 +++++++ util/crossgcc/sum/cfe-3.6.1.src.tar.xz.cksum | 1 + .../sum/clang-tools-extra-3.6.1.src.tar.xz.cksum | 1 + .../sum/compiler-rt-3.6.1.src.tar.xz.cksum | 1 + util/crossgcc/sum/llvm-3.6.1.src.tar.xz.cksum | 1 + 6 files changed, 233 insertions(+), 75 deletions(-)
diff --git a/util/crossgcc/buildgcc b/util/crossgcc/buildgcc index a1b596e..d42fc2c 100755 --- a/util/crossgcc/buildgcc +++ b/util/crossgcc/buildgcc @@ -22,15 +22,15 @@
cd `dirname $0`
-CROSSGCC_DATE="June 3th, 2015" -CROSSGCC_VERSION="1.28" +CROSSGCC_DATE="June 4th, 2015" +CROSSGCC_VERSION="1.29"
# default settings TARGETDIR=`pwd`/xgcc TARGETARCH=i386-elf DESTDIR=
-# version numbers +# GCC toolchain version numbers GMP_VERSION=6.0.0 MPFR_VERSION=3.1.2 MPC_VERSION=1.0.3 @@ -42,8 +42,10 @@ GDB_VERSION=7.9 IASL_VERSION=20150204 PYTHON_VERSION=3.4.3 EXPAT_VERSION=2.1.0 +# CLANG version number +CLANG_VERSION=3.6.1
-# archive locations +# GCC toolchain archive locations GMP_ARCHIVE="http://ftpmirror.gnu.org/gmp/gmp-$%7BGMP_VERSION%7Da.tar.bz2" MPFR_ARCHIVE="http://ftpmirror.gnu.org/mpfr/mpfr-$%7BMPFR_VERSION%7D.tar.bz2" MPC_ARCHIVE="http://ftpmirror.gnu.org/mpc/mpc-$%7BMPC_VERSION%7D.tar.gz" @@ -54,7 +56,13 @@ GDB_ARCHIVE="http://ftpmirror.gnu.org/gdb/gdb-$%7BGDB_VERSION%7D.tar.xz" IASL_ARCHIVE="https://acpica.org/sites/acpica/files/acpica-unix-$%7BIASL_VERSION%7D.tar.gz" PYTHON_ARCHIVE="http://www.python.org/ftp/python/$%7BPYTHON_VERSION%7D/Python-$%7BPYTHON_VER..." EXPAT_ARCHIVE="http://downloads.sourceforge.net/sourceforge/expat/expat-$%7BEXPAT_VERSION%7..." +# CLANG toolchain archive locations +LLVM_ARCHIVE="http://llvm.org/releases/$%7BCLANG_VERSION%7D/llvm-$%7BCLANG_VERSION%7D.src...." +CFE_ARCHIVE="http://llvm.org/releases/$%7BCLANG_VERSION%7D/cfe-$%7BCLANG_VERSION%7D.src.t..." +CRT_ARCHIVE="http://llvm.org/releases/$%7BCLANG_VERSION%7D/compiler-rt-$%7BCLANG_VERSION%..." +CTE_ARCHIVE="http://llvm.org/releases/$%7BCLANG_VERSION%7D/clang-tools-extra-$%7BCLANG_VE..."
+# GCC toolchain directories GMP_DIR="gmp-${GMP_VERSION}" MPFR_DIR="mpfr-${MPFR_VERSION}" MPC_DIR="mpc-${MPC_VERSION}" @@ -65,10 +73,16 @@ GDB_DIR="gdb-${GDB_VERSION}" IASL_DIR="acpica-unix-${IASL_VERSION}" PYTHON_DIR="Python-${PYTHON_VERSION}" EXPAT_DIR="expat-${EXPAT_VERSION}" +# CLANG toolchain directories +LLVM_DIR="llvm-${CLANG_VERSION}.src" +CFE_DIR="cfe-${CLANG_VERSION}.src" +CRT_DIR="compiler-rt-${CLANG_VERSION}.src" +CTE_DIR="clang-tools-extra-${CLANG_VERSION}.src"
unset MAKELEVEL MAKEFLAGS
SAVETEMPS=0 +BUILDCLANG=0 SKIPGDB=1 SKIPPYTHON=1
@@ -153,15 +167,64 @@ searchtool() TAR=`searchtool tar` || exit $? PATCH=`searchtool patch` || exit $? MAKE=`searchtool make` || exit $? +CMAKE=`searchtool cmake "cmake"` || exit $?
searchtool m4 > /dev/null searchtool bison > /dev/null searchtool flex flex > /dev/null searchtool g++ "Free Software Foundation" nofail > /dev/null || \ -searchtool clang "clang version" > /dev/null searchtool wget > /dev/null searchtool bzip2 "bzip2," > /dev/null
+download() { + ARCHIVE=$1 + FILE=`basename $ARCHIVE` + printf " * $FILE " + + test -f tarballs/$FILE && \ + (test -z "$CHECKSUM" || \ + test "`cat sum/$FILE.cksum 2>/dev/null | sed -e 's,.*([0-9a-f]{40}).*,\1,'`" = "`$CHECKSUM tarballs/$FILE 2>/dev/null | sed -e 's,.*([0-9a-f]{40}).*,\1,'`" ) && \ + printf "(cached)" || ( + printf "(downloading)" + rm -f tarballs/$FILE + cd tarballs + wget --no-check-certificate -q $ARCHIVE + cd .. + test ! -f sum/$FILE.cksum && test -f tarballs/$FILE && \ + (test -z "$CHECKSUM" || $CHECKSUM tarballs/$FILE > sum/$FILE.cksum ) && \ + printf "(checksum created. ${RED}Note. Please upload sum/$FILE.cksum if the corresponding archive is upgraded.${NC})" + ) + test -f tarballs/$FILE || \ + printf "\n${RED}Failed to download $FILE.${NC}\n" + test -f tarballs/$FILE || exit 1 + printf "\n" +} + +unpack_and_patch() { + PACKAGE=$1 + archive=$PACKAGE"_ARCHIVE" + archive="`eval echo '$'$archive`" + dir=$PACKAGE"_DIR" + dir="`eval echo '$'${dir}`" + test -d ${dir} && test -f ${dir}/.unpack_success || ( + printf " * `basename $archive`\n" + FLAGS=zxf + suffix=`echo $archive | sed 's,.*.,,'` + test "$suffix" = "gz" && FLAGS=zxf + test "$suffix" = "bz2" && FLAGS=jxf + test "$suffix" = "xz" && FLAGS="--xz -xf" + test "$suffix" = "lzma" && FLAGS="--lzma -xf" + $TAR $FLAGS tarballs/`basename $archive` + for patch in patches/${dir}_*.patch; do + test -r $patch || continue + printf " o `basename $patch`\n" + $PATCH -s -N -p0 < `echo $patch` || \ + printf "\n${RED}Failed $patch.${NC}\n" + done + touch ${dir}/.unpack_success + ) +} + wait_for_build() { # $1: directory in which log file and failure marker are stored cat > "$1/crossgcc-build.log" @@ -178,14 +241,30 @@ CHECKSUM=$SHA1SUM cleanup() { printf "Cleaning up temporary files... " - rm -rf ${BUILDDIRPREFIX}-* combined gcc-* gmp-* mpfr-* mpc-* libelf-* binutils-* - rm -rf gdb-* acpica-* python-* expat-* - printf "${green}ok${NC}\n" + if [ "$BUILDCLANG" -eq 0 ]; then + # GCC toolchain + rm -rf ${GMP_DIR} ${BUILDDIRPREFIX}-gmp + rm -rf ${MPFR_DIR} ${BUILDDIRPREFIX}-mpfr + rm -rf ${MPC_DIR} ${BUILDDIRPREFIX}-mpc + rm -rf ${LIBELF_DIR} ${BUILDDIRPREFIX}-libelf + rm -rf ${BINUTILS_DIR} ${BUILDDIRPREFIX}-binutils + rm -rf ${GCC_DIR} ${BUILDDIRPREFIX}-gcc + + # Other tools + rm -rf ${GDB_DIR} ${BUILDDIRPREFIX}-gdb + rm -rf ${EXPAT_DIR} ${BUILDDIRPREFIX}-expat + rm -rf ${PYTHON_DIR} ${BUILDDIRPREFIX}-python + rm -rf ${IASL_DIR} + else + # CLANG + rm -rf ${LLVM_DIR} ${CFE_DIR} ${CRT_DIR} ${CTE_DIR} ${BUILDDIR} + printf "${green}ok${NC}\n" + fi }
myhelp() { - printf "Usage: $0 [-V] [-c] [-p <platform>] [-d <target directory>] [-D <dest dir>] [-G] [-S]\n" + printf "Usage: $0 [-V] [-c] [-p <platform>] [-d <target directory>] [-D <dest dir>] [-C] [-G] [-S]\n" printf " $0 [-V|--version]\n" printf " $0 [-h|--help]\n\n"
@@ -196,14 +275,16 @@ myhelp() printf " [-t|--savetemps] don't remove temporary files after build\n" printf " [-y|--ccache] Use ccache when building cross compiler\n" printf " [-j|--jobs <num>] run <num> jobs in parallel in make\n" + printf " [-C|--clang] build CLANG toolchain" printf " [-p|--platform <platform>] target platform to build cross compiler for\n" - printf " (defaults to $TARGETARCH)\n" + printf " (defaults to $TARGETARCH)*\n" printf " [-d|--directory <target dir>] target directory to install cross compiler to\n" printf " (defaults to $TARGETDIR)\n\n" printf " [-D|--destdir <dest dir>] destination directory to install cross compiler to\n" printf " (for RPM builds, default unset)\n" - printf " [-G|--gdb] build GNU debugger\n" - printf " [-S|--scripting] build scripting support for GDB\n\n" + printf " [-G|--gdb] build GNU debugger*\n" + printf " [-S|--scripting] build scripting support for GDB*\n\n" + printf " * option only available when building GCC toolchain (not with CLANG)\n\n" }
myversion() @@ -236,11 +317,11 @@ getopt - > /dev/null 2>/dev/null || gcc -o getopt getopt.c getoptbrand="`getopt -V | sed -e '1!d' -e 's,^(......).*,\1,'`" if [ "${getoptbrand}" = "getopt" ]; then # Detected GNU getopt that supports long options. - args=`getopt -l version,help,clean,directory:,platform:,jobs:,destdir:,savetemps,skip-gdb,ccache Vhcd:p:j:D:tGy -- "$@"` + args=`getopt -l version,help,clean,directory:,platform:,jobs:,destdir:,savetemps,skip-gdb,ccache,clang Vhcd:p:j:D:tGyC -- "$@"` eval set "$args" else # Detected non-GNU getopt - args=`getopt Vhcd:p:j:D:tGy $*` + args=`getopt Vhcd:p:j:D:tGyC $*` set -- $args fi
@@ -259,6 +340,7 @@ while true ; do -p|--platform) shift; TARGETARCH="$1"; shift;; -D|--destdir) shift; DESTDIR="$1"; shift;; -j|--jobs) shift; JOBS="-j $1"; shift;; + -C|--clang) shift; BUILDCLANG=1;; -G|--gdb) shift; SKIPGDB=0;; -S|--scripting) shift; SKIPPYTHON=0;; -y|--ccache) shift; USECCACHE=1;; @@ -268,6 +350,8 @@ while true ; do esac done
+if [ "$BUILDCLANG" -eq 0 ]; then + case "$TARGETARCH" in x86_64-elf) ;; x86_64*) TARGETARCH=x86_64-elf;; @@ -283,11 +367,16 @@ esac
echo "Target arch is now $TARGETARCH" BUILDDIRPREFIX=build-${TARGETARCH} +else +BUILDDIR=$PWD/build-clang +fi
if [ "$clean" = "1" ]; then cleanup fi
+if [ "$BUILDCLANG" -eq 0 ]; then + GDB_PACKAGE="GDB" PYTHON_PACKAGE="PYTHON" EXPAT_PACKAGE="EXPAT" @@ -312,69 +401,40 @@ fi USE_GOLD="" GCC_OPTIONS="--enable-lto"
+fi # $BUILDCLANG -eq 0 + printf "Downloading tar balls ... \n" mkdir -p tarballs + +if [ "$BUILDCLANG" -eq 0 ]; then for ARCHIVE in $GMP_ARCHIVE $MPFR_ARCHIVE $MPC_ARCHIVE $LIBELF_ARCHIVE \ $GCC_ARCHIVE $BINUTILS_ARCHIVE $GDB_ARCHIVE \ $IASL_ARCHIVE $PYTHON_ARCHIVE $EXPAT_ARCHIVE; do - FILE=`basename $ARCHIVE` - printf " * $FILE " - - ##create the sum - #test -f sum/$FILE.cksum || ( - # $CHECKSUM tarballs/$FILE > sum/$FILE.cksum - # continue - #) - - test -f tarballs/$FILE && \ - (test -z "$CHECKSUM" || \ - test "`cat sum/$FILE.cksum 2>/dev/null | sed -e 's,.*([0-9a-f]{40}).*,\1,'`" = "`$CHECKSUM tarballs/$FILE 2>/dev/null | sed -e 's,.*([0-9a-f]{40}).*,\1,'`" ) && \ - printf "(cached)" || ( - printf "(downloading)" - rm -f tarballs/$FILE - cd tarballs - wget --no-check-certificate -q $ARCHIVE - cd .. - test ! -f sum/$FILE.cksum && test -f tarballs/$FILE && \ - (test -z "$CHECKSUM" || $CHECKSUM tarballs/$FILE > sum/$FILE.cksum ) && \ - printf "(checksum created. ${RED}Note. Please upload sum/$FILE.cksum if the corresponding archive is upgraded.${NC})" - ) - test -f tarballs/$FILE || \ - printf "\n${RED}Failed to download $FILE.${NC}\n" - test -f tarballs/$FILE || exit 1 - printf "\n" + download $ARCHIVE done +else +for ARCHIVE in $LLVM_ARCHIVE $CFE_ARCHIVE $CRT_ARCHIVE $CTE_ARCHIVE; do + download $ARCHIVE +done +fi printf "Downloaded tar balls ... " printf "${green}ok${NC}\n"
printf "Unpacking and patching ... \n" +if [ "$BUILDCLANG" -eq 0 ]; then for PACKAGE in GMP MPFR MPC LIBELF GCC BINUTILS $PYTHON_PACKAGE \ $EXPAT_PACKAGE $GDB_PACKAGE IASL; do - archive=$PACKAGE"_ARCHIVE" - archive="`eval echo '$'$archive`" - dir=$PACKAGE"_DIR" - dir="`eval echo '$'${dir}`" - test -d ${dir} && test -f ${dir}/.unpack_success || ( - printf " * `basename $archive`\n" - FLAGS=zxf - suffix=`echo $archive | sed 's,.*.,,'` - test "$suffix" = "gz" && FLAGS=zxf - test "$suffix" = "bz2" && FLAGS=jxf - test "$suffix" = "xz" && FLAGS="--xz -xf" - test "$suffix" = "lzma" && FLAGS="--lzma -xf" - $TAR $FLAGS tarballs/`basename $archive` - for patch in patches/${dir}_*.patch; do - test -r $patch || continue - printf " o `basename $patch`\n" - $PATCH -s -N -p0 < `echo $patch` || \ - printf "\n${RED}Failed $patch.${NC}\n" - done - touch ${dir}/.unpack_success - ) + unpack_and_patch $PACKAGE +done +else +for PACKAGE in LLVM CFE CRT CTE; do + unpack_and_patch $PACKAGE done +fi printf "Unpacked and patched ... " printf "${green}ok${NC}\n"
+if [ "$BUILDCLANG" -eq 0 ]; then CC=cc if [ $UNAME = "Darwin" ]; then #GCC_OPTIONS="$GCC_OPTIONS --enable-threads=posix" @@ -397,11 +457,13 @@ if [ $UNAME = "Darwin" ]; then CC=llvm-gcc fi fi +fi # "$BUILDCLANG" -eq 0
if [ "$USECCACHE" = 1 ]; then CC="ccache $CC" fi
+if [ "$BUILDCLANG" -eq 0 ]; then mkdir -p ${BUILDDIRPREFIX}-gmp ${BUILDDIRPREFIX}-mpfr ${BUILDDIRPREFIX}-mpc ${BUILDDIRPREFIX}-libelf ${BUILDDIRPREFIX}-binutils \ ${BUILDDIRPREFIX}-gcc ${BUILDDIRPREFIX}-python ${BUILDDIRPREFIX}-expat
@@ -656,27 +718,44 @@ printf "Building IASL ${IASL_VERSION} ... " ) 2>&1 | wait_for_build "$IASL_DIR/source/compiler" || exit 1 fi
+else + +printf "Building CLANG ${CLANG_VERSION} ... " +mkdir -p ${BUILDDIR} +( + ln -sf $PWD/$CFE_DIR $LLVM_DIR/tools/clang + ln -sf $PWD/$CTE_DIR $LLVM_DIR/tools/clang/tools/extra + ln -sf $PWD/$CRT_DIR $LLVM_DIR/projects/compiler-rt + + cd ${BUILDDIR} + + $CMAKE -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$DESTDIR$TARGETDIR \ + -DCMAKE_BUILD_TYPE=Release ../$LLVM_DIR || touch .failed + $MAKE $JOBS || touch .failed + $MAKE install || touch .failed + + cd - + + cp -a $CFE_DIR/tools/scan-build/* $DESTDIR$TARGETDIR/bin + cp -a $CFE_DIR/tools/scan-view/* $DESTDIR$TARGETDIR/bin + + if [ ! -f .failed ]; then touch .success; fi +) 2>&1 | wait_for_build "${BUILDDIR}" || exit 1 + +fi # "$BUILDCLANG" -eq 0 + PROGNAME=`basename "$0"` rm -f "$DESTDIR$TARGETDIR/$PROGNAME".commit.* cp "$PROGNAME" $DESTDIR$TARGETDIR/"$PROGNAME.commit.`git describe`"
if [ $SAVETEMPS -eq 0 ]; then - printf "Cleaning up... " - rm -rf ${GMP_DIR} ${BUILDDIRPREFIX}-gmp - rm -rf ${MPFR_DIR} ${BUILDDIRPREFIX}-mpfr - rm -rf ${MPC_DIR} ${BUILDDIRPREFIX}-mpc - rm -rf ${LIBELF_DIR} ${BUILDDIRPREFIX}-libelf - rm -rf ${BINUTILS_DIR} ${BUILDDIRPREFIX}-binutils - rm -rf ${GCC_DIR} ${BUILDDIRPREFIX}-gcc - rm -rf ${GDB_DIR} ${BUILDDIRPREFIX}-gdb - rm -rf ${EXPAT_DIR} ${BUILDDIRPREFIX}-expat - rm -rf ${PYTHON_DIR} ${BUILDDIRPREFIX}-python - rm -rf ${IASL_DIR} - printf "${green}ok${NC}\n" + cleanup else printf "Leaving temporary files around... ${green}ok${NC}\n" fi
+if [ "$BUILDCLANG" -eq 0 ]; then printf "\n${green}You can now run your $TARGETARCH cross toolchain from $TARGETDIR.${NC}\n" - - +else +printf "\n${green}You can now run your CLANG toolchain from $TARGETDIR.${NC}\n" +fi diff --git a/util/crossgcc/patches/cfe-3.6.1.src_frontend.patch b/util/crossgcc/patches/cfe-3.6.1.src_frontend.patch new file mode 100644 index 0000000..594e08a --- /dev/null +++ b/util/crossgcc/patches/cfe-3.6.1.src_frontend.patch @@ -0,0 +1,75 @@ +Index: include/clang/Driver/Driver.h +=================================================================== +--- cfe-3.6.1.src/include/clang/Driver/Driver.h (revision 211898) ++++ cfe-3.6.1.src/include/clang/Driver/Driver.h (working copy) +@@ -325,6 +325,14 @@ + // FIXME: This should be in CompilationInfo. + std::string GetFilePath(const char *Name, const ToolChain &TC) const; + ++ /// GetCompilerRTPath - Find Compiler-RT library path ++ /// ++ /// \param TC - The provided tool chain for additional information on ++ /// directories to search. ++ // ++ // FIXME: This should be in CompilationInfo. ++ std::string GetCompilerRTPath(const ToolChain &TC) const; ++ + /// GetProgramPath - Lookup \p Name in the list of program search paths. + /// + /// \param TC - The provided tool chain for additional information on +Index: include/clang/Driver/Options.td +=================================================================== +--- cfe-3.6.1.src/include/clang/Driver/Options.td (revision 211898) ++++ cfe-3.6.1.src/include/clang/Driver/Options.td (working copy) +@@ -1269,6 +1269,8 @@ + HelpText<"Enable Objective-C Ivar layout bitmap print trace">; + def print_libgcc_file_name : Flag<["-", "--"], "print-libgcc-file-name">, + HelpText<"Print the library path for "libgcc.a"">; ++def print_librt_file_name : Flag<["-", "--"], "print-librt-file-name">, ++ HelpText<"Print the library path for "libclang_rt.builtins-ARCH.a"">; + def print_multi_directory : Flag<["-", "--"], "print-multi-directory">; + def print_multi_lib : Flag<["-", "--"], "print-multi-lib">; + def print_multi_os_directory : Flag<["-", "--"], "print-multi-os-directory">; +Index: lib/Driver/Driver.cpp +=================================================================== +--- cfe-3.6.1.src/lib/Driver/Driver.cpp (revision 211898) ++++ cfe-3.6.1.src/lib/Driver/Driver.cpp (working copy) +@@ -756,6 +756,11 @@ + return false; + } + ++ if (C.getArgs().hasArg(options::OPT_print_librt_file_name)) { ++ llvm::outs() << GetCompilerRTPath(TC) << "\n"; ++ return false; ++ } ++ + if (C.getArgs().hasArg(options::OPT_print_multi_lib)) { + const MultilibSet &Multilibs = TC.getMultilibs(); + +@@ -1820,6 +1825,26 @@ + return Name; + } + ++std::string Driver::GetCompilerRTPath(const ToolChain &TC) const { ++ // The runtimes are located in the OS-specific resource directory. ++ SmallString<128> Res(TC.getDriver().ResourceDir); ++ const llvm::Triple &Triple = TC.getTriple(); ++ ++ // TC.getOS() yield "freebsd10.0" whereas "freebsd" is expected. ++ StringRef OSLibName = (Triple.getOS() == llvm::Triple::FreeBSD) ? ++ "freebsd" : TC.getOS(); ++ llvm::sys::path::append(Res, "lib", OSLibName); ++ ++ StringRef archName = TC.getArchName(); ++ // Until ARM libraries are build separately, we have them all in one library ++ if (TC.getArch() == llvm::Triple::arm || ++ TC.getArch() == llvm::Triple::armeb) ++ archName = "arm"; ++ ++ llvm::sys::path::append(Res, Twine("libclang_rt.builtins-") + archName + ".a"); ++ return Res.str(); ++} ++ + std::string Driver::GetProgramPath(const char *Name, + const ToolChain &TC) const { + // FIXME: Needs a better variable than DefaultTargetTriple diff --git a/util/crossgcc/sum/cfe-3.6.1.src.tar.xz.cksum b/util/crossgcc/sum/cfe-3.6.1.src.tar.xz.cksum new file mode 100644 index 0000000..661bf9c --- /dev/null +++ b/util/crossgcc/sum/cfe-3.6.1.src.tar.xz.cksum @@ -0,0 +1 @@ +b7221d8fdd27e3ed519d0281646e82e17b51122c tarballs/cfe-3.6.1.src.tar.xz diff --git a/util/crossgcc/sum/clang-tools-extra-3.6.1.src.tar.xz.cksum b/util/crossgcc/sum/clang-tools-extra-3.6.1.src.tar.xz.cksum new file mode 100644 index 0000000..17d55cb --- /dev/null +++ b/util/crossgcc/sum/clang-tools-extra-3.6.1.src.tar.xz.cksum @@ -0,0 +1 @@ +d93136f56999d8ae1ffebb9cd0cd7f3c27ba77c4 tarballs/clang-tools-extra-3.6.1.src.tar.xz diff --git a/util/crossgcc/sum/compiler-rt-3.6.1.src.tar.xz.cksum b/util/crossgcc/sum/compiler-rt-3.6.1.src.tar.xz.cksum new file mode 100644 index 0000000..51e426b --- /dev/null +++ b/util/crossgcc/sum/compiler-rt-3.6.1.src.tar.xz.cksum @@ -0,0 +1 @@ +85dccdc6ccd9675e871dfd2786b45fbf53518485 tarballs/compiler-rt-3.6.1.src.tar.xz diff --git a/util/crossgcc/sum/llvm-3.6.1.src.tar.xz.cksum b/util/crossgcc/sum/llvm-3.6.1.src.tar.xz.cksum new file mode 100644 index 0000000..5ca7065 --- /dev/null +++ b/util/crossgcc/sum/llvm-3.6.1.src.tar.xz.cksum @@ -0,0 +1 @@ +01ecab99adc9030ee34e9a2e19e65dfe64e1affe tarballs/llvm-3.6.1.src.tar.xz