Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Restore LLVM source cache
uses: actions/cache/restore@v5
Expand Down Expand Up @@ -131,7 +131,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Build TinyGo (LLVM ${{ matrix.version }})
run: go install -tags=llvm${{ matrix.version }}
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Run go mod tidy
run: go mod tidy
Expand Down Expand Up @@ -160,7 +160,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Install wasmtime
uses: bytecodealliance/actions/wasmtime/setup@v1
Expand Down Expand Up @@ -205,7 +205,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Download release artifact
uses: actions/download-artifact@v8
Expand Down Expand Up @@ -244,7 +244,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Install Node.js
uses: actions/setup-node@v6
Expand Down Expand Up @@ -371,7 +371,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Restore LLVM source cache
uses: actions/cache/restore@v5
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Restore cached LLVM source
uses: actions/cache/restore@v5
Expand Down Expand Up @@ -129,7 +129,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Download TinyGo build
uses: actions/download-artifact@v8
Expand All @@ -150,7 +150,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Download TinyGo build
uses: actions/download-artifact@v8
Expand All @@ -176,7 +176,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: '1.27.0'
go-version: '1.27.1'
cache: true
- name: Download TinyGo build
uses: actions/download-artifact@v8
Expand Down
199 changes: 88 additions & 111 deletions builder/picolibc.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package builder
import (
"os"
"path/filepath"
"strings"

"github.com/tinygo-org/tinygo/goenv"
)
Expand All @@ -20,46 +19,35 @@ var libPicolibc = Library{
return f.Close()
},
cflags: func(target, headerPath string) []string {
newlibDir := filepath.Join(goenv.Get("TINYGOROOT"), "lib/picolibc/newlib")
picolibcDir := filepath.Join(goenv.Get("TINYGOROOT"), "lib/picolibc")
return []string{
"-Werror",
"-Wall",
"-std=gnu11",
"-D_COMPILING_NEWLIB",
"-D_HAVE_ALIAS_ATTRIBUTE",
"-DTINY_STDIO",
"-DPOSIX_IO",
"-DFORMAT_DEFAULT_INTEGER", // use __i_vfprintf and __i_vfscanf by default
"-D_IEEE_LIBM",
"-D__TINY_STDIO",
"-D_XOPEN_SOURCE=700",
"-D__IO_DEFAULT='i'", // use __i_vfprintf and __i_vfscanf by default
"-D__IEEE_LIBM",
"-D__OBSOLETE_MATH_FLOAT=1", // use old math code that doesn't expect a FPU
"-D__OBSOLETE_MATH_DOUBLE=0",
"-D_WANT_IO_C99_FORMATS",
"-D__IO_C99_FORMATS",
"-D__PICOLIBC_ERRNO_FUNCTION=__errno_location",
"-nostdlibinc",
"-isystem", newlibDir + "/libc/include",
"-I" + newlibDir + "/libc/tinystdio",
"-I" + newlibDir + "/libm/common",
"-isystem", picolibcDir + "/libc/include",
"-I" + picolibcDir + "/libc/stdio",
"-I" + picolibcDir + "/libc/locale",
"-I" + picolibcDir + "/libm/common",
"-I" + headerPath,
}
},
sourceDir: func() string { return filepath.Join(goenv.Get("TINYGOROOT"), "lib/picolibc/newlib") },
sourceDir: func() string { return filepath.Join(goenv.Get("TINYGOROOT"), "lib/picolibc") },
librarySources: func(target string, _ bool) ([]string, error) {
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
return append([]string(nil), picolibcSources...), nil
},
}

var picolibcSources = []string{
"../../picolibc-stdio.c",
"../picolibc-stdio.c",

"libc/string/bcmp.c",
"libc/string/bcopy.c",
Expand Down Expand Up @@ -126,7 +114,6 @@ var picolibcSources = []string{
"libc/string/swab.c",
"libc/string/timingsafe_bcmp.c",
"libc/string/timingsafe_memcmp.c",
"libc/string/u_strerr.c",
"libc/string/wcpcpy.c",
"libc/string/wcpncpy.c",
"libc/string/wcscasecmp.c",
Expand Down Expand Up @@ -164,87 +151,82 @@ 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",
// srcs_stdio
"libc/stdio/asprintf.c",
"libc/stdio/bufio.c",
"libc/stdio/clearerr.c",
"libc/stdio/ecvt_r.c",
"libc/stdio/ecvt.c",
"libc/stdio/ecvtf_r.c",
"libc/stdio/ecvtf.c",
"libc/stdio/fcvt.c",
"libc/stdio/fcvt_r.c",
"libc/stdio/fcvtf.c",
"libc/stdio/fcvtf_r.c",
"libc/stdio/gcvt.c",
"libc/stdio/gcvtf.c",
"libc/stdio/fclose.c",
"libc/stdio/fdevopen.c",
"libc/stdio/feof.c",
"libc/stdio/ferror.c",
"libc/stdio/fflush.c",
"libc/stdio/fgetc.c",
"libc/stdio/fgets.c",
"libc/stdio/fileno.c",
"libc/stdio/filestrget.c",
"libc/stdio/filestrput.c",
"libc/stdio/filestrputalloc.c",
"libc/stdio/fmemopen.c",
"libc/stdio/fprintf.c",
"libc/stdio/fputc.c",
"libc/stdio/fputs.c",
"libc/stdio/fread.c",
"libc/stdio/freopen.c",
"libc/stdio/fscanf.c",
"libc/stdio/fseek.c",
"libc/stdio/fseeko.c",
"libc/stdio/ftell.c",
"libc/stdio/ftello.c",
"libc/stdio/fwrite.c",
"libc/stdio/getchar.c",
"libc/stdio/gets.c",
"libc/stdio/matchcaseprefix.c",
"libc/stdio/mktemp.c",
"libc/stdio/perror.c",
"libc/stdio/printf.c",
"libc/stdio/putchar.c",
"libc/stdio/puts.c",
"libc/stdio/rewind.c",
"libc/stdio/scanf.c",
"libc/stdio/setbuf.c",
"libc/stdio/setbuffer.c",
"libc/stdio/setlinebuf.c",
"libc/stdio/setvbuf.c",
"libc/stdio/snprintf.c",
"libc/stdio/sprintf.c",
"libc/stdio/snprintfd.c",
"libc/stdio/snprintff.c",
"libc/stdio/sprintff.c",
"libc/stdio/sprintfd.c",
"libc/stdio/sscanf.c",
"libc/stdio/strfromf.c",
"libc/stdio/strfromd.c",
"libc/stdio/strtof.c",
"libc/stdio/strtof_l.c",
"libc/stdio/strtod.c",
"libc/stdio/strtod_l.c",
"libc/stdio/ungetc.c",
"libc/stdio/vasprintf.c",
"libc/stdio/vfiprintf.c",
"libc/stdio/vfprintf.c",
"libc/stdio/vfscanf.c",
"libc/stdio/vfiscanf.c",
"libc/stdio/vprintf.c",
"libc/stdio/vscanf.c",
"libc/stdio/vsscanf.c",
"libc/stdio/vsnprintf.c",
"libc/stdio/vsprintf.c",

"libm/common/sf_finite.c",
"libm/common/sf_copysign.c",
Expand All @@ -256,9 +238,7 @@ var picolibcSourcesLarge = []string{
"libm/common/sf_ilogb.c",
"libm/common/sf_infinity.c",
"libm/common/sf_isinf.c",
"libm/common/sf_isinff.c",
"libm/common/sf_isnan.c",
"libm/common/sf_isnanf.c",
"libm/common/sf_issignaling.c",
"libm/common/sf_log1p.c",
"libm/common/sf_nan.c",
Expand Down Expand Up @@ -301,9 +281,7 @@ var picolibcSourcesLarge = []string{
"libm/common/s_infinity.c",
"libm/common/s_iseqsig.c",
"libm/common/s_isinf.c",
"libm/common/s_isinfd.c",
"libm/common/s_isnan.c",
"libm/common/s_isnand.c",
"libm/common/s_issignaling.c",
"libm/common/s_log1p.c",
"libm/common/s_nan.c",
Expand Down Expand Up @@ -359,7 +337,6 @@ var picolibcSourcesLarge = []string{
"libm/math/k_sin.c",
"libm/math/k_tan.c",
"libm/math/kf_cos.c",
"libm/math/kf_rem_pio2.c",
"libm/math/kf_sin.c",
"libm/math/kf_tan.c",
"libm/math/s_acos.c",
Expand Down
5 changes: 3 additions & 2 deletions compileopts/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
var libVersions = map[string]int{
"musl": 3,
"bdwgc": 2,
"picolibc": 1,
"wasmbuiltins": 1,
}

Expand Down Expand Up @@ -384,13 +385,13 @@ func (c *Config) LibcCFlags() []string {
}
case "picolibc":
root := goenv.Get("TINYGOROOT")
picolibcDir := filepath.Join(root, "lib", "picolibc", "newlib", "libc")
picolibcDir := filepath.Join(root, "lib", "picolibc", "libc")
path := c.LibraryPath("picolibc")
return []string{
"-nostdlibinc",
"-isystem", filepath.Join(path, "include"),
"-isystem", filepath.Join(picolibcDir, "include"),
"-isystem", filepath.Join(picolibcDir, "tinystdio"),
"-isystem", filepath.Join(picolibcDir, "stdio"),
"-D__PICOLIBC_ERRNO_FUNCTION=__errno_location",
}
case "musl":
Expand Down
Loading
Loading