diff --git a/builder/picolibc.go b/builder/picolibc.go index 43837fa1d..be619b248 100644 --- a/builder/picolibc.go +++ b/builder/picolibc.go @@ -20,29 +20,31 @@ 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", + "-D__TINY_STDIO", + "-D_XOPEN_SOURCE=700", "-DPOSIX_IO", - "-DFORMAT_DEFAULT_INTEGER", // use __i_vfprintf and __i_vfscanf by default - "-D_IEEE_LIBM", + "-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__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") { @@ -59,7 +61,7 @@ var libPicolibc = Library{ } var picolibcSources = []string{ - "../../picolibc-stdio.c", + "../picolibc-stdio.c", "libc/string/bcmp.c", "libc/string/bcopy.c", @@ -126,7 +128,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", @@ -168,83 +169,81 @@ var picolibcSources = []string{ // 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", // crashes with AVR, see: https://github.com/picolibc/picolibc/pull/369 + "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", @@ -256,9 +255,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", @@ -301,9 +298,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", @@ -359,7 +354,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", diff --git a/compileopts/config.go b/compileopts/config.go index 207584b5e..d9a8ce2c0 100644 --- a/compileopts/config.go +++ b/compileopts/config.go @@ -25,6 +25,7 @@ import ( var libVersions = map[string]int{ "musl": 3, "bdwgc": 2, + "picolibc": 1, "wasmbuiltins": 1, } @@ -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": diff --git a/lib/picolibc b/lib/picolibc index b92edfda8..036919b76 160000 --- a/lib/picolibc +++ b/lib/picolibc @@ -1 +1 @@ -Subproject commit b92edfda8ac6853772d87cadaeeeaa21b78609b6 +Subproject commit 036919b76d7124f25f1d82554a06c921708cd4b1 diff --git a/make/release.mk b/make/release.mk index 89dc4c9ef..23724e1d9 100644 --- a/make/release.mk +++ b/make/release.mk @@ -14,8 +14,8 @@ build/release: tinygo gen-device $(if $(filter 1,$(USE_SYSTEM_BINARYEN)),,binary @mkdir -p build/release/tinygo/lib/musl/crt @mkdir -p build/release/tinygo/lib/musl/src @mkdir -p build/release/tinygo/lib/nrfx - @mkdir -p build/release/tinygo/lib/picolibc/newlib/libc - @mkdir -p build/release/tinygo/lib/picolibc/newlib/libm + @mkdir -p build/release/tinygo/lib/picolibc/libc + @mkdir -p build/release/tinygo/lib/picolibc/libm @mkdir -p build/release/tinygo/lib/wasi-libc/dlmalloc @mkdir -p build/release/tinygo/lib/wasi-libc/libc-bottom-half @mkdir -p build/release/tinygo/lib/wasi-libc/libc-top-half/musl/arch @@ -80,13 +80,14 @@ endif @cp -rp lib/mingw-w64/mingw-w64-headers/defaults/include build/release/tinygo/lib/mingw-w64/mingw-w64-headers/defaults @cp -rp lib/mingw-w64/mingw-w64-headers/include build/release/tinygo/lib/mingw-w64/mingw-w64-headers @cp -rp lib/nrfx/* build/release/tinygo/lib/nrfx - @cp -rp lib/picolibc/newlib/libc/ctype build/release/tinygo/lib/picolibc/newlib/libc - @cp -rp lib/picolibc/newlib/libc/include build/release/tinygo/lib/picolibc/newlib/libc - @cp -rp lib/picolibc/newlib/libc/locale build/release/tinygo/lib/picolibc/newlib/libc - @cp -rp lib/picolibc/newlib/libc/string build/release/tinygo/lib/picolibc/newlib/libc - @cp -rp lib/picolibc/newlib/libc/tinystdio build/release/tinygo/lib/picolibc/newlib/libc - @cp -rp lib/picolibc/newlib/libm/common build/release/tinygo/lib/picolibc/newlib/libm - @cp -rp lib/picolibc/newlib/libm/math build/release/tinygo/lib/picolibc/newlib/libm + @cp -rp lib/picolibc/libc/ctype build/release/tinygo/lib/picolibc/libc + @cp -rp lib/picolibc/libc/include build/release/tinygo/lib/picolibc/libc + @cp -rp lib/picolibc/libc/locale build/release/tinygo/lib/picolibc/libc + @cp -rp lib/picolibc/libc/stdlib build/release/tinygo/lib/picolibc/libc + @cp -rp lib/picolibc/libc/string build/release/tinygo/lib/picolibc/libc + @cp -rp lib/picolibc/libc/stdio build/release/tinygo/lib/picolibc/libc + @cp -rp lib/picolibc/libm/common build/release/tinygo/lib/picolibc/libm + @cp -rp lib/picolibc/libm/math build/release/tinygo/lib/picolibc/libm @cp -rp lib/picolibc-stdio.c build/release/tinygo/lib @cp -rp lib/wasi-libc/dlmalloc/src build/release/tinygo/lib/wasi-libc/dlmalloc @cp -rp lib/wasi-libc/libc-bottom-half/cloudlibc build/release/tinygo/lib/wasi-libc/libc-bottom-half