Created
October 27, 2026 16:59
-
-
Save sshaplygin/47392f71db7ad59977a94280f91a333f to your computer and use it in GitHub Desktop.
Rustcon build examples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| # Собирает примеры с ветки ya-rs стоковым rustc, повторяя схему флагов из | |
| # build/conf/rust.conf: | |
| # | |
| # rustc -o $Tgt $FLAGS --edition $EDITION src/... \ | |
| # -L $RUST_STD -L ${BINDIR}/deps -L native=${BINDIR}/native \ | |
| # $_RUST_CRATE_EXTERNS | |
| # | |
| # Это не `ya make`: движок сборки, кеш и распределёнка тут не участвуют. | |
| # Проверяется ровно то, про что доклад: схема имён и флагов. | |
| set -u | |
| REPO=${1:?укажите путь к чекауту yatool} | |
| EX=$REPO/devtools/examples/tutorials/rust | |
| OUT=$(mktemp -d) | |
| DEPS=$OUT/deps | |
| mkdir -p "$DEPS" "$OUT/native" | |
| ok=0 | |
| fail=0 | |
| run() { | |
| local label=$1; shift | |
| printf '%-28s ' "$label" | |
| if out=$("$@" 2>&1); then | |
| echo "ок" | |
| ok=$((ok + 1)) | |
| else | |
| echo "УПАЛО" | |
| echo "$out" | sed 's/^/ /' | head -6 | |
| fail=$((fail + 1)) | |
| fi | |
| } | |
| L=(-L "$DEPS" -L "native=$OUT/native") | |
| echo "### RUST_CRATE: имя артефакта из имени модуля" | |
| # worldlib: RUST_CRATE() без аргумента, имя из каталога | |
| run "worldlib -> libworldlib.rlib" \ | |
| rustc -o "$DEPS/libworldlib.rlib" --edition 2024 \ | |
| --crate-name worldlib --crate-type rlib "$EX/worldlib/src/lib.rs" "${L[@]}" | |
| # dashed-lib: каталог с дефисом, RUST_CRATE(dashed_lib) | |
| run "dashed-lib -> libdashed_lib" \ | |
| rustc -o "$DEPS/libdashed_lib.rlib" --edition 2024 \ | |
| --crate-name dashed_lib --crate-type rlib "$EX/crate_name/dashed-lib/src/lib.rs" "${L[@]}" | |
| echo | |
| echo "### RUST_PROC_MACRO: артефакт это .so, а не .rlib" | |
| run "greetmac -> libgreetmac.so" \ | |
| rustc -o "$DEPS/libgreetmac.so" --edition 2024 \ | |
| --crate-name greetmac --crate-type proc-macro "$EX/proc_macro/greetmac/src/lib.rs" "${L[@]}" | |
| echo | |
| echo "### вендоренный крейт с crates.io" | |
| # anyhow: RUST_CRATE(), RUST_EDITION(2018), никаких RUST_FLAGS в ya.make, | |
| # то есть его build.rs игнорируется и крейт должен собраться без него | |
| run "anyhow -> libanyhow.rlib" \ | |
| rustc -o "$DEPS/libanyhow.rlib" --edition 2018 \ | |
| --crate-name anyhow --crate-type rlib "$REPO/contrib/rust/anyhow/src/lib.rs" "${L[@]}" | |
| echo | |
| echo "### RUST_PROGRAM: зависимости через --extern" | |
| run "hello" \ | |
| rustc -o "$OUT/hello" --edition 2024 "$EX/hello/src/main.rs" "${L[@]}" \ | |
| --extern "worldlib=$DEPS/libworldlib.rlib" | |
| run "crate_name/bin" \ | |
| rustc -o "$OUT/crate_name_hello" --edition 2024 "$EX/crate_name/bin/src/main.rs" "${L[@]}" \ | |
| --extern "dashed_lib=$DEPS/libdashed_lib.rlib" | |
| run "proc_macro/bin" \ | |
| rustc -o "$OUT/procmacro_hello" --edition 2024 "$EX/proc_macro/bin/src/main.rs" "${L[@]}" \ | |
| --extern "greetmac=$DEPS/libgreetmac.so" | |
| run "hellodep" \ | |
| rustc -o "$OUT/hellodep" --edition 2024 "$EX/hellodep/src/main.rs" "${L[@]}" \ | |
| --extern "anyhow=$DEPS/libanyhow.rlib" | |
| echo | |
| echo "### RUST_TEST: rustc --test" | |
| run "tests -> тестовый бинарь" \ | |
| rustc -o "$OUT/tests" --edition 2024 --test "$EX/tests/src/lib.rs" "${L[@]}" \ | |
| --extern "worldlib=$DEPS/libworldlib.rlib" | |
| echo | |
| echo "### что получилось на диске" | |
| ls -1 "$DEPS" | sed 's/^/ /' | |
| echo | |
| echo "### запуск" | |
| for b in hello crate_name_hello procmacro_hello; do | |
| [ -x "$OUT/$b" ] && printf ' %-18s %s\n' "$b" "$("$OUT/$b")" | |
| done | |
| [ -x "$OUT/hellodep" ] && printf ' %-18s %s\n' "hellodep" "$(echo 21 | "$OUT/hellodep" | tail -1)" | |
| echo | |
| echo "### прогон тестов из примера" | |
| if [ -x "$OUT/tests" ]; then | |
| "$OUT/tests" 2>&1 | sed 's/^/ /' | grep -vE '^\s*$' | |
| echo " --- список, как его спрашивает раннер:" | |
| "$OUT/tests" --list 2>&1 | sed 's/^/ /' | |
| fi | |
| echo | |
| echo "итог: $ok собралось, $fail упало" | |
| echo "рабочий каталог: $OUT" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment