181 lines
4.4 KiB
Bash
181 lines
4.4 KiB
Bash
#!/bin/bash
|
|
|
|
# Function to display usage information
|
|
show_usage() {
|
|
cat << EOF
|
|
Usage: $(basename "$0") [OPTIONS] [TARGET_FILE]
|
|
|
|
Build targets for llgo across multiple platforms.
|
|
|
|
OPTIONS:
|
|
-h, --help Show this help message and exit
|
|
|
|
ARGUMENTS:
|
|
TARGET_FILE Optional. A text file containing target names, one per line.
|
|
Lines starting with # are treated as comments and ignored.
|
|
Empty lines are also ignored.
|
|
|
|
BEHAVIOR:
|
|
Without TARGET_FILE:
|
|
- Automatically discovers all targets from ../../targets/*.json files
|
|
- Extracts target names from JSON filenames
|
|
|
|
With TARGET_FILE:
|
|
- Reads target names from the specified file
|
|
- Supports comments (lines starting with #)
|
|
- Ignores empty lines and whitespace
|
|
|
|
IGNORED TARGETS:
|
|
The following targets are automatically ignored and not built:
|
|
atmega1280, atmega2560, atmega328p, atmega32u4, attiny85,
|
|
fe310, k210, riscv32, riscv64, rp2040
|
|
|
|
RESULT CATEGORIES:
|
|
✅ Successful: Build completed successfully
|
|
🔕 Ignored: Target is in the ignore list
|
|
⚠️ Warned: Build failed with configuration warnings
|
|
❌ Failed: Build failed with errors
|
|
|
|
EXIT CODES:
|
|
0 All builds successful, ignored, or warned only
|
|
1 One or more builds failed with errors
|
|
|
|
EXAMPLES:
|
|
$(basename "$0") # Build all targets from JSON files
|
|
$(basename "$0") my-targets.txt # Build targets from file
|
|
$(basename "$0") --help # Show this help
|
|
|
|
TARGET FILE FORMAT:
|
|
# This is a comment
|
|
esp32
|
|
cortex-m4
|
|
|
|
# Another comment
|
|
riscv64
|
|
EOF
|
|
}
|
|
|
|
# Check for help flag
|
|
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
|
|
show_usage
|
|
exit 0
|
|
fi
|
|
|
|
# Check for invalid number of arguments
|
|
if [ $# -gt 1 ]; then
|
|
echo "Error: Too many arguments."
|
|
echo "Use '$(basename "$0") --help' for usage information."
|
|
exit 1
|
|
fi
|
|
|
|
# Initialize arrays to store results
|
|
successful_targets=()
|
|
ignored_targets=()
|
|
warned_targets=()
|
|
failed_targets=()
|
|
targets_to_build=()
|
|
|
|
# Define ignore list
|
|
ignore_list=(
|
|
"atmega1280"
|
|
"atmega2560"
|
|
"atmega328p"
|
|
"atmega32u4"
|
|
"attiny85"
|
|
"fe310"
|
|
"k210"
|
|
"riscv32"
|
|
"riscv64"
|
|
"rp2040"
|
|
)
|
|
|
|
# Build the targets list based on input method
|
|
if [ $# -eq 1 ]; then
|
|
# Read targets from file
|
|
target_file="$1"
|
|
if [ ! -f "$target_file" ]; then
|
|
echo "Error: Target file '$target_file' not found."
|
|
echo "Use '$(basename "$0") --help' for usage information."
|
|
exit 1
|
|
fi
|
|
|
|
while IFS= read -r target || [[ -n "$target" ]]; do
|
|
# Skip empty lines and comments
|
|
if [[ -z "$target" || "$target" =~ ^[[:space:]]*# ]]; then
|
|
continue
|
|
fi
|
|
|
|
# Trim whitespace
|
|
target=$(echo "$target" | xargs)
|
|
targets_to_build+=("$target")
|
|
done < "$target_file"
|
|
else
|
|
# Use targets from *.json files
|
|
for target_file in ../../targets/*.json; do
|
|
# Extract target name from filename (remove path and .json extension)
|
|
target=$(basename "$target_file" .json)
|
|
targets_to_build+=("$target")
|
|
done
|
|
fi
|
|
|
|
# Process each target
|
|
for target in "${targets_to_build[@]}"; do
|
|
# Check if target is in ignore list
|
|
if [[ " ${ignore_list[@]} " =~ " ${target} " ]]; then
|
|
echo 🔕 $target "(ignored)"
|
|
ignored_targets+=("$target")
|
|
continue
|
|
fi
|
|
|
|
output=$(../../llgo.sh build -target $target -o hello.out . 2>&1)
|
|
if [ $? -eq 0 ]; then
|
|
echo ✅ $target `file hello.out`
|
|
successful_targets+=("$target")
|
|
else
|
|
# Check if output contains warning messages
|
|
if echo "$output" | grep -q "does not have a valid LLVM target triple\|does not have a valid CPU configuration"; then
|
|
echo ⚠️ $target
|
|
echo "$output"
|
|
warned_targets+=("$target")
|
|
else
|
|
echo ❌ $target
|
|
echo "$output"
|
|
failed_targets+=("$target")
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "----------------------------------------"
|
|
|
|
# Output successful targets
|
|
echo "Successful targets (${#successful_targets[@]} total):"
|
|
for target in "${successful_targets[@]}"; do
|
|
echo "$target"
|
|
done
|
|
|
|
echo ""
|
|
echo "Ignored targets (${#ignored_targets[@]} total):"
|
|
for target in "${ignored_targets[@]}"; do
|
|
echo "$target"
|
|
done
|
|
|
|
echo ""
|
|
echo "Warned targets (${#warned_targets[@]} total):"
|
|
for target in "${warned_targets[@]}"; do
|
|
echo "$target"
|
|
done
|
|
|
|
echo ""
|
|
echo "Failed targets (${#failed_targets[@]} total):"
|
|
for target in "${failed_targets[@]}"; do
|
|
echo "$target"
|
|
done
|
|
|
|
# Exit with error code if there are any failed targets
|
|
if [ ${#failed_targets[@]} -gt 0 ]; then
|
|
echo ""
|
|
echo "Build failed with ${#failed_targets[@]} failed targets."
|
|
exit 1
|
|
fi
|