1#!/bin/bash
2
3# This is a script that does incremental builds, while 
4# making some minimal effort to build in a buildit/xbs 
5# compatible way.  It is not intended as a buildit 
6# replacement, but can be useful during development for
7# quick turn testing.
8# ./buildmelocal.sh [-d] [-j] [-p projname] <directory>
9# -d installs the dstroot with darwinup
10# -j builds in parallel
11# -p project to build
12
13PROJECT=""
14VERSION="999"
15ARCH=x86_64
16BUILDDIR="/tmp/buildmelocal"
17
18USEPARALLEL="no"
19USEDARWINUP="no"
20
21while getopts "jdhp:" i; do
22	case "$i" in
23	"j")
24		echo "Enabling parallel build"
25		USEPARALLEL="yes"
26		;;
27	"d")
28		USEDARWINUP="yes"
29		;;
30	"p")
31		PROJECT=${OPTARG}
32		;;
33	"h")
34		echo "Usage: $0 [-d] [-j] [-p projname] <directory>"
35		echo "-d	Uses darwinup to install the dstroot after building"
36		echo "-j	Enables parallel building on projects that support it"
37		echo "-p projname	Specify the project name to build"
38		exit 1
39		;;
40	"--")
41		break
42		;;
43	esac
44done
45shift $((OPTIND-1))
46
47if [ "$PROJECT" == "" ]; then
48	if [ "$1" == "." ]; then
49		PROJECT=`basename "$PWD" | sed -e 's/\-.*//'`
50	else
51		PROJECT=`basename "$1"`
52	fi
53fi
54
55SRCROOT=$1
56if [ "${SRCROOT}" == "." ]; then
57	SRCROOT=$PWD
58fi
59
60# Where SDKs are located
61XXXSDKPATH="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/"
62
63CUROS=`sw_vers | grep ProductVersion | awk '{print $2}'`
64
65# The SDK to use
66XXXSDK="MacOSX${CUROS}.Internal.sdk"
67
68case "$CUROS" in
69"10.10") 
70	CURRELEASE="OSX"
71	;;
72*)
73	CURRELEASE="Unknown"
74	;;
75esac
76
77XXXSDKROOT="${XXXSDKPATH}${XXXSDK}"
78OBJROOT="${BUILDDIR}/${PROJECT}/obj"
79SYMROOT="${BUILDDIR}/${PROJECT}/sym"
80DSTROOT="${BUILDDIR}/${PROJECT}/dst"
81
82mkdir -p "${BUILDDIR}"
83mkdir -p "${OBJROOT}"
84mkdir -p "${SYMROOT}"
85mkdir -p "${DSTROOT}"
86
87export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
88export RC_ProjectName=${PROJECT}
89export RC_ProjectSourceVersion=${VERSION}
90export RC_ProjectNameAndSourceVersion=${PROJECT}-${VERSION}
91export RC_ProjectBuildVersion=1
92export RC_CFLAGS="-arch ${ARCH} -pipe"
93export RC_NONARCH_CFLAGS="-pipe"
94export RC_ARCHS=${ARCH}
95export SRCROOT=${SRCROOT}
96export OBJROOT=${OBJROOT}
97export SYMROOT=${SYMROOT}
98export DSTROOT=${DSTROOT}
99export SDKROOT="macosx${CUROS}internal"
100export SEPARATE_STRIP="YES"
101export APPLEGLOT_CONTINUE_ON_ERROR=YES
102export CC_PRINT_OPTIONS="YES"
103#export CC_LOG_DIAGNOSTICS=1
104export DT_TOOLCHAIN_DIR="/Applications/Xcode.app/Contents/Developer/Toolchains/OSX${CUROS}.xctoolchain"
105export TERM="vt100"
106export UNAME_RELEASE="14.0"
107export UNAME_SYSNAME="Darwin"
108export USER="root"
109export USERNAME="root"
110export USE_PER_CONFIGURATION_BUILD_LOCATIONS="NO"
111export XBS_MORE_BUILD_FLAGS="-Wno-error=deprecated-declarations -Wno-error=#warnings"
112export XCODE_XCCONFIG_FILE="/usr/share/buildit/xcodeBuildSettingOverrides.xcconfig"
113export XTYPE_IGNORE_SERVER="1"
114export __CFPREFERENCES_AVOID_DAEMON="1"
115export __CF_USER_TEXT_ENCODING="0x0:0:0"
116export SHELL=/bin/sh
117export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
118export LIBDISPATCH_DISABLE_KWQ="1"
119export CCHROOT="${OBJROOT}/Caches"
120export INSTALLED_PRODUCT_ASIDES="YES"
121export INTERFACER_TRACE_INTERFACES="YES"
122export RC_ARCHS=${ARCH}
123export RC_BUILDIT="YES"
124export RC_DEBUG_OPTIONS="YES"
125export RC_FORCE_SSE3="YES"
126export RC_MAJOR_RELEASE_TRAIN="OSX"
127export RC_TRACE_ARCHIVES="YES"
128export RC_TRACE_DYLIBS="YES"
129export RC_XBS="YES"
130export REACH_SERVER="DO_NOT_TALK_WITH_REACH_SERVER"
131export SCDontUseServer="1"
132
133echo $SRCROOT
134
135if [ -f "${SRCROOT}/Makefile" -o -f "${SRCROOT}/makefile" -o -f "${SRCROOT}/GNUMakefile" ]; then
136	DSS_BUILD_PARALLEL=${USEPARALLEL} SHELL=/bin/sh SRCROOT="${SRCROOT}" OBJROOT="${OBJROOT}" SYMROOT="${SYMROOT}" DSTROOT="${DSTROOT}" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin" "/Applications/Xcode.app/Contents/Developer/usr/bin/make" -Wno-error=deprecated-declarations -Wno-error=#warnings -C "${SRCROOT}" "install" "SRCROOT=${SRCROOT}" "SDKROOT=${XXXSDKROOT}" "OBJROOT=${OBJROOT}" "SYMROOT=${SYMROOT}" "DSTROOT=${DSTROOT}" "MACOSX_DEPLOYMENT_TARGET=${CUROS}" "CCHROOT=${OBJROOT}/Caches" "RC_ProjectName=${PROJECT}" "RC_ProjectSourceVersion=${VERSION}" "RC_ProjectNameAndSourceVersion=${PROJECT}-${VERSION}" "RC_ProjectBuildVersion=1" "RC_ReleaseStatus=Development" "RC_CFLAGS=-arch ${ARCH} -pipe"  "RC_NONARCH_CFLAGS=-pipe" "RC_ARCHS=${ARCH}" "RC_${ARCH}=YES" "RC_RELEASE=${CURRELEASE}" "RC_OS=macos" "RC_XBS=YES" "RC_BUILDIT=YES" 2>&1 | tee "${BUILDDIR}/${PROJECT}/log"
137else
138	SAVEPWD=$PWD
139	cd "${SRCROOT}"
140	SHELL=/bin/sh SRCROOT="${SRCROOT}" OBJROOT="${OBJROOT}" SYMROOT="${SYMROOT}" DSTROOT="${DSTROOT}" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin" "/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild" "install" "SRCROOT=${SRCROOT}" "SDKROOT=${XXXSDKROOT}" "OBJROOT=${OBJROOT}" "SYMROOT=${SYMROOT}" "DSTROOT=${DSTROOT}" "MACOSX_DEPLOYMENT_TARGET=${CUROS}" "CCHROOT=${OBJROOT}/Caches" "RC_ProjectName=${PROJECT}" "RC_ProjectSourceVersion=${VERSION}" "RC_ProjectNameAndSourceVersion=${PROJECT}-${VERSION}" "RC_ProjectBuildVersion=1" "RC_ReleaseStatus=Development" "RC_CFLAGS=-arch ${ARCH} -pipe"  "RC_NONARCH_CFLAGS=-pipe" "RC_ARCHS=${ARCH}" "RC_${ARCH}=YES" "RC_RELEASE=${CURRELEASE}" "RC_OS=macos" "RC_XBS=YES" "RC_BUILDIT=YES" 2>&1 | tee "${BUILDDIR}/${PROJECT}/log"
141	cd "$SAVEPWD"
142fi
143if [ "${PIPESTATUS[0]}" == "0" -a "$USEDARWINUP" == "yes" ]; then
144	echo Installing ${DSTROOT} with darwinup
145	darwinup install "${DSTROOT}"
146fi
147