diff --git a/c2rust-analyze/scripts/pointwise_try_build.sh b/c2rust-analyze/scripts/pointwise_try_build.sh index f3eeada292..b0593f0963 100755 --- a/c2rust-analyze/scripts/pointwise_try_build.sh +++ b/c2rust-analyze/scripts/pointwise_try_build.sh @@ -4,9 +4,11 @@ set -euo pipefail echo f=$1 -shift 1 +mode=$2 +shift 2 flags=( "$@" ) echo "f=$f" +echo "mode=$mode" name=${f%%.*.rs} name=${name##**/} @@ -21,7 +23,22 @@ filter_errors() { { grep -v -e '^aborting due to ' -e '^call to unsafe function is unsafe ' || true; } } -sed -i -e "/fn $func\\>/s/\\/s/\\/s/\\&2 + exit 1 + ;; +esac + rustc --error-format json --emit metadata --crate-name $name "$f" "${flags[@]}" 2>rustc-$func.json || true num_lines="$(cat rustc-$func.json | filter_errors | wc -l)" echo "got $num_lines errors for $func" diff --git a/c2rust-analyze/scripts/pointwise_try_build_unmodified.sh b/c2rust-analyze/scripts/pointwise_try_build_unmodified.sh deleted file mode 100755 index 10c4d9fee0..0000000000 --- a/c2rust-analyze/scripts/pointwise_try_build_unmodified.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -set -euo pipefail - -echo - -f=$1 -shift 1 -flags=( "$@" ) -echo "f=$f" - -name=${f%%.*.rs} -name=${name##**/} -echo "name=$name" - -func=${f%.rs} -func=${func##*.} -echo "func=$func" - -filter_errors() { - jq 'select(.level == "error") | .message' -r | - { grep -v -e '^aborting due to ' -e '^call to unsafe function is unsafe ' || true; } -} - -d="$(dirname "$f")" -f="$d/${name}_safe_${func}.rs" -cp "$d/$name.rs" "$f" -sed -i -e "/fn $func\\>/s/\\rustc-$func.json || true -num_lines="$(cat rustc-$func.json | filter_errors | wc -l)" -echo "got $num_lines errors for $func" -if [[ "$num_lines" -eq 0 ]]; then - exit 0 -else - cat rustc-$func.json | filter_errors - exit 1 -fi diff --git a/c2rust-analyze/scripts/run_pointwise_metrics.sh b/c2rust-analyze/scripts/run_pointwise_metrics.sh new file mode 100755 index 0000000000..dea8e6e6cf --- /dev/null +++ b/c2rust-analyze/scripts/run_pointwise_metrics.sh @@ -0,0 +1,99 @@ +#!/bin/bash +set -euo pipefail + +# Run pointwise metrics on lighttpd_rust_amalgamated. + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +SCRIPT_DIR="$(dirname "$0")" + +# Get the path to lighttpd_rust_amalgamated +MODULE_DIR="$1" +shift 1 + +# Find the sysroot directory of rustc +SYSROOT="$(rustc --print sysroot)" + +# Find the necessary rlibs +extern() { + local name=$1 + local rlib=$(find "$MODULE_DIR/target/debug/deps" -name "lib${name}*.rlib" -print -quit) + echo >&2 "found rlib for $name: $rlib" + echo --extern $name=$rlib +} + +now=$(date +%Y%m%d-%H%M%S) + + +# Set $rustc_flags and run the analysis as appropriate for the target project. +# $rustc_flags is also used below for `pointwise_try_build.sh`. +project="$(basename "$MODULE_DIR")" +case "$project" in + lighttpd_*) + rustc_flags=( + --edition 2021 + --crate-type rlib + #--sysroot "$SYSROOT" + -L "dependency=$MODULE_DIR/target/debug/deps" + $(extern c2rust_bitfields) + $(extern libc) + -A warnings + ) + + C2RUST_ANALYZE_NO_CARGO=1 \ + C2RUST_ANALYZE_REWRITE_MODE=pointwise \ + C2RUST_ANALYZE_USE_MANUAL_SHIMS=1 \ + cargo run --bin c2rust-analyze --release -- "$MODULE_DIR/src/main.rs" \ + --crate-name "$(basename "$MODULE_DIR")" \ + "${rustc_flags[@]}" \ + |& tee pointwise-lighttpd-analyze-$now.log \ + || true + + ;; + + cfs_*) + : cargo run --bin c2rust-analyze --release -- \ + --rewrite-mode pointwise --use-manual-shims -- \ + build --manifest-path "$MODULE_DIR/Cargo.toml" \ + |& tee pointwise-cfs-analyze-$now.log \ + || true + + rustc_flags=( + --edition 2021 + --crate-type rlib + #--sysroot "$SYSROOT" + -L "dependency=$MODULE_DIR/target/debug/deps" + $(extern c2rust_bitfields) + $(extern f128) + $(extern libc) + $(extern memoffset) + -A warnings + ) + + ;; + + *) + echo "unsupported project $project" 1>&2 + exit 1 +esac + + +# Try to compile each function separately. + +pointwise_log_file=pointwise-lighttpd-pointwise-$now.log +for f in "$MODULE_DIR"/src/main.*.rs; do + "$SCRIPT_DIR/pointwise_try_build.sh" "$f" pointwise "${rustc_flags[@]}" || true +done |& tee "$pointwise_log_file" + +unmodified_log_file=pointwise-lighttpd-unmodified-$now.log +for f in "$MODULE_DIR"/src/main.*.rs; do + "$SCRIPT_DIR/pointwise_try_build.sh" "$f" unmodified "${rustc_flags[@]}" || true +done |& tee "$unmodified_log_file" + +echo +echo + +python3 "$SCRIPT_DIR/pointwise_metrics.py" "$pointwise_log_file" "$unmodified_log_file" diff --git a/c2rust-analyze/scripts/run_pointwise_metrics_cfs.sh b/c2rust-analyze/scripts/run_pointwise_metrics_cfs.sh deleted file mode 100755 index 54300c15b9..0000000000 --- a/c2rust-analyze/scripts/run_pointwise_metrics_cfs.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -set -euo pipefail - -# Run pointwise metrics on cfs_rust_amalgamated. - -if [[ $# -ne 1 ]]; then - echo "Usage: $0 " - exit 1 -fi - -SCRIPT_DIR="$(dirname "$0")" - -# Get the path to cfs_rust_amalgamated -MODULE_DIR="$1" -shift 1 - - -now=$(date +%Y%m%d-%H%M%S) - -# Run c2rust-analyze in pointwise mode -: cargo run --bin c2rust-analyze --release -- \ - --rewrite-mode pointwise --use-manual-shims -- \ - build --manifest-path "$MODULE_DIR/Cargo.toml" \ - |& tee pointwise-cfs-analyze-$now.log \ - || true - -# Try to compile each function separately. - -# Find the sysroot directory of rustc -SYSROOT="$(rustc --print sysroot)" - -# Find the necessary rlibs -extern() { - local name=$1 - local rlib=$(find "$MODULE_DIR/target/debug/deps" -name "lib${name}*.rlib" -print -quit) - echo >&2 "found rlib for $name: $rlib" - echo --extern $name=$rlib -} - -rustc_flags=( - --edition 2021 - --crate-type rlib - #--sysroot "$SYSROOT" - -L "dependency=$MODULE_DIR/target/debug/deps" - $(extern c2rust_bitfields) - $(extern f128) - $(extern libc) - $(extern memoffset) - -A warnings -) - -pointwise_log_file=pointwise-cfs-pointwise-$now.log -for f in "$MODULE_DIR"/src/main.*.rs; do - "$SCRIPT_DIR/pointwise_try_build.sh" "$f" "${rustc_flags[@]}" || true -done |& tee "$pointwise_log_file" - -unmodified_log_file=pointwise-cfs-unmodified-$now.log -for f in "$MODULE_DIR"/src/main.*.rs; do - "$SCRIPT_DIR/pointwise_try_build_unmodified.sh" "$f" "${rustc_flags[@]}" || true -done |& tee "$unmodified_log_file" - -echo -echo - -python3 "$SCRIPT_DIR/pointwise_metrics.py" "$pointwise_log_file" "$unmodified_log_file" diff --git a/c2rust-analyze/scripts/run_pointwise_metrics_lighttpd.sh b/c2rust-analyze/scripts/run_pointwise_metrics_lighttpd.sh deleted file mode 100755 index 18cb1268d7..0000000000 --- a/c2rust-analyze/scripts/run_pointwise_metrics_lighttpd.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash -set -euo pipefail - -# Run pointwise metrics on lighttpd_rust_amalgamated. - -if [[ $# -ne 1 ]]; then - echo "Usage: $0 " - exit 1 -fi - -SCRIPT_DIR="$(dirname "$0")" - -# Get the path to lighttpd_rust_amalgamated -MODULE_DIR="$1" -shift 1 - -# Find the sysroot directory of rustc -SYSROOT="$(rustc --print sysroot)" - -# Find the necessary rlibs -extern() { - local name=$1 - local rlib=$(find "$MODULE_DIR/target/debug/deps" -name "lib${name}*.rlib" -print -quit) - echo >&2 "found rlib for $name: $rlib" - echo --extern $name=$rlib -} - -rustc_flags=( - --edition 2021 - --crate-type rlib - #--sysroot "$SYSROOT" - -L "dependency=$MODULE_DIR/target/debug/deps" - $(extern c2rust_bitfields) - $(extern libc) - -A warnings -) - - -now=$(date +%Y%m%d-%H%M%S) - -# Run c2rust-analyze in pointwise mode -C2RUST_ANALYZE_NO_CARGO=1 \ -C2RUST_ANALYZE_REWRITE_MODE=pointwise \ -C2RUST_ANALYZE_USE_MANUAL_SHIMS=1 \ -cargo run --bin c2rust-analyze --release -- "$MODULE_DIR/src/main.rs" \ - --crate-name "$(basename "$MODULE_DIR")" \ - "${rustc_flags[@]}" \ - |& tee pointwise-lighttpd-analyze-$now.log \ - || true - -# Try to compile each function separately. - -pointwise_log_file=pointwise-lighttpd-pointwise-$now.log -for f in "$MODULE_DIR"/src/main.*.rs; do - "$SCRIPT_DIR/pointwise_try_build.sh" "$f" "${rustc_flags[@]}" || true -done |& tee "$pointwise_log_file" - -unmodified_log_file=pointwise-lighttpd-unmodified-$now.log -for f in "$MODULE_DIR"/src/main.*.rs; do - "$SCRIPT_DIR/pointwise_try_build_unmodified.sh" "$f" "${rustc_flags[@]}" || true -done |& tee "$unmodified_log_file" - -echo -echo - -python3 "$SCRIPT_DIR/pointwise_metrics.py" "$pointwise_log_file" "$unmodified_log_file"