# Cosmopolitan zsh make helper. # Setup (in ~/.zshrc, for instance): # fpath+=($COSMO/tool/zsh) # autoload -Uz mmake # e.g.: # mmake tiny ape/ape.elf local mode case $1 in aarch64|x86_64|aarch64-(zero|tiny)|x86_64-tiny) ;& zero|fastbuild|opt|optlinux|rel|asan|dbg|sysv) ;& tiny(|linux(|bsd)|sysv|nowin)|nox87|llvm|ansi) ## mode=$1; shift ;; (m|MODE)=*) mode=${1#*=}; shift ;; *) mode=${MODE:-${m}} ;; esac [[ -z $mode ]] && { local arch=$(uname -m) case $arch in arm64|aarch64) mode=aarch64 ;; esac } local -a targs local -a flags local j while (( $# > 0 )); do case $1 in all|o|bins|check|test|depend|tags|aarch64) ;& clean|toolchain|clean_toolchain|o/$mode/*) ## targs+=($1); shift ;; -j*) j=$1; shift ;; -*|*=*) flags+=($1); shift ;; o/(|aarch64)/*) targs+=(o/$mode/${1#*/*/}); shift ;; o/*) targs+=(o/$mode/${1#*/}); shift ;; *) targs+=(o/$mode/$1); shift ;; esac done [[ -z $j ]] && { whence nproc >/dev/null || autoload -Uz nproc j=-j$(nproc) } local make=$( case $MAKE in */*) echo $MAKE ;; ?*) command -v $MAKE ;; *) echo .cosmocc/current/bin/make ;; esac ) if [[ ! -x $make ]]; then { echo 'please install a suitable make, for example:' echo echo 'https://cosmo.zip/pub/cosmos/bin/make' echo echo 'then put it on $PATH or point $MAKE to it.' } >&2; return 1 fi ( set -x exec $make $j $flags MODE=$mode $targs ) # vim:ft=zsh