Skip to content

Commit

Permalink
Refactor bash script
Browse files Browse the repository at this point in the history
  • Loading branch information
diemogebhardt committed Nov 26, 2024
1 parent 2a9d944 commit 4e327e4
Showing 1 changed file with 53 additions and 60 deletions.
113 changes: 53 additions & 60 deletions bin/verify-binary-architecture.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,70 +2,63 @@
set -xeuo pipefail

if [ $# -ne 2 ]; then
echo "Usage: $0 <target-triple> <binary-path>"
exit 1
echo "Usage: $0 <target-triple> <binary-path>"
exit 1
fi

TARGET_TRIPLE="$1"
BINARY_PATH="$2"

# Parse target architecture
case "${TARGET_TRIPLE}" in
"x86_64"*) TARGET_ARCHITECTURE="x86_64" ;;
"aarch64"*) TARGET_ARCHITECTURE="aarch64" ;;
*) echo "Unknown target architecture '${TARGET_TRIPLE}'"; exit 1 ;;
esac
# Extract target architecture and OS
TARGET_ARCHITECTURE=$(echo "${TARGET_TRIPLE}" | grep -o 'x86_64\|aarch64' || echo "unknown")
TARGET_OS=$(echo "${TARGET_TRIPLE}" | grep -o 'darwin\|linux\|windows' || echo "unknown")

# Validate inputs
if [ "$TARGET_ARCHITECTURE" = "unknown" ]; then
echo "Unknown target architecture in '${TARGET_TRIPLE}'"
exit 1
fi
if [ "$TARGET_OS" = "unknown" ]; then
echo "Unknown target OS in '${TARGET_TRIPLE}'"
exit 1
fi

# Get expected binary architecture based on target architecture and OS
get_expected_binary_architecture() {
local target_architecture="$1"
local target_os="$2"

case "${target_os}" in
"darwin")
case "${target_architecture}" in
"x86_64") echo "x86_64" ;;
"aarch64") echo "arm64" ;;
esac
;;
"linux")
case "${target_architecture}" in
"x86_64") echo "x86-64" ;;
"aarch64") echo "aarch64" ;;
esac
;;
"windows")
case "${target_architecture}" in
"x86_64") echo "X64" ;;
"aarch64") echo "Aarch64" ;;
esac
;;
esac
}
EXPECTED_BINARY_ARCHITECTURE=$(get_expected_binary_architecture "$TARGET_ARCHITECTURE" "$TARGET_OS")

# Parse binary architecture and map expected binary architecture for target OS
case "${TARGET_TRIPLE}" in
*"darwin"*)
# Parse binary architecture
file_output=$(file -b "${BINARY_PATH}")
BINARY_ARCHITECTURE=$(echo "${file_output}" | grep -o "x86_64\|arm64" || echo "")
# Map expected binary architecture
case "${TARGET_ARCHITECTURE}" in
"x86_64") EXPECTED_BINARY_ARCHITECTURE="x86_64" ;;
"aarch64") EXPECTED_BINARY_ARCHITECTURE="arm64" ;;
*) echo "Unknown Darwin architecture: '${TARGET_ARCHITECTURE}'"; exit 1 ;;
esac
;;
*"linux"*)
# Parse binary architecture
file_output=$(file -b "${BINARY_PATH}")
BINARY_ARCHITECTURE=$(echo "${file_output}" | grep -o "x86-64\|aarch64" | head -n1 || echo "")
# Map expected binary architecture
case "${TARGET_ARCHITECTURE}" in
"x86_64") EXPECTED_BINARY_ARCHITECTURE="x86-64" ;;
"aarch64") EXPECTED_BINARY_ARCHITECTURE="aarch64" ;;
*) echo "Unknown Linux architecture: '${TARGET_ARCHITECTURE}'"; exit 1 ;;
esac
;;
*"windows"*)
# Parse binary architecture
file_output=$(file -b "${BINARY_PATH}")
BINARY_ARCHITECTURE=$(echo "${file_output}" | grep -o "x86-64\|Aarch64" || echo "")
# Map expected binary architecture
case "${TARGET_ARCHITECTURE}" in
"x86_64") EXPECTED_BINARY_ARCHITECTURE="x86-64" ;;
"aarch64") EXPECTED_BINARY_ARCHITECTURE="Aarch64" ;;
*) echo "Unknown Linux architecture: '${TARGET_ARCHITECTURE}'"; exit 1 ;;
esac
# Map expected binary architecture
case "${TARGET_ARCHITECTURE}" in
"x86_64") EXPECTED_BINARY_ARCHITECTURE="X64" ;;
"aarch64") EXPECTED_BINARY_ARCHITECTURE="Arm64" ;;
*) echo "Unknown Windows architecture: '${TARGET_ARCHITECTURE}'"; exit 1 ;;
esac
;;
*)
echo "Unknown target OS: '${TARGET_TRIPLE}'"
exit 1
;;
esac
# Parse binary architecture
file_output=$(file -b "${BINARY_PATH}")
BINARY_ARCHITECTURE=$(echo "${file_output}" | grep -Eo "x86_64|arm64|x86-64|aarch64|X64|Aarch64" | head -n1 || echo "unknown")

# Verify binary architecture
if [[ "${BINARY_ARCHITECTURE}" != "${EXPECTED_BINARY_ARCHITECTURE}" ]]; then
echo "Architecture mismatch for '${TARGET_TRIPLE}'"
echo "Expected: '${EXPECTED_BINARY_ARCHITECTURE}'"
echo "Got: '${BINARY_ARCHITECTURE}'"
exit 1
# Verify that binary architecture matches target architecture
if [ "$BINARY_ARCHITECTURE" != "$EXPECTED_BINARY_ARCHITECTURE" ]; then
echo "Architecture mismatch for '${TARGET_TRIPLE}'"
echo "Expected: '${EXPECTED_BINARY_ARCHITECTURE}'"
echo "Got: '${BINARY_ARCHITECTURE}'"
exit 1
fi

0 comments on commit 4e327e4

Please sign in to comment.