11#! /usr/bin/env bash
22
33set -e
4- SOURCE=$( realpath " $1 " )
5- NAME=$( basename " $SOURCE " .rs)
6- RELATIVE=$( realpath --relative-to=. " $SOURCE " || echo " $SOURCE " )
4+ ULIB_DIR=$( cd " $( dirname -- " $0 " ) " && pwd -P)
5+ SOURCE_DIR=$( cd " $( dirname -- " $1 " ) " && pwd -P)
6+ SOURCE=" $SOURCE_DIR /$( basename -- " $1 " ) "
7+ NAME=$( basename -- " $SOURCE " .rs)
78
89MANIFEST=" $( cat) "
910
10- LINKER_SCRIPT=" $( dirname " $0 " ) /script.ld"
11+ LINKER_SCRIPT=" $ULIB_DIR /script.ld"
1112
1213TEMP_DIR=" $( mktemp -d) "
1314trap ' rm -rf -- "$TEMP_DIR"' EXIT
@@ -26,13 +27,20 @@ CARGO_TARGET_DIR="$TARGET_DIR" RUSTC_BOOTSTRAP=1 cargo rustc \
2627 -C link-arg=-T" ${LINKER_SCRIPT} " -C link-args=' -zmax-page-size=0x1000' \
2728
2829BIN_PATH=" ${TARGET_DIR} /aarch64-unknown-none-softfloat/standalone/${NAME} "
29- cp " ${BIN_PATH} " " ${SOURCE% .rs} .elf"
30-
31- # TODO: macos doesn't support realpath --relative-to, stat -c
32- SIZE=$( test -f " ${SOURCE% .rs} .elf" && find " ${SOURCE% .rs} .elf" -printf " %s" )
33- SIZE=$( echo " ${SIZE} " | python3 -c \
34- " (lambda f:f(f,float(input()),0))\
35- (lambda f,i,j:print('%.4g'%i,'BKMGTPE'[j]+'iB' if j else 'bytes')\
36- if i<1024 else f(f,i/1024,j+1))"
37- )
38- echo " Built ${RELATIVE% .rs} .elf, file size ${SIZE} "
30+ ELF_FILE=" ${SOURCE% .rs} .elf"
31+ cp " ${BIN_PATH} " " $ELF_FILE "
32+
33+ if test -f " $ELF_FILE " ; then
34+ # MacOS compat -- try everything, hope at least one works
35+ SIZE=$( stat -c%s -- " $ELF_FILE " 2> /dev/null || stat -f%z -- " $ELF_FILE " 2> /dev/null || find " $ELF_FILE " -printf " %s" )
36+ SIZE=$( echo " ${SIZE} " | python3 -c \
37+ " (lambda f:f(f,float(input()),0))\
38+ (lambda f,i,j:print('%.4g'%i,'BKMGTPE'[j]+'iB' if j else 'bytes')\
39+ if i<1024 else f(f,i/1024,j+1))"
40+ )
41+ RELATIVE=$( realpath --relative-to=. -- " $SOURCE " || echo " $SOURCE " )
42+ echo " Built ${RELATIVE% .rs} .elf, file size ${SIZE} "
43+ else
44+ echo " Failed to build $ELF_FILE ?"
45+ exit 1
46+ fi
0 commit comments