aboutsummaryrefslogtreecommitdiffhomepage
path: root/CHANGELOG.md
blob: 8b43941285f25ef43bd7d5a91895bd7c97844755 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
0.34.0
---
* **general**
  - fix `GOOS=wasip1` for `tinygo test`
  - add `-C DIR` flag
  - add initial documentation for project governance
  - add `-ldflags='-extldflags=...'` support
  - improve usage message with `tinygo help` and when passing invalid parameters
* **compiler**
  - `builder`: remove environment variables when invoking Clang, to avoid the environment changing the behavior
  - `builder`: check for the Go toolchain version used to compile TinyGo
  - `cgo`: add `C.CBytes` implementation
  - `compiler`: fix passing weirdly-padded structs as parameters to new goroutines
  - `compiler`: support pragmas on generic functions
  - `compiler`: do not let the slice buffer escape when casting a `[]byte` or `[]rune` to a string, to help escape analysis
  - `compiler`: conform to the latest iteration of the wasm types proposal
  - `loader`: don't panic when main package is not named 'main'
  - `loader`: make sure we always return type checker errors even without type errors
  - `transform`: optimize range over `[]byte(string)`
* **standard library**
  - `crypto/x509`: add package stub to build crypto/x509 on macOS
  - `machine/usb/adc/midi`: fix `PitchBend`
  - `os`: add `Truncate` stub for baremetal
  - `os`: add stubs for `os.File` deadlines
  - `os`: add internal `net.newUnixFile` for the net package
  - `runtime`: stub runtime_{Before,After}Exec for linkage
  - `runtime`: randomize map accesses
  - `runtime`: support `maps.Clone`
  - `runtime`: add more fields to `MemStats`
  - `runtime`: implement newcoro, coroswitch to support package iter
  - `runtime`: disallow defer in interrupts
  - `runtime`: add support for os/signal on Linux and MacOS
  - `runtime`: add gc layout info for some basic types to help the precise GC
* **targets**
  - `darwin`: use Go standard library syscall package instead of a custom one
  - `fe310`: support GPIO `PinInput`
  - `mips`: fix compiler crash with GOMIPS=softfloat and defer
  - `mips`: add big-endian (GOARCH=mips) support
  - `mips`: use MIPS32 (instead of MIPS32R2) as the instruction set for wider compatibility
  - `wasi`: add relative and absolute --dir options to wasmtime args
  - `wasip2`: add wasmtime -S args to support network interfaces
  - `wasm`: add `//go:wasmexport` support (for all WebAssembly targets)
  - `wasm`: use precise instead of conservative GC for WebAssembly (including WASI)
  - `wasm-unknown`: add bulk memory flags since basically every runtime has it now
* **boards**
  - add RAKwireless RAK4631
  - add WaveShare ESP-C3-32S-Kit


0.33.0
---

* **general**
  - use latest version of x/tools
  - add chromeos 9p support for flashing
  - sort compiler error messages by source position in a package
  - don't include prebuilt libraries in the release to simplify packaging and reduce the release tarball size
  - show runtime panic addresses for `tinygo run`
  - support Go 1.23 (including all new language features)
  - `test`: support GOOS/GOARCH pairs in the `-target` flag
  - `test`: remove message after test binary built
* **compiler**
  - remove unused registers for x86_64 linux syscalls
  - remove old atomics workaround for AVR (not necessary in modern LLVM versions)
  - support `golang.org/x/sys/unix` syscalls
  - `builder`: remove workaround for generics race condition
  - `builder`: add package ID to compiler and optimization error messages
  - `builder`: show better error messages for some common linker errors
  - `cgo`: support preprocessor macros passed on the command line
  - `cgo`: use absolute paths for error messages
  - `cgo`: add support for printf
  - `loader`: handle `go list` errors inside TinyGo (for better error messages)
  - `transform`: fix incorrect alignment of heap-to-stack transform
  - `transform`: use thinlto-pre-link passes (instead of the full pipeline) to speed up compilation speed slightly
* **standard library**
  - `crypto/tls`: add CipherSuiteName and some extra fields to ConnectionSTate
  - `internal/abi`: implement initial version of this package
  - `machine`: use new `internal/binary` package
  - `machine`: rewrite Reply() to fix sending long replies in I2C Target Mode
  - `machine/usb/descriptor`: Reset joystick physical
  - `machine/usb/descriptor`: Drop second joystick hat
  - `machine/usb/descriptor`: Add more HID... functions
  - `machine/usb/descriptor`: Fix encoding of values
  - `machine/usb/hid/joystick`: Allow more hat switches
  - `os`: add `Chown`, `Truncate`
  - `os/user`: use stdlib version of this package
  - `reflect`: return correct name for the `unsafe.Pointer` type
  - `reflect`: implement `Type.Overflow*` functions
  - `runtime`: implement dummy `getAuxv` to satisfy golang.org/x/sys/
  - `runtime`: don't zero out new allocations for `-gc=leaking` when they are already zeroed
  - `runtime`: simplify slice growing/appending code
  - `runtime`: print a message when a fatal signal like SIGSEGV happens
  - `runtime/debug`: add `GoVersion` to `debug.BuildInfo`
  - `sync`: add `Map.Clear()`
  - `sync/atomic`: add And* and Or* compiler intrinsics needed for Go 1.23
  - `syscall`: add `Fork` and `Execve`
  - `syscall`: add all MacOS errno values
  - `testing`: stub out `T.Deadline`
  - `unique`: implement custom (naive) version of the unique package
* **targets**
  - `arm`: support `GOARM=*,softfloat` (softfloat support for ARM v5, v6, and v7)
  - `mips`: add linux/mipsle (and experimental linux/mips) support
  - `mips`: add `GOMIPS=softfloat` support
  - `wasip2`: add WASI preview 2 support
  - `wasm/js`: add `node:` prefix in `require()` call of wasm_exec.js
  - `wasm-unknown`: make sure the `os` package can be imported
  - `wasm-unknown`: remove import-memory flag


0.32.0
---

* **general**
  - fix wasi-libc include headers on Nix
  - apply OpenOCD commands after target configuration
  - fix a minor race condition when determining the build tags
  - support UF2 drives with a space in their name on Linux
  - add LLVM 18 support
  - drop support for Go 1.18 to be able to stay up to date

* **compiler**
  - move `-panic=trap` support to the compiler/runtime
  - fix symbol table index for WebAssembly archives
  - fix ed25519 build errors by adjusting the alias names
  - add aliases to generic AES functions
  - fix race condition by temporarily applying a proposed patch
  - `builder`: keep un-wasm-opt'd .wasm if -work was passed
  - `builder`: make sure wasm-opt command line is printed if asked
  - `cgo`: implement shift operations in preprocessor macros
  - `interp`: checking for methodset existence

* **standard library**
  - `machine`: add `__tinygo_spi_tx` function to simulator
  - `machine`: fix simulator I2C support
  - `machine`: add GetRNG support to simulator
  - `machine`: add `TxFifoFreeLevel` for CAN
  - `os`: add `Link`
  - `os`: add `FindProcess` for posix
  - `os`: add `Process.Release` for unix
  - `os`: add `SetReadDeadline` stub
  - `os`, `os/signal`: add signal stubs
  - `os/user`: add stubs for `Lookup{,Group}` and `Group`
  - `reflect`: use int in `StringHeader` and `SliceHeader` on non-AVR platforms
  - `reflect`: fix `NumMethods` for Interface type
  - `runtime`: skip negative sleep durations in sleepTicks

* **targets**
  - `esp32`: add I2C support
  - `rp2040`: move UART0 and UART1 to common file
  - `rp2040`: make all RP2040 boards available for simulation
  - `rp2040`: fix timeUnit type
  - `stm32`: add i2c `Frequency` and `SetBaudRate` function for chips that were missing implementation
  - `wasm-unknown`: add math and memory builtins that LLVM needs
  - `wasip1`: replace existing `-target=wasi` support with wasip1 as supported in Go 1.21+

* **boards**
  - `adafruit-esp32-feather-v2`: add the Adafruit ESP32 Feather V2
  - `badger2040-w`: add support for the Badger2040 W
  - `feather-nrf52840-sense`: fix lack of LXFO
  - `m5paper`: add support for the M5 Paper
  - `mksnanov3`: limit programming speed to 1800 kHz
  - `nucleol476rg`: add stm32 nucleol476rg support
  - `pico-w`: add the Pico W (which is near-idential to the pico target)
  - `thingplus-rp2040`, `waveshare-rp2040-zero`: add WS2812 definition
  - `pca10059-s140v7`: add this variant to the PCA10059 board


0.31.2
---

* **general**
  * update the `net` submodule to updated version with `Buffers` implementation

* **compiler**
  * `syscall`: add wasm_unknown tag to some additional files so it can compile more code

* **standard library**
  * `runtime`: add Frame.Entry field


0.31.1
---

* **general**
  * fix Binaryen build in make task
  * update final build stage of Docker `dev` image to go1.22
  * only use GHA cache for building Docker `dev` image
  * update the `net` submodule to latest version

* **compiler**
  * `interp`: make getelementptr offsets signed
  * `interp`: return a proper error message when indexing out of range


0.31.0
---

* **general**
  * remove LLVM 14 support
  * add LLVM 17 support, and use it by default
  * add Nix flake support
  * update bundled Binaryen to version 116
  * add `ports` subcommand that lists available serial ports for `-port` and `-monitor`
  * support wasmtime version 14
  * add `-serial=rtt` for serial output over SWD
  * add Go 1.22 support and use it by default
  * change minimum Node.js version from 16 to 18
* **compiler**
  * use the new LLVM pass manager
  * allow systems with more stack space to allocate larger values on the stack
  * `build`: fix a crash due to sharing GlobalValues between build instances
  * `cgo`: add `C._Bool` type
  * `cgo`: fix calling CGo callback inside generic function
  * `compileopts`: set `purego` build tag by default so that more packages can be built
  * `compileopts`: force-enable CGo to avoid build issues
  * `compiler`: fix crash on type assert on interfaces with no methods
  * `interp`: print LLVM instruction in traceback
  * `interp`: support runtime times by running them at runtime
  * `loader`: enforce Go language version in the type checker (this may break existing programs with an incorrect Go version in go.mod)
  * `transform`: fix bug in StringToBytes optimization pass
* **standard library**
  * `crypto/tls`: stub out a lot of functions
  * `internal/task`, `machine`: make TinyGo code usable with "big Go" CGo
  * `machine`: implement `I2C.SetBaudRate` consistently across chips
  * `machine`: implement `SPI.Configure` consistently across chips
  * `machine`: add `DeviceID` for nrf, rp2040, sam, stm32
  * `machine`: use smaller UART buffer size on atmega chips
  * `machine/usb`: allow setting a serial number using a linker flag
  * `math`: support more math functions on baremetal (picolibc) systems
  * `net`: replace entire net package with a new one based on the netdev driver
  * `os/user`: add bare-bones implementation of this package
  * `reflect`: stub `CallSlice` and `FuncOf`
  * `reflect`: add `TypeFor[T]`
  * `reflect`: update `IsZero` to Go 1.22 semantics
  * `reflect`: move indirect values into interface when setting interfaces
  * `runtime`: stub `Breakpoint`
  * `sync`: implement trylock
* **targets**
  * `atmega`: use UART double speed mode for fewer errors and higher throughput
  * `atmega328pb`: refactor to enable extra uart
  * `avr`: don't compile large parts of picolibc (math, stdio) for LLVM 17 support
  * `esp32`: switch over to the official SVD file
  * `esp32c3`: implement USB_SERIAL for USBCDC communication
  * `esp32c3`: implement I2C
  * `esp32c3`: implement RNG
  * `esp32c3`: add more ROM functions and update linker script for the in-progress wifi support
  * `esp32c3`: update to newer SVD files
  * `rp2040`: add support for UART hardware flow control
  * `rp2040`: add definition for `machine.PinToggle`
  * `rp2040`: set XOSC startup delay multiplier
  * `samd21`: add support for UART hardware flow control
  * `samd51`: add support for UART hardware flow control
  * `wasm`: increase default stack size to 64k for wasi/wasm targets
  * `wasm`: bump wasi-libc version to SDK 20
  * `wasm`: remove line of dead code in wasm_exec.js
* **new targets/boards**
  * `qtpy-esp32c3`: add Adafruit QT Py ESP32-C3 board
  * `mksnanov3`: add support for the MKS Robin Nano V3.x
  * `nrf52840-generic`: add generic nrf52840 chip support
  * `thumby`: add support for Thumby
  * `wasm`: add new `wasm-unknown` target that doesn't depend on WASI or a browser
* **boards**
  * `arduino-mkrwifi1010`, `arduino-nano33`, `nano-rp2040`, `matrixportal-m4`, `metro-m4-airlift`, `pybadge`, `pyportal`: add `ninafw` build tag and some constants for BLE support
  * `gopher-badge`: fix typo in USB product name
  * `nano-rp2040`: add UART1 and correct mappings for NINA via UART
  * `pico`: bump default stack size from 2kB to 8kB
  * `wioterminal`: expose UART4


0.30.0
---

* **general**
  - add LLVM 16 support, use it by default
* **compiler**
  - `build`: work around a race condition by building Go SSA serially
  - `compiler`: fix a crash by not using the LLVM global context types
  - `interp`: don't copy unknown values in `runtime.sliceCopy` to fix miscompile
  - `interp`: fix crash in error report by not returning raw LLVM values
* **standard library**
  - `machine/usb/adc/midi`: various improvements and API changes
  - `reflect`: add support for `[...]T``[]T` in reflect
* **targets**
  - `atsamd21`, `atsamd51`: add support for USB INTERRUPT OUT
  - `rp2040`: always use the USB device enumeration fix, even in chips that supposedly have the HW fix
  - `wasm`: increase default stack size to 32k for wasi/wasm
* **boards**
  - `gobadge`: add GoBadge target as alias for PyBadge :)
  - `gemma-m0`: add support for the Adafruit Gemma M0


0.29.0
---

* **general**
  - Go 1.21 support
  - use https for renesas submodule #3856
  - ci: rename release-double-zipped to something more useful
  - ci: update Node.js from version 14 to version 16
  - ci: switch GH actions builds to use Go 1.21 final release
  - docker: update clang to version 15
  - docker: use Go 1.21 for Docker dev container build
  - `main`: add target JSON file in `tinygo info` output
  - `main`: improve detection of filesystems
  - `main`: use `go env` instead of doing all detection manually
  - make: add make task to generate Renesas device wrappers
  - make: add task to check NodeJS version before running tests
  - add submodule for Renesas SVD file mirror repo
  - update to go-serial package v1.6.0
  - `testing`: add Testing function
  - `tools/gen-device-svd`: small changes needed for Renesas MCUs
* **compiler**
  - `builder`: update message for max supported Go version
  - `compiler,reflect`: NumMethods reports exported methods only
  - `compiler`: add compiler-rt and wasm symbols to table
  - `compiler`: add compiler-rt to wasm.json
  - `compiler`: add min and max builtin support
  - `compiler`: implement clear builtin for maps
  - `compiler`: implement clear builtin for slices
  - `compiler`: improve panic message when a runtime call is unavailable
  - `compiler`: update .ll test output
  - `loader`: merge go.env file which is now required starting in Go 1.21 to correctly get required packages
* **standard library**
  - `os`: define ErrNoDeadline
  - `reflect`: Add FieldByNameFunc
  - `reflect`: add SetZero
  - `reflect`: fix iterating over maps with interface{} keys
  - `reflect`: implement Value.Grow
  - `reflect`: remove unnecessary heap allocations
  - `reflect`: use .key() instead of a type assert
  - `sync`: add implementation from upstream Go for OnceFunc, OnceValue, and OnceValues
* **targets**
  - `machine`: UART refactor (#3832)
  - `machine/avr`: pin change interrupt
  - `machine/macropad_rp2040`: add machine.BUTTON
  - `machine/nrf`: add I2C timeout
  - `machine/nrf`: wait for stop condition after reading from the I2C bus
  - `machine/nRF52`: set SPI TX/RX lengths even data is empty. Fixes #3868 (#3877)
  - `machine/rp2040`: add missing suffix to CMD_READ_STATUS
  - `machine/rp2040`: add NoPin support
  - `machine/rp2040`: move flash related functions into separate file from C imports for correct  - LSP. Fixes #3852
  - `machine/rp2040`: wait for 1000 us after flash reset to avoid issues with busy USB bus
  - `machine/samd51,rp2040,nrf528xx,stm32`: implement watchdog
  - `machine/samd51`: fix i2cTimeout was decreasing due to cache activation
  - `machine/usb`: Add support for HID Keyboard LEDs
  - `machine/usb`: allow USB Endpoint settings to be changed externally
  - `machine/usb`: refactor endpoint configuration
  - `machine/usb`: remove usbDescriptorConfig
  - `machine/usb/hid,joystick`: fix hidreport (3) (#3802)
  - `machine/usb/hid`: add RxHandler interface
  - `machine/usb/hid`: rename Handler() to TxHandler()
  - `wasi`: allow zero inodes when reading directories
  - `wasm`: add support for GOOS=wasip1
  - `wasm`: fix functions exported through //export
  - `wasm`: remove i64 workaround, use BigInt instead
  - `example`: adjust time offset
  - `example`: simplify pininterrupt
* **boards**
  - `targets`: add AKIZUKI DENSHI AE-RP2040
  - `targets`: adding new uf2 target for PCA10056 (#3765)


0.28.0
---

* **general**
  - fix parallelism in the compiler on Windows by building LLVM with thread support
  - support qemu-user debugging
  - make target JSON msd-volume-name an array
  - print source location when a panic happens in -monitor
  - `test`: don't print `ok` for a successful compile-only
* **compiler**
  - `builder`: remove non-ThinLTO build mode
  - `builder`: fail earlier if Go is not available
  - `builder`: improve `-size=full` in a number of ways
  - `builder`: implement Nordic DFU file writer in Go
  - `cgo`: allow `LDFLAGS: --export=...`
  - `compiler`: support recursive slice types
  - `compiler`: zero struct padding during map operations
  - `compiler`: add llvm.ident metadata
  - `compiler`: remove `unsafe.Pointer(uintptr(v) + idx)` optimization (use `unsafe.Add` instead)
  - `compiler`: add debug info to `//go:embed` data structures for better `-size` output
  - `compiler`: add debug info to string constants
  - `compiler`: fix a minor race condition
  - `compiler`: emit correct alignment in debug info for global variables
  - `compiler`: correctly generate reflect data for local named types
  - `compiler`: add alloc attributes to `runtime.alloc`, reducing flash usage slightly
  - `compiler`: for interface maps, use the original named type if available
  - `compiler`: implement most math/bits functions as LLVM intrinsics
  - `compiler`: ensure all defers have been seen before creating rundefers
* **standard library**
  - `internal/task`: disallow blocking inside an interrupt
  - `machine`: add `CPUReset`
  - `machine/usb/hid`: add MediaKey support
  - `machine/usb/hid/joystick`: move joystick under HID
  - `machine/usb/hid/joystick`: allow joystick settings override
  - `machine/usb/hid/joystick`: handle case where we cannot find the correct HID descriptor
  - `machine/usb/hid/mouse`: add support for mouse back and forward
  - `machine/usb`: add ability to override default VID, PID, manufacturer name, and product name
  - `net`: added missing `TCPAddr` and `UDPAddr` implementations
  - `os`: add IsTimeout function
  - `os`: fix resource leak in `(*File).Close`
  - `os`: add `(*File).Sync`
  - `os`: implement `(*File).ReadDir` for wasi
  - `os`: implement `(*File).WriteAt`
  - `reflect`: make sure null bytes are supported in tags
  - `reflect`: refactor this package to enable many new features
  - `reflect`: add map type methods: `Elem` and `Key`
  - `reflect`: add map methods: `MapIndex`, `MapRange`/`MapIter`, `SetMapIndex`, `MakeMap`, `MapKeys`
  - `reflect`: add slice methods: `Append`, `MakeSlice`, `Slice`, `Slice3`, `Copy`, `Bytes`, `SetLen`
  - `reflect`: add misc methods: `Zero`, `Addr`, `UnsafeAddr`, `OverflowFloat`, `OverflowInt`, `OverflowUint`, `SetBytes`, `Convert`, `CanInt`, `CanFloat`, `CanComplex`, `Comparable`
  - `reflect`: add type methods: `String`, `PkgPath`, `FieldByName`, `FieldByIndex`, `NumMethod`
  - `reflect`: add stubs for `Type.Method`, `CanConvert`, `ArrayOf`, `StructOf`, `MapOf`
  - `reflect`: add stubs for channel select routines/types
  - `reflect`: allow nil rawType to call Kind()
  - `reflect`: ensure all ValueError panics have Kind fields
  - `reflect`: add support for named types
  - `reflect`: improve `Value.String()`
  - `reflect`: set `Index` and `PkgPath` field in `Type.Field`
  - `reflect`: `Type.AssignableTo`: you can assign anything to `interface{}`
  - `reflect`: add type check to `Value.Field`
  - `reflect`: let `TypeOf(nil)` return nil
  - `reflect`: move `StructField.Anonymous` field to match upstream location
  - `reflect`: add `UnsafePointer` for Func types
  - `reflect`: `MapIter.Next` needs to allocate new keys/values every time
  - `reflect`: fix `IsNil` for interfaces
  - `reflect`: fix `Type.Name` to return an empty string for non-named types
  - `reflect`: add `VisibleFields`
  - `reflect`: properly handle embedded structs
  - `reflect`: make sure `PointerTo` works for named types
  - `reflect`: `Set`: convert non-interface to interface
  - `reflect`: `Set`: fix direction of assignment check
  - `reflect`: support channel directions
  - `reflect`: print struct tags in Type.String()
  - `reflect`: properly handle read-only values
  - `runtime`: allow custom-gc SetFinalizer and clarify KeepAlive
  - `runtime`: implement KeepAlive using inline assembly
  - `runtime`: check for heap allocations inside interrupts
  - `runtime`: properly turn pointer into empty interface when hashing
  - `runtime`: improve map size hint usage
  - `runtime`: zero map key/value on deletion to so GC doesn't see them
  - `runtime`: print the address where a panic happened
  - `runtime/debug`: stub `SetGCPercent`, `BuildInfo.Settings`
  - `runtime/metrics`: add this package as a stub
  - `syscall`: `Stat_t` timespec fields are Atimespec on darwin
  - `syscall`: add `Timespec.Unix()` for wasi
  - `syscall`: add fsync using libc
  - `testing`: support -test.count
  - `testing`: make test output unbuffered when verbose
  - `testing`: add -test.skip
  - `testing`: move runtime.GC() call to runN to match upstream
  - `testing`: add -test.shuffle to order randomize test and benchmark order
* **targets**
  - `arm64`: fix register save/restore to include vector registers
  - `attiny1616`: add support for this chip
  - `cortexm`: refactor EnableInterrupts and DisableInterrupts to avoid `arm.AsmFull`
  - `cortexm`: enable functions in RAM for go & cgo
  - `cortexm`: convert SystemStack from `AsmFull` to C inline assembly
  - `cortexm`: fix crash due to wrong stack size offset
  - `nrf`: samd21, stm32: add flash API
  - `nrf`: fix memory issue in ADC read
  - `nrf`: new peripheral type for nrf528xx chips
  - `nrf`: implement target mode
  - `nrf`: improve ADC and add oversampling, longer sample time, and reference voltage
  - `rp2040`: change calling order for device enumeration fix to do first
  - `rp2040`: rtc delayed interrupt
  - `rp2040`: provide better errors for invalid pins on I2C and SPI
  - `rp2040`: change uart to allow for a single pin
  - `rp2040`: implement Flash interface
  - `rp2040`: remove SPI `DataBits` property
  - `rp2040`: unify all linker scripts using LDFLAGS
  - `rp2040`: remove SPI deadline for improved performance
  - `rp2040`: use 4MHz as default frequency for SPI
  - `rp2040`: implement target mode
  - `rp2040`: use DMA for send-only SPI transfers
  - `samd21`: rearrange switch case for get pin cfg
  - `samd21`: fix issue with WS2812 driver by making pin accesses faster
  - `samd51`: enable CMCC cache for greatly improved performance
  - `samd51`: remove extra BK0RDY clear
  - `samd51`: implement Flash interface
  - `samd51`: use correct SPI frequency
  - `samd51`: remove extra BK0RDY clear
  - `samd51`: fix ADC multisampling
  - `wasi`: allow users to set the `runtime_memhash_tsip` or `runtime_memhash_fnv` build tags
  - `wasi`: set `WASMTIME_BACKTRACE_DETAILS` when running in wasmtime.
  - `wasm`: implement the `//go:wasmimport` directive
* **boards**
  - `gameboy-advance`: switch to use register definitions in device/gba
  - `gameboy-advance`: rename display and make pointer receivers
  - `gopher-badge`: Added Gopher Badge support
  - `lorae5`: add needed definition for UART2
  - `lorae5`: correct mapping for I2C bus, add pin mapping to enable power
  - `pinetime`: update the target file (rename from pinetime-devkit0)
  - `qtpy`: fix bad pin assignment
  - `wioterminal`: fix pin definition of BCM13
  - `xiao`: Pins D4 & D5 are I2C1. Use pins D2 & D3 for I2C0.
  - `xiao`: add DefaultUART


0.27.0
---

* **general**
  - all: update musl
  - all: remove "acm:"` prefix for USB vid/pid pair
  - all: add support for LLVM 15
  - all: use DWARF version 4
  - all: add initial (incomplete) support for Go 1.20
  - all: add `-gc=custom` option
  - `main`: print ldflags including ThinLTO flags with -x
  - `main`: fix error message when a serial port can't be accessed
  - `main`: add `-timeout` flag to allow setting how long TinyGo will try looking for a MSD volume for flashing
  - `test`: print PASS on pass when running standalone test binaries
  - `test`: fix printing of benchmark output
  - `test`: print package name when compilation failed (not just when the test failed)
* **compiler**
  - refactor to support LLVM 15
  - `builder`: print compiler commands while building a library
  - `compiler`: fix stack overflow when creating recursive pointer types (fix for LLVM 15+ only)
  - `compiler`: allow map keys and values of ≥256 bytes
  - `cgo`: add support for `C.float` and `C.double`
  - `cgo`: support anonymous enums included in multiple Go files
  - `cgo`: add support for bitwise operators
  - `interp`: add support for constant icmp instructions
  - `transform`: fix memory corruption issues
* **standard library**
  - `machine/usb`: remove allocs in USB ISR
  - `machine/usb`: add `Port()` and deprecate `New()` to have the API better match the singleton that is actually being returned
  - `machine/usb`: change HID usage-maximum to 0xFF
  - `machine/usb`: add USB HID joystick support
  - `machine/usb`: change to not send before endpoint initialization
  - `net`: implement `Pipe`
  - `os`: add stub for `os.Chtimes`
  - `reflect`: stub out `Type.FieldByIndex`
  - `reflect`: add `Value.IsZero` method
  - `reflect`: fix bug in `.Field` method when the field fits in a pointer but the parent doesn't
  - `runtime`: switch some `panic()` calls in the gc to `runtimePanic()` for consistency
  - `runtime`: add xorshift-based fastrand64
  - `runtime`: fix alignment for arm64, arm, xtensa, riscv
  - `runtime`: implement precise GC
  - `runtime/debug`: stub `PrintStack`
  - `sync`: implement simple pooling in `sync.Pool`
  - `syscall`: stubbed `Setuid`, Exec and friends
  - `syscall`: add more stubs as needed for Go 1.20 support
  - `testing`: implement `t.Setenv`
  - `unsafe`: add support for Go 1.20 slice/string functions
* **targets**
  - `all`: do not set stack size per board
  - `all`: update picolibc to v1.7.9
  - `atsame5x`: fix CAN extendedID handling
  - `atsame5x`: reduce heap allocation
  - `avr`: drop GNU toolchain dependency
  - `avr`: fix .data initialization for binaries over 64kB
  - `avr`: support ThinLTO
  - `baremetal`: implements calloc
  - `darwin`: fix `syscall.Open` on darwin/arm64
  - `darwin`: fix error with `tinygo lldb`
  - `esp`: use LLVM Xtensa linker instead of Espressif toolchain
  - `esp`: use ThinLTO for Xtensa
  - `esp32c3`: add SPI support
  - `linux`: include musl `getpagesize` function in release
  - `nrf51`: add ADC implementation
  - `nrf52840`: add PDM support
  - `riscv`: add "target-abi" metadata flag
  - `rp2040`: remove mem allocation in GPIO ISR
  - `rp2040`: avoid allocating clock on heap
  - `rp2040`: add basic GPIO support for PIO
  - `rp2040`: fix USB interrupt issue
  - `rp2040`: fix RP2040-E5 USB errata
  - `stm32`: always set ADC pins to pullups floating
  - `stm32f1`, `stm32f4`: fix ADC by clearing the correct bit for rank after each read
  - `stm32wl`: Fix incomplete RNG initialisation
  - `stm32wlx`: change order for init so clock speeds are set before peripheral start
  - `wasi`: makes wasmtime "run" explicit
  - `wasm`: fix GC scanning of allocas
  - `wasm`: allow custom malloc implementation
  - `wasm`: remove `-wasm-abi=` flag (use `-target` instead)
  - `wasm`: fix scanning of the stack
  - `wasm`: fix panic when allocating 0 bytes using malloc
  - `wasm`: always run wasm-opt even with `-scheduler=none`
  - `wasm`: avoid miscompile with ThinLTO
  - `wasm`: allow the emulator to expand `{tmpDir}`
  - `wasm`: support ThinLTO
  - `windows`: update mingw-w64 version to avoid linker warning
  - `windows`: add ARM64 support
* **boards**
  - Add Waveshare RP2040 Zero
  - Add Arduino Leonardo support
  - Add Adafruit KB2040
  - Add Adafruit Feather M0 Express
  - Add Makerfabs ESP32C3SPI35 TFT Touchscreen board
  - Add Espressif ESP32-C3-DevKit-RUST-1 board
  - `lgt92`: fix OpenOCD configuration
  - `xiao-rp2040`: fix D9 and D10 constants
  - `xiao-rp2040`: add pin definitions

0.26.0
---

* **general**
  - remove support for LLVM 13
  - remove calls to deprecated ioutil package
  - move from `os.IsFoo` to `errors.Is(err, ErrFoo)`
  - fix for builds using an Android host
  - make interp timeout configurable from command line
  - ignore ports with VID/PID if there is no candidates
  - drop support for Go 1.16 and Go 1.17
  - update serial package to v1.3.5 for latest bugfixes
  - remove GOARM from `tinygo info`
  - add flag for setting the goroutine stack size
  - add serial port monitoring functionality
* **compiler**
  - `cgo`: implement support for static functions
  - `cgo`: fix panic when FuncType.Results is nil
  - `compiler`: add aliases for `edwards25519/field.feMul` and `field.feSquare`
  - `compiler`: fix incorrect DWARF type in some generic parameters
  - `compiler`: use LLVM math builtins everywhere
  - `compiler`: replace some math operation bodies with LLVM intrinsics
  - `compiler`: replace math aliases with intrinsics
  - `compiler`: fix `unsafe.Sizeof` for chan and map values
  - `compileopts`: use tags parser from buildutil
  - `compileopts`: use backticks for regexp to avoid extra escapes
  - `compileopts`: fail fast on duplicate values in target field slices
  - `compileopts`: fix windows/arm target triple
  - `compileopts`: improve error handling when loading target/*.json
  - `compileopts`: add support for stlink-dap programmer
  - `compileopts`: do not complain about `-no-debug` on MacOS
  - `goenv`: support `GOOS=android`
  - `interp`: fix reading from external global
  - `loader`: fix link error for `crypto/internal/boring/sig.StandardCrypto`
* **standard library**
  - rename assembly files to .S extension
  - `machine`: add PWM peripheral comments to pins
  - `machine`: improve UARTParity slightly
  - `machine`: do not export DFU_MAGIC_* constants on nrf52840
  - `machine`: rename `PinInputPullUp`/`PinInputPullDown`
  - `machine`: add `KHz`, `MHz`, `GHz` constants, deprecate `TWI_FREQ_*` constants
  - `machine`: remove level triggered pin interrupts
  - `machine`: do not expose `RESET_MAGIC_VALUE`
  - `machine`: use `NoPin` constant where appropriate (instead of `0` for example)
  - `net`: sync net.go with Go 1.18 stdlib
  - `os`: add `SyscallError.Timeout`
  - `os`: add `ErrProcessDone` error
  - `reflect`: implement `CanInterface` and fix string `Index`
  - `runtime`: make `MemStats` available to leaking collector
  - `runtime`: add `MemStats.TotalAlloc`
  - `runtime`: add `MemStats.Mallocs` and `Frees`
  - `runtime`: add support for `time.NewTimer` and `time.NewTicker`
  - `runtime`: implement `resetTimer`
  - `runtime`: ensure some headroom for the GC to run
  - `runtime`: make gc and scheduler asserts settable with build tags
  - `runtime/pprof`: add `WriteHeapProfile`
  - `runtime/pprof`: `runtime/trace`: stub some additional functions
  - `sync`: implement `Map.LoadAndDelete`
  - `syscall`: group WASI consts by purpose
  - `syscall`: add WASI `{D,R}SYNC`, `NONBLOCK` FD flags
  - `syscall`: add ENOTCONN on darwin
  - `testing`: add support for -benchmem
* **targets**
  - remove USB vid/pid pair of bootloader
  - `esp32c3`: remove unused `UARTStopBits` constants
  - `nrf`: implement `GetRNG` function
  - `nrf`: `rp2040`: add `machine.ReadTemperature`
  - `nrf52`: cleanup s140v6 and s140v7 uf2 targets
  - `rp2040`: implement semi-random RNG based on ROSC based on pico-sdk
  - `wasm`: add summary of wasm examples and fix callback bug
  - `wasm`: do not allow undefined symbols (`--allow-undefined`)
  - `wasm`: make sure buffers returned by `malloc` are kept until `free` is called
  - `windows`: save and restore xmm registers when switching goroutines
* **boards**
  - add Pimoroni's Tufty2040
  - add XIAO ESP32C3
  - add Adafruit QT2040
  - add Adafruit QT Py RP2040
  - `esp32c3-12f`: `matrixportal-m4`: `p1am-100`: remove duplicate build tags
  - `hifive1-qemu`: remove this emulated board
  - `wioterminal`: add UART3 for RTL8720DN
  - `xiao-ble`: fix usbpid


0.25.0
---

* **command line**
  - change to ignore PortReset failures
* **compiler**
  - `compiler`: darwin/arm64 is aarch64, not arm
  - `compiler`: don't clobber X18 and FP registers on darwin/arm64
  - `compiler`: fix issue with methods on generic structs
  - `compiler`: do not try to build generic functions
  - `compiler`: fix type names for generic named structs
  - `compiler`: fix multiple defined function issue for generic functions
  - `compiler`: implement `unsafe.Alignof` and `unsafe.Sizeof` for generic code
* **standard library**
  - `machine`: add DTR and RTS to Serialer interface
  - `machine`: reorder pin definitions to improve pin list on tinygo.org
  - `machine/usb`: add support for MIDI
  - `machine/usb`: adjust buffer alignment (samd21, samd51, nrf52840)
  - `machine/usb/midi`: add `NoteOn`, `NoteOff`, and `SendCC` methods
  - `machine/usb/midi`: add definition of MIDI note number
  - `runtime`: add benchmarks for memhash
  - `runtime`: add support for printing slices via print/println
* **targets**
  - `avr`: fix some apparent mistake in atmega1280/atmega2560 pin constants
  - `esp32`: provide hardware pin constants
  - `esp32`: fix WDT reset on the MCH2022 badge
  - `esp32`: optimize SPI transmit
  - `esp32c3`: provide hardware pin constants
  - `esp8266`: provide hardware pin constants like `GPIO2`
  - `nrf51`: define and use `P0_xx` constants
  - `nrf52840`, `samd21`, `samd51`: unify bootloader entry process
  - `nrf52840`, `samd21`, `samd51`: change usbSetup and sendZlp to public
  - `nrf52840`, `samd21`, `samd51`: refactor handleStandardSetup and initEndpoint
  - `nrf52840`, `samd21`, `samd51`: improve usb-device initialization
  - `nrf52840`, `samd21`, `samd51`: move usbcdc to machine/usb/cdc
  - `rp2040`: add usb serial vendor/product ID
  - `rp2040`: add support for usb
  - `rp2040`: change default for serial to usb
  - `rp2040`: add support for `machine.EnterBootloader`
  - `rp2040`: turn off pullup/down when input type is not specified
  - `rp2040`: make picoprobe default openocd interface
  - `samd51`: add support for `DAC1`
  - `samd51`: improve TRNG
  - `wasm`: stub `runtime.buffered`, `runtime.getchar`
  - `wasi`: make leveldb runtime hash the default
* **boards**
  - add Challenger RP2040 LoRa
  - add MCH2022 badge
  - add XIAO RP2040
  - `clue`: remove pins `D21`..`D28`
  - `feather-rp2040`, `macropad-rp2040`: fix qspi-flash settings
  - `xiao-ble`: add support for flash-1200-bps-reset
  - `gopherbot`, `gopherbot2`: add these aliases to simplify for newer users


0.24.0
---

* **command line**
  - remove support for go 1.15
  - remove support for LLVM 11 and LLVM 12
  - add initial Go 1.19 beta support
  - `test`: fix package/... syntax
* **compiler**
  - add support for the embed package
  - `builder`: improve error message for "command not found"
  - `builder`: add support for ThinLTO on MacOS and Windows
  - `builder`: free LLVM objects after use, to reduce memory leaking
  - `builder`: improve `-no-debug` error messages
  - `cgo`: be more strict: CGo now requires every Go file to import the headers it needs
  - `compiler`: alignof(func) is 1 pointer, not 2
  - `compiler`: add support for type parameters (aka generics)
  - `compiler`: implement `recover()` built-in function
  - `compiler`: support atomic, volatile, and LLVM memcpy-like functions in defer
  - `compiler`: drop support for macos syscalls via inline assembly
  - `interp`: do not try to interpret past task.Pause()
  - `interp`: fix some buggy localValue handling
  - `interp`: do not unroll loops
  - `transform`: fix MakeGCStackSlots that caused a possible GC bug on WebAssembly
* **standard library**
  - `os`: enable os.Stdin for baremetal target
  - `reflect`: add `Value.UnsafePointer` method
  - `runtime`: scan GC globals conservatively on Windows, MacOS, Linux and Nintendo Switch
  - `runtime`: add per-map hash seeds
  - `runtime`: handle nil map write panics
  - `runtime`: add stronger hash functions
  - `syscall`: implement `Getpagesize`
* **targets**
  - `atmega2560`: support UART1-3 + example for uart
  - `avr`: use compiler-rt for improved float64 support
  - `avr`: simplify timer-based time
  - `avr`: fix race condition in stack write
  - `darwin`: add support for `GOARCH=arm64` (aka Apple Silicon)
  - `darwin`: support `-size=short` and `-size=full` flag
  - `rp2040`: replace sleep 'busy loop' with timer alarm
  - `rp2040`: align api for `PortMaskSet`, `PortMaskClear`
  - `rp2040`: fix GPIO interrupts
  - `samd21`, `samd51`, `nrf52840`: add support for USBHID (keyboard / mouse)
  - `wasm`: update wasi-libc version
  - `wasm`: use newer WebAssembly features
* **boards**
  - add Badger 2040
  - `matrixportal-m4`: attach USB DP to the correct pin
  - `teensy40`: add I2C support
  - `wioterminal`: fix I2C definition


0.23.0
---

* **command line**
  - add `-work` flag
  - add Go 1.18 support
  - add LLVM 14 support
  - `run`: add support for command-line parameters
  - `build`: calculate default output path if `-o` is not specified
  - `build`: add JSON output
  - `test`: support multiple test binaries with `-c`
  - `test`: support flags like `-v` on all targets (including emulated firmware)
* **compiler**
  - add support for ThinLTO
  - use compiler-rt from LLVM
  - `builder`: prefer GNU build ID over Go build ID for caching
  - `builder`: add support for cross compiling to Darwin
  - `builder`: support machine outlining pass in stacksize calculation
  - `builder`: disable asynchronous unwind tables
  - `compileopts`: fix emulator configuration on non-amd64 Linux architectures
  - `compiler`: move allocations > 256  bytes to the heap
  - `compiler`: fix incorrect `unsafe.Alignof` on some 32-bit architectures
  - `compiler`: accept alias for slice `cap` builtin
  - `compiler`: allow slices of empty structs
  - `compiler`: fix difference in aliases in interface methods
  - `compiler`: make `RawSyscall` an alias for `Syscall`
  - `compiler`: remove support for memory references in `AsmFull`
  - `loader`: only add Clang header path for CGo
  - `transform`: fix poison value in heap-to-stack transform
* **standard library**
  - `internal/fuzz`: add this package as a shim
  - `os`: implement readdir for darwin and linux
  - `os`: add `DirFS`, which is used by many programs to access readdir.
  - `os`: isWine: be compatible with older versions of wine, too
  - `os`: implement `RemoveAll`
  - `os`: Use a `uintptr` for `NewFile`
  - `os`: add stubs for `exec.ExitError` and `ProcessState.ExitCode`
  - `os`: export correct values for `DevNull` for each OS
  - `os`: improve support for `Signal` by fixing various bugs
  - `os`: implement `File.Fd` method
  - `os`: implement `UserHomeDir`
  - `os`: add `exec.ProcessState` stub
  - `os`: implement `Pipe` for darwin
  - `os`: define stub `ErrDeadlineExceeded`
  - `reflect`: add stubs for more missing methods
  - `reflect`: rename `reflect.Ptr` to `reflect.Pointer`
  - `reflect`: add `Value.FieldByIndexErr` stub
  - `runtime`: fix various small GC bugs
  - `runtime`: use memzero for leaking collector instead of manually zeroing objects
  - `runtime`: implement `memhash`
  - `runtime`: implement `fastrand`
  - `runtime`: add stub for `debug.ReadBuildInfo`
  - `runtime`: add stub for `NumCPU`
  - `runtime`: don't inline `runtime.alloc` with `-gc=leaking`
  - `runtime`: add `Version`
  - `runtime`: add stubs for `NumCgoCall` and `NumGoroutine`
  - `runtime`: stub {Lock,Unlock}OSThread on Windows
  - `runtime`: be able to deal with a very small heap
  - `syscall`: make `Environ` return a copy of the environment
  - `syscall`: implement getpagesize and munmap
  - `syscall`: `wasi`: define `MAP_SHARED` and `PROT_READ`
  - `syscall`: stub mmap(), munmap(), MAP_SHARED, PROT_READ, SIGBUS, etc. on nonhosted targets
  - `syscall`: darwin: more complete list of signals
  - `syscall`: `wasi`: more complete list of signals
  - `syscall`: stub `WaitStatus`
  - `syscall/js`: allow copyBytesTo(Go|JS) to use `Uint8ClampedArray`
  - `testing`: implement `TempDir`
  - `testing`: nudge type TB closer to upstream; should be a no-op change.
  - `testing`: on baremetal platforms, use simpler test matcher
* **targets**
  - `atsamd`: fix usbcdc initialization when `-serial=uart`
  - `atsamd51`: allow higher frequency when using SPI
  - `esp`: support CGo
  - `esp32c3`: add support for input pin
  - `esp32c3`: add support for GPIO interrupts
  - `esp32c3`: add support to receive UART data
  - `rp2040`: fix PWM bug at high frequency
  - `rp2040`: fix some minor I2C bugs
  - `rp2040`: fix incorrect inline assembly
  - `rp2040`: fix spurious i2c STOP during write+read transaction
  - `rp2040`: improve ADC support
  - `wasi`: remove `--export-dynamic` linker flag
  - `wasm`: remove heap allocator from wasi-libc
* **boards**
  - `circuitplay-bluefruit`: move pin mappings so board can be compiled for WASM use in Playground
  - `esp32-c3-12f`: add the ESP32-C3-12f Kit
  - `m5stamp-c3`: add pin setting of UART
  - `macropad-rp2040`: add the Adafruit MacroPad RP2040 board
  - `nano-33-ble`: typo in LPS22HB peripheral definition and documentation (#2579)
  - `teensy41`: add the Teensy 4.1 board
  - `teensy40`: add ADC support
  - `teensy40`: add SPI support
  - `thingplus-rp2040`: add the SparkFun Thing Plus RP2040 board
  - `wioterminal`: add DefaultUART
  - `wioterminal`: verify written data when flashing through OpenOCD
  - `xiao-ble`: add XIAO BLE nRF52840 support


0.22.0
---

* **command line**
  - add asyncify to scheduler flag help
  - support -run for tests
  - remove FreeBSD target support
  - add LLVM 12 and LLVM 13 support, use LLVM 13 by default
  - add support for ARM64 MacOS
  - improve help
  - check /run/media as well as /media on Linux for non-debian-based distros
  - `test`: set cmd.Dir even when running emulators
  - `info`: add JSON output using the `-json` flag
* **compiler**
  - `builder`: fix off-by-one in size calculation
  - `builder`: handle concurrent library header rename
  - `builder`: use flock to avoid double-compiles
  - `builder`: use build ID as cache key
  - `builder`: add -fno-stack-protector to musl build
  - `builder`: update clang header search path to look in /usr/lib
  - `builder`: explicitly disable unwind tables for ARM
  - `cgo`: add support for `C.CString` and related functions
  - `compiler`: fix ranging over maps with particular map types
  - `compiler`: add correct debug location to init instructions
  - `compiler`: fix emission of large object layouts
  - `compiler`: work around AVR atomics bugs
  - `compiler`: predeclare runtime.trackPointer
  - `interp`: work around AVR function pointers in globals
  - `interp`: run goroutine starts and checks at runtime
  - `interp`: always run atomic and volatile loads/stores at runtime
  - `interp`: bump timeout to 180 seconds
  - `interp`: handle type assertions on nil interfaces
  - `loader`: eliminate goroot cache inconsistency
  - `loader`: respect $GOROOT when running `go list`
  - `transform`: allocate the correct amount of bytes in an alloca
  - `transform`: remove switched func lowering
* **standard library**
  - `crypto/rand`: show error if platform has no rng
  - `device/*`: add `*_Msk` field for each bit field and avoid duplicates
  - `device/*`: provide Set/Get for each register field described in the SVD files
  - `internal/task`: swap stack chain when switching goroutines
  - `internal/task`: remove `-scheduler=coroutines`
  - `machine`: add `Device` string constant
  - `net`: add bare Interface implementation
  - `net`: add net.Buffers
  - `os`: stub out support for some features
  - `os`: obey TMPDIR on unix, TMP on Windows, etc
  - `os`: implement `ReadAt`, `Mkdir`, `Remove`, `Stat`, `Lstat`, `CreateTemp`, `MkdirAll`, `Chdir`, `Chmod`, `Clearenv`, `Unsetenv`, `Setenv`, `MkdirTemp`, `Rename`, `Seek`, `ExpandEnv`, `Symlink`, `Readlink`
  - `os`: implement `File.Stat`
  - `os`: fix `IsNotExist` on nonexistent path
  - `os`: fix opening files on WASI in read-only mode
  - `os`: work around lack of `syscall.seek` on 386 and arm
  - `reflect`: make sure indirect pointers are handled correctly
  - `runtime`: allow comparing interfaces
  - `runtime`: use LLVM intrinsic to read the stack pointer
  - `runtime`: strengthen hashmap hash function for structs and arrays
  - `runtime`: fix float/complex hashing
  - `runtime`: fix nil map dereference
  - `runtime`: add realloc implementation to GCs
  - `runtime`: handle negative sleep times
  - `runtime`: correct GC scan bounds
  - `runtime`: remove extalloc GC
  - `rumtime`: implement `__sync` libcalls as critical sections for most microcontrollers
  - `runtime`: add stubs for `Func.FileLine` and `Frame.PC`
  - `sync`: fix concurrent read-lock on write-locked RWMutex
  - `sync`: add a package doc
  - `sync`: add tests
  - `syscall`: add support for `Mmap` and `Mprotect`
  - `syscall`: fix array size for mmap slice creation
  - `syscall`: enable `Getwd` in wasi
  - `testing`: add a stub for `CoverMode`
  - `testing`: support -bench option to run benchmarks matching the given pattern.
  - `testing`: support b.SetBytes(); implement sub-benchmarks.
  - `testing`: replace spaces with underscores in test/benchmark names, as upstream does
  - `testing`: implement testing.Cleanup
  - `testing`: allow filtering subbenchmarks with the `-bench` flag
  - `testing`: implement `-benchtime` flag
  - `testing`: print duration
  - `testing`: allow filtering of subtests using `-run`
* **targets**
  - `all`: change LLVM features to match vanilla Clang
  - `avr`: use interrupt-based timer which is much more accurate
  - `nrf`: fix races in I2C
  - `samd51`: implement TRNG for randomness
  - `stm32`: pull-up on I2C lines
  - `stm32`: fix timeout for i2c comms
  - `stm32f4`, `stm32f103`: initial implementation for ADC
  - `stm32f4`, `stm32f7`, `stm32l0x2`, `stm32l4`, `stm32l5`, `stm32wl`: TRNG implementation in crypto/rand
  - `stm32wl`: add I2C support
  - `windows`: add support for the `-size=` flag
  - `wasm`: add support for `tinygo test`
  - `wasi`, `wasm`: raise default stack size to 16 KiB
* **boards**
  - add M5Stack
  - add lorae5 (stm32wle) support
  - add Generic Node Sensor Edition
  - add STM32F469 Discovery
  - add M5Stamp C3
  - add Blues Wireless Swan
  - `bluepill`: add definitions for ADC pins
  - `stm32f4disco`: add definitions for ADC pins
  - `stm32l552ze`: use supported stlink interface
  - `microbit-v2`: add some pin definitions


0.21.0
---

* **command line**
  - drop support for LLVM 10
  - `build`: drop support for LLVM targets in the -target flag
  - `build`: fix paths in error messages on Windows
  - `build`: add -p flag to set parallelism
  - `lldb`: implement `tinygo lldb` subcommand
  - `test`: use emulator exit code instead of parsing test output
  - `test`: pass testing arguments to wasmtime
* **compiler**
  - use -opt flag for optimization level in CFlags (-Os, etc)
  - `builder`: improve accuracy of the -size=full flag
  - `builder`: hardcode some more frame sizes for __aeabi_* functions
  - `builder`: add support for -size= flag for WebAssembly
  - `cgo`: fix line/column reporting in syntax error messages
  - `cgo`: support function definitions in CGo headers
  - `cgo`: implement rudimentary C array decaying
  - `cgo`: add support for stdio in picolibc and wasi-libc
  - `cgo`: run CGo parser per file, not per CGo fragment
  - `compiler`: fix unintentionally exported math functions
  - `compiler`: properly implement div and rem operations
  - `compiler`: add support for recursive function types
  - `compiler`: add support for the `go` keyword on interface methods
  - `compiler`: add minsize attribute for -Oz
  - `compiler`: add "target-cpu" and "target-features" attributes
  - `compiler`: fix indices into strings and arrays
  - `compiler`: fix string compare functions
  - `interp`: simplify some code to avoid some errors
  - `interp`: support recursive globals (like linked lists) in globals
  - `interp`: support constant globals
  - `interp`: fix reverting of extractvalue/insertvalue with multiple indices
  - `transform`: work around renamed return type after merging LLVM modules
* **standard library**
  - `internal/bytealg`: fix indexing error in Compare()
  - `machine`: support Pin.Get() function when the pin is configured as output
  - `net`, `syscall`: Reduce code duplication by switching to internal/itoa.
  - `os`: don't try to read executable path on baremetal
  - `os`: implement Getwd
  - `os`: add File.WriteString and File.WriteAt
  - `reflect`: fix type.Size() to account for struct padding
  - `reflect`: don't construct an interface-in-interface value
  - `reflect`: implement Value.Elem() for interface values
  - `reflect`: fix Value.Index() in a specific case
  - `reflect`: add support for DeepEqual
  - `runtime`: add another set of invalid unicode runes to encodeUTF8()
  - `runtime`: only initialize os.runtime_args when needed
  - `runtime`: only use CRLF on baremetal systems for println
  - `runtime/debug`: stub `debug.SetMaxStack`
  - `runtime/debug`: stub `debug.Stack`
  - `testing`: add a stub for t.Parallel()
  - `testing`: add support for -test.short flag
  - `testing`: stub B.ReportAllocs()
  - `testing`: add `testing.Verbose`
  - `testing`: stub `testing.AllocsPerRun`
* **targets**
  - fix gen-device-svd to handle 64-bit values
  - add CPU and Features property to all targets
  - match LLVM triple to the one Clang uses
  - `atsam`: simplify definition of SERCOM UART, I2C and SPI peripherals
  - `atsam`: move I2S0 to machine file
  - `esp32`: fix SPI configuration
  - `esp32c3`: add support for GDB debugging
  - `esp32c3`: add support for CPU interrupts
  - `esp32c3`: use tasks scheduler by default
  - `fe310`: increase CPU frequency from 16MHz to 320MHz
  - `fe310`: add support for bit banging drivers
  - `linux`: build static binaries using musl
  - `linux`: reduce binary size by calling `write` instead of `putchar`
  - `linux`: add support for GOARM
  - `riscv`: implement 32-bit atomic operations
  - `riscv`: align the heap to 16 bytes
  - `riscv`: switch to tasks-based scheduler
  - `rp2040`: add CPUFrequency()
  - `rp2040`: improve I2C baud rate configuration
  - `rp2040`: add pin interrupt API
  - `rp2040`: refactor PWM code and fix Period calculation
  - `stm32f103`: fix SPI
  - `stm32f103`: make SPI frequency selection more flexible
  - `qemu`: signal correct exit code to QEMU
  - `wasi`: run C/C++ constructors at startup
  - `wasm`: ensure heapptr is aligned
  - `wasm`: update wasi-libc dependency
  - `wasm`: wasi: use asyncify
  - `wasm`: support `-scheduler=none`
  - `windows`: add support for Windows (amd64 only for now)
* **boards**
  - `feather-stm32f405`, `feather-rp2040`: add I2C pin names
  - `m5stack-core2`: add M5Stack Core2
  - `nano-33-ble`: SoftDevice s140v7 support
  - `nano-33-ble`: add constants for more on-board pins


0.20.0
---

* **command line**
  - add support for Go 1.17
  - improve Go version detection
  - add support for the Black Magic Probe (BMP)
  - add a flag for creating cpu profiles
* **compiler**
  - `builder:` list libraries at the end of the linker command
  - `builder:` strip debug information at link time instead of at compile time
  - `builder:` add missing error check for `ioutil.TempFile()`
  - `builder:` simplify running of jobs
  - `compiler:` move LLVM math builtin support into the compiler
  - `compiler:` move math aliases from the runtime to the compiler
  - `compiler:` add aliases for many hashing packages
  - `compiler:` add `*ssa.MakeSlice` bounds tests
  - `compiler:` fix max possible slice
  - `compiler:` add support for new language features of Go 1.17
  - `compiler:` fix equally named structs in different scopes
  - `compiler:` avoid zero-sized alloca in channel operations
  - `interp:` don't ignore array indices for untyped objects
  - `interp:` keep reverted package initializers in order
  - `interp:` fix bug in compiler-time/run-time package initializers
  - `loader:` fix panic in CGo files with syntax errors
  - `transform:` improve GC stack slot pass to work around a bug
* **standard library**
  - `crypto/rand`: switch to `arc4random_buf`
  - `math:` fix `math.Max` and `math.Min`
  - `math/big`: fix undefined symbols error
  - `net:` add MAC address implementation
  - `os:` implement `os.Executable`
  - `os:` add `SEEK_SET`, `SEEK_CUR`, and `SEEK_END`
  - `reflect:` add StructField.IsExported method
  - `runtime:` reset heapptr to heapStart after preinit()
  - `runtime:` add `subsections_via_symbols` to assembly files on darwin
  - `testing:` add subset implementation of Benchmark
  - `testing:` test testing package using `tinygo test`
  - `testing:` add support for the `-test.v` flag
* **targets**
  - `386:` bump minimum requirement to the Pentium 4
  - `arm:` switch to Thumb instruction set on ARM
  - `atsamd:` fix copy-paste error for atsamd21/51 calibTrim block
  - `baremetal`,`wasm`: support command line params and environment variables
  - `cortexm:` fix stack overflow because of unaligned stacks
  - `esp32c3:` add support for the ESP32-C3 from Espressif
  - `nrf52840:` fix ram size
  - `nxpmk66f18:` fix a suspicious bitwise operation
  - `rp2040:` add SPI support
  - `rp2040:` add I2C support
  - `rp2040:` add PWM implementation
  - `rp2040:` add openocd configuration
  - `stm32:` add support for PortMask* functions for WS2812 support
  - `unix:` fix time base for time.Now()
  - `unix:` check for mmap error and act accordingly
  - `wasm:` override dlmalloc heap implementation from wasi-libc
  - `wasm:` align heap to 16 bytes
  - `wasm:` add support for the crypto/rand package
* **boards**
  - add `DefaultUART` to adafruit boards
  - `arduino-mkrwifi1010:` add board definition for Arduino MKR WiFi 1010
  - `arduino-mkrwifi1010:` fix pin definition of `NINA_RESETN`
  - `feather-nrf52:` fix pin definition of uart
  - `feather-rp2040:` add pin name definition
  - `gameboy-advance:` fix ROM header
  - `mdbt50qrx-uf2:` add Raytac MDBT50Q-RX Dongle with TinyUF2
  - `nano-rp2040:` define `NINA_SPI` and fix wifinina pins
  - `teensy40:` enable hardware UART reconfiguration, fix receive watermark interrupt


0.19.0
---

* **command line**
  - don't consider compile-only tests as failing
  - add -test flag for `tinygo list`
  - escape commands while printing them with the -x flag
  - make flash-command portable and safer to use
  - use `extended-remote` instead of `remote` in GDB
  - detect specific serial port IDs based on USB vid/pid
  - add a flag to the command line to select the serial implementation
* **compiler**
  - `cgo`: improve constant parser
  - `compiler`: support chained interrupt handlers
  - `compiler`: add support for running a builtin in a goroutine
  - `compiler`: do not emit nil checks for loading closure variables
  - `compiler`: skip context parameter when starting regular goroutine
  - `compiler`: refactor method names
  - `compiler`: add function and global section pragmas
  - `compiler`: implement `syscall.rawSyscallNoError` in inline assembly
  - `interp`: ignore inline assembly in markExternal
  - `interp`: fix a bug in pointer cast workaround
  - `loader`: fix testing a main package
* **standard library**
  - `crypto/rand`: replace this package with a TinyGo version
  - `machine`: make USBCDC global a pointer
  - `machine`: make UART objects pointer receivers
  - `machine`: define Serial as the default output
  - `net`: add initial support for net.IP
  - `net`: add more net compatibility
  - `os`: add stub for os.ReadDir
  - `os`: add FileMode constants from Go 1.16
  - `os`: add stubs required for net/http
  - `os`: implement process related functions
  - `reflect`: implement AppendSlice
  - `reflect`: add stubs required for net/http
  - `runtime`: make task.Data a 64-bit integer to avoid overflow
  - `runtime`: expose memory stats
  - `sync`: implement NewCond
  - `syscall`: fix int type in libc version
* **targets**
  - `cortexm`: do not disable interrupts on abort
  - `cortexm`: bump default stack size to 2048 bytes
  - `nrf`: avoid heap allocation in waitForEvent
  - `nrf`: don't trigger a heap allocation in SPI.Transfer
  - `nrf52840`: add support for flashing with the BOSSA tool
  - `rp2040`: add support for GPIO input
  - `rp2040`: add basic support for ADC
  - `rp2040`: gpio and adc pin definitions
  - `rp2040`: implement UART
  - `rp2040`: patch elf to checksum 2nd stage boot
  - `stm32`: add PWM for most chips
  - `stm32`: add support for pin interrupts
  - `stm32f103`: add support for PinInputPullup / PinInputPulldown
  - `wasi`: remove wasm build tag
* **boards**
  - `feather-rp2040`: add support for this board
  - `feather-nrf52840-sense`: add board definition for this board
  - `pca10059`: support flashing from Windows
  - `nano-rp2040`: add this board
  - `nano-33-ble`: add support for this board
  - `pico`: add the Raspberry Pi Pico board with the new RP2040 chip
  - `qtpy`: add pin for neopixels
  - all: add definition for ws2812 for supported boards


0.18.0
---

* **command line**
  - drop support for Go 1.11 and 1.12
  - throw an error when no target is specified on Windows
  - improve error messages in `getDefaultPort()`, support for multiple ports
  - remove `-cflags` and `-ldflags` flags
  - implement `-ldflags="-X ..."`
  - add `-print-allocs` flag that lets you print all heap allocations
  - openocd commands in tinygo command line
  - add `-llvm-features` parameter
  - match `go test` output
  - discover USB ports only, this will ignore f.ex. bluetooth
  - use physicmal path instead of cached GOROOT in function getGoroot
  - add goroot for snap installs
* **compiler**
  - `builder`: add support for `-opt=0`
  - `builder`, `compiler`: compile and cache packages in parallel
  - `builder`: run interp per package
  - `builder`: cache C and assembly file outputs
  - `builder`: add support for `-x` flag to print commands
  - `builder`: add optsize attribute while building the package
  - `builder`: run function passes per package
  - `builder`: hard code Clang compiler
  - `compiler`: do not use `llvm.GlobalContext()`
  - `compiler`: remove SimpleDCE pass
  - `compiler`: do not emit nil checks for `*ssa.Alloc` instructions
  - `compiler`: merge `runtime.typecodeID` and runtime.typeInInterface
  - `compiler`: do not check for impossible type asserts
  - `compiler`: fix use of global context: `llvm.Int32Type()`
  - `compiler`: add interface IR test
  - `compiler`: fix lack of method name in interface matching
  - `compiler`: fix "fragment covers entire variable" bug
  - `compiler`: optimize string literals and globals
  - `compiler`: decouple func lowering from interface type codes
  - `compiler`: add function attributes to some runtime calls
  - `compiler`: improve position information in error messages
  - `cgo`: add support for CFLAGS in .c files
  - `interp`: support GEP on fixed (MMIO) addresses
  - `interp`: handle `(reflect.Type).Elem()`
  - `interp`: add support for runtime.interfaceMethod
  - `interp`: make toLLVMValue return an error instead of panicking
  - `interp`: add support for switch statement
  - `interp`: fix phi instruction
  - `interp`: remove map support
  - `interp`: support extractvalue/insertvalue with multiple operands
  - `transform`: optimize string comparisons against ""
  - `transform`: optimize `reflect.Type` `Implements()` method
  - `transform`: fix bug in interface lowering when signatures are renamed
  - `transform`: don't rely on struct name of `runtime.typecodeID`
  - `transform`: use IPSCCP pass instead of the constant propagation pass
  - `transform`: fix func lowering assertion failure
  - `transform`: do not lower zero-sized alloc to alloca
  - `transform`: split interface and reflect lowering
* **standard library**
  - `runtime`: add dummy debug package
  - `machine`: fix data shift/mask in newUSBSetup
  - `machine`: make `machine.I2C0` and similar objects pointers
  - `machine`: unify usbcdc code
  - `machine`: refactor PWM support
  - `machine`: avoid heap allocations in USB code
  - `reflect`: let `reflect.Type` be of interface type
  - `reflect`: implement a number of stub functions
  - `reflect`: check for access in the `Interface` method call
  - `reflect`: fix `AssignableTo` and `Implements` methods
  - `reflect`: implement `Value.CanAddr`
  - `reflect`: implement `Sizeof` and `Alignof` for func values
  - `reflect`: implement `New` function
  - `runtime`: implement command line arguments in hosted environments
  - `runtime`: implement environment variables for Linux
  - `runtime`: improve timers on nrf, and samd chips
* **targets**
  - all: use -Qunused-arguments only for assembly files
  - `atmega1280`: add PWM support
  - `attiny`: remove dummy UART
  - `atsamd21`: improve SPI
  - `atsamd51`: fix PWM support in atsamd51p20
  - `atsamd5x`: improve SPI
  - `atsamd51`, `atsame5x`: unify samd51 and same5x
  - `atsamd51`, `atsamd21`: fix `ADC.Get()` value at 8bit and 10bit
  - `atsame5x`: add support for CAN
  - `avr`: remove I2C stubs from attiny support
  - `cortexm`: check for `arm-none-eabi-gdb` and `gdb-multiarch` commands
  - `cortexm`: add `__isr_vector` symbol
  - `cortexm`: disable FPU on Cortex-M4
  - `cortexm`: clean up Cortex-M target files
  - `fe310`: fix SPI read
  - `gameboy-advance`: Fix RGBA color interpretation
  - `nrf52833`: add PWM support
  - `stm32l0`: use unified UART logic
  - `stm32`: move f103 (bluepill) to common i2c code
  - `stm32`: separate altfunc selection for UART Tx/Rx
  - `stm32`: i2c implementation for F7, L5 and L4 MCUs
  - `stm32`: make SPI CLK fast to fix data issue
  - `stm32`: support SPI on L4 series
  - `unix`: avoid possible heap allocation with `-opt=0`
  - `unix`: use conservative GC by default
  - `unix`: use the tasks scheduler instead of coroutines
  - `wasi`: upgrade WASI version to wasi_snapshot_preview1
  - `wasi`: darwin: support basic file io based on libc
  - `wasm`: only export explicitly exported functions
  - `wasm`: use WASI ABI for exit function
  - `wasm`: scan globals conservatively
* **boards**
  - `arduino-mega1280`: add support for the Arduino Mega 1280
  - `arduino-nano-new`: Add Arduino Nano w/ New Bootloader target
  - `atsame54-xpro`: add initial support this board
  - `feather-m4-can`: add initial support for this board
  - `grandcentral-m4`: add board support for Adafruit Grand Central M4 (SAMD51)
  - `lgt92`: update to new UART structure
  - `microbit`: remove LED constant
  - `microbit-v2`: add support for S113 SoftDevice
  - `nucleol432`: add support for this board
  - `nucleo-l031k6`: add this board
  - `pca10059`: initial support for this board
  - `qtpy`: fix msd-volume-name
  - `qtpy`: fix i2c setting
  - `teensy40`: move txBuffer allocation to UART declaration
  - `teensy40`: add UART0 as alias for UART1


0.17.0

---
* **command line**
  - switch to LLVM 11 for static builds
  - support gdb debugging with AVR
  - add support for additional openocd commands
  - add `-x` flag to print commands
  - use LLVM 11 by default when linking LLVM dynamically
  - update go-llvm to use LLVM 11 on macOS
  - bump go.bug.st/serial to version 1.1.2
  - do not build LLVM with libxml to work around a bugo on macOS
  - add support for Go 1.16
  - support gdb daemonization on Windows
  - remove support for LLVM 9, to fix CI
  - kill OpenOCD if it does not exit with a regular quit signal
  - support `-ocd-output` on Windows
* **compiler**
  - `builder`: parallelize most of the build
  - `builder`: remove unused cacheKey parameter
  - `builder`: add -mcpu flag while building libraries
  - `builder`: wait for running jobs to finish
  - `cgo`: add support for variadic functions
  - `compiler`: fix undefined behavior in wordpack
  - `compiler`: fix incorrect "exported function" panic
  - `compiler`: fix non-int integer constants (fixing a crash)
  - `compiler`: refactor and add tests
  - `compiler`: emit a nil check when slicing an array pointer
  - `compiler`: saturate float-to-int conversions
  - `compiler`: test float to int conversions and fix upper-bound calculation
  - `compiler`: support all kinds of deferred builtins
  - `compiler`: remove ir package
  - `compiler`: remove unnecessary main.main call workaround
  - `compiler`: move the setting of attributes to getFunction
  - `compiler`: create runtime types lazily when needed
  - `compiler`: move settings to a separate Config struct
  - `compiler`: work around an ARM backend bug in LLVM
  - `interp`: rewrite entire package
  - `interp`: fix alignment of untyped globals
  - `loader`: use name "main" for the main package
  - `loader`: support imports from vendor directories
  - `stacksize`: add support for DW_CFA_offset_extended
  - `transform`: show better error message in coroutines lowering
* **standard library**
  - `machine`: accept configuration struct for ADC parameters
  - `machine`: make I2C.Configure signature consistent
  - `reflect`: implement PtrTo
  - `runtime`: refactor to simplify stack switching
  - `runtime`: put metadata at the top end of the heap
* **targets**
  - `atsam`: add a length check to findPinPadMapping
  - `atsam`: improve USBCDC
  - `atsam`: avoid infinite loop when USBCDC is disconnected
  - `avr`: add SPI support for Atmega based chips
  - `avr`: use Clang for compiling C and assembly files
  - `esp32`: implement task based scheduler
  - `esp32`: enable the FPU
  - `esp8266`: implement task based scheduler
  - `esp`: add compiler-rt library
  - `esp`: add picolibc
  - `nrf`: refactor code a bit to reduce duplication
  - `nrf`: use SPIM peripheral instead of the legacy SPI peripheral
  - `nrf`: update nrfx submodule to latest commit
  - `nrf52840`: ensure that USB CDC interface is only initialized once
  - `nrf52840`: improve USBCDC
  - `stm32`: use stm32-rs SVDs which are of much higher quality
  - `stm32`: harmonization of UART logic
  - `stm32`: replace I2C addressable interface with simpler type
  - `stm32`: fix i2c and add stm32f407 i2c
  - `stm32`: revert change that adds support for channels in interrupts
  - `wasm`: implement a growable heap
  - `wasm`: fix typo in wasm_exec.js, syscall/js.valueLoadString()
  - `wasm`: Namespaced Wasm Imports so they don't conflict across modules, or reserved LLVM IR
  - `wasi`: support env variables based on libc
  - `wasi`: specify wasi-libc in a different way, to improve error message
* **boards**
  - `matrixportal-m4`: add support for board Adafruit Matrix Portal M4
  - `mkr1000`: add this board
  - `nucleo-f722ze`: add this board
  - `clue`: correct volume name and add alias for release version of Adafruit Clue board
  - `p1am-100`: add support for the P1AM-100 (similar to Arduino MKR)
  - `microbit-v2`: add initial support based on work done by @alankrantas thank you!
  - `lgt92`: support for STM32L0 MCUs and Dragino LGT92 device
  - `nicenano`: nice!nano board support
  - `circuitplay-bluefruit`: correct internal I2C pin mapping
  - `clue`: correct for lack of low frequency crystal
  - `digispark`: split off attiny85 target
  - `nucleo-l552ze`: implementation with CLOCK, LED, and UART
  - `nrf52840-mdk-usb-dongle`: add this board

0.16.0
---

* **command-line**
  - add initial support for LLVM 11
  - make lib64 clang include path check more robust
  - `build`: improve support for GOARCH=386 and add tests
  - `gdb`: add support for qemu-user targets
  - `test`: support non-host tests
  - `test`: add support for -c and -o flags
  - `test`: implement some benchmark stubs
* **compiler**
  - `builder`: improve detection of clang on Fedora
  - `compiler`: fix floating point comparison bugs
  - `compiler`: implement negate for complex numbers
  - `loader`: fix linkname in test binaries
  - `transform`: add missing return pointer restore for regular coroutine tail
    calls
* **standard library**
  - `machine`: switch default frequency to 4MHz
  - `machine`: clarify caller's responsibility in `SetInterrupt`
  - `os`: add `LookupEnv()` stub
  - `reflect`: implement `Swapper`
  - `runtime`: fix UTF-8 decoding
  - `runtime`: gc: use raw stack access whenever possible
  - `runtime`: use dedicated printfloat32
  - `runtime`: allow ranging over a nil map
  - `runtime`: avoid device/nxp dependency in HardFault handler
  - `testing`: implement dummy Helper method
  - `testing`: add Run method
* **targets**
  - `arm64`: add support for SVCall intrinsic
  - `atsamd51`: avoid panic when configuring SPI with SDI=NoPin
  - `avr`: properly support the `.rodata` section
  - `esp8266`: implement `Pin.Get` function
  - `nintendoswitch`: fix crash when printing long lines (> 120)
  - `nintendoswitch`: add env parser and removed unused stuff
  - `nrf`: add I2C error checking
  - `nrf`: give more flexibility in picking SPI speeds
  - `nrf`: fix nrf52832 flash size
  - `stm32f103`: support wakeups from interrupts
  - `stm32f405`: add SPI support
  - `stm32f405`: add I2C support
  - `wasi`: add support for this target
  - `wasi`: use 'generic' ABI by default
  - `wasi`: remove --no-threads flag from wasm-ld
  - `wasm`: add instanceof support for WebAssembly
  - `wasm`: use fixed length buffer for putchar
* **boards**
  - `d1mini`: add this ESP8266 based board
  - `esp32`: use board definitions instead of chip names
  - `qtpy`: add board definition for Adafruit QTPy
  - `teensy40`: add this board

0.15.0
---

* **command-line**
  - add cached GOROOT to info subcommand
  - embed git-hash in tinygo-dev executable
  - implement tinygo targets to list usable targets
  - use simpler file copy instead of file renaming to avoid issues on nrf52840 UF2 bootloaders
  - use ToSlash() to specify program path
  - support flashing esp32/esp8266 directly from tinygo
  - when flashing call PortReset only on other than openocd
* **compiler**
  - `compileopts`: add support for custom binary formats
  - `compiler`: improve display of goroutine wrappers
  - `interp`: don't panic in the Store method
  - `interp`: replace some panics with error messages
  - `interp`: show error line in first line of the traceback
  - `loader`: be more robust when creating the cached GOROOT
  - `loader`: rewrite/refactor much of the code to use go list directly
  - `loader`: use ioutil.TempDir to create a temporary directory
  - `stacksize`: deal with DW_CFA_advance_loc1
* **standard library**
  - `runtime`: use waitForEvents when appropriate
* **wasm**
  - `wasm`: Remove --no-threads from wasm-ld calls.
  - `wasm`: update wasi-libc dependency
* **targets**
  - `arduino-mega2560`: fix flashing on Windows
  - `arm`: automatically determine stack sizes
  - `arm64`: make dynamic loader structs and constants private
  - `avr`: configure emulator in board files
  - `cortexm`: fix stack size calculation with interrupts
  - `flash`: add openocd settings to atsamd21 / atsamd51
  - `flash`: add openocd settings to nrf5
  - `microbit`: reelboard: flash using OpenOCD when needed
  - `nintendoswitch`: Add dynamic loader for runtime loading PIE sections
  - `nintendoswitch`: fix import cycle on dynamic_arm64.go
  - `nintendoswitch`: Fix invalid memory read / write in print calls
  - `nintendoswitch`: simplified assembly code
  - `nintendoswitch`: support outputting .nro files directly
* **boards**
  - `arduino-zero`: Adding support for the Arduino Zero (#1365)
  - `atsamd2x`: fix BAUD value
  - `atsamd5x`: fix BAUD value
  - `bluepill`: Enable stm32's USART2 for the board and map it to UART1 tinygo's device
  - `device/atsamd51x`: add all remaining bitfield values for PCHCTRLm Mapping
  - `esp32`: add libgcc ROM functions to linker script
  - `esp32`: add SPI support
  - `esp32`: add support for basic GPIO
  - `esp32`: add support for the Espressif ESP32 chip
  - `esp32`: configure the I/O matrix for GPIO pins
  - `esp32`: export machine.PortMask* for bitbanging implementations
  - `esp8266`: add support for this chip
  - `machine/atsamd51x,runtime/atsamd51x`: fixes needed for full support for all PWM pins. Also adds some useful constants to clarify peripheral clock usage
  - `machine/itsybitsy-nrf52840`: add support for Adafruit Itsybitsy nrf52840 (#1243)
  - `machine/stm32f4`: refactor common code and add new build tag stm32f4 (#1332)
  - `nrf`: add SoftDevice support for the Circuit Playground Bluefruit
  - `nrf`: call sd_app_evt_wait when the SoftDevice is enabled
  - `nrf52840`: add build tags for SoftDevice support
  - `nrf52840`: use higher priority for USB-CDC code
  - `runtime/atsamd51x`: use PCHCTRL_GCLK_SERCOMX_SLOW for setting clocks on all SERCOM ports
  - `stm32f405`: add basic UART handler
  - `stm32f405`: add STM32F405 machine/runtime, and new board/target feather-stm32f405
* **build**
  - `all`: run test binaries in the correct directory
  - `build`: Fix arch release job
  - `ci`: run `tinygo test` for known-working packages
  - `ci`: set git-fetch-depth to 1
  - `docker`: fix the problem with the wasm build (#1357)
  - `Makefile`: check whether submodules have been downloaded in some common cases
* **docs**
  - add ESP32, ESP8266, and Adafruit Feather STM32F405 to list of supported boards

0.14.1
---
* **command-line**
  - support for Go 1.15
* **compiler**
  - loader:  work around Windows symlink limitation

0.14.0
---
* **command-line**
  - fix `getDefaultPort()` on non-English Windows locales
  - compileopts: improve error reporting of unsupported flags
  - fix test subcommand
  - use auto-retry to locate MSD for UF2 and HEX flashing
  - fix touchSerialPortAt1200bps on Windows
  - support package names with backslashes on Windows
* **compiler**
  - fix a few crashes due to named types
  - add support for atomic operations
  - move the channel blocked list onto the stack
  - fix -gc=none
  - fix named string to `[]byte` slice conversion
  - implement func value and builtin defers
  - add proper parameter names to runtime.initAll, to fix a panic
  - builder: fix picolibc include path
  - builder: use newer version of gohex
  - builder: try to determine stack size information at compile time
  - builder: remove -opt=0
  - interp: fix sync/atomic.Value load/store methods
  - loader: add Go module support
  - transform: fix debug information in func lowering pass
  - transform: do not special-case zero or one implementations of a method call
  - transform: introduce check for method calls on nil interfaces
  - transform: gc: track 0-index GEPs to fix miscompilation
* **cgo**
  - Add LDFlags support
* **standard library**
  - extend stdlib to allow import of more packages
  - replace master/slave terminology with appropriate alternatives (MOSI->SDO
    etc)
  - `internal/bytealg`: reimplement bytealg in pure Go
  - `internal/task`: fix nil panic in (*internal/task.Stack).Pop
  - `os`: add Args and stub it with mock data
  - `os`: implement virtual filesystem support
  - `reflect`: add Cap and Len support for map and chan
  - `runtime`: fix return address in scheduler on RISC-V
  - `runtime`: avoid recursion in printuint64 function
  - `runtime`: replace ReadRegister with AsmFull inline assembly
  - `runtime`: fix compilation errors when using gc.extalloc
  - `runtime`: add cap and len support for chans
  - `runtime`: refactor time handling (improving accuracy)
  - `runtime`: make channels work in interrupts
  - `runtime/interrupt`: add cross-chip disable/restore interrupt support
  - `sync`: implement `sync.Cond`
  - `sync`: add WaitGroup
* **targets**
  - `arm`: allow nesting in DisableInterrupts and EnableInterrupts
  - `arm`: make FPU configuration consistent
  - `arm`: do not mask fault handlers in critical sections
  - `atmega2560`: fix pin mapping for pins D2, D5 and the L port
  - `atsamd`: return an error when an incorrect PWM pin is used
  - `atsamd`: add support for pin change interrupts
  - `atsamd`: add DAC support
  - `atsamd21`: add more ADC pins
  - `atsamd51`: fix ROM / RAM size on atsamd51j20
  - `atsamd51`: add more pins
  - `atsamd51`: add more ADC pins
  - `atsamd51`: add pin change interrupt settings
  - `atsamd51`: extend pinPadMapping
  - `arduino-nano33`: use (U)SB flag to ensure that device can be found when
     not on default port
  - `arduino-nano33`: remove (d)ebug flag to reduce console noise when flashing
  - `avr`: use standard pin numbering
  - `avr`: unify GPIO pin/port code
  - `avr`: add support for PinInputPullup
  - `avr`: work around codegen bug in LLVM 10
  - `avr`: fix target triple
  - `fe310`: remove extra println left in by mistake
  - `feather-nrf52840`: add support for the Feather nRF52840
  - `maixbit`: add board definition and dummy runtime
  - `nintendoswitch`: Add experimental Nintendo Switch support without CRT
  - `nrf`: expose the RAM base address
  - `nrf`: add support for pin change interrupts
  - `nrf`: add microbit-s110v8 target
  - `nrf`: fix bug in SPI.Tx
  - `nrf`: support debugging the PCA10056
  - `pygamer`: add Adafruit PyGamer support
  - `riscv`: fix interrupt configuration bug
  - `riscv`: disable linker relaxations during gp init
  - `stm32f4disco`: add new target with ST-Link v2.1 debugger
  - `teensy36`: add Teensy 3.6 support
  - `wasm`: fix event handling
  - `wasm`: add --no-demangle linker option
  - `wioterminal`: add support for the Seeed Wio Terminal
  - `xiao`: add support for the Seeed XIAO

0.13.1
---
* **standard library**
  - `runtime`: do not put scheduler and GC code in the same section
  - `runtime`: copy stack scan assembly for GBA
* **boards**
  - `gameboy-advance`: always use ARM mode instead of Thumb mode


0.13.0
---
* **command line**
  - use `gdb-multiarch` for debugging Cortex-M chips
  - support `tinygo run` with simavr
  - support LLVM 10
  - support Go 1.14
  - retry 3 times when attempting to do a 1200-baud reset
* **compiler**
  - mark the `abort` function as noreturn
  - fix deferred calls to exported functions
  - add debug info for local variables
  - check for channel size limit
  - refactor coroutine lowering
  - add `dereferenceable_or_null` attribute to pointer parameters
  - do not perform nil checking when indexing slices and on `unsafe.Pointer`
  - remove `runtime.isnil` hack
  - use LLVM builtins for runtime `memcpy`/`memmove`/`memzero` functions
  - implement spec-compliant shifts on negative/overflow
  - support anonymous type asserts
  - track pointer result of string concatenation for GC
  - track PHI nodes for GC
  - add debug info to goroutine start wrappers
  - optimize comparing interface values against nil
  - fix miscompilation when deferring an interface call
  - builder: include picolibc for most baremetal targets
  - builder: run tools (clang, lld) as separate processes
  - builder: use `-fshort-enums` consistently
  - interp: add support for constant type asserts
  - interp: better support for interface operations
  - interp: include backtrace with error
  - transform: do not track const globals for GC
  - transform: replace panics with source locations
  - transform: fix error in interface lowering pass
  - transform: make coroutine lowering deterministic
  - transform: fix miscompilation in func lowering
* **cgo**
  - make `-I` and `-L` paths absolute
* **standard library**
  - `machine`: set the USB VID and PID to the manufacturer values
  - `machine`: correct USB CDC composite descriptors
  - `machine`: move `errors.New` calls to globals
  - `runtime`: support operations on nil maps
  - `runtime`: fix copy builtin return value on AVR
  - `runtime`: refactor goroutines
  - `runtime`: support `-scheduler=none` on most platforms
  - `runtime`: run package initialization in the main goroutine
  - `runtime`: export `malloc` / `free` for use from C
  - `runtime`: add garbage collector that uses an external allocator
  - `runtime`: scan callee-saved registers while marking the stack
  - `runtime`: remove recursion from conservative GC
  - `runtime`: fix blocking select on nil channel
  - `runtime/volatile`: include `ReplaceBits` method
  - `sync`: implement trivial `sync.Map`
* **targets**
  - `arm`: use `-fomit-frame-pointer`
  - `atmega1284`: support this chip for testing purposes
  - `atsamd51`: make QSPI available on all boards
  - `atsamd51`: add support for ADC1
  - `atsamd51`: use new interrupt registration in UART code
  - `attiny`: clean up pin definitions
  - `avr`: use the correct RAM start address
  - `avr`: pass the correct `-mmcu` flag to the linker
  - `avr`: add support for tasks scheduler (disabled by default)
  - `avr`: fix linker problem with overlapping program/data areas
  - `nrf`: fix typo in pin configuration options
  - `nrf`: add lib/nrfx/mdk to include dirs
  - `nrf52840`: implement USB-CDC
  - `riscv`: implement VirtIO target and add RISC-V integration test
  - `riscv`: add I2C support for the HiFive1 rev B board
  - `stm32`: refactor GPIO pin handling
  - `stm32`: refactor UART code
  - `stm32f4`: add SPI
  - `wasm`: support Go 1.14 (breaking previous versions)
  - `wasm`: support `syscall/js.CopyBytesToJS`
  - `wasm`: sync polyfills from Go 1.14.
* **boards**
  - `arduino-mega2560`: add the Arduino Mega 2560
  - `clue-alpha`: add the Adafruit CLUE Alpha
  - `gameboy-advance`: enable debugging with GDB
  - `particle-argon`: add the Particle Argon board
  - `particle-boron`: add the Particle Boron board
  - `particle-xenon`: add the Particle Xenon board
  - `reelboard`: add `reelboard-s140v7` SoftDevice target

0.12.0
---
* **command line**
  - add initial FreeBSD support
  - remove getting a serial port in gdb subcommand
  - add support for debugging through JLinkGDBServer
  - fix CGo when cross compiling
  - remove default port check for Digispark as micronucleus communicates directly using HID
  - differentiate between various serial/USB error messages
* **builder**
  - improve detection of Clang headers
* **compiler**
  - fix assertion on empty interface
  - don't crash when encountering `types.Invalid`
  - revise defer to use heap allocations when running a variable number of times
  - improve error messages for failed imports
  - improve "function redeclared" error
  - add globaldce pass to start of optimization pipeline
  - add support for debugging globals
  - implement RISC-V CSR operations as intrinsics
  - add support for CGO_ENABLED environment variable
  - do not emit debug info for extern globals (bugfix)
  - add support for interrupts
  - implement maps for arbitrary keys
  - interp: error location for "unknown GEP" error
  - wasm-abi: create temporary allocas in the entry block
* **cgo**
  - add support for symbols in `#define`
  - fix a bug in number tokenization
* **standard library**
  - `machine`: avoid bytes package in USB logic
  - `runtime`: fix external address declarations
  - `runtime`: provide implementation for `internal/bytealg.IndexByte`
* **targets**
  - `atsamd51`: fix volatile usage
  - `atsamd51`: fix ADC, updating to 12-bits precision
  - `atsamd51`: refactor SPI pin configuration to only look at pin numbers
  - `atsamd51`: switch UART to use new pin configuration
  - `atsamd51`: fix obvious bug in I2C code
  - `atsamd51`: use only the necessary UART interrupts
  - `atsamd51`: refactor I2C pin handling to auto-detect pin mode
  - `avr`: use a garbage collector
  - `fe310`: use CLINT peripheral for timekeeping
  - `fe310`: add support for PLIC interrupts
  - `fe310`: implement UART receive interrupts
  - `riscv`: support sleeping in QEMU
  - `riscv`: add bare-bones interrupt support
  - `riscv`: print exception PC and code
  - `wasm`: implement memcpy and memset
  - `wasm`: include wasi-libc
  - `wasm`: use wasi ABI for basic startup/stdout
* **boards**
  - `arduino`: make avrdude command line compatible with Windows
  - `arduino-nano`: add this board
  - `arduino-nano33`: fix UART1 and UART2
  - `circuitplay-bluefruit`: add this board
  - `digispark`: add clock speed and pin mappings
  - `gameboy-advance`: include compiler-rt in build
  - `gameboy-advance`: implement interrupt handler
  - `hifive1b`: add support for gdb subcommand
  - `pyportal`: add this board
  - `pyportal`: remove manual SPI pin mapping as now handled by default


0.11.0
---
* **command line**
  - add support for QEMU in `gdb` subcommand
  - use builtin Clang when building statically, dropping the clang-9 dependency
  - search for default serial port on both macOS and Linux
  - windows: support `tinygo flash` directly by using win32 wmi
* **compiler**
  - add location information to the IR checker
  - make reflection sidetables constant globals
  - improve error locations in goroutine lowering
  - interp: improve support for maps with string keys
  - interp: add runtime fallback for mapassign operations
* **standard library**
  - `machine`: add support for `SPI.Tx()` on play.tinygo.org
  - `machine`: rename `CPU_FREQUENCY` to `CPUFrequency()`
* **targets**
  - `adafruit-pybadge`: add Adafruit Pybadge
  - `arduino-nano33`: allow simulation on play.tinygo.org
  - `arduino-nano33`: fix default SPI pin numbers to be D13/D11/D12
  - `circuitplay-express`: allow simulation on play.tinygo.org
  - `hifive1-qemu`: add target for testing RISC-V bare metal in QEMU
  - `riscv`: fix heap corruption due to changes in LLVM 9
  - `riscv`: add support for compiler-rt
  - `qemu`: rename to `cortex-m-qemu`

0.10.0
---
* **command line**
  - halt GDB after flashing with `gdb` subcommand
  - fix a crash when using `-ocd-output`
  - add `info` subcommand
  - add `-programmer` flag
* **builder**
  - macos: use llvm@8 instead of just llvm in paths
  - add `linkerscript` key to target JSON files
  - write a symbol table when writing out the compiler-rt lib
  - make Clang header detection more robust
  - switch to LLVM 9
* **compiler**
  - fix interface miscompilation with reflect
  - fix miscompile of static goroutine calls to closures
  - fix `todo: store` panic
  - fix incorrect starting value for optimized allocations in a loop
  - optimize coroutines on non-Cortex-M targets
  - fix crash for programs which have heap allocations but never hit the GC
  - add support for async interface calls
  - fix inserting non-const values in a const global
  - interp: improve error reporting
  - interp: implement comparing ptrtoint to 0
* **cgo**
  - improve diagnostics
  - implement the constant parser (for `#define`) as a real parser
  - rename reserved field names such as `type`
  - avoid `"unsafe" imported but not used` error
  - include all enums in the CGo Go AST
  - add support for nested structs and unions
  - implement `#cgo CFLAGS`
* **standard library**
  - `reflect`: add implementation of array alignment
  - `runtime`: improve scheduler performance when no goroutines are queued
  - `runtime`: add blocking select
  - `runtime`: implement interface equality in non-trivial cases
  - `runtime`: add AdjustTimeOffset to update current time
  - `runtime`: only implement CountString for required platforms
  - `runtime`: use MSP/PSP registers for scheduling on Cortex-M
* **targets**
  - `arm`: add system timer registers
  - `atmega`: add port C GPIO support
  - `atsamd21`: correct handling of pins >= 32
  - `atsamd21`: i2s initialization fixes
  - `atsamd51`: fix clock init code
  - `atsamd51`: correct initialization for RTC
  - `atsamd51`: fix pin function selection
  - `atsamd51`: pin method cleanup
  - `atsamd51`: allow setting pin mode for each of the SPI pins
  - `atsamd51`: correct channel init and pin map for ADC based on ItsyBitsy-M4
  - `feather-m4`: add Adafruit Feather M4 board
  - `hifive1b`: add support for SPI1
  - `hifive1b`: fix compiling in simulation
  - `linux`: fix time on arm32
  - `metro-m4`: add support for Adafruit Metro M4 Express Airlift board
  - `metro-m4`: fixes for UART2
  - `pinetime-devkit0`: add support for the PineTime dev kit
  - `x9pro`: add support for this smartwatch
  - `pca10040-s132v6`: add support for SoftDevice
  - `pca10056-s140v7`: add support for SoftDevice
  - `arduino-nano33`: added SPI1 connected to NINA-W102 chip on Arduino Nano 33 IOT

0.9.0
---
* **command line**
  - implement 1200-baud UART bootloader reset when flashing boards that support
    it
  - flash using mass-storage device for boards that support it
  - implement `tinygo env`
  - add support for Windows (but not yet producing Windows binaries)
  - add Go version to `tinygo env`
  - update SVD files for up-to-date peripheral interfaces
* **compiler**
  - add `//go:align` pragma
  - fix bug related to type aliases
  - add support for buffered channels
  - remove incorrect reflect optimization
  - implement copying slices in init interpretation
  - add support for constant indices with a named type
  - add support for recursive types like linked lists
  - fix miscompile of function nil panics
  - fix bug related to goroutines
* **standard library**
  - `machine`: do not check for nil slices in `SPI.Tx`
  - `reflectlite`: add support for Go 1.13
  - `runtime`: implement `internal/bytealg.CountString`
  - `sync`: properly handle nil `New` func in `sync.Pool`
* **targets**
  - `arduino`: fix .bss section initialization
  - `fe310`: implement `Pin.Get`
  - `gameboy-advance`: support directly outputting .gba files
  - `samd`: reduce code size by avoiding reflection
  - `samd21`: do not hardcode pin numbers for peripherals
  - `stm32f103`: avoid issue with `time.Sleep` less than 200µs

0.8.0
---
* **command line**
  - fix parsing of beta Go versions
  - check the major/minor installed version of Go before compiling
  - validate `-target` flag better to not panic on an invalid target
* **compiler**
  - implement full slice expression: `s[:2:4]`
  - fix a crash when storing a linked list in an interface
  - fix comparing struct types by making type IDs more unique
  - fix some bugs in IR generation
  - add support for linked lists in reflect data
  - implement `[]rune` to string conversion
  - implement support for `go` on func values
* **standard library**
  - `reflect`: add support for named types
  - `reflect`: add support for `t.Bits()`
  - `reflect`: add basic support for `t.AssignableTo()`
  - `reflect`: implement `t.Align()`
  - `reflect`: add support for struct types
  - `reflect`: fix bug in `v.IsNil` and `v.Pointer` for addressable values
  - `reflect`: implement support for array types
  - `reflect`: implement `t.Comparable()`
  - `runtime`: implement stack-based scheduler
  - `runtime`: fix bug in the sleep queue of the scheduler
  - `runtime`: implement `memcpy` for Cortex-M
  - `testing`: implement stub `testing.B` struct
  - `testing`: add common test logging methods such as Errorf/Fatalf/Printf
* **targets**
  - `386`: add support for linux/386 syscalls
  - `atsamd21`: make SPI pins configurable so that multiple SPI ports can be
    used
  - `atsamd21`: correct issue with invalid first reading coming from ADC
  - `atsamd21`: add support for reset-to-bootloader using 1200baud over USB-CDC
  - `atsamd21`: make pin selection more flexible for peripherals
  - `atsamd21`: fix minimum delay in `time.Sleep`
  - `atsamd51`: fix minimum delay in `time.Sleep`
  - `nrf`: improve SPI write-only speed, by making use of double buffering
  - `stm32f103`: fix SPI frequency selection
  - `stm32f103`: add machine.Pin.Get method for reading GPIO values
  - `stm32f103`: allow board specific UART usage
  - `nucleo-f103rb`: add support for NUCLEO-F103RB board
  - `itsybitsy-m4`: add support for this board with a SAMD51 family chip
  - `cortex-m`: add support for `arm.SystemReset()`
  - `gameboy-advance`: add initial support for the GameBoy Advance
  - `wasm`: add `//go:wasm-module` magic comment to set the wasm module name
  - `wasm`: add syscall/js.valueSetIndex support
  - `wasm`: add syscall/js.valueInvoke support

0.7.1
---
* **targets**
  - `atsamd21`: add support for the `-port` flag in the flash subcommand

0.7.0
---
* **command line**
  - try more locations to find Clang built-in headers
  - add support for `tinygo test`
  - build current directory if no package is specified
  - support custom .json target spec with `-target` flag
  - use zversion.go to detect version of GOROOT version
  - make initial heap size configurable for some targets (currently WebAssembly
    only)
* **cgo**
  - add support for bitfields using generated getters and setters
  - add support for anonymous structs
* **compiler**
  - show an error instead of panicking on duplicate function definitions
  - allow packages like github.com/tinygo-org/tinygo/src/\* by aliasing it
  - remove `//go:volatile` support  
    It has been replaced with the runtime/volatile package.
  - allow pointers in map keys
  - support non-constant syscall numbers
  - implement non-blocking selects
  - add support for the `-tags` flag
  - add support for `string` to `[]rune` conversion
  - implement a portable conservative garbage collector (with support for wasm)
  - add the `//go:noinline` pragma
* **standard library**
  - `os`: add `os.Exit` and `syscall.Exit`
  - `os`: add several stubs
  - `runtime`: fix heap corruption in conservative GC
  - `runtime`: add support for math intrinsics where supported, massively
    speeding up some benchmarks
  - `testing`: add basic support for testing
* **targets**
  - add support for a generic target that calls `__tinygo_*` functions for
    peripheral access
  - `arduino-nano33`: add support for this board
  - `hifive1`: add support for this RISC-V board
  - `reelboard`: add e-paper pins
  - `reelboard`: add `PowerSupplyActive` to enable voltage for on-board devices
  - `wasm`: put the stack at the start of linear memory, to detect stack
    overflows

0.6.0
---
* **command line**
  - some portability improvements
  - make `$GOROOT` more robust and configurable
  - check for Clang at the Homebrew install location as fallback
* **compiler driver**
  - support multiple variations of LLVM commands, for non-Debian distributions
* **compiler**
  - improve code quality in multiple ways
  - make panic configurable, adding trap on panic
  - refactor many internal parts of the compiler
  - print all errors encountered during compilation
  - implement calling function values of a named type
  - implement returning values from blocking functions
  - allow larger-than-int values to be sent across a channel
  - implement complex arithmetic
  - improve hashmap support
  - add debuginfo for function arguments
  - insert nil checks on stores (increasing code size)
  - implement volatile operations as compiler builtins
  - add `//go:inline` pragma
  - add build tags for the Go stdlib version
* **cgo**
  - implement `char`, `enum` and `void*` types
  - support `#include` for builtin headers
  - improve typedef/struct/enum support
  - only include symbols that are necessary, for broader support
  - mark external function args as `nocapture`
  - implement support for some `#define` constants
  - implement support for multiple CGo files in a single package
- **standard library**
  - `machine`: remove microbit matrix (moved to drivers repository)
  - `machine`: refactor pins to use `Pin` type instead of `GPIO`
  - `runtime`: print more interface types on panic, including `error`
* **targets**
  - `arm`: print an error on HardFault (including stack overflows)
  - `atsamd21`: fix a bug in the ADC peripheral
  - `atsamd21`: add support for I2S
  - `feather-m0`: add support for this board
  - `nrf51`: fix a bug in I2C
  - `stm32f103xx`: fix a bug in I2C
  - `syscall`: implement `Exit` on unix
  - `trinket-m0`: add support for this board
  - `wasm`: make _main_ example smaller
  - `wasm`: don't cache wasm file in the server, for ease of debugging
  - `wasm`: work around bug #41508 that caused a deadlock while linking
  - `wasm`: add support for `js.FuncOf`

0.5.0
---
- **compiler driver**
  - use `wasm-ld` instead of `wasm-ld-8` on macOS
  - drop dependency on `llvm-ar`
  - fix linker script includes when running outside `TINYGOROOT`
- **compiler**
  - switch to LLVM 8
  - add support for the Go 1.12 standard library (Go 1.11 is still supported)
  - work around lack of escape analysis due to nil checks
  - implement casting named structs and pointers to them
  - fix int casting to use the source signedness
  - fix some bugs around `make([]T, …)` with uncommon index types
  - some other optimizations
  - support interface asserts in interp for "math/rand" support
  - resolve all func value targets at compile time (wasm-only at the moment)
- **cgo**
  - improve diagnostics
  - implement C `struct`, `union`, and arrays
  - fix CGo-related crash in libclang
  - implement `C.struct_` types
- **targets**
  - all baremetal: pretend to be linux/arm instead of js/wasm
  - `avr`: improve `uintptr` support
  - `cortexm`: implement memmove intrinsic generated by LLVM
  - `cortexm`: use the lld linker instead of `arm-none-eabi-ld`
  - `darwin`: use custom syscall package that links to libSystem.dylib
  - `microbit`: add blink example
  - `samd21`: support I2C1
  - `samd21`: machine/atsamd21: correct pad/pin handling when using both UART
     and USBCDC interfaces at same time
  - `stm32f4discovery`: add support for this board
  - `wasm`: support async func values
  - `wasm`: improve documentation and add extra example

0.4.1
---
- **compiler**
  - fix `objcopy` replacement to include the .data section in the firmware image
  - use `llvm-ar-7` on Linux to fix the Docker image

0.4.0
---
- **compiler**
  - switch to the hardfloat ABI on ARM, which is more widely used
  - avoid a dependency on `objcopy` (`arm-none-eabi-objcopy` etc.)
  - fix a bug in `make([]T, n)` where `n` is 64-bits on a 32-bit platform
  - adapt to a change in the AVR backend in LLVM 8
  - directly support the .uf2 firmware format as used on Adafruit boards
  - fix a bug when calling `panic()` at init time outside of the main package
  - implement nil checks, which results in a ~5% increase in code size
  - inline slice bounds checking, which results in a ~1% decrease in code size
- **targets**
  - `samd21`: fix a bug in port B pins
  - `samd21`: implement SPI peripheral
  - `samd21`: implement ADC peripheral
  - `stm32`: fix a bug in timekeeping
  - `wasm`: fix a bug in `wasm_exec.js` that caused corruption in linear memory
     when running on Node.js.

0.3.0
---
- **compiler**
  - remove old `-initinterp` flag
  - add support for macOS
- **cgo**
  - add support for bool/float/complex types
- **standard library**
  - `device/arm`: add support to disable/enable hardware interrupts
  - `machine`: add CPU frequency for nrf-based boards
  - `syscall`: add support for darwin/amd64
- **targets**
  - `circuitplay_express`: add support for this board
  - `microbit`: add regular pin constants
  - `samd21`: fix time function for goroutine support
  - `samd21`: add support for USB-CDC (serial over USB)
  - `samd21`: add support for pins in port B
  - `samd21`: add support for pullup and pulldown pins
  - `wasm`: add support for Safari in example


0.2.0
---
- **command line**
  - add version subcommand
- **compiler**
  - fix a bug in floating point comparisons with NaN values
  - fix a bug when calling `panic` in package initialization code
  - add support for comparing `complex64` and `complex128`
- **cgo**
  - add support for external globals
  - add support for pointers and function pointers
- **standard library**
  - `fmt`: initial support, `fmt.Println` works
  - `math`: support for most/all functions
  - `os`: initial support (only stdin/stdout/stderr)
  - `reflect`: initial support
  - `syscall`: add support for amd64, arm, and arm64