aboutsummaryrefslogtreecommitdiffhomepage
path: root/builder/picolibc.go
diff options
context:
space:
mode:
Diffstat (limited to 'builder/picolibc.go')
-rw-r--r--builder/picolibc.go172
1 files changed, 93 insertions, 79 deletions
diff --git a/builder/picolibc.go b/builder/picolibc.go
index 1b7c748be..91ad27be6 100644
--- a/builder/picolibc.go
+++ b/builder/picolibc.go
@@ -3,6 +3,7 @@ package builder
import (
"os"
"path/filepath"
+ "strings"
"github.com/tinygo-org/tinygo/goenv"
)
@@ -41,91 +42,23 @@ var Picolibc = Library{
},
sourceDir: func() string { return filepath.Join(goenv.Get("TINYGOROOT"), "lib/picolibc/newlib") },
librarySources: func(target string) ([]string, error) {
- return picolibcSources, nil
+ sources := append([]string(nil), picolibcSources...)
+ if !strings.HasPrefix(target, "avr") {
+ // Small chips without long jumps can't compile many files (printf,
+ // pow, etc). Therefore exclude those source files for those chips.
+ // Unfortunately it's difficult to exclude only some chips, so this
+ // excludes those files on all AVR chips for now.
+ // More information:
+ // https://github.com/llvm/llvm-project/issues/67042
+ sources = append(sources, picolibcSourcesLarge...)
+ }
+ return sources, nil
},
}
var picolibcSources = []string{
"../../picolibc-stdio.c",
- // srcs_tinystdio
- "libc/tinystdio/asprintf.c",
- "libc/tinystdio/bufio.c",
- "libc/tinystdio/clearerr.c",
- "libc/tinystdio/ecvt_r.c",
- "libc/tinystdio/ecvt.c",
- "libc/tinystdio/ecvtf_r.c",
- "libc/tinystdio/ecvtf.c",
- "libc/tinystdio/fcvt.c",
- "libc/tinystdio/fcvt_r.c",
- "libc/tinystdio/fcvtf.c",
- "libc/tinystdio/fcvtf_r.c",
- "libc/tinystdio/gcvt.c",
- "libc/tinystdio/gcvtf.c",
- "libc/tinystdio/fclose.c",
- "libc/tinystdio/fdevopen.c",
- "libc/tinystdio/feof.c",
- "libc/tinystdio/ferror.c",
- "libc/tinystdio/fflush.c",
- "libc/tinystdio/fgetc.c",
- "libc/tinystdio/fgets.c",
- "libc/tinystdio/fileno.c",
- "libc/tinystdio/filestrget.c",
- "libc/tinystdio/filestrput.c",
- "libc/tinystdio/filestrputalloc.c",
- "libc/tinystdio/fmemopen.c",
- "libc/tinystdio/fprintf.c",
- "libc/tinystdio/fputc.c",
- "libc/tinystdio/fputs.c",
- "libc/tinystdio/fread.c",
- //"libc/tinystdio/freopen.c", // crashes with AVR, see: https://github.com/picolibc/picolibc/pull/369
- "libc/tinystdio/fscanf.c",
- "libc/tinystdio/fseek.c",
- "libc/tinystdio/fseeko.c",
- "libc/tinystdio/ftell.c",
- "libc/tinystdio/ftello.c",
- "libc/tinystdio/fwrite.c",
- "libc/tinystdio/getchar.c",
- "libc/tinystdio/gets.c",
- "libc/tinystdio/matchcaseprefix.c",
- "libc/tinystdio/mktemp.c",
- "libc/tinystdio/perror.c",
- "libc/tinystdio/printf.c",
- "libc/tinystdio/putchar.c",
- "libc/tinystdio/puts.c",
- "libc/tinystdio/rewind.c",
- "libc/tinystdio/scanf.c",
- "libc/tinystdio/setbuf.c",
- "libc/tinystdio/setbuffer.c",
- "libc/tinystdio/setlinebuf.c",
- "libc/tinystdio/setvbuf.c",
- "libc/tinystdio/snprintf.c",
- "libc/tinystdio/sprintf.c",
- "libc/tinystdio/snprintfd.c",
- "libc/tinystdio/snprintff.c",
- "libc/tinystdio/sprintff.c",
- "libc/tinystdio/sprintfd.c",
- "libc/tinystdio/sscanf.c",
- "libc/tinystdio/strfromf.c",
- "libc/tinystdio/strfromd.c",
- "libc/tinystdio/strtof.c",
- "libc/tinystdio/strtof_l.c",
- "libc/tinystdio/strtod.c",
- "libc/tinystdio/strtod_l.c",
- "libc/tinystdio/ungetc.c",
- "libc/tinystdio/vasprintf.c",
- "libc/tinystdio/vfiprintf.c",
- "libc/tinystdio/vfprintf.c",
- "libc/tinystdio/vfprintff.c",
- "libc/tinystdio/vfscanf.c",
- "libc/tinystdio/vfiscanf.c",
- "libc/tinystdio/vfscanff.c",
- "libc/tinystdio/vprintf.c",
- "libc/tinystdio/vscanf.c",
- "libc/tinystdio/vsscanf.c",
- "libc/tinystdio/vsnprintf.c",
- "libc/tinystdio/vsprintf.c",
-
"libc/string/bcmp.c",
"libc/string/bcopy.c",
"libc/string/bzero.c",
@@ -229,6 +162,87 @@ var picolibcSources = []string{
"libc/string/wmempcpy.c",
"libc/string/wmemset.c",
"libc/string/xpg_strerror_r.c",
+}
+
+// Parts of picolibc that are too large for small AVRs.
+var picolibcSourcesLarge = []string{
+ // srcs_tinystdio
+ "libc/tinystdio/asprintf.c",
+ "libc/tinystdio/bufio.c",
+ "libc/tinystdio/clearerr.c",
+ "libc/tinystdio/ecvt_r.c",
+ "libc/tinystdio/ecvt.c",
+ "libc/tinystdio/ecvtf_r.c",
+ "libc/tinystdio/ecvtf.c",
+ "libc/tinystdio/fcvt.c",
+ "libc/tinystdio/fcvt_r.c",
+ "libc/tinystdio/fcvtf.c",
+ "libc/tinystdio/fcvtf_r.c",
+ "libc/tinystdio/gcvt.c",
+ "libc/tinystdio/gcvtf.c",
+ "libc/tinystdio/fclose.c",
+ "libc/tinystdio/fdevopen.c",
+ "libc/tinystdio/feof.c",
+ "libc/tinystdio/ferror.c",
+ "libc/tinystdio/fflush.c",
+ "libc/tinystdio/fgetc.c",
+ "libc/tinystdio/fgets.c",
+ "libc/tinystdio/fileno.c",
+ "libc/tinystdio/filestrget.c",
+ "libc/tinystdio/filestrput.c",
+ "libc/tinystdio/filestrputalloc.c",
+ "libc/tinystdio/fmemopen.c",
+ "libc/tinystdio/fprintf.c",
+ "libc/tinystdio/fputc.c",
+ "libc/tinystdio/fputs.c",
+ "libc/tinystdio/fread.c",
+ //"libc/tinystdio/freopen.c", // crashes with AVR, see: https://github.com/picolibc/picolibc/pull/369
+ "libc/tinystdio/fscanf.c",
+ "libc/tinystdio/fseek.c",
+ "libc/tinystdio/fseeko.c",
+ "libc/tinystdio/ftell.c",
+ "libc/tinystdio/ftello.c",
+ "libc/tinystdio/fwrite.c",
+ "libc/tinystdio/getchar.c",
+ "libc/tinystdio/gets.c",
+ "libc/tinystdio/matchcaseprefix.c",
+ "libc/tinystdio/mktemp.c",
+ "libc/tinystdio/perror.c",
+ "libc/tinystdio/printf.c",
+ "libc/tinystdio/putchar.c",
+ "libc/tinystdio/puts.c",
+ "libc/tinystdio/rewind.c",
+ "libc/tinystdio/scanf.c",
+ "libc/tinystdio/setbuf.c",
+ "libc/tinystdio/setbuffer.c",
+ "libc/tinystdio/setlinebuf.c",
+ "libc/tinystdio/setvbuf.c",
+ "libc/tinystdio/snprintf.c",
+ "libc/tinystdio/sprintf.c",
+ "libc/tinystdio/snprintfd.c",
+ "libc/tinystdio/snprintff.c",
+ "libc/tinystdio/sprintff.c",
+ "libc/tinystdio/sprintfd.c",
+ "libc/tinystdio/sscanf.c",
+ "libc/tinystdio/strfromf.c",
+ "libc/tinystdio/strfromd.c",
+ "libc/tinystdio/strtof.c",
+ "libc/tinystdio/strtof_l.c",
+ "libc/tinystdio/strtod.c",
+ "libc/tinystdio/strtod_l.c",
+ "libc/tinystdio/ungetc.c",
+ "libc/tinystdio/vasprintf.c",
+ "libc/tinystdio/vfiprintf.c",
+ "libc/tinystdio/vfprintf.c",
+ "libc/tinystdio/vfprintff.c",
+ "libc/tinystdio/vfscanf.c",
+ "libc/tinystdio/vfiscanf.c",
+ "libc/tinystdio/vfscanff.c",
+ "libc/tinystdio/vprintf.c",
+ "libc/tinystdio/vscanf.c",
+ "libc/tinystdio/vsscanf.c",
+ "libc/tinystdio/vsnprintf.c",
+ "libc/tinystdio/vsprintf.c",
"libm/common/sf_finite.c",
"libm/common/sf_copysign.c",