#!/bin/bash # See usage() below for the description. function usage() { cat </dev/stderr exit 1 } function warn() { # Only print something if not in show-deps mode if [[ -z $ONLY_SHOW_DEPS ]]; then echo "$*" fi } ## parse arguments while [ $# -gt 0 ]; do case "$1" in "-f" ) USE_COPY="1" ;; "-d" ) ONLY_SHOW_DEPS="1" ;; "-c" ) ONLY_COPY_DEPS="1" ;; * ) usage exit 2 esac shift done warn "## Running $0" if [[ "${HOST:0:6}" == "CYGWIN" || "$USE_MINGW" == "1" ]]; then # This is either Cygwin or Linux/Mingw cross-compiling to Windows. PLATFORM="windows-x86" if [[ "${HOST:0:6}" == "CYGWIN" ]]; then # We can't use symlinks under Cygwin USE_COPY="1" fi elif [[ "$HOST" == "Linux" ]]; then PLATFORM="linux-x86" elif [[ "$HOST" == "Darwin" ]]; then PLATFORM="darwin-x86" else die "Unsupported platform ($HOST). Aborting." fi if [[ "$USE_COPY" == "1" ]]; then function cpfile { # $1=source $2=dest cp -fv $1 $2/ } function cpdir() { # $1=source $2=dest rsync -avW --delete-after $1 $2 } else # computes the "reverse" path, e.g. "a/b/c" => "../../.." function back() { echo $1 | sed 's@[^/]*@..@g' } function cpfile { # $1=source $2=dest ln -svf `back $2`/$1 $2/ } function cpdir() { # $1=source $2=dest ln -svf `back $2`/$1 $2 } fi DEST="sdk/eclipse/scripts" set -e # fail early LIBS="" CP_FILES="" ### BASE ### BASE_PLUGIN_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.base/libs" BASE_PLUGIN_LIBS="common sdkstats sdklib dvlib layoutlib-api sdk-common" BASE_PLUGIN_PREBUILTS="\ prebuilts/tools/common/m2/repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar \ prebuilts/tools/common/m2/repository/org/apache/commons/commons-compress/1.0/commons-compress-1.0.jar \ prebuilts/tools/common/m2/repository/com/google/guava/guava/13.0.1/guava-13.0.1.jar \ prebuilts/tools/common/m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar \ prebuilts/tools/common/m2/repository/commons-codec/commons-codec/1.4/commons-codec-1.4.jar \ prebuilts/tools/common/m2/repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.jar \ prebuilts/tools/common/m2/repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1.jar \ prebuilts/tools/common/m2/repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1.jar \ prebuilts/tools/common/m2/repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.jar \ prebuilts/tools/common/m2/repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar" LIBS="$LIBS $BASE_PLUGIN_LIBS" CP_FILES="$CP_FILES @:$BASE_PLUGIN_DEST $BASE_PLUGIN_LIBS $BASE_PLUGIN_PREBUILTS" ### ADT ### ADT_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.adt/libs" ADT_LIBS="ant-glob asset-studio lint-api lint-checks ninepatch propertysheet rule-api sdkuilib swtmenubar manifest-merger" ADT_PREBUILTS="\ prebuilts/tools/common/freemarker/freemarker-2.3.19.jar \ prebuilts/tools/common/m2/repository/org/ow2/asm/asm/4.0/asm-4.0.jar \ prebuilts/tools/common/m2/repository/org/ow2/asm/asm-tree/4.0/asm-tree-4.0.jar \ prebuilts/tools/common/m2/repository/org/ow2/asm/asm-analysis/4.0/asm-analysis-4.0.jar \ prebuilts/tools/common/lombok-ast/lombok-ast-0.2.jar" LIBS="$LIBS $ADT_LIBS" CP_FILES="$CP_FILES @:$ADT_DEST $ADT_LIBS $ADT_PREBUILTS" ### DDMS ### DDMS_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.ddms/libs" DDMS_LIBS="ddmlib ddmuilib swtmenubar uiautomatorviewer" DDMS_PREBUILTS="\ prebuilts/tools/common/m2/repository/jfree/jcommon/1.0.12/jcommon-1.0.12.jar \ prebuilts/tools/common/m2/repository/jfree/jfreechart/1.0.9/jfreechart-1.0.9.jar \ prebuilts/tools/common/m2/repository/jfree/jfreechart-swt/1.0.9/jfreechart-swt-1.0.9.jar" LIBS="$LIBS $DDMS_LIBS" CP_FILES="$CP_FILES @:$DDMS_DEST $DDMS_LIBS $DDMS_PREBUILTS" ### TEST ### TEST_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.tests" TEST_LIBS="easymock sdktestutils" TEST_PREBUILTS="prebuilts/tools/common/m2/repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar" LIBS="$LIBS $TEST_LIBS" CP_FILES="$CP_FILES @:$TEST_DEST $TEST_LIBS $TEST_PREBUILTS" ### BRIDGE ### if [[ $PLATFORM != "windows-x86" ]]; then # We can't build enough of the platform on Cygwin to create layoutlib BRIDGE_LIBS="layoutlib ninepatch" LIBS="$LIBS $BRIDGE_LIBS" fi ### HIERARCHYVIEWER ### HV_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.hierarchyviewer/libs" HV_LIBS="hierarchyviewer2lib swtmenubar" LIBS="$LIBS $HV_LIBS" CP_FILES="$CP_FILES @:$HV_DEST $HV_LIBS" ### TRACEVIEW ### TV_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.traceview/libs" TV_LIBS="traceview" LIBS="$LIBS $TV_LIBS" CP_FILES="$CP_FILES @:$TV_DEST $TV_LIBS" ### MONITOR ### MONITOR_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.monitor/libs" MONITOR_LIBS="sdkuilib" LIBS="$LIBS $MONITOR_LIBS" CP_FILES="$CP_FILES @:$MONITOR_DEST $MONITOR_LIBS" ### SDKMANAGER ### SDKMAN_LIBS="swtmenubar" LIBS="$LIBS $SDKMAN_LIBS" ### GL DEBUGGER ### if [[ $PLATFORM != "windows-x86" ]]; then # liblzf doesn't build under cygwin. If necessary, this should be fixed first. GLD_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.gldebugger/libs" GLD_LIBS="host-libprotobuf-java-2.3.0-lite liblzf" LIBS="$LIBS $GLD_LIBS" CP_FILES="$CP_FILES @:$GLD_DEST $GLD_LIBS" fi # If some of the libs are available in prebuilts/devtools, use link to them directly # instead of trying to rebuild them so remove them from the libs to build. Note that # they are already listed in CP_FILES so we'll adjust the source to copy later. LIBS2="" for LIB in $LIBS; do J="prebuilts/devtools/tools/lib/$LIB.jar" if [[ ! -f $J ]]; then J="prebuilts/devtools/adt/lib/$LIB.jar" fi if [[ -f $J ]]; then warn "## Using existing $J" else LIBS2="$LIBS2 $LIB" fi done LIBS="$LIBS2" unset LIBS2 # In the mode to only echo dependencies, output them and we're done if [[ -n $ONLY_SHOW_DEPS ]]; then echo $LIBS exit 0 fi if [[ -z $ONLY_COPY_DEPS ]]; then # Make sure we have lunch sdk- if [[ ! "$TARGET_PRODUCT" ]]; then warn "## TARGET_PRODUCT is not set, running build/envsetup.sh" . build/envsetup.sh warn "## lunch sdk-eng" lunch sdk-eng fi # Run make on all libs J="4" [[ $(uname) == "Darwin" ]] && J=$(sysctl hw.ncpu | cut -d : -f 2 | tr -d ' ') [[ $(uname) == "Linux" ]] && J=$(cat /proc/cpuinfo | grep processor | wc -l) warn "## Building libs: make -j$J $LIBS" make -j${J} $LIBS fi # Copy resulting files DEST="" for SRC in $CP_FILES; do if [[ "${SRC:0:2}" == "@:" ]]; then DEST="${SRC:2}" mkdir -vp "$DEST" continue fi if [[ ! -f "$SRC" ]]; then ORIG_SRC="$SRC" # Take a prebuilts/devtools instead of a framework one if possible. SRC="prebuilts/devtools/tools/lib/$SRC.jar" if [[ ! -f "$SRC" ]]; then SRC="prebuilts/devtools/adt/lib/$ORIG_SRC.jar" fi if [[ ! -f "$SRC" ]]; then SRC="out/host/$PLATFORM/framework/$ORIG_SRC.jar" fi fi if [[ -f "$SRC" ]]; then if [[ ! -d "$DEST" ]]; then die "Invalid cp_file dest directory: $DEST" fi cpfile "$SRC" "$DEST" else die "## Unknown source '$ORIG_SRC' to copy in '$DEST'" fi done # OS-specific post operations if [ "${HOST:0:6}" == "CYGWIN" ]; then chmod -v a+rx "$ADT_DEST"/*.jar fi echo "### $0 done"