|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
echo "Determining libctru version..."
|
|
|
|
pacman=dkp-pacman
|
|
|
|
if ! command -v $pacman &>/dev/null; then
|
|
|
|
pacman=pacman
|
|
|
|
if ! command -v $pacman &>/dev/null; then
|
|
|
|
echo >&2 "ERROR: Unable to automatically determine libctru version!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
LIBCTRU_VERSION="$($pacman -Qi libctru | grep Version | cut -d: -f 2 | tr -d ' ')"
|
|
|
|
|
|
|
|
CTRU_SYS_VERSION="$(
|
|
|
|
printf '%s' "$LIBCTRU_VERSION" |
|
|
|
|
cut -d- -f1 |
|
|
|
|
sed -E 's/^([0-9]+)\.([0-9.]+)$/\1\2/'
|
|
|
|
)"
|
|
|
|
|
|
|
|
echo "Generating bindings.rs..."
|
|
|
|
bindgen "$DEVKITPRO/libctru/include/3ds.h" \
|
|
|
|
--rust-target nightly \
|
|
|
|
--use-core \
|
|
|
|
--distrust-clang-mangling \
|
|
|
|
--must-use-type 'Result' \
|
|
|
|
--no-layout-tests \
|
|
|
|
--ctypes-prefix "::libc" \
|
|
|
|
--no-prepend-enum-name \
|
|
|
|
--generate "functions,types,vars" \
|
|
|
|
--blocklist-type "u(8|16|32|64)" \
|
|
|
|
--blocklist-type "__builtin_va_list" \
|
|
|
|
--blocklist-type "__va_list" \
|
|
|
|
--opaque-type "MiiData" \
|
|
|
|
--with-derive-default \
|
|
|
|
-- \
|
|
|
|
--target=arm-none-eabi \
|
|
|
|
--sysroot="$DEVKITARM/arm-none-eabi" \
|
|
|
|
-isystem"$DEVKITARM/arm-none-eabi/include" \
|
|
|
|
-I"$DEVKITPRO/libctru/include" \
|
|
|
|
-mfloat-abi=hard \
|
|
|
|
-march=armv6k \
|
|
|
|
-mtune=mpcore \
|
|
|
|
-mfpu=vfp \
|
|
|
|
-DARM11 \
|
|
|
|
-D__3DS__ \
|
|
|
|
> src/bindings.rs
|
|
|
|
|
|
|
|
echo "Updating docstrings in bindings.rs..."
|
|
|
|
cargo run --quiet --package docstring-to-rustdoc -- src/bindings.rs
|
|
|
|
|
|
|
|
echo "Formatting generated files..."
|
|
|
|
cargo fmt --all
|
|
|
|
|
|
|
|
echo "Generated bindings for ctru-sys version \"${CTRU_SYS_VERSION}.x+${LIBCTRU_VERSION}\""
|