avr: drop GNU toolchain dependency

- Use compiler-rt and picolibc instead of avr-libc.
  - Use ld.lld instead of avr-ld (or avr-gcc).

This makes it much easier to get started with TinyGo on AVR because
installing these extra tools (gcc-avr, avr-libc) can be a hassle.
It also opens the door for future improvements such as ThinLTO.

There is a code size increase but I think it's worth it in the long run.
The code size increase can hopefully be reduced with improvements to the
LLVM AVR backend and to compiler-rt.
This commit is contained in:
Ayke van Laethem
2022-11-04 14:50:26 +01:00
committed by Ron Evans
parent b9bb605257
commit df888acd5e
22 changed files with 74 additions and 41 deletions
+3 -3
View File
@@ -60,7 +60,7 @@ type Device struct {
// AddressSpace is the Go version of an XML element like the following:
//
// <address-space endianness="little" name="data" id="data" start="0x0000" size="0x0900">
// <address-space endianness="little" name="data" id="data" start="0x0000" size="0x0900">
//
// It describes one address space in an AVR microcontroller. One address space
// may have multiple memory segments.
@@ -71,7 +71,7 @@ type AddressSpace struct {
// MemorySegment is the Go version of an XML element like the following:
//
// <memory-segment name="IRAM" start="0x0100" size="0x0800" type="ram" external="false"/>
// <memory-segment name="IRAM" start="0x0100" size="0x0800" type="ram" external="false"/>
//
// It describes a single contiguous area of memory in a particular address space
// (see AddressSpace).
@@ -432,7 +432,7 @@ __vector_default:
.endm
; The interrupt vector of this device. Must be placed at address 0 by the linker.
.section .vectors
.section .vectors, "a", %progbits
.global __vectors
`))
err = t.Execute(out, device.metadata)