Next Previous Contents

5. Makefile front-end

So far, we have a fully functional OE system. Let's summarize the steps followed up to this point:

  1. Bitbake download.
  2. OE database download.
  3. OE database branch pulling (update).
  4. OE database checkout.
  5. Environment setup.
  6. build/conf/local.conf minimal setup.
  7. Simple building test.

The following Makefile is a front-end tat could be used to automate the setting up tasks described up to this point (Inspired by the idea of MokoMakefile).


# Makefile front-end - a Makefile for setting up OE builds
#
# Based on MokoMakefile idea.
#
MTN := mtn
BITBAKE_SVN_REV = HEAD
OE_SNAPSHOT_SITE := http://www.openembedded.org/snapshots
OE_MONOTONE_SITE := monotone.openembedded.org
OE_BRANCH :="org.openembedded.stable"
BB_SVN_REPOS :=http://svn.berlios.de/svnroot/repos/bitbake
BB_SVN_PATH :=tags/bitbake-1.8.10

.PHONY: all

all: setup

.PHONY: setup
setup: check-generation \
         setup-bitbake \
         setup-mtn \
         setup-openembedded \
         generic-config

.PHONY: check-generation
check-generation:
        @echo "    OpenEmbedded Guide example Makefile front-end         "
        @echo
        [ ! -e stamps/bitbake ] || \
        ( grep -e '${BB_SVN_PATH}' bitbake/.svn/entries > /dev/null ) || \
        ( rm -rf bitbake stamps/bitbake)
#
# Checkout bitbake HEAD trunk of retaled version.
#
.PHONY: setup-bitbake
setup-bitbake stamps/bitbake:
        [ -e stamps/bitbake ] || \
        ( svn co -r ${BITBAKE_SVN_REV} \
                ${BB_SVN_REPOS}/${BB_SVN_PATH} bitbake )
        [ -d stamps ] || mkdir stamps
        touch stamps/bitbake

#
# Download initial OE database snapshot based on monotone installed
#
OE.mtn:
        if [ -z "`${MTN} --version | awk '{ print $$2; }'`" ] ; then \
          echo 'Cannot determine version for monotone using "${MTN} --version"' ; \
          false ; \
        fi
        [ -e OE.mtn ] || \
        ( ( version=`${MTN} --version | awk '{ print $$2; }'` ; \
            wget -c -O OE.mtn.bz2 \
                ${OE_SNAPSHOT_SITE}/OE-this-is-for-mtn-$$version.mtn.bz2 || \
            wget -c -O OE.mtn.bz2 \
                ${OE_SNAPSHOT_SITE}/OE.mtn.bz2 ) && \
          bunzip2 -v -c OE.mtn.bz2 > OE.mtn.partial && \
          mv OE.mtn.partial OE.mtn )

.PHONY: setup-mtn
setup-mtn stamps/OE.mtn:
        [ -e OE.mtn ] || \
        ${MAKE} OE.mtn
        [ -e stamps/OE.mtn ] || \
        ( ${MTN} --db=OE.mtn db migrate && \
          ${MTN} --db=OE.mtn pull ${OE_MONOTONE_SITE} ${OE_BRANCH} )
        [ -d stamps ] || mkdir stamps
        touch stamps/OE.mtn
#
# Check out (MTN) branch or "known to be good"
#
.PHONY: setup-openembedded
setup-openembedded stamps/openembedded: stamps/OE.mtn
        [ -e stamps/openembedded ] || \
        ( ${MTN} --db=OE.mtn checkout --branch=${OE_BRANCH} openembedded ) || \
        [ -d stamps ] || mkdir stamps
        touch stamps/openembedded

setup-env:
        [ -e setup-env ] || \
        echo 'export WORKDIR="'`pwd`'"' > setup-env
        echo \
        'export BBPATH="$${WORKDIR}/build:$${WORKDIR}/openembedded"' \
                >> setup-env
        echo \
        'export PATH="$${WORKDIR}/bitbake/bin:$${PATH}"' \
                >> setup-env
        echo \
        'export BBFILES="$${WORKDIR}/openembedded/packages/*/*.bb"' \
                >> setup-env
#
# Distributions.
#
.PHONY: generic-config
generic-config build/conf/local.conf:
        mkdir -p build/conf
        [ -e build/conf/local.conf ] || \
        ( echo 'MACHINE = "epia"' > build/conf/local.conf ; \
          echo 'DISTRO = "generic"' >> build/conf/local.conf ; \
          echo 'BUILD_ARCH = "'`uname -m`'"' >> build/conf/local.conf ; \
          echo 'INHERIT += "rm_work"' >> build/conf/local.conf )
        $(MAKE) setup-env

By using the Makefile, everything we have done so far would have been summarized in these simple five steps:

  1. $ mkdir my_OE ; cd my_OE
  2. $ make all
  3. $ cd build
  4. $ . ../setup-env
  5. $ bitbake nano


Next Previous Contents