reorganize: consolidate demo directories
- Consolidate _demo, _pydemo, _embdemo into single _demo directory structure
- Organize demos by language: _demo/{go,py,c,embed}/
- Categorize demos based on imports:
- Python library demos (py imports) → _demo/py/
- C/C++ library demos (c/cpp imports) → _demo/c/
- Go-specific demos → _demo/go/
- Embedded demos → _demo/embed/
- Move C-related demos (asm*, cabi*, cgo*, linkname, targetsbuild) from go/ to c/
- Update all path references in README.md and GitHub workflows
- Improve demo organization and navigation as requested in #1256
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
21
_demo/embed/targetsbuild/C/c.go
Normal file
21
_demo/embed/targetsbuild/C/c.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package C
|
||||
|
||||
func XhandleHardFault() {
|
||||
|
||||
}
|
||||
|
||||
func Reset_Handler() {
|
||||
|
||||
}
|
||||
|
||||
func XhandleInterrupt() {
|
||||
|
||||
}
|
||||
|
||||
type dyn64 struct {
|
||||
// Fields for dynamic loader
|
||||
}
|
||||
|
||||
// For nintendo switch
|
||||
func X__dynamic_loader(base uintptr, dyn *dyn64) {
|
||||
}
|
||||
180
_demo/embed/targetsbuild/build.sh
Normal file
180
_demo/embed/targetsbuild/build.sh
Normal file
@@ -0,0 +1,180 @@
|
||||
#!/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.elf . 2>&1)
|
||||
if [ $? -eq 0 ]; then
|
||||
echo ✅ $target `file hello.elf`
|
||||
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
|
||||
6
_demo/embed/targetsbuild/empty.go
Normal file
6
_demo/embed/targetsbuild/empty.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package main
|
||||
|
||||
import _ "github.com/goplus/llgo/_demo/embed/targetsbuild/C"
|
||||
|
||||
func main() {
|
||||
}
|
||||
Reference in New Issue
Block a user