diff --git a/tool/cosmocc/package.sh b/tool/cosmocc/package.sh index 9f9638277ba..51450e94e0a 100755 --- a/tool/cosmocc/package.sh +++ b/tool/cosmocc/package.sh @@ -15,17 +15,49 @@ mode() { esac } +_nproc() { + case $(uname -s) in + Darwin) sysctl -n hw.logicalcpu ;; + *) nproc ;; + esac +} + +TMPDIR=${TMPDIR:-/tmp} OUTDIR=${1:-cosmocc} APELINK=o/$(mode)/tool/build/apelink AMD64=${2:-x86_64} ARM64=${3:-aarch64} -NPROC=$(($(nproc)/2)) +NPROC=$(($(_nproc)/2)) GCCVER=14.1.0 -make -j$NPROC m= \ +if ! MAKE=$(command -v gmake); then + if ! MAKE=$(command -v make); then + echo please install gnu make >&2 + exit 1 + fi +fi + +$MAKE -j$NPROC m= \ $APELINK -make -j$NPROC m=$AMD64 \ +if ! APE=$(command -v ape); then + case $(uname -s) in + Darwin) + case $(mode) in + aarch64) + cc -O -o "$TMPDIR/ape.$$" .cosmocc/current/bin/ape-m1.c || exit + trap 'rm "$TMPDIR/ape.$$"' EXIT + APE=$TMPDIR/ape.$$ + ;; + *) APE=.cosmocc/current/bin/ape-x86_64.macho ;; + esac + ;; + *) APE=.cosmocc/current/bin/ape-$(uname -m).elf ;; + esac +fi +stat $APE + +$MAKE -j$NPROC m=$AMD64 \ o/cosmocc.h.txt \ o/$AMD64/ape/ape.lds \ o/$AMD64/libc/crt/crt.o \ @@ -62,7 +94,7 @@ make -j$NPROC m=$AMD64 \ o/$AMD64/third_party/make/make.dbg \ o/$AMD64/third_party/ctags/ctags.dbg -make -j$NPROC m=$AMD64-tiny \ +$MAKE -j$NPROC m=$AMD64-tiny \ o/cosmocc.h.txt \ o/$AMD64-tiny/ape/ape.lds \ o/$AMD64-tiny/libc/crt/crt.o \ @@ -74,7 +106,7 @@ make -j$NPROC m=$AMD64-tiny \ o/$AMD64-tiny/cosmopolitan.a \ o/$AMD64-tiny/third_party/libcxx/libcxx.a \ -make -j$NPROC m=$AMD64-dbg \ +$MAKE -j$NPROC m=$AMD64-dbg \ o/cosmocc.h.txt \ o/$AMD64-dbg/ape/ape.lds \ o/$AMD64-dbg/libc/crt/crt.o \ @@ -86,7 +118,7 @@ make -j$NPROC m=$AMD64-dbg \ o/$AMD64-dbg/cosmopolitan.a \ o/$AMD64-dbg/third_party/libcxx/libcxx.a \ -make CONFIG_TARGET_ARCH= -j$NPROC m=$AMD64-optlinux \ +$MAKE CONFIG_TARGET_ARCH= -j$NPROC m=$AMD64-optlinux \ o/cosmocc.h.txt \ o/$AMD64-optlinux/ape/ape.lds \ o/$AMD64-optlinux/libc/crt/crt.o \ @@ -98,7 +130,7 @@ make CONFIG_TARGET_ARCH= -j$NPROC m=$AMD64-optlinux \ o/$AMD64-optlinux/cosmopolitan.a \ o/$AMD64-optlinux/third_party/libcxx/libcxx.a \ -make -j$NPROC m=$ARM64 \ +$MAKE -j$NPROC m=$ARM64 \ o/$ARM64/ape/ape.elf \ o/$ARM64/ape/aarch64.lds \ o/$ARM64/libc/crt/crt.o \ @@ -130,21 +162,21 @@ make -j$NPROC m=$ARM64 \ o/$ARM64/third_party/make/make.dbg \ o/$ARM64/third_party/ctags/ctags.dbg -make -j$NPROC m=$ARM64-tiny \ +$MAKE -j$NPROC m=$ARM64-tiny \ o/$ARM64-tiny/ape/ape.elf \ o/$ARM64-tiny/ape/aarch64.lds \ o/$ARM64-tiny/libc/crt/crt.o \ o/$ARM64-tiny/cosmopolitan.a \ o/$ARM64-tiny/third_party/libcxx/libcxx.a \ -make -j$NPROC m=$ARM64-dbg \ +$MAKE -j$NPROC m=$ARM64-dbg \ o/$ARM64-dbg/ape/ape.elf \ o/$ARM64-dbg/ape/aarch64.lds \ o/$ARM64-dbg/libc/crt/crt.o \ o/$ARM64-dbg/cosmopolitan.a \ o/$ARM64-dbg/third_party/libcxx/libcxx.a \ -make -j$NPROC m=$ARM64-optlinux \ +$MAKE -j$NPROC m=$ARM64-optlinux \ o/$ARM64-optlinux/ape/ape.elf \ o/$ARM64-optlinux/ape/aarch64.lds \ o/$ARM64-optlinux/libc/crt/crt.o \ @@ -272,7 +304,7 @@ cp -f o/$ARM64/ape/ape.elf "$OUTDIR/bin/ape-aarch64.elf" for x in assimilate march-native mktemper fixupobj zipcopy apelink pecheck mkdeps zipobj \ ar chmod cocmd cp echo gzip objbincopy package rm touch mkdir compile sha256sum \ resymbol; do - ape $APELINK \ + $APE $APELINK \ -l o/$AMD64/ape/ape.elf \ -l o/$ARM64/ape/ape.elf \ -M ape/ape-m1.c \ @@ -286,7 +318,7 @@ for x in ar chmod cp echo gzip package rm touch mkdir compile sha256sum; do done for x in make ctags; do - ape $APELINK \ + $APE $APELINK \ -l o/$AMD64/ape/ape.elf \ -l o/$ARM64/ape/ape.elf \ -M ape/ape-m1.c \