| #!/bin/bash |
| |
| ## Shamelessly borrowed from android's envsetup.sh. |
| function getrootdir |
| { |
| local TOPFILE=build/Makefile |
| if [[ -n "$ROOTDIR" && -f "$ROOTDIR/$TOPFILE" ]]; then |
| # The following circumlocution ensures we remove symlinks from ROOTDIR. |
| (cd $ROOTDIR; PWD= /bin/pwd) |
| else |
| if [[ -f $TOPFILE ]]; then |
| # The following circumlocution (repeated below as well) ensures |
| # that we record the true directory name and not one that is |
| # faked up with symlink names. |
| PWD= /bin/pwd |
| else |
| local HERE=$PWD |
| local R= |
| while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do |
| \cd .. |
| R=`PWD= /bin/pwd -P` |
| done |
| \cd $HERE |
| if [ -f "$R/$TOPFILE" ]; then |
| echo $R |
| fi |
| fi |
| fi |
| } |
| |
| export ROOTDIR="$(getrootdir)" |
| export OUT="${ROOTDIR}/out" |
| export PRODUCT_OUT="${OUT}/target/product/imx8m_phanbell" |
| export HOST_OUT="${OUT}/host/linux-x86" |
| export ROOT_OUT="${OUT}/root" |
| |
| export PATH="${PATH}:${HOST_OUT}/bin:${ROOTDIR}/build:${ROOTDIR}/board" |
| |
| function m |
| { |
| pushd "${ROOTDIR}" >/dev/null |
| make -f "${ROOTDIR}/build/Makefile" "$@" |
| popd >/dev/null |
| } |
| |
| function mm |
| { |
| local module="$1"; shift |
| |
| if [[ -z "${module}" ]]; then |
| echo "Usage: mm <modulename> [<target>]" |
| echo "Where" |
| echo " modulename is one of the makefiles in \$ROOTDIR/build" |
| echo " target is an optional target to make" |
| return 1 |
| fi |
| |
| if [[ ! -f "${ROOTDIR}/build/${module}.mk" ]]; then |
| echo "mm: ${module} is not a valid module." |
| return 1 |
| fi |
| |
| pushd "${ROOTDIR}" >/dev/null |
| make -f "${ROOTDIR}/build/${module}.mk" "$@" |
| popd >/dev/null |
| } |
| |
| if builtin complete >/dev/null 2>/dev/null; then |
| function _mm_modules |
| { |
| echo "${ROOTDIR}"/build/*.mk \ |
| | xargs -n1 basename \ |
| | sed 's/.mk$//' \ |
| | grep -v 'template' \ |
| | grep -v 'preamble' |
| } |
| |
| function _mm_module_targets |
| { |
| local module="$1"; shift |
| |
| mm "${module}" targets \ |
| | sed 's/ .*$//' |
| } |
| |
| function _mm |
| { |
| local cur=${COMP_WORDS[COMP_CWORD]} |
| COMPREPLY=() |
| if [[ $COMP_CWORD -eq 1 ]]; then |
| COMPREPLY=( $(compgen -W "$(_mm_modules)" $cur) ) |
| fi |
| if [[ $COMP_CWORD -eq 2 ]]; then |
| COMPREPLY=( $(compgen -W "$(_mm_module_targets ${COMP_WORDS[1]})" $cur) ) |
| fi |
| } |
| |
| complete -F _mm mm |
| fi |
| |
| unset JUMP_TARGETS |
| declare -Ax JUMP_TARGETS |
| JUMP_TARGETS[.]="." |
| JUMP_TARGETS[board]="${ROOTDIR}/board" |
| JUMP_TARGETS[top]="${ROOTDIR}" |
| JUMP_TARGETS[rootdir]="${ROOTDIR}" |
| JUMP_TARGETS[out]="${OUT}" |
| JUMP_TARGETS[product]="${PRODUCT_OUT}" |
| JUMP_TARGETS[host]="${HOST_OUT}" |
| JUMP_TARGETS[root]="${ROOT_OUT}" |
| JUMP_TARGETS[build]="${ROOTDIR}/build" |
| JUMP_TARGETS[kernel]="${ROOTDIR}/linux-imx/" |
| JUMP_TARGETS[uboot]="${ROOTDIR}/uboot-imx/" |
| |
| function j |
| { |
| local target="$1"; shift |
| |
| if [[ -z "${target}" ]]; then |
| cd "${ROOTDIR}" |
| return 0 |
| fi |
| |
| if [[ -z "${JUMP_TARGETS[$target]}" ]]; then |
| echo "Jump targets are:" |
| echo "${!JUMP_TARGETS[@]}" |
| return 1 |
| fi |
| |
| cd "${JUMP_TARGETS[$target]}" |
| } |
| |
| if builtin complete >/dev/null 2>/dev/null; then |
| function _j_targets |
| { |
| echo "${!JUMP_TARGETS[@]}" |
| } |
| |
| function _j |
| { |
| local cur=${COMP_WORDS[COMP_CWORD]} |
| COMPREPLY=() |
| if [[ $COMP_CWORD -eq 1 ]]; then |
| COMPREPLY=( $(compgen -W "$(_j_targets)" $cur) ) |
| fi |
| } |
| |
| complete -F _j j |
| fi |
| |
| echo ======================================== |
| echo ROOTDIR="${ROOTDIR}" |
| echo OUT="${OUT}" |
| echo PRODUCT_OUT="${PRODUCT_OUT}" |
| echo HOST_OUT="${HOST_OUT}" |
| echo ROOT_OUT="${ROOT_OUT}" |
| echo ======================================== |
| echo |
| echo Type m to build. |