Skip to content

Commit 12d21c0

Browse files
committed
fix
1 parent e0e5703 commit 12d21c0

File tree

1 file changed

+94
-16
lines changed

1 file changed

+94
-16
lines changed

Linux/rbuilder.sh

Lines changed: 94 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
# rbuilder - A minimal alternative to cross-rs/cross
33
# Usage: rbuilder [+toolchain] <cargo-subcommand> [options...]
44

5-
set -e
6-
75
# Constants
86
SCRIPT_NAME="$(basename "$0")"
97
readonly SCRIPT_NAME
@@ -60,25 +58,23 @@ log_verbose() {
6058
echo -e "${BLUE}[VERBOSE]${NC} $*" >&2
6159
}
6260

61+
log_verbose_date() {
62+
if [[ "${RBUILDER_VERBOSE:-0}" != "1" ]]; then
63+
return 0
64+
fi
65+
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $*" >&2
66+
}
67+
6368
# Cleanup function
6469
cleanup() {
6570
local exit_code=$?
66-
67-
if [[ -n "${CONTAINER_ID:-}" ]]; then
68-
log_verbose "Cleaning up container: ${CONTAINER_ID}"
69-
if [[ -n "${USE_SUDO:-}" ]]; then
70-
${USE_SUDO} ${CONTAINER_ENGINE} rm -f "${CONTAINER_ID}" &>/dev/null || true
71-
else
72-
${CONTAINER_ENGINE} rm -f "${CONTAINER_ID}" &>/dev/null || true
73-
fi
74-
fi
75-
71+
bash -c 'pgrep cargo | sudo kill -9 2>/dev/null' 2>/dev/null
72+
bash -c 'sudo pgrep cargo | xargs sudo kill -9 2>/dev/null' 2>/dev/null
7673
# Fix permissions on mounted directories
7774
if [[ -n "${ARTIFACT_DIR:-}" && -d "${ARTIFACT_DIR}" ]]; then
7875
log_verbose "Fixing permissions on artifact directory: ${ARTIFACT_DIR}"
7976
sudo chown -R "$(id -u):$(id -g)" "${ARTIFACT_DIR}" 2>/dev/null || true
8077
fi
81-
8278
if [[ -n "${WORKSPACE_DIR:-}" && -d "${WORKSPACE_DIR}" ]]; then
8379
log_verbose "Fixing permissions on workspace: ${WORKSPACE_DIR}"
8480
sudo chown -R "$(id -u):$(id -g)" "${WORKSPACE_DIR}" 2>/dev/null || true
@@ -88,7 +84,7 @@ cleanup() {
8884
}
8985

9086
# Set up signal handlers
91-
trap cleanup EXIT INT TERM
87+
trap cleanup EXIT
9288

9389
# Help function
9490
show_help() {
@@ -336,11 +332,40 @@ parse_artifact_dir() {
336332
return 1
337333
fi
338334

339-
log_verbose "Artifact directory: ${ARTIFACT_DIR}"
335+
log_info "Artifact directory: ${ARTIFACT_DIR}"
340336
fi
341337
return 0
342338
}
343339

340+
# Update cargo args with the final target
341+
update_cargo_target_arg() {
342+
local i
343+
local target_updated=0
344+
345+
# Find and update existing --target argument
346+
for ((i=0; i<${#CARGO_ARGS[@]}; i++)); do
347+
if [[ "${CARGO_ARGS[i]}" == "--target" ]]; then
348+
if ((i+1 < ${#CARGO_ARGS[@]})); then
349+
CARGO_ARGS[i+1]="${RUST_TARGET}"
350+
target_updated=1
351+
break
352+
fi
353+
elif [[ "${CARGO_ARGS[i]}" =~ ^--target=(.+)$ ]]; then
354+
CARGO_ARGS[i]="--target=${RUST_TARGET}"
355+
target_updated=1
356+
break
357+
fi
358+
done
359+
360+
# Add --target if not present and not default
361+
if [[ "${target_updated}" -eq 0 ]]; then
362+
CARGO_ARGS+=("--target" "${RUST_TARGET}")
363+
log_info "Added --target=${RUST_TARGET} to cargo args"
364+
else
365+
log_info "Updated --target=${RUST_TARGET} in cargo args"
366+
fi
367+
}
368+
344369
# Generate container setup script
345370
# This function creates a script that will run inside the container
346371
# All variables must be properly escaped to avoid host environment pollution
@@ -518,8 +543,12 @@ else
518543
rustup target add "\${RUST_TARGET}" || { echo "ERROR: Failed to add target \${RUST_TARGET}" >&2; exit 1; }
519544
fi
520545
546+
# Re:Set RUST_TARGET
521547
readonly CONTAINER_RUSTFLAGS=${escaped_rustflags}
522548
echo "Final Rust target: \${RUST_TARGET}"
549+
if [[ "\${RUST_TARGET}" == *"riscv64"* ]]; then
550+
echo "FINAL_RUST_TARGET=\${RUST_TARGET}" > "/tmp/rust_target_export"
551+
fi
523552
524553
# Handle RUSTFLAGS setup
525554
if [[ "\${CONTAINER_RBUILD_STATIC}" == "1" ]]; then
@@ -679,6 +708,8 @@ detect_resources() {
679708

680709
# Run container
681710
run_container() {
711+
local container_name
712+
container_name="rbuilder-$(date +%s)-$$"
682713
local setup_script
683714
setup_script="$(generate_setup_script)"
684715

@@ -707,6 +738,7 @@ run_container() {
707738

708739
container_cmd+=(
709740
"${CONTAINER_ENGINE}" "run"
741+
"--name=${container_name}"
710742
"--rm"
711743
"--platform=${CONTAINER_PLATFORM}"
712744
"--workdir=${DEFAULT_WORKSPACE}"
@@ -737,6 +769,47 @@ run_container() {
737769

738770
log_verbose "Container command: ${container_cmd[*]}"
739771

772+
# Create a temporary container to extract the final target for riscv64
773+
if [[ "${RUST_TARGET}" == *"riscv64"* ]]; then
774+
log_verbose "Detecting final RISC-V target..."
775+
776+
local temp_cmd=()
777+
if [[ -n "${USE_SUDO}" ]]; then
778+
temp_cmd+=("${USE_SUDO}")
779+
fi
780+
781+
temp_cmd+=(
782+
"${CONTAINER_ENGINE}" "run" "--rm"
783+
"--platform=${CONTAINER_PLATFORM}"
784+
"--workdir=${DEFAULT_WORKSPACE}"
785+
"${MOUNT_ARGS[@]}"
786+
"${CONTAINER_IMAGE}"
787+
"bash" "-c" "set -e; ${setup_script} && cat '/tmp/rust_target_export' 2>/dev/null || true"
788+
)
789+
790+
local temp_output
791+
if temp_output=$("${temp_cmd[@]}" 2>/dev/null); then
792+
if [[ "${temp_output}" =~ FINAL_RUST_TARGET=(.+) ]]; then
793+
local final_target="${BASH_REMATCH[1]}"
794+
if [[ "${final_target}" != "${RUST_TARGET}" ]]; then
795+
RUST_TARGET="${final_target}"
796+
log_info "Updated RUST_TARGET to: ${RUST_TARGET}"
797+
update_cargo_target_arg
798+
799+
# Rebuild the final command with updated target
800+
final_cmd="set -e; ${setup_script}"
801+
final_cmd+=" && exec cargo"
802+
for arg in "${CARGO_ARGS[@]}"; do
803+
final_cmd+=" $(printf '%q' "${arg}")"
804+
done
805+
container_cmd[${#container_cmd[@]}-1]="${final_cmd}"
806+
fi
807+
fi
808+
fi
809+
fi
810+
811+
log_info "Cargo Args (Final): ${CARGO_ARGS[*]}"
812+
740813
# Execute the container
741814
if ! "${container_cmd[@]}"; then
742815
log_error "Container execution failed"
@@ -782,7 +855,7 @@ parse_args() {
782855
return 1
783856
fi
784857

785-
log_verbose "Cargo args: ${CARGO_ARGS[*]}"
858+
log_info "Cargo args: ${CARGO_ARGS[*]}"
786859
return 0
787860
}
788861

@@ -822,6 +895,11 @@ main() {
822895
if ! parse_artifact_dir; then
823896
exit 1
824897
fi
898+
899+
#Add Update Target
900+
if ! update_cargo_target_arg; then
901+
exit 1
902+
fi
825903

826904
# Pull container image
827905
if ! pull_image; then

0 commit comments

Comments
 (0)