cosmopolitan/tool/zsh/mmake
Steven Dee (Jōshin) 102edf4ea2
tool/zsh/mmake: style
2025-01-05 20:53:53 -08:00

58 lines
1.7 KiB
Bash

# 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