# "MokoMakefile" - a Makefile for setting up Openmoko builds # # Copyright (c) 2007 Rod Whitby # All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 as published by the Free Software Foundation. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA MKDOSFS := /sbin/mkdosfs OM_GIT_SITE := git.openmoko.org OM_GIT_REPO := git/openmoko.git OM_GIT_BRANCH := org.openmoko.asu.stable OM_IMAGE_NAME := openmoko-asu-image # OM_GIT_BRANCH := org.openmoko.dev # OM_IMAGE_NAME := openmoko-base-image BB_GIT_SITE := git.openmoko.org BB_GIT_BRANCH := bitbake-om MM_SVN_SITE := svn.projects.openmoko.org MM_SVN_PATH := svnroot/mokomakefile/trunk .PHONY: all all: ${OM_IMAGE_NAME} \ build-qemu \ openmoko-feed openmoko-toolchain \ openmoko-devel-tools .PHONY: image image: ${OM_IMAGE_NAME} .PHONY: tools tools: openmoko-devel-tools .PHONY: feed feed: openmoko-feed .PHONY: toolchain toolchain: openmoko-toolchain .PHONY: force-rebuild force-rebuild: find build/tmp/work -name "*+svn*" -type d -print | \ xargs /bin/rm -rf find build/tmp/stamps -name "*+svn*" -type f -print | \ xargs /bin/rm -f .PHONY: setup setup: setup-bitbake setup-openembedded setup-openmoko \ setup-config setup-env .PHONY: update update: update-bitbake update-openembedded update-openmoko .PHONY: setup-bitbake setup-bitbake stamps/bitbake: ( [ -e stamps/bitbake ] && \ [ -e bitbake/.git ] ) || \ ( git clone -n git://${BB_GIT_SITE}/git/bitbake.git bitbake ) ( cd bitbake && \ ( git branch | egrep -e ' ${BB_GIT_BRANCH}$$' > /dev/null || \ git checkout -b ${BB_GIT_BRANCH} --track origin/${BB_GIT_BRANCH} )) ( cd bitbake && git checkout ${BB_GIT_BRANCH} ) [ -d stamps ] || mkdir stamps touch stamps/bitbake .PHONY: setup-openembedded setup-openembedded stamps/openembedded: ( [ -e stamps/openembedded ] && \ [ -e openembedded/.git ] ) || \ ( git clone -n git://${OM_GIT_SITE}/${OM_GIT_REPO} openembedded ) ( cd openembedded && \ ( git branch | egrep -e ' ${OM_GIT_BRANCH}$$' > /dev/null || \ git checkout -b ${OM_GIT_BRANCH} --track origin/${OM_GIT_BRANCH} )) ( cd openembedded && git checkout ${OM_GIT_BRANCH} ) [ -d stamps ] || mkdir stamps touch stamps/openembedded .PHONY: setup-openmoko-developer setup-openmoko-developer: [ ! -e openmoko ] || ( mv openmoko openmoko-user ) [ -e openmoko ] || ( mkdir openmoko ) [ -e stamps/openmoko ] || [ -e openmoko/trunk/.svn/entries ] || \ ( cd openmoko && svn co https://svn.openmoko.org/trunk ) [ -e stamps/openmoko ] || [ -e openmoko/developers/.svn/entries ] || \ ( cd openmoko && svn co https://svn.openmoko.org/developers ) [ -d stamps ] || mkdir stamps touch stamps/openmoko .PHONY: setup-openmoko setup-openmoko stamps/openmoko: [ -e openmoko ] || ( mkdir openmoko ) [ -e stamps/openmoko ] || [ -e openmoko/trunk/.svn/entries ] || \ ( cd openmoko && svn co http://svn.openmoko.org/trunk ) [ -e stamps/openmoko ] || [ -e openmoko/developers/.svn/entries ] || \ ( cd openmoko && svn co http://svn.openmoko.org/developers ) [ -d stamps ] || mkdir stamps touch stamps/openmoko .PHONY: setup-config setup-config build/conf/local.conf: mkdir -p build/conf [ -e build/conf/local.conf ] || \ ( echo 'MACHINE = "om-gta01"' > build/conf/local.conf ; \ echo 'DISTRO = "openmoko"' >> build/conf/local.conf ; \ echo 'BUILD_ARCH = "'`uname -m`'"' >> build/conf/local.conf ; \ echo 'INHERIT += "rm_work"' >> build/conf/local.conf ) rm -f build/conf/site.conf ( ln -sfn ../../openmoko/trunk/src/host/openembedded/site.conf build/conf/site.conf ) .PHONY: setup-machine-gta02 setup-machine-freerunner setup-machine-freerunner setup-machine-gta02: setup-machine-om-gta02 .PHONY: setup-machine-gta01 setup-machine-neo setup-machine-neo setup-machine-gta01: setup-machine-om-gta01 .PHONY: setup-machine-pc setup-machine-pc: setup-machine-x86 .PHONY: setup-machine-% setup-machine-%: setup-config ( grep "MACHINE = \"$*\"" build/conf/local.conf > /dev/null ) || \ sed -i -e 's/^MACHINE[[:space:]]*=[[:space:]]*\".*\"/MACHINE = \"$*\"/' \ build/conf/local.conf .PHONY: setup-distro-% setup-distro-%: setup-config ( grep "DISTRO = \"$*\"" build/conf/local.conf > /dev/null ) || \ sed -i -e 's/^DISTRO[[:space:]]*=[[:space:]]*\".*\"/DISTRO = \"$*\"/' \ build/conf/local.conf setup-env: [ -e setup-env ] || \ echo 'export OMDIR="'`pwd`'"' > setup-env echo \ 'export BBPATH="$${OMDIR}/build:$${OMDIR}/openembedded"' \ >> setup-env echo \ 'export PYTHONPATH="$${OMDIR}/bitbake/libbitbake"' \ >> setup-env echo \ 'export PATH="$${OMDIR}/bitbake/bin:$${PATH}"' \ >> setup-env .PHONY: update-makefile update-makefile: ( wget -O Makefile.new http://${MM_SVN_SITE}/${MM_SVN_PATH}/Makefile && \ mv Makefile.new Makefile ) .PHONY: check-makefile check-makefile: ( wget -O - http://${MM_SVN_SITE}/${MM_SVN_PATH}/Makefile | \ diff -u Makefile - ) .PHONY: update-bitbake update-bitbake: stamps/bitbake ( cd bitbake && \ ( git branch | egrep -e ' ${BB_GIT_BRANCH}$$' > /dev/null || \ git checkout -b ${BB_GIT_BRANCH} --track origin/${BB_GIT_BRANCH} )) ( cd bitbake && \ git checkout ${BB_GIT_BRANCH} && \ git fetch && \ git rebase origin/${BB_GIT_BRANCH} ) .PHONY: update-openembedded update-openembedded: stamps/openembedded ( cd openembedded && \ ( git branch | egrep -e ' ${OM_GIT_BRANCH}$$' > /dev/null || \ git checkout -b ${OM_GIT_BRANCH} --track origin/${OM_GIT_BRANCH} )) ( cd openembedded && \ git checkout ${OM_GIT_BRANCH} && \ git fetch && \ git rebase origin/${OM_GIT_BRANCH} ) .PHONY: update-openmoko update-openmoko: stamps/openmoko ( cd openmoko && svn update trunk developers ) .PHONY: prefetch-sources prefetch-sources: stamps/openmoko stamps/bitbake \ stamps/openembedded \ build/conf/local.conf setup-env ( cd build && . ../setup-env && \ ( bitbake -c fetch ${OM_IMAGE_NAME} ) ) .PHONY: remove-work remove-work: stamps/openmoko stamps/bitbake \ stamps/openembedded \ build/conf/local.conf setup-env ( cd build && . ../setup-env && \ ( bitbake -c rm_work ${OM_IMAGE_NAME} ) ) .PHONY: ${OM_IMAGE_NAME} ${OM_IMAGE_NAME} stamps/${OM_IMAGE_NAME}: \ stamps/openmoko stamps/bitbake \ stamps/openembedded \ build/conf/local.conf setup-env ( cd build && . ../setup-env && \ ( bitbake ${OM_IMAGE_NAME} ) ) [ -d stamps ] || mkdir stamps touch stamps/${OM_IMAGE_NAME} .PHONY: u-boot-openmoko u-boot-openmoko stamps/u-boot-openmoko: \ stamps/openmoko stamps/bitbake \ stamps/openembedded \ build/conf/local.conf setup-env ( cd build && . ../setup-env && \ ( bitbake u-boot-openmoko ) ) [ -d stamps ] || mkdir stamps touch stamps/u-boot-openmoko .PHONY: openmoko-devel-tools openmoko-devel-tools stamps/openmoko-devel-tools: \ stamps/openmoko stamps/bitbake \ stamps/openembedded \ build/conf/local.conf setup-env ( cd build && . ../setup-env && \ bitbake dfu-util-native openocd-native ) [ -d stamps ] || mkdir stamps touch stamps/openmoko-devel-tools .PHONY: openmoko-feed openmoko-feed stamps/openmoko-feed: \ stamps/openmoko stamps/bitbake \ stamps/openembedded \ build/conf/local.conf setup-env ( cd build && . ../setup-env && \ bitbake openmoko-feed ) [ -d stamps ] || mkdir stamps touch stamps/openmoko-feed .PHONY: openmoko-toolchain openmoko-toolchain stamps/openmoko-toolchain: \ stamps/openmoko stamps/bitbake \ stamps/openembedded \ build/conf/local.conf setup-env ( cd build && . ../setup-env && \ bitbake meta-toolchain-openmoko ) [ -d stamps ] || mkdir stamps touch stamps/openmoko-toolchain .PHONY: qemu qemu: setup-qemu build-qemu download-images flash-qemu-official run-qemu .PHONY: qemu-local qemu-local: setup-qemu build-qemu ${OM_IMAGE_NAME} u-boot-openmoko flash-qemu-local run-qemu .PHONY: setup-qemu setup-qemu stamps/qemu: setup-env stamps/openmoko [ -e build/qemu ] || \ ( mkdir -p build/qemu ) [ -e build/qemu/Makefile ] || \ ( . ./setup-env && cd build/qemu && \ $${OMDIR}/openmoko/trunk/src/host/qemu-neo1973/configure \ --target-list=arm-softmmu ) [ -e build/qemu/openmoko ] || \ ( . ./setup-env && cd build/qemu && mkdir openmoko && \ for f in $${OMDIR}/openmoko/trunk/src/host/qemu-neo1973/openmoko/* ; do \ ln -s $$f openmoko/`basename $$f` ; \ done ) ln -sf `pwd`/openmoko/trunk/src/host/qemu-neo1973/openmoko/env build/qemu/openmoko/env [ -d stamps ] || mkdir stamps touch stamps/qemu .PHONY: build-qemu build-qemu build/qemu/arm-softmmu/qemu-system-arm: stamps/qemu ( cd build/qemu && ${MAKE} ) .PHONY: download-images download-images stamps/images: stamps/openmoko [ -e images/openmoko ] || mkdir -p images/openmoko ln -sf `pwd`/openmoko/trunk/src/host/qemu-neo1973/openmoko/env images/openmoko/env ( cd images && ../openmoko/trunk/src/host/qemu-neo1973/openmoko/download.sh ) rm -f images/openmoko/env [ -d stamps ] || mkdir stamps touch stamps/images .PHONY: flash-qemu-official flash-qemu-official: stamps/qemu stamps/images ( cd build/qemu && openmoko/flash.sh ../../images/openmoko ) .PHONY: flash-qemu-local flash-qemu-local: stamps/qemu stamps/${OM_IMAGE_NAME} stamps/u-boot-openmoko ( cd build/qemu && openmoko/flash.sh ../tmp/deploy/glibc/images/neo1973 ) build/qemu/openmoko/openmoko-sd.image: ( cd build/qemu && ${MKDOSFS} -C -F 32 -v openmoko/openmoko-sd.image 500000 ) .PHONY: run-qemu run-qemu: stamps/qemu build/qemu/openmoko/openmoko-sd.image ( cd build/qemu && arm-softmmu/qemu-system-arm \ -M gta01 -m 130 -usb -show-cursor \ -usbdevice keyboard \ -mtdblock openmoko/openmoko-flash.image \ -sd openmoko/openmoko-sd.image \ -kernel openmoko/openmoko-kernel.bin ) .PHONY: run-qemu-snapshot run-qemu-snapshot: stamps/qemu build/qemu/openmoko/openmoko-sd.image ( cd build/qemu && arm-softmmu/qemu-system-arm \ -M gta01 -m 130 -usb -show-cursor -snapshot \ -usbdevice keyboard \ -mtdblock openmoko/openmoko-flash.image \ -sd openmoko/openmoko-sd.image \ -kernel openmoko/openmoko-kernel.bin ) .PHONY: run-qemu-vnc run-qemu-vnc: stamps/qemu build/qemu/openmoko/openmoko-sd.image ( cd build/qemu && arm-softmmu/qemu-system-arm \ -M gta01 -m 130 -usb -show-cursor \ -vnc localhost:1 -monitor stdio \ -mtdblock openmoko/openmoko-flash.image \ -sd openmoko/openmoko-sd.image \ -kernel openmoko/openmoko-kernel.bin ) .PHONY: flash-neo-official flash-neo-official: flash-neo-kernel-official flash-neo-rootfs-official .PHONY: flash-neo-kernel-official flash-neo-kernel-official: stamps/openmoko-devel-tools stamps/images ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1457:0x5119 -a kernel -D `ls -t ../images/openmoko/uImage-*.bin | head -1` ) .PHONY: flash-neo-rootfs-official flash-neo-rootfs-official: stamps/openmoko-devel-tools stamps/images ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1457:0x5119 -a rootfs -D `ls -t ../images/openmoko/*.jffs2 | head -1` ) .PHONY: flash-neo-local flash-neo-local: flash-neo-kernel-local flash-neo-rootfs-local .PHONY: flash-neo-kernel-local flash-neo-kernel-local: stamps/openmoko-devel-tools stamps/${OM_IMAGE_NAME} ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1457:0x5119 -a kernel -D `ls -t tmp/deploy/glibc/images/om-gta01/uImage-*.bin | head -1` ) .PHONY: flash-neo-rootfs-local flash-neo-rootfs-local: stamps/openmoko-devel-tools stamps/${OM_IMAGE_NAME} ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1457:0x5119 -a rootfs -D `ls -t tmp/deploy/glibc/images/om-gta01/Openmoko-${OM_IMAGE_NAME}-*.jffs2 | head -1` ) .PHONY: flash-fr-official flash-fr-official: flash-fr-kernel-official flash-fr-rootfs-official .PHONY: flash-fr-kernel-official flash-fr-kernel-official: stamps/openmoko-devel-tools stamps/images ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1d50:0x5119 -a kernel -D `ls -t ../images/openmoko/uImage-*.bin | head -1` ) .PHONY: flash-fr-rootfs-official flash-fr-rootfs-official: stamps/openmoko-devel-tools stamps/images ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1d50:0x5119 -a rootfs -D `ls -t ../images/openmoko/*.jffs2 | head -1` ) .PHONY: flash-fr-local flash-fr-local: flash-fr-kernel-local flash-fr-rootfs-local .PHONY: flash-fr-kernel-local flash-fr-kernel-local: stamps/openmoko-devel-tools stamps/${OM_IMAGE_NAME} ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1d50:0x5119 -a kernel -D `ls -t tmp/deploy/glibc/images/om-gta02/uImage-*.bin | head -1` ) .PHONY: flash-fr-rootfs-local flash-fr-rootfs-local: stamps/openmoko-devel-tools stamps/${OM_IMAGE_NAME} ( cd build && \ sudo ./tmp/staging/`uname -m`-`uname -s | tr '[A-Z]' '[a-z]'`/usr/bin/dfu-util \ --device 0x1d50:0x5119 -a rootfs -D `ls -t tmp/deploy/glibc/images/om-gta02/Openmoko-${OM_IMAGE_NAME}-*.jffs2 | head -1` ) .PHONY: push-openembedded push-openembedded: update-mtn openembedded/_MTN/revision if [ `${MTN} --db=OE.mtn automate heads ${OM_BRANCH} | wc -l` \ != "1" ] ; then \ ${MTN} --db=OE.mtn merge -b ${OM_BRANCH} ; \ fi ( cd openembedded && ${MTN} update ) if [ `${MTN} --db=OE.mtn automate heads ${OM_BRANCH} | wc -l` \ != "1" ] ; then \ ${MTN} --db=OE.mtn merge -b ${OM_BRANCH} ; \ fi ( cd openembedded && ${MTN} push ${OM_MONOTONE_SITE} ${OM_BRANCH} ) .PHONY: build-package-% build-package-%: ( . ./setup-env && cd build && bitbake -c build $* ) .PHONY: rebuild-package-% rebuild-package-%: ( . ./setup-env && cd build && bitbake -c rebuild $* ) .PHONY: clean-package-% clean-package-%: ( . ./setup-env && cd build && bitbake -c clean $* ) .PHONY: qemu-copy-package-% qemu-copy-package-%: build/qemu/openmoko/openmoko-sd.image mcopy -i build/qemu/openmoko/openmoko-sd.image -v build/tmp/deploy/glibc/ipk/*/$*_*.ipk :: .PHONY: clean clean: clean-openembedded clean-qemu .PHONY: clean-openembedded clean-openembedded: rm -rf build/tmp \ stamps/${OM_IMAGE_NAME} \ stamps/openmoko-devel-tools \ stamps/openmoko-feed .PHONY: clean-qemu clean-qemu: rm -rf build/qemu stamps/qemu .PHONY: clobber clobber: clobber-bitbake clobber-openmoko clobber-openembedded clobber-qemu .PHONY: clobber-bitbake clobber-bitbake: rm -rf bitbake stamps/bitbake .PHONY: clobber-openmoko clobber-openmoko: rm -rf openmoko stamps/openmoko .PHONY: clobber-openembedded clobber-openembedded: clean-openembedded rm -rf openembedded stamps/openembedded .PHONY: clobber-qemu clobber-qemu: clean-qemu