Skip to content

Commit 877d709

Browse files
committed
Third attempt at macos compatible scripts
1 parent 5a39611 commit 877d709

3 files changed

Lines changed: 32 additions & 20 deletions

File tree

crates/init/ls.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
#!/usr/bin/env bash
22
#![doc = r##"<!-- Absolutely cursed hacks:
3-
SOURCE="$0" NAME=$(basename "$0" .rs) DIR=$(realpath $(dirname "$0"))
4-
exec "$(dirname "$0")/../ulib/compile.sh" "$0" <<END_MANIFEST
3+
NAME="$(basename "$0" .rs)"
4+
DIR=$(cd "$(dirname "$0")" && pwd -P)
5+
ULIB_DIR="$(git rev-parse --show-toplevel)/crates/ulib"
6+
exec "$ULIB_DIR/compile.sh" "$0" <<END_MANIFEST
57
[package]
68
name = "$NAME"
79
version = "0.1.0"
@@ -12,7 +14,7 @@ name = "$NAME"
1214
path = "$DIR/$NAME.rs"
1315
1416
[dependencies]
15-
ulib = { path = "$DIR/../ulib" }
17+
ulib = { path = "$ULIB_DIR" }
1618
1719
[profile.standalone]
1820
inherits = "release"

crates/init/shell.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
#!/usr/bin/env bash
22
#![doc = r##"<!-- Absolutely cursed hacks:
3-
SOURCE="$0" NAME=$(basename "$0" .rs) DIR=$(realpath $(dirname "$0"))
4-
exec "$(dirname "$0")/../ulib/compile.sh" "$0" <<END_MANIFEST
3+
NAME="$(basename "$0" .rs)"
4+
DIR=$(cd "$(dirname "$0")" && pwd -P)
5+
ULIB_DIR="$(git rev-parse --show-toplevel)/crates/ulib"
6+
exec "$ULIB_DIR/compile.sh" "$0" <<END_MANIFEST
57
[package]
68
name = "$NAME"
79
version = "0.1.0"
@@ -12,7 +14,7 @@ name = "$NAME"
1214
path = "$DIR/$NAME.rs"
1315
1416
[dependencies]
15-
ulib = { path = "$DIR/../ulib" }
17+
ulib = { path = "$ULIB_DIR" }
1618
1719
[profile.standalone]
1820
inherits = "release"

crates/ulib/compile.sh

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
#!/usr/bin/env bash
22

33
set -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

89
MANIFEST="$(cat)"
910

10-
LINKER_SCRIPT="$(dirname "$0")/script.ld"
11+
LINKER_SCRIPT="$ULIB_DIR/script.ld"
1112

1213
TEMP_DIR="$(mktemp -d)"
1314
trap '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

2829
BIN_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

Comments
 (0)