Skip to content

Commit

Permalink
[jenkins] - welcome jenkins support for osx/ios/atv2/android to mainl…
Browse files Browse the repository at this point in the history
…ine :o) - add buildsteps for usage with jenkins
  • Loading branch information
Memphiz committed Mar 26, 2013
1 parent 16c7ddf commit 6db72f9
Show file tree
Hide file tree
Showing 37 changed files with 448 additions and 0 deletions.
15 changes: 15 additions & 0 deletions tools/buildsteps/README
@@ -0,0 +1,15 @@
This folder holds all the platform dependend build scripts which are called from the jenkins buildserver.

The following ENV variables are available on all scripts:

$WORKSPACE - the folder where jenkins checked out the source - XBMC_HOME so to say
$Configuration - its either Debug, Release or Default and should be taken into account if possible (Defaults select platform default from <platformdir>/startbuild)
$SDK_VERSION - the requested SDK_VERSION to be used for building. If "Default" is passed it uses the platform default from <platformdir>/startbuild
$BUILDTHREADS - number of threads which can be used when building (e.x. use it for make -j$BUILDTHREADS)
$XBMC_DEPENDS_ROOT - root for installing the xbmc build depends and toolchain helpers. If "Default" is passed it uses the platform default from <platformdir>/startbuild

Additional ENV variables might be specified by the buildnodes. For android buildslaves these are:

TOOLCHAIN - the used toolchain dir
NDK_PATH - the path to the android native ndk
SDK_PATH - the path to the android sdk
15 changes: 15 additions & 0 deletions tools/buildsteps/android/configure-depends
@@ -0,0 +1,15 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=android
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;./configure \
--with-tarballs=/opt/xbmc-tarballs \
--host=arm-linux-androideabi \
--with-sdk-path=$SDK_PATH \
--with-ndk=$NDK_PATH \
--with-sdk=android-$SDK_VERSION \
--with-toolchain=$TOOLCHAIN \
--prefix=$XBMC_DEPENDS_ROOT
fi
5 changes: 5 additions & 0 deletions tools/buildsteps/android/configure-xbmc
@@ -0,0 +1,5 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=android
. $WORKSPACE/tools/buildsteps/defaultenv

make -C $WORKSPACE/tools/depends/target/xbmc
9 changes: 9 additions & 0 deletions tools/buildsteps/android/make-depends
@@ -0,0 +1,9 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=android
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;make -j $BUILDTHREADS && tagSuccessFulBuild .
fi

5 changes: 5 additions & 0 deletions tools/buildsteps/android/make-xbmc
@@ -0,0 +1,5 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=android
. $WORKSPACE/tools/buildsteps/defaultenv

cd $WORKSPACE;make -j$BUILDTHREADS
10 changes: 10 additions & 0 deletions tools/buildsteps/android/package
@@ -0,0 +1,10 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=android
. $WORKSPACE/tools/buildsteps/defaultenv

cd $WORKSPACE;make apk

#rename for upload
#e.x. xbmc-20130314-8c2fb31-Frodo-armeabi-v7a.apk
UPLOAD_FILENAME="xbmc-$(getBuildRevDateStr)-armeabi-v7a.apk"
mv xbmcapp-armeabi-*.apk $UPLOAD_FILENAME
13 changes: 13 additions & 0 deletions tools/buildsteps/android/prepare-depends
@@ -0,0 +1,13 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=android
. $WORKSPACE/tools/buildsteps/defaultenv

#clean without depends for skipping depends build if possible
cd $WORKSPACE;git clean -xfd -e "tools/depends"

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
#clean up the rest too
cd $WORKSPACE;git clean -xfd
cd $WORKSPACE/tools/depends/;./bootstrap
fi
5 changes: 5 additions & 0 deletions tools/buildsteps/android/prepare-xbmc
@@ -0,0 +1,5 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=android
. $WORKSPACE/tools/buildsteps/defaultenv

#nothing on android
13 changes: 13 additions & 0 deletions tools/buildsteps/atv2/configure-depends
@@ -0,0 +1,13 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=atv2
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;./configure \
--with-tarballs=/Users/Shared/xbmc-depends/tarballs \
--host=arm-apple-darwin \
--with-sdk=$SDK_VERSION \
--prefix=$XBMC_DEPENDS_ROOT
fi

5 changes: 5 additions & 0 deletions tools/buildsteps/atv2/configure-xbmc
@@ -0,0 +1,5 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=atv2
. $WORKSPACE/tools/buildsteps/defaultenv

make -C $WORKSPACE/tools/depends/target/xbmc
9 changes: 9 additions & 0 deletions tools/buildsteps/atv2/make-depends
@@ -0,0 +1,9 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=atv2
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;make -j $BUILDTHREADS && tagSuccessFulBuild .
fi

8 changes: 8 additions & 0 deletions tools/buildsteps/atv2/make-xbmc
@@ -0,0 +1,8 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=atv2
. $WORKSPACE/tools/buildsteps/defaultenv

cd $WORKSPACE;make -j$BUILDTHREADS xcode_depends
cd $WORKSPACE;xcodebuild -project XBMC-ATV2.xcodeproj -target XBMC -configuration $Configuration build \
ONLY_ACTIVE_ARCH=YES ARCHS=armv7 VALID_ARCHS=armv7 IPHONEOS_DEPLOYMENT_TARGET=4.1 \
SDKROOT=iphoneos$SDK_VERSION XBMC_DEPENDS_ROOT=$XBMC_DEPENDS_ROOT
13 changes: 13 additions & 0 deletions tools/buildsteps/atv2/package
@@ -0,0 +1,13 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=atv2
. $WORKSPACE/tools/buildsteps/defaultenv

#ensure that dpkg tools are used from our toolchain
export PATH=$XBMC_DEPENDS_ROOT/buildtools-native/bin/:$PATH

cd $WORKSPACE/tools/darwin/packaging/xbmc-atv2/;./mkdeb-xbmc-atv2.sh $Configuration

#rename for upload
#e.x. xbmc-20130314-8c2fb31-Frodo-atv2.deb
UPLOAD_FILENAME="xbmc-$(getBuildRevDateStr)-atv2.deb"
mv *.deb $UPLOAD_FILENAME
14 changes: 14 additions & 0 deletions tools/buildsteps/atv2/prepare-depends
@@ -0,0 +1,14 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=atv2
. $WORKSPACE/tools/buildsteps/defaultenv

#clean without depends for skipping depends build if possible
cd $WORKSPACE;git clean -xfd -e "tools/depends"

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
#clean up the rest too
cd $WORKSPACE;git clean -xfd
cd $WORKSPACE/tools/depends/;./bootstrap
fi

6 changes: 6 additions & 0 deletions tools/buildsteps/atv2/prepare-xbmc
@@ -0,0 +1,6 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=atv2
. $WORKSPACE/tools/buildsteps/defaultenv

#nothing on ios

112 changes: 112 additions & 0 deletions tools/buildsteps/defaultenv
@@ -0,0 +1,112 @@
BUILDTHREADS=${BUILDTHREADS:-1}
SDK_VERSION=${SDK_VERSION:-"Default"}
Configuration=${Configuration:-"Default"}
XBMC_DEPENDS_ROOT=${XBMC_DEPENDS_ROOT:-"Default"}
PATH_CHANGE_REV_FILENAME=".last_success_revision"

#set platform defaults
#$XBMC_PLATFORM_DIR matches the platform subdirs!
case $XBMC_PLATFORM_DIR in
atv2)
DEFAULT_SDK_VERSION=4.2
DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
DEFAULT_CONFIGURATION="Debug"
;;

ios)
DEFAULT_SDK_VERSION=4.2
DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
DEFAULT_CONFIGURATION="Debug"
;;

osx32)
DEFAULT_SDK_VERSION=10.8
DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
DEFAULT_CONFIGURATION="Debug"
;;

osx64)
DEFAULT_SDK_VERSION=10.8
DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
DEFAULT_CONFIGURATION="Debug"
;;
android)
DEFAULT_SDK_VERSION=10
DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
DEFAULT_CONFIGURATION="Debug"
esac

if [ $SDK_VERSION == "Default" ]
then
SDK_VERSION=$DEFAULT_SDK_VERSION
fi

if [ $XBMC_DEPENDS_ROOT == "Default" ]
then
XBMC_DEPENDS_ROOT=$DEFAULT_XBMC_DEPENDS_ROOT
fi

if [ $Configuration == "Default" ]
then
Configuration=$DEFAULT_CONFIGURATION
fi

#clamp release builds to 1 thread only
if [ $Configuration == "Release" ]
then
BUILDTHREADS=1
fi

#helper functions

#hash a dir based on the git revision, SDK_PATH, NDK_PATH, SDK_VERSION, TOOLCHAIN and XBMC_DEPENDS_ROOT
function getBuildHash ()
{
local checkPath
checkPath="$1"
local hashStr
hashStr="$(git rev-list HEAD --max-count=1 -- $checkPath)"
hashStr="$hashStr $SDK_PATH $NDK_PATH $SDK_VERSION $TOOLCHAIN $XBMC_DEPENDS_ROOT"
echo $hashStr
}

function pathChanged ()
{
local ret
local checkPath
ret="0"
#no optims in release builds!
if [ $Configuration == "Release" ]
then
echo "1"
return
fi

checkPath="$1"
if [ -e $checkPath/$PATH_CHANGE_REV_FILENAME ]
then
if [ "$(cat $checkPath/$PATH_CHANGE_REV_FILENAME)" != "$(getBuildHash $WORKSPACE/tools/depends)" ]
then
ret="1"
fi
else
ret="1"
fi

echo $ret
}

function tagSuccessFulBuild ()
{
local checkPath
checkPath="$1"
echo "$(getBuildHash $checkPath)" > $checkPath/$PATH_CHANGE_REV_FILENAME
}

function getBuildRevDateStr ()
{
git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | awk '{gsub("-", "");print $2"-"$1}' 2>/dev/null
if [ "$?" != "0" ]; then
echo "Unknown"
fi
}
12 changes: 12 additions & 0 deletions tools/buildsteps/ios/configure-depends
@@ -0,0 +1,12 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=ios
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;./configure \
--with-tarballs=/Users/Shared/xbmc-depends/tarballs \
--host=arm-apple-darwin \
--with-sdk=$SDK_VERSION \
--prefix=$XBMC_DEPENDS_ROOT
fi
5 changes: 5 additions & 0 deletions tools/buildsteps/ios/configure-xbmc
@@ -0,0 +1,5 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=ios
. $WORKSPACE/tools/buildsteps/defaultenv

make -C $WORKSPACE/tools/depends/target/xbmc
9 changes: 9 additions & 0 deletions tools/buildsteps/ios/make-depends
@@ -0,0 +1,9 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=ios
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;make -j $BUILDTHREADS && tagSuccessFulBuild .
fi

9 changes: 9 additions & 0 deletions tools/buildsteps/ios/make-xbmc
@@ -0,0 +1,9 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=ios
. $WORKSPACE/tools/buildsteps/defaultenv

cd $WORKSPACE;make -j$BUILDTHREADS xcode_depends
cd $WORKSPACE;xcodebuild -project XBMC-IOS.xcodeproj -target XBMC -configuration $Configuration build \
ONLY_ACTIVE_ARCH=YES ARCHS=armv7 VALID_ARCHS=armv7 IPHONEOS_DEPLOYMENT_TARGET=4.1 \
SDKROOT=iphoneos$SDK_VERSION XBMC_DEPENDS_ROOT=$XBMC_DEPENDS_ROOT

13 changes: 13 additions & 0 deletions tools/buildsteps/ios/package
@@ -0,0 +1,13 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=ios
. $WORKSPACE/tools/buildsteps/defaultenv

#ensure that dpkg tools are used from our toolchain
export PATH=$XBMC_DEPENDS_ROOT/buildtools-native/bin/:$PATH

cd $WORKSPACE/tools/darwin/packaging/xbmc-ios/;./mkdeb-xbmc-ios.sh $Configuration

#rename for upload
#e.x. xbmc-20130314-8c2fb31-Frodo-ios.deb
UPLOAD_FILENAME="xbmc-$(getBuildRevDateStr)-ios.deb"
mv *.deb $UPLOAD_FILENAME
13 changes: 13 additions & 0 deletions tools/buildsteps/ios/prepare-depends
@@ -0,0 +1,13 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=ios
. $WORKSPACE/tools/buildsteps/defaultenv

#clean without depends for skipping depends build if possible
cd $WORKSPACE;git clean -xfd -e "tools/depends"

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
#clean up the rest too
cd $WORKSPACE;git clean -xfd
cd $WORKSPACE/tools/depends/;./bootstrap
fi
6 changes: 6 additions & 0 deletions tools/buildsteps/ios/prepare-xbmc
@@ -0,0 +1,6 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=ios
. $WORKSPACE/tools/buildsteps/defaultenv

#nothing on ios

12 changes: 12 additions & 0 deletions tools/buildsteps/osx32/configure-depends
@@ -0,0 +1,12 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=osx32
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;./configure \
--with-tarballs=/Users/Shared/xbmc-depends/tarballs \
--host=i386-apple-darwin \
--with-sdk=$SDK_VERSION \
--prefix=$XBMC_DEPENDS_ROOT
fi
5 changes: 5 additions & 0 deletions tools/buildsteps/osx32/configure-xbmc
@@ -0,0 +1,5 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=osx32
. $WORKSPACE/tools/buildsteps/defaultenv

make -C $WORKSPACE/tools/depends/target/xbmc
9 changes: 9 additions & 0 deletions tools/buildsteps/osx32/make-depends
@@ -0,0 +1,9 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=osx32
. $WORKSPACE/tools/buildsteps/defaultenv

if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
then
cd $WORKSPACE/tools/depends;make -j $BUILDTHREADS && tagSuccessFulBuild .
fi

8 changes: 8 additions & 0 deletions tools/buildsteps/osx32/make-xbmc
@@ -0,0 +1,8 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=osx32
. $WORKSPACE/tools/buildsteps/defaultenv

cd $WORKSPACE;make -j$BUILDTHREADS xcode_depends

cd $WORKSPACE;xcodebuild -sdk macosx$SDK_VERSION -project XBMC.xcodeproj -target XBMC.app ONLY_ACTIVE_ARCH=YES \
ARCHS=i386 VALID_ARCHS=i386 XBMC_DEPENDS_ROOT=$XBMC_DEPENDS_ROOT -configuration $Configuration build
10 changes: 10 additions & 0 deletions tools/buildsteps/osx32/package
@@ -0,0 +1,10 @@
WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
XBMC_PLATFORM_DIR=osx32
. $WORKSPACE/tools/buildsteps/defaultenv

cd $WORKSPACE/tools/darwin/packaging/xbmc-osx/;./mkdmg-xbmc-osx.sh $Configuration

#rename for upload
#e.x. xbmc-20130314-8c2fb31-Frodo-i386.dmg
UPLOAD_FILENAME="xbmc-$(getBuildRevDateStr)-i386.dmg"
mv *.dmg $UPLOAD_FILENAME

0 comments on commit 6db72f9

Please sign in to comment.