cosmopolitan/tool/zsh/mmake
Justine Tunney a6baba1b07
Stop using .com extension in monorepo
The WIN32 CreateProcess() function does not require an .exe or .com
suffix in order to spawn an executable. Now that we have Cosmo bash
we're no longer so dependent on the cmd.exe prompt.
2024-03-03 03:12:19 -08:00

45 lines
1.4 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=${MAKE:-${COSMOCC:-/opt/cosmocc/current}/bin/make}
[[ -x $make ]] || make=${COSMO:-$PWD}/build/bootstrap/make
( set -x
exec $make $j $flags MODE=$mode $targs )
# vim:ft=zsh