Loading...
tools/xcrun_cache.sh xnu-12377.101.15 /dev/null
--- xnu/xnu-12377.101.15/tools/xcrun_cache.sh
+++ /dev/null
@@ -1,276 +0,0 @@
-#!/bin/sh
-
-#
-# This shell-script is argument-compatible with xcrun(1) as invoked
-# by xnu's Makefiles. Additionally, it supports caching tools
-# in the local build directory. It is tightly coupled to exactly
-# the queries that MakeInc.cmd makes, in exactly the order it makes
-# them. ./tools/remote_build.sh invokes this indirectly in caching
-# mode, so '$(XCRUN) -sdk foo -find bar' copies 'bar' from wherever
-# it is on-disk into ./BUILD/BuildData, and returns that path to the
-# caller. In '-u' mode on a remote build server, cache tools
-# relative to the current build directory are returned without
-# actually calling through to xcrun(1), since the remote build
-# server may not even have Xcode installed.
-#
-
-SDKROOT=""
-FINDTOOL=""
-SDKQUERY=""
-VERBOSE=""
-OBJROOT=""
-CACHE=0
-
-# echo "Calling $0 $@" 1>&2
-
-while [ $# -gt 0 ]; do
-    case "$1" in
-	-c)
-	    CACHE=1
-	    shift
-	    OBJROOT="$1"
-	    shift
-	    ;;
-	-u)
-	    CACHE=0
-	    shift
-	    OBJROOT="$1"
-	    shift
-	    ;;
-	-sdk)
-	    shift
-	    SDKROOT="$1"
-	    shift
-	    ;;
-	-verbose)
-	    VERBOSE="$1"
-	    shift
-	    set -x
-	    ;;
-	-find)
-	    shift
-	    FINDTOOL="$1"
-	    shift
-	    ;;
-	-show-sdk-path)
-	    SDKQUERY="$1"
-	    shift
-	    ;;
-	-show-sdk-platform-path)
-	    SDKQUERY="$1"
-	    shift
-	    ;;
-	-show-sdk-version)
-	    SDKQUERY="$1"
-	    shift
-	    ;;
-	*)
-	    echo "Unrecognized argument $1" 1>&2
-	    exit 1
-    esac    
-done
-
-CreateFile() {
-    local string="$1"
-    local filepath="$2"
-    echo "${string}" > "${filepath}.new"
-    cmp -s "${filepath}" "${filepath}.new"
-    if [ $? -eq 0 ]; then
-	rm "${filepath}.new"
-    else
-	mv "${filepath}.new" "${filepath}"
-    fi
-}
-
-if [ $CACHE -eq 1 ]; then
-
-    if [ -n "$SDKQUERY" ]; then
-	# MakeInc.cmd makes SDK queries up-front first. Generally the
-	# SDKROOT that is an input to these are one of:
-	# "macosx" => Host SDK
-	# "iphonehostXXX" => iPhone Host SDK
-	# other shortcut or full path => Target SDK
-	#
-	# Once an initial lookup is made, subsequent SDKROOTs for
-	# that same SDK may use a full path or cached path
-	SDKTYPE=""
-	case "$SDKROOT" in
-	    macosx)
-		SDKTYPE="host"
-		;;
-	    iphonehost*)
-		SDKTYPE="iphonehost"
-		;;
-	    *)
-		if [ -f "$SDKROOT/.sdktype" ]; then
-		    SDKTYPE=`cat "$SDKROOT/.sdktype"`
-		else
-		    SDKTYPE="target"
-		fi
-		;;
-	esac
-
-	# A cached SDK path can be passed to xcrun, so
-	# we need the original on-disk path
-	if [ -f "$SDKROOT/.realsdkpath" ]; then
-	    REALSDKROOT=`cat "$SDKROOT/.realsdkpath"`
-	else
-	    REALSDKROOT="$SDKROOT"
-	fi
-
-	SDKPROPERTY=`/usr/bin/xcrun $VERBOSE -sdk "$REALSDKROOT" "$SDKQUERY"`
-	if [ $? -ne 0 ]; then
-	    exit $?
-	fi
-	
-	case $SDKQUERY in
-	    -show-sdk-path)
-		# Cache the SDK locally, and transform the resulting SDKPROPERTY
-		if [ -z "$SDKPROPERTY" ]; then
-		    SDKPROPERTY="/"
-		    SDKNAME="Slash.sdk"
-		else
-		    SDKNAME=$(basename "${SDKPROPERTY}")
-		fi
-		mkdir -p "${OBJROOT}/BuildTools/${SDKNAME}"
-		mkdir -p "${OBJROOT}/BuildTools/${SDKNAME}/usr/include"
-		rsync -aq --exclude=c++ --exclude=php --exclude=soc "${SDKPROPERTY}/usr/include/" "${OBJROOT}/BuildTools/${SDKNAME}/usr/include/"
-		if [ "$SDKTYPE" = "iphonehost" ]; then
-		    mkdir -p "${OBJROOT}/BuildTools/${SDKNAME}/usr/local/lib/system"
-		    rsync -aq "${SDKPROPERTY}/usr/local/lib/system/" "${OBJROOT}/BuildTools/${SDKNAME}/usr/local/lib/system/"
-		else
-		    mkdir -p "${OBJROOT}/BuildTools/${SDKNAME}/usr/lib"
-		    rsync -aq "${SDKPROPERTY}/usr/lib/libSystem"* "${OBJROOT}/BuildTools/${SDKNAME}/usr/lib/"
-		    rsync -aq "${SDKPROPERTY}/usr/lib/libc++"* "${OBJROOT}/BuildTools/${SDKNAME}/usr/lib/"
-		    rsync -aq "${SDKPROPERTY}/usr/lib/libstdc++"* "${OBJROOT}/BuildTools/${SDKNAME}/usr/lib/"
-		    mkdir -p "${OBJROOT}/BuildTools/${SDKNAME}/usr/lib/system"
-		    rsync -aq --exclude=\*_debug.dylib --exclude=\*_profile.dylib "${SDKPROPERTY}/usr/lib/system/" "${OBJROOT}/BuildTools/${SDKNAME}/usr/lib/system/"
-		fi
-		if [ -f "${SDKPROPERTY}/usr/local/libexec/availability.pl" ]; then
-		    mkdir -p "${OBJROOT}/BuildTools/${SDKNAME}/usr/local/libexec"
-		    rsync -aq "${SDKPROPERTY}/usr/local/libexec/availability.pl" "${OBJROOT}/BuildTools/${SDKNAME}/usr/local/libexec/"
-		fi
-		CreateFile "${SDKPROPERTY}" "${OBJROOT}/BuildTools/${SDKNAME}/.realsdkpath"
-		CreateFile "${SDKTYPE}" "${OBJROOT}/BuildTools/${SDKNAME}/.sdktype"
-		CreateFile "BuildTools/${SDKNAME}" "${OBJROOT}/BuildTools/.${SDKTYPE}sdk"
-		echo "${OBJROOT}/BuildTools/${SDKNAME}"
-		exit 0
-		;;
-	    -show-sdk-platform-path)
-		PLATFORMNAME=$(basename "${SDKPROPERTY}")
-		mkdir -p "${OBJROOT}/BuildTools/${PLATFORMNAME}"
-		if [ -f "${SDKPROPERTY}/usr/local/standalone/firmware/device_map.db" ]; then
-		    mkdir -p "${OBJROOT}/BuildTools/${PLATFORMNAME}/usr/local/standalone/firmware"
-		    rsync -aq "${SDKPROPERTY}/usr/local/standalone/firmware/device_map.db" \
-			"${OBJROOT}/BuildTools/${PLATFORMNAME}/usr/local/standalone/firmware/"
-		fi
-		CreateFile "BuildTools/${PLATFORMNAME}" "${OBJROOT}/BuildTools/.targetplatform"
-		echo "${OBJROOT}/BuildTools/${PLATFORMNAME}"
-		exit 0
-		;;
-	    -show-sdk-version)
-		CreateFile "${SDKPROPERTY}" "${OBJROOT}/BuildTools/.targetsdkversion"
-		echo "${SDKPROPERTY}"
-		exit 0
-		;;
-	esac
-
-    elif [ -n "$FINDTOOL" ]; then
-
-	# We assume SDK Queries have been performed first and subsequent
-	# SDKROOTs used to find tools are all using cached SDKs in
-	# the build directory, in which case metadata is present
-
-	if [ ! -f "$SDKROOT/.realsdkpath" ]; then
-	    exit 1
-	fi
-	REALSDKROOT=`cat "$SDKROOT/.realsdkpath"`
-
-	if [ ! -f "$SDKROOT/.sdktype" ]; then
-	    exit 1
-	fi
-	SDKTYPE=`cat "$SDKROOT/.sdktype"`
-
-	TOOLPATH=`/usr/bin/xcrun $VERBOSE -sdk "$REALSDKROOT" -find "$FINDTOOL"`
-	if [ $? -ne 0 ]; then
-	    exit $?
-	fi
-
-	# Keep the parent directory when caching tools, along with Host vs. Target
-	TOOLNAME=$(basename "${TOOLPATH}")
-	TOOLDIR=$(basename $(dirname "${TOOLPATH}"))
-	if [ "$SDKTYPE" = "host" ]; then
-	    NEWTOOLPATH="${OBJROOT}/BuildTools/Host/${TOOLDIR}/${TOOLNAME}"
-	    mkdir -p "${OBJROOT}/BuildTools/Host"
-	    CreateFile "BuildTools/Host/${TOOLDIR}/${TOOLNAME}" "${OBJROOT}/BuildTools/Host/.${TOOLNAME}"
-	else
-	    NEWTOOLPATH="${OBJROOT}/BuildTools/Target/${TOOLDIR}/${TOOLNAME}"
-	    mkdir -p "${OBJROOT}/BuildTools/Target"
-	    CreateFile "BuildTools/Target/${TOOLDIR}/${TOOLNAME}" "${OBJROOT}/BuildTools/Target/.${TOOLNAME}"
-	fi
-	mkdir -p $(dirname "${NEWTOOLPATH}")
-	rsync -aq "${TOOLPATH}" "${NEWTOOLPATH}"
-	case "${TOOLNAME}" in
-	    clang)
-		mkdir -p $(dirname $(dirname "${NEWTOOLPATH}"))/lib/clang
-		rsync -aq $(dirname "${TOOLPATH}")/ld $(dirname "${NEWTOOLPATH}")/ld
-		rsync -aq $(dirname $(dirname "${TOOLPATH}"))/lib/clang/ $(dirname $(dirname "${NEWTOOLPATH}"))/lib/clang/
-		rsync -aq $(dirname $(dirname "${TOOLPATH}"))/lib/libLTO.dylib $(dirname $(dirname "${NEWTOOLPATH}"))/lib/libLTO.dylib
-		;;
-	    bison)
-		mkdir -p $(dirname $(dirname "${NEWTOOLPATH}"))/share/bison
-		rsync -aq $(dirname $(dirname "${TOOLPATH}"))/share/bison/ $(dirname $(dirname "${NEWTOOLPATH}"))/share/bison/
-		;;
-	esac
-
-	echo "${NEWTOOLPATH}"
-	exit 0
-    else
-	echo "Unrecognized option" 1>&2
-	exit 1
-    fi
-fi
-
-# When using cached SDK information, first try to do
-# an initial classification, and then read properties from
-# cached locations
-SDKTYPE=""
-case "$SDKROOT" in
-    macosx)
-	SDKTYPE="host"
-	;;
-    iphonehost*)
-	SDKTYPE="iphonehost"
-	;;
-    *)
-	if [ -f "$SDKROOT/.sdktype" ]; then
-	    SDKTYPE=`cat "$SDKROOT/.sdktype"`
-	else
-	    SDKTYPE="target"
-	fi
-	;;
-esac
-
-if [ -n "$FINDTOOL" ]; then
-    TOOLNAME=$(basename "${FINDTOOL}")
-    if [ "${SDKTYPE}" = "host" ]; then
-	RELPATH=`cat ${OBJROOT}/BuildTools/Host/.${TOOLNAME}`
-    else
-	RELPATH=`cat ${OBJROOT}/BuildTools/Target/.${TOOLNAME}`
-    fi
-    echo "${OBJROOT}/${RELPATH}"
-else	
-    case $SDKQUERY in
-	-show-sdk-path)
-	    RELPATH=`cat ${OBJROOT}/BuildTools/.${SDKTYPE}sdk`
-	    echo "${OBJROOT}/${RELPATH}"
-	    ;;
-	-show-sdk-platform-path)
-	    RELPATH=`cat ${OBJROOT}/BuildTools/.targetplatform`
-	    echo "${OBJROOT}/${RELPATH}"
-	    ;;
-	-show-sdk-version)
-	    echo `cat ${OBJROOT}/BuildTools/.targetsdkversion`
-	    ;;
-    esac
-fi