- job:
    name: lt-qcom-debian-images
    project-type: freestyle
    defaults: global
    logrotate:
        daysToKeep: 30
        numToKeep: 30
    properties:
        - authorization:
            anonymous:
                - job-read
                - job-extended-read
                - job-workspace
            linaro-landing-team-qualcomm-personnel:
                - job-build
                - job-cancel
    parameters:
        - string:
            name: DEVICE_TYPE
            default: 'ifc6410'
        - string:
            name: VENDOR
            default: 'linaro'
        - string:
            name: OS_FLAVOUR
            default: 'jessie'
        - string:
            name: EXT4FS_IMG_SZ
            default: '2G'
        - string:
            name: PLATFORM_ARCH
            default: 'armhf'
        - string:
            name: PLATFORM_NAME
            default: 'qcom-snapdragon'
        - string:
            name: ROOTFS
            default: 'developer alip'
        - string:
            name: DTBS
            default: 'qcom-apq8064-ifc6410.dtb qcom-apq8064-cm-qs600.dtb qcom-apq8064-eI_ERAGON600.dtb'
        - string:
            name: SERIAL_CONSOLE
            default: 'ttyMSM0'
        - string:
            name: KERNEL_BRANCH
            default: 'release/qcomlt-4.4'
    disabled: false
    display-name: 'Qualcomm Debian based images for Snapdragon 600'
    scm:
        - git:
            url: https://git.linaro.org/landing-teams/working/qualcomm/kernel.git
            refspec: +refs/heads/${KERNEL_BRANCH}:refs/remotes/origin/${KERNEL_BRANCH}
            name: origin
            branches:
                - refs/heads/${KERNEL_BRANCH}
            skip-tag: true
            shallow-clone: true
            wipe-workspace: false
    wrappers:
        - timestamps
        - build-name:
            name: '#${BUILD_NUMBER}-${GIT_REVISION,length=8}'
    builders:
        - shell: |
            #!/bin/bash

            set -ex

            trap cleanup_exit INT TERM EXIT

            cleanup_exit()
            {
              cd ${WORKSPACE}
              sudo kpartx -dv out/${VENDOR}-${OS_FLAVOUR}-*.sd.img || true
              rm -rf lci-build-tools
              rm -rf builddir*
              rm -rf out
              rm -rf qcom-firmware
              git clean -fdx
            }

            sudo sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
            sudo apt-get update
            sudo apt-get install -y kpartx python-pycurl device-tree-compiler zip
            wget -q \
              http://repo.linaro.org/ubuntu/linaro-overlay/pool/main/a/android-tools/android-tools-fsutils_4.2.2+git20130218-3ubuntu41+linaro1_amd64.deb \
              http://repo.linaro.org/ubuntu/linaro-tools/pool/main/l/linaro-image-tools/linaro-image-tools_2015.11-1.linarojessie.1_amd64.deb \
              http://repo.linaro.org/ubuntu/linaro-tools/pool/main/l/linaro-image-tools/python-linaro-image-tools_2015.11-1.linarojessie.1_all.deb
            sudo dpkg -i --force-all *.deb
            rm -f *.deb

            export LANG=C
            export make_bootwrapper=false
            export make_install=true
            export kernel_flavour=lt-qcom
            export kernel_config="qcom_defconfig distro.config"
            export MAKE_DTBS=true
            export tcbindir="${HOME}/srv/toolchain/arm-tc-14.04/bin"
            export toolchain_url=http://releases.linaro.org/14.04/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz

            test -d lci-build-tools || git clone https://git.linaro.org/git/ci/lci-build-tools.git lci-build-tools
            bash -x lci-build-tools/jenkins_kernel_build_inst

            # Create the hardware pack
            cat << EOF > ${VENDOR}-lt-qcom.default
            format: '3.0'
            name: ${VENDOR}-lt-qcom
            architectures:
            - ${PLATFORM_ARCH}
            origin: Linaro
            maintainer: Linaro Platform <linaro-dev@lists.linaro.org>
            support: supported
            serial_tty: ${SERIAL_CONSOLE}
            kernel_addr: '0x80208000'
            initrd_addr: '0x83000000'
            load_addr: '0x60008000'
            dtb_addr: '0x61000000'
            partition_layout: bootfs_rootfs
            mmc_id: '0:1'
            kernel_file: boot/vmlinuz-*-qcom
            initrd_file: boot/initrd.img-*-qcom
            dtb_file: lib/firmware/*-qcom/device-tree/qcom-apq8064-ifc6410.dtb
            dtb_files:
            - qcom-apq8064-ifc6410.dtb: lib/firmware/*-qcom/device-tree/qcom-apq8064-ifc6410.dtb
            - qcom-apq8064-cm-qs600.dtb: lib/firmware/*-qcom/device-tree/qcom-apq8064-cm-qs600.dtb
            - qcom-apq8064-eI_ERAGON600.dtb: lib/firmware/*-qcom/device-tree/qcom-apq8064-eI_ERAGON600.dtb
            boot_script: boot.scr
            boot_min_size: 64
            extra_serial_options:
            - console=tty0
            - console=${SERIAL_CONSOLE},115200n8
            assume_installed:
            - adduser
            - apt
            - apt-utils
            - debconf-i18n
            - debian-archive-keyring
            - gcc-4.8
            - gnupg
            - ifupdown
            - initramfs-tools
            - iproute2
            - irqbalance
            - isc-dhcp-client
            - kmod
            - netbase
            - udev
            sources:
              qcom: http://repo.linaro.org/ubuntu/qcom-overlay ${OS_FLAVOUR} main
              repo: http://repo.linaro.org/ubuntu/linaro-overlay ${OS_FLAVOUR} main
              debian: http://ftp.debian.org/debian/ ${OS_FLAVOUR} main contrib non-free
            packages:
            - linux-image-armmp
            - linux-headers-armmp
            - libasound2
            EOF

            # Build information
            cat > out/README.textile << EOF

            h4. QCOM Landing Team - Snapdragon 600 - Debian

            Build description:
            * Build URL: "$BUILD_URL":$BUILD_URL
            * OS flavour: $OS_FLAVOUR
            * Kernel tree: "$GIT_URL":$GIT_URL
            * Kernel branch: $KERNEL_BRANCH
            * Kernel version: "$GIT_COMMIT":$GIT_URL/commit/$GIT_COMMIT
            * Kernel defconfig: $kernel_config
            EOF

            for rootfs in ${ROOTFS}; do

              cat ${VENDOR}-lt-qcom.default > ${VENDOR}-lt-qcom

              # additional packages in desktop images
              [ "${rootfs}" != "developer" ] && cat << EOF >> ${VENDOR}-lt-qcom
            - libdrm2
            - libdrm-freedreno1
            - libdrm-nouveau2
            - libdrm-radeon1
            - libegl1-mesa
            - libegl1-mesa-drivers
            - libgbm1
            - libgl1-mesa-dri
            - libgl1-mesa-glx
            - libglapi-mesa
            - libgles1-mesa
            - libgles2-mesa
            - libosmesa6
            - libwayland-egl1-mesa
            - libxatracker2
            - xserver-xorg-video-freedreno
            - mesa-utils
            EOF

              rm -f `ls hwpack_${VENDOR}-lt-qcom_*_${PLATFORM_ARCH}_supported.tar.gz`
              VERSION=`date +%Y%m%d`-${BUILD_NUMBER}
              linaro-hwpack-create --debug ${VENDOR}-lt-qcom ${VERSION}
              linaro-hwpack-replace -t `ls hwpack_${VENDOR}-lt-qcom_*_${PLATFORM_ARCH}_supported.tar.gz` -p `ls linux-image-*-${VENDOR}-lt-qcom_*.deb` -r linux-image -d -i
              linaro-hwpack-replace -t `ls hwpack_${VENDOR}-lt-qcom_*_${PLATFORM_ARCH}_supported.tar.gz` -p `ls linux-headers-*-${VENDOR}-lt-qcom_*.deb` -r linux-headers -d -i

              # Get rootfs
              export ROOTFS_BUILD_NUMBER=`wget -q --no-check-certificate -O - https://ci.linaro.org/jenkins/job/debian-${PLATFORM_ARCH}-rootfs/label=docker-jessie-${PLATFORM_ARCH},rootfs=${rootfs}/lastSuccessfulBuild/buildNumber`
              export ROOTFS_BUILD_TIMESTAMP=`wget -q --no-check-certificate -O - https://ci.linaro.org/jenkins/job/debian-${PLATFORM_ARCH}-rootfs/label=docker-jessie-${PLATFORM_ARCH},rootfs=${rootfs}/lastSuccessfulBuild/buildTimestamp?format=yyyyMMdd`
              export ROOTFS_BUILD_URL="http://snapshots.linaro.org/debian/images/${rootfs}-${PLATFORM_ARCH}/${ROOTFS_BUILD_NUMBER}/linaro-${OS_FLAVOUR}-${rootfs}-${ROOTFS_BUILD_TIMESTAMP}-${ROOTFS_BUILD_NUMBER}.tar.gz"
              wget --progress=dot -e dotbytes=2M ${ROOTFS_BUILD_URL}

              # Create pre-built image(s)
              linaro-media-create --dev fastmodel --output-directory ${WORKSPACE}/out --image-file ${VENDOR}-${OS_FLAVOUR}-${rootfs}-${PLATFORM_NAME}-${VERSION}.sd.img --image-size 2G --binary linaro-${OS_FLAVOUR}-${rootfs}-${ROOTFS_BUILD_TIMESTAMP}-${ROOTFS_BUILD_NUMBER}.tar.gz --hwpack hwpack_${VENDOR}-lt-qcom_*.tar.gz --hwpack-force-yes --bootloader uefi

              # Create eMMC rootfs image(s)
              mkdir rootfs
              for device in $(sudo kpartx -av out/${VENDOR}-${OS_FLAVOUR}-${rootfs}-${PLATFORM_NAME}-${VERSION}.sd.img | cut -d' ' -f3); do
                partition=$(echo ${device} | cut -d'p' -f3)
                [ "${partition}" = "2" ] && sudo mount -o loop /dev/mapper/${device} rootfs
              done

              sudo rm -rf rootfs/dev rootfs/boot rootfs/var/lib/apt/lists
              sudo mkdir rootfs/dev rootfs/boot rootfs/var/lib/apt/lists

              # clean up fstab
              sudo sed -i '/UUID/d' rootfs/etc/fstab

              cat << EOF | sudo tee -a rootfs/etc/fstab
            LABEL=qcom-firmware /lib/firmware ext4 defaults 0 0
            EOF

              sudo make_ext4fs -o -L rootfs -l ${EXT4FS_IMG_SZ} -s out/${VENDOR}-${OS_FLAVOUR}-${rootfs}-${PLATFORM_NAME}-${VERSION}.img rootfs/
              sudo umount rootfs
              sudo kpartx -dv out/${VENDOR}-${OS_FLAVOUR}-${rootfs}-${PLATFORM_NAME}-${VERSION}.sd.img
              sudo rm -rf rootfs out/${VENDOR}-${OS_FLAVOUR}-${rootfs}-${PLATFORM_NAME}-${VERSION}.sd.img

              # Compress image(s)
              gzip -9 out/${VENDOR}-${OS_FLAVOUR}-${rootfs}-${PLATFORM_NAME}-${VERSION}.img

              cat >> out/README.textile << EOF
            * Linaro Debian ${rootfs}: "http://snapshots.linaro.org/debian/images/${rootfs}-${PLATFORM_ARCH}/${ROOTFS_BUILD_NUMBER}":http://snapshots.linaro.org/debian/images/${rootfs}-${PLATFORM_ARCH}/${ROOTFS_BUILD_NUMBER}
            EOF
            done

            # Create boot image(s)
            cat > out/bootimg.cfg << EOF
            bootsize = 0xA00000
            pagesize = 0x800
            kerneladdr = 0x80208000
            ramdiskaddr = 0x83000000
            secondaddr = 0x81100000
            tagsaddr = 0x80200100
            name = ${VENDOR}-${PLATFORM_NAME}
            cmdline = console=tty0 console=${SERIAL_CONSOLE},115200n8 root=/dev/disk/by-partlabel/userdata rootwait rw systemd.unit=multi-user.target
            EOF

            # Create one boot image for each platform supported, since we need to append DTB to zImage
            for f in ${DTBS} ; do
              mv out/dtbs/${f} out/
              target=`basename ${f} .dtb`
              cat out/zImage out/${f} > zImage-dtb
              abootimg --create out/boot-${target}-${PLATFORM_NAME}-${VERSION}.img -f out/bootimg.cfg -k zImage-dtb -r out/initrd.img-*
              gzip -9 out/boot-${target}-${PLATFORM_NAME}-${VERSION}.img
            done
            rm -rf out/dtbs

            # Create an empty partition, placeholder for proprietary firmware
            # do no create sparse file, so that the file can be easily loop mounted
            mkdir qcom-firmware
            sudo make_ext4fs -L qcom-firmware -l 64M out/firmware-${PLATFORM_NAME}-${VERSION}.img qcom-firmware/
            rm -rf qcom-firmware
            gzip -9 out/firmware-${PLATFORM_NAME}-${VERSION}.img

            # Final preparation for publishing
            cp -a linux-*.deb out/
            rm -f out/vmlinuz

            # Create MD5SUMS file
            (cd out && md5sum * > MD5SUMS.txt)
    publishers:
        - email:
            recipients: 'aaronngray@gmail.com'
