feat: support libc for small devices

This commit is contained in:
Haolan
2025-08-28 20:11:13 +08:00
parent 5587fd2885
commit f3ecce86ee
15 changed files with 1536 additions and 746 deletions

View File

@@ -8,11 +8,8 @@ import (
"os/exec"
"path/filepath"
"runtime"
"slices"
"strings"
"github.com/goplus/llgo/internal/clang"
"github.com/goplus/llgo/internal/env"
"github.com/goplus/llgo/internal/targets"
"github.com/goplus/llgo/internal/xtool/llvm"
@@ -218,67 +215,33 @@ func getESPClangPlatform(goos, goarch string) string {
return ""
}
func getOrCompileLibc(cc, linkerName, libcName string, ccflags, exportLdFlags []string) (ldflags []string, err error) {
func ldFlagsFromFileName(fileName string) string {
return strings.TrimPrefix(strings.TrimSuffix(fileName, ".a"), "lib")
}
func getOrCompileLibc(cc, linkerName, libcName string, exportCCFlags, exportLDFlags []string) (ldflags []string, err error) {
baseDir := filepath.Join(cacheRoot(), "crosscompile")
libcDir := filepath.Join(baseDir, libcName)
libcArchive := filepath.Join(libcDir, "libc.a")
// fast-path: compiled already
if _, err = os.Stat(libcArchive); !os.IsNotExist(err) {
ldflags = append(ldflags, "-nostdlib", "-L", libcDir, "-lc")
return ldflags, nil
}
outputDir := filepath.Join(baseDir, libcName)
compileConfig, err := getCompileLibcConfigByName(baseDir, libcName)
if err != nil {
return
}
tempDir, err := os.MkdirTemp("", "compile*")
if err != nil {
if err = checkDownloadAndExtractLibc(compileConfig, compileConfig.Url, outputDir, compileConfig.ArchiveSrcDir); err != nil {
return
}
defer os.RemoveAll(tempDir)
ldflags = append(ldflags, "-nostdlib", "-L"+outputDir)
fmt.Fprintf(os.Stderr, "%s not found in LLGO_ROOT or cache, will download and compile.\n", libcDir)
if err = checkDownloadAndExtractLibc(compileConfig.Url, libcDir, compileConfig.ArchiveSrcDir); err != nil {
return
}
compileLDFlags := append(slices.Clone(exportLdFlags), compileConfig.LDFlags...)
cfg := clang.NewConfig(cc, ccflags, compileConfig.CFlags, compileLDFlags, linkerName)
var objFiles []string
compiler := clang.NewCompiler(cfg)
linker := clang.NewLinker(cfg)
compiler.Verbose = true
linker.Verbose = true
fmt.Fprintf(os.Stderr, "Start to compile libc %s to %s...\n", libcName, libcArchive)
for _, file := range compileConfig.Files {
var tempObjFile *os.File
tempObjFile, err = os.CreateTemp(tempDir, "libc*.o")
for _, group := range compileConfig.Groups {
err = group.Compile(outputDir, cc, linkerName, exportCCFlags, exportLDFlags)
if err != nil {
return
break
}
fmt.Fprintf(os.Stderr, "Compile libc file %s to %s...\n", file, tempObjFile.Name())
err = compiler.Compile("-o", tempObjFile.Name(), "-x", "c", "-c", file)
if err != nil {
return
if filepath.Ext(group.OutputFileName) == ".o" {
continue
}
objFiles = append(objFiles, tempObjFile.Name())
ldflags = append(ldflags, "-l"+ldFlagsFromFileName(group.OutputFileName))
}
args := []string{"-o", libcArchive}
args = append(args, objFiles...)
err = linker.Link(args...)
if err != nil {
return
}
ldflags = append(ldflags, "-nostdlib", "-L", libcDir, "-lc")
return
}

View File

@@ -2,6 +2,7 @@ package crosscompile
import (
"archive/tar"
"archive/zip"
"compress/gzip"
"fmt"
"io"
@@ -79,9 +80,9 @@ func checkDownloadAndExtractESPClang(platformSuffix, dir string) error {
return nil
}
func checkDownloadAndExtractLibc(url, dstDir, internalArchiveSrcDir string) error {
func checkDownloadAndExtractLibc(cfg *compileLibcConfig, url, dstDir, internalArchiveSrcDir string) error {
// Check if already exists
if _, err := os.Stat(dstDir); err == nil {
if cfg.IsCompiled(dstDir) {
return nil
}
@@ -94,9 +95,10 @@ func checkDownloadAndExtractLibc(url, dstDir, internalArchiveSrcDir string) erro
defer releaseLock(lockFile)
// Double-check after acquiring lock
if _, err := os.Stat(dstDir); err == nil {
if cfg.IsCompiled(dstDir) {
return nil
}
fmt.Fprintf(os.Stderr, "%s not found in LLGO_ROOT or cache, will download and compile.\n", dstDir)
description := fmt.Sprintf("Libc %s", path.Base(url))
@@ -105,7 +107,7 @@ func checkDownloadAndExtractLibc(url, dstDir, internalArchiveSrcDir string) erro
if err := downloadAndExtractArchive(url, tempExtractDir, description); err != nil {
return err
}
defer os.RemoveAll(tempExtractDir)
// defer os.RemoveAll(tempExtractDir)
srcDir := tempExtractDir
@@ -182,10 +184,14 @@ func downloadAndExtractArchive(url, destDir, description string) error {
if err != nil {
return fmt.Errorf("failed to extract %s archive: %w", description, err)
}
} else if strings.HasSuffix(filename, ".zip") {
err := extractZip(localFile, tempDir)
if err != nil {
return fmt.Errorf("failed to extract %s archive: %w", description, err)
}
} else {
return fmt.Errorf("unsupported archive format: %s", filename)
}
// Rename temp directory to target directory
if err := os.Rename(tempDir, destDir); err != nil {
return fmt.Errorf("failed to rename directory: %w", err)
@@ -265,3 +271,44 @@ func extractTarXz(tarXzFile, dest string) error {
cmd := exec.Command("tar", "-xf", tarXzFile, "-C", dest)
return cmd.Run()
}
func extractZip(zipFile, dest string) error {
r, err := zip.OpenReader(zipFile)
if err != nil {
return err
}
defer r.Close()
decompress := func(file *zip.File) error {
path := filepath.Join(dest, file.Name)
if file.FileInfo().IsDir() {
return os.MkdirAll(path, 0700)
}
fs, err := file.Open()
if err != nil {
return err
}
defer fs.Close()
w, err := os.Create(path)
if err != nil {
return err
}
if _, err := io.Copy(w, fs); err != nil {
w.Close()
return err
}
if err := w.Close(); err != nil {
return err
}
return nil
}
for _, file := range r.File {
if err = decompress(file); err != nil {
break
}
}
return err
}

View File

@@ -3,19 +3,101 @@ package crosscompile
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"slices"
"strings"
"github.com/goplus/llgo/internal/clang"
)
type compileGroup struct {
OutputFileName string
Files []string // List of source files to compile
CFlags []string // C compiler flags specific to this libc
CCFlags []string
LDFlags []string // Linker flags
}
func (g compileGroup) IsCompiled(outputDir string) bool {
libcArchive := filepath.Join(outputDir, g.OutputFileName)
_, err := os.Stat(libcArchive)
return !os.IsNotExist(err)
}
func (g compileGroup) Compile(outputDir, cc, linkerName string, extraCCFlags, extraLDFlags []string) (err error) {
if g.IsCompiled(outputDir) {
return
}
tmpCompileDir, err := os.MkdirTemp("", "compile-libc-group*")
if err != nil {
return
}
defer os.RemoveAll(tmpCompileDir)
compileLDFlags := append(slices.Clone(extraLDFlags), g.LDFlags...)
compileCCFlags := append(slices.Clone(extraCCFlags), g.CCFlags...)
cfg := clang.NewConfig(cc, compileCCFlags, g.CFlags, compileLDFlags, linkerName)
var objFiles []string
compiler := clang.NewCompiler(cfg)
compiler.Verbose = true
libcArchive := filepath.Join(outputDir, g.OutputFileName)
fmt.Fprintf(os.Stderr, "Start to compile libc group %s to %s...\n", g.OutputFileName, libcArchive)
for _, file := range g.Files {
var tempObjFile *os.File
tempObjFile, err = os.CreateTemp(tmpCompileDir, fmt.Sprintf("%s*.o", strings.ReplaceAll(file, string(os.PathSeparator), "-")))
if err != nil {
return
}
fmt.Fprintf(os.Stderr, "Compile libc file %s to %s...\n", file, tempObjFile.Name())
lang := "c"
if filepath.Ext(file) == ".S" {
lang = "assembler-with-cpp"
}
err = compiler.Compile("-o", tempObjFile.Name(), "-x", lang, "-c", file)
if err != nil {
return
}
objFiles = append(objFiles, tempObjFile.Name())
}
args := []string{"rcs", libcArchive}
args = append(args, objFiles...)
ccDir := filepath.Dir(cc)
llvmAr := filepath.Join(ccDir, "llvm-ar")
cmd := exec.Command(llvmAr, args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()
return
}
// CompileLibcConfig represents libc compilation configuration
type compileLibcConfig struct {
Url string
Name string // Libc name (e.g., "picolibc", "musl", "glibc")
Files []string // List of source files to compile
CFlags []string // C compiler flags specific to this libc
LDFlags []string // Linker flags
Name string // Libc name (e.g., "picolibc", "musl", "glibc")
Groups []compileGroup
ArchiveSrcDir string
}
func (c compileLibcConfig) IsCompiled(outputDir string) bool {
for _, group := range c.Groups {
if !group.IsCompiled(outputDir) {
return false
}
}
return true
}
// GetCompileLibcConfigByName retrieves libc compilation configuration by name
// Returns compilation file lists and corresponding cflags
func getCompileLibcConfigByName(baseDir, libcName string) (*compileLibcConfig, error) {
@@ -27,159 +109,9 @@ func getCompileLibcConfigByName(baseDir, libcName string) (*compileLibcConfig, e
switch libcName {
case "picolibc":
return getPicolibcConfig(libcDir), nil
case "newlib-esp32":
return getNewlibESP32Config(libcDir, "xtensa"), nil
default:
return nil, fmt.Errorf("unsupported libc: %s", libcName)
}
}
// getPicolibcConfig returns configuration for picolibc
func getPicolibcConfig(baseDir string) *compileLibcConfig {
libcIncludeDir := filepath.Join(baseDir, "libc", "include")
libmIncludeDir := filepath.Join(baseDir, "libm", "common")
localeIncludeDir := filepath.Join(baseDir, "libc", "locale")
os.MkdirAll(baseDir, 0700)
headerFile, _ := os.Create(filepath.Join(baseDir, "picolibc.h"))
headerFile.Close()
return &compileLibcConfig{
Url: "https://github.com/picolibc/picolibc/releases/download/1.8.10/picolibc-1.8.10.tar.xz",
Name: "picolibc",
Files: []string{
filepath.Join(baseDir, "libc", "string", "bcmp.c"),
filepath.Join(baseDir, "libc", "string", "bcopy.c"),
filepath.Join(baseDir, "libc", "string", "bzero.c"),
filepath.Join(baseDir, "libc", "string", "explicit_bzero.c"),
filepath.Join(baseDir, "libc", "string", "ffsl.c"),
filepath.Join(baseDir, "libc", "string", "ffsll.c"),
filepath.Join(baseDir, "libc", "string", "fls.c"),
filepath.Join(baseDir, "libc", "string", "flsl.c"),
filepath.Join(baseDir, "libc", "string", "flsll.c"),
filepath.Join(baseDir, "libc", "string", "gnu_basename.c"),
filepath.Join(baseDir, "libc", "string", "index.c"),
filepath.Join(baseDir, "libc", "string", "memccpy.c"),
filepath.Join(baseDir, "libc", "string", "memchr.c"),
filepath.Join(baseDir, "libc", "string", "memcmp.c"),
filepath.Join(baseDir, "libc", "string", "memcpy.c"),
filepath.Join(baseDir, "libc", "string", "memmem.c"),
filepath.Join(baseDir, "libc", "string", "memmove.c"),
filepath.Join(baseDir, "libc", "string", "mempcpy.c"),
filepath.Join(baseDir, "libc", "string", "memrchr.c"),
filepath.Join(baseDir, "libc", "string", "memset.c"),
filepath.Join(baseDir, "libc", "string", "rawmemchr.c"),
filepath.Join(baseDir, "libc", "string", "rindex.c"),
filepath.Join(baseDir, "libc", "string", "stpcpy.c"),
filepath.Join(baseDir, "libc", "string", "stpncpy.c"),
filepath.Join(baseDir, "libc", "string", "strcasecmp.c"),
filepath.Join(baseDir, "libc", "string", "strcasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "strcasestr.c"),
filepath.Join(baseDir, "libc", "string", "strcat.c"),
filepath.Join(baseDir, "libc", "string", "strchr.c"),
filepath.Join(baseDir, "libc", "string", "strchrnul.c"),
filepath.Join(baseDir, "libc", "string", "strcmp.c"),
filepath.Join(baseDir, "libc", "string", "strcoll.c"),
filepath.Join(baseDir, "libc", "string", "strcoll_l.c"),
filepath.Join(baseDir, "libc", "string", "strcpy.c"),
filepath.Join(baseDir, "libc", "string", "strcspn.c"),
filepath.Join(baseDir, "libc", "string", "strerror_r.c"),
filepath.Join(baseDir, "libc", "string", "strlcat.c"),
filepath.Join(baseDir, "libc", "string", "strlcpy.c"),
filepath.Join(baseDir, "libc", "string", "strlen.c"),
filepath.Join(baseDir, "libc", "string", "strlwr.c"),
filepath.Join(baseDir, "libc", "string", "strncasecmp.c"),
filepath.Join(baseDir, "libc", "string", "strncasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "strncat.c"),
filepath.Join(baseDir, "libc", "string", "strncmp.c"),
filepath.Join(baseDir, "libc", "string", "strncpy.c"),
filepath.Join(baseDir, "libc", "string", "strndup.c"),
filepath.Join(baseDir, "libc", "string", "strnlen.c"),
filepath.Join(baseDir, "libc", "string", "strnstr.c"),
filepath.Join(baseDir, "libc", "string", "strpbrk.c"),
filepath.Join(baseDir, "libc", "string", "strrchr.c"),
filepath.Join(baseDir, "libc", "string", "strsep.c"),
filepath.Join(baseDir, "libc", "string", "strsignal.c"),
filepath.Join(baseDir, "libc", "string", "strspn.c"),
filepath.Join(baseDir, "libc", "string", "strstr.c"),
filepath.Join(baseDir, "libc", "string", "strtok.c"),
filepath.Join(baseDir, "libc", "string", "strtok_r.c"),
filepath.Join(baseDir, "libc", "string", "strupr.c"),
filepath.Join(baseDir, "libc", "string", "strverscmp.c"),
filepath.Join(baseDir, "libc", "string", "strxfrm.c"),
filepath.Join(baseDir, "libc", "string", "strxfrm_l.c"),
filepath.Join(baseDir, "libc", "string", "swab.c"),
filepath.Join(baseDir, "libc", "string", "timingsafe_bcmp.c"),
filepath.Join(baseDir, "libc", "string", "timingsafe_memcmp.c"),
filepath.Join(baseDir, "libc", "string", "strerror.c"),
filepath.Join(baseDir, "libc", "string", "wcpcpy.c"),
filepath.Join(baseDir, "libc", "string", "wcpncpy.c"),
filepath.Join(baseDir, "libc", "string", "wcscasecmp.c"),
filepath.Join(baseDir, "libc", "string", "wcscasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "wcscat.c"),
filepath.Join(baseDir, "libc", "string", "wcschr.c"),
filepath.Join(baseDir, "libc", "string", "wcscmp.c"),
filepath.Join(baseDir, "libc", "string", "wcscoll.c"),
filepath.Join(baseDir, "libc", "string", "wcscoll_l.c"),
filepath.Join(baseDir, "libc", "string", "wcscpy.c"),
filepath.Join(baseDir, "libc", "string", "wcscspn.c"),
filepath.Join(baseDir, "libc", "string", "wcsdup.c"),
filepath.Join(baseDir, "libc", "string", "wcslcat.c"),
filepath.Join(baseDir, "libc", "string", "wcslcpy.c"),
filepath.Join(baseDir, "libc", "string", "wcslen.c"),
filepath.Join(baseDir, "libc", "string", "wcsncasecmp.c"),
filepath.Join(baseDir, "libc", "string", "wcsncasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "wcsncat.c"),
filepath.Join(baseDir, "libc", "string", "wcsncmp.c"),
filepath.Join(baseDir, "libc", "string", "wcsncpy.c"),
filepath.Join(baseDir, "libc", "string", "wcsnlen.c"),
filepath.Join(baseDir, "libc", "string", "wcspbrk.c"),
filepath.Join(baseDir, "libc", "string", "wcsrchr.c"),
filepath.Join(baseDir, "libc", "string", "wcsspn.c"),
filepath.Join(baseDir, "libc", "string", "wcsstr.c"),
filepath.Join(baseDir, "libc", "string", "wcstok.c"),
filepath.Join(baseDir, "libc", "string", "wcswidth.c"),
filepath.Join(baseDir, "libc", "string", "wcsxfrm.c"),
filepath.Join(baseDir, "libc", "string", "wcsxfrm_l.c"),
filepath.Join(baseDir, "libc", "string", "wcwidth.c"),
filepath.Join(baseDir, "libc", "string", "wmemchr.c"),
filepath.Join(baseDir, "libc", "string", "wmemcmp.c"),
filepath.Join(baseDir, "libc", "string", "wmemcpy.c"),
filepath.Join(baseDir, "libc", "string", "wmemmove.c"),
filepath.Join(baseDir, "libc", "string", "wmempcpy.c"),
filepath.Join(baseDir, "libc", "string", "wmemset.c"),
filepath.Join(baseDir, "libc", "string", "xpg_strerror_r.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-calloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-malloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-pvalloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-realloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-valloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "rand.c"),
filepath.Join(baseDir, "libc", "stdlib", "srand.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-free.c"),
filepath.Join(baseDir, "libc", "tinystdio", "printf.c"),
filepath.Join(baseDir, "libc", "tinystdio", "putchar.c"),
filepath.Join(baseDir, "libc", "tinystdio", "puts.c"),
},
CFlags: []string{
"-D_COMPILING_NEWLIB",
"-D_HAVE_ALIAS_ATTRIBUTE",
"-DTINY_STDIO",
"-DPOSIX_IO",
"-DFORMAT_DEFAULT_INTEGER",
"-D_IEEE_LIBM",
"-D__OBSOLETE_MATH_FLOAT=1",
"-D__OBSOLETE_MATH_DOUBLE=0",
"-D_WANT_IO_C99_FORMATS",
"-nostdlib",
"-isystem" + libcIncludeDir,
"-I" + libmIncludeDir,
"-I" + localeIncludeDir,
"-I" + baseDir,
"-I" + filepath.Join(baseDir, "libc", "tinystdio"),
},
LDFlags: []string{"-nostdlib"},
ArchiveSrcDir: filepath.Join("picolibc-1.8.10", "newlib"),
}
}

View File

@@ -0,0 +1,990 @@
package crosscompile
import (
"path/filepath"
)
// getNewlibESP32Config returns configuration for newlib esp32
func getNewlibESP32Config(baseDir, arch string) *compileLibcConfig {
libcDir := filepath.Join(baseDir, "newlib", "libc")
// headerFile, _ := os.Create(filepath.Join(baseDir, "picolibc.h"))
// headerFile.Close()
return &compileLibcConfig{
Url: "https://github.com/MeteorsLiu/newlib-esp32/archive/refs/heads/esp-4.3.0.zip",
Name: "newlib-esp32",
Groups: []compileGroup{
{
OutputFileName: "libcrt0.a",
Files: []string{
filepath.Join(baseDir, "libgloss", "xtensa", "clibrary_init.c"),
filepath.Join(baseDir, "libgloss", "xtensa", "syscalls.c"),
filepath.Join(baseDir, "libgloss", "xtensa", "boards", "esp32", "board.c"),
filepath.Join(baseDir, "libgloss", "xtensa", "crt1-boards.S"),
filepath.Join(baseDir, "libgloss", "xtensa", "sleep.S"),
filepath.Join(baseDir, "libgloss", "xtensa", "window-vectors.S"),
},
CFlags: []string{
"-DHAVE_CONFIG_H",
"-D_LIBGLOSS",
"-isystem" + filepath.Join(libcDir, "include"),
"-I" + filepath.Join(baseDir, "libgloss"),
// TODO(MeteorsLiu): support riscv
"-I" + filepath.Join(baseDir, "libgloss", "xtensa", "include"),
"-I" + filepath.Join(baseDir, "libgloss", "xtensa", "boards", "esp32", "include"),
},
LDFlags: []string{"-nostdlib"},
CCFlags: []string{
"-Oz",
},
},
{
OutputFileName: "libgloss.a",
Files: []string{
filepath.Join(baseDir, "libgloss", "libnosys", "chown.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "close.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "environ.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "errno.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "execve.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "fork.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "fstat.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "getpid.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "gettod.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "isatty.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "kill.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "link.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "lseek.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "open.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "read.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "readlink.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "sbrk.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "stat.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "symlink.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "times.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "unlink.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "wait.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "write.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "getentropy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "_exit.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "getreent.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "time.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "fcntl.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "chdir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "chmod.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "closedir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "dirfd.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "ftw.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "getcwd.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "mkdir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "nftw.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "opendir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pathconf.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "readdir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "rewinddir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "scandir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "seekdir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "telldir.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "rename.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "_pthread_cleanup_pop.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "_pthread_cleanup_pop_restore.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "_pthread_cleanup_push.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "_pthread_cleanup_push_defer.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_atfork.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getaffinity_np.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getdetachstate.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getguardsize.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getinheritsched.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getschedparam.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getschedpolicy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getscope.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getstack.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getstackaddr.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_getstacksize.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setaffinity_np.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setdetachstate.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setguardsize.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setinheritsched.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setschedparam.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setschedpolicy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setscope.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setstack.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setstackaddr.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_attr_setstacksize.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_barrier_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_barrier_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_barrier_wait.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_barrierattr_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_barrierattr_getpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_barrierattr_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_barrierattr_setpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cancel.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cond_broadcast.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cond_clockwait.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cond_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cond_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cond_signal.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cond_timedwait.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_cond_wait.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_condattr_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_condattr_getclock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_condattr_getpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_condattr_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_condattr_setclock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_condattr_setpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_create.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_detach.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_equal.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_exit.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_getaffinity_np.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_getattr_np.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_getconcurrency.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_getcpuclockid.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_getname_np.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_getschedparam.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_getspecific.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_join.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_key_create.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_key_delete.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_clocklock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_getprioceiling.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_lock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_setprioceiling.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_timedlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_trylock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutex_unlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_getprioceiling.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_getprotocol.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_getpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_gettype.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_setprioceiling.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_setprotocol.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_setpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_mutexattr_settype.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_once.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_clockrdlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_clockwrlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_rdlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_timedrdlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_timedwrlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_tryrdlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_trywrlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_unlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlock_wrlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlockattr_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlockattr_getpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlockattr_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_rwlockattr_setpshared.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_self.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setaffinity_np.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setcancelstate.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setcanceltype.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setconcurrency.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setname_np.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setschedparam.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setschedprio.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_setspecific.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_spin_destroy.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_spin_init.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_spin_lock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_spin_trylock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_spin_unlock.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_testcancel.c"),
filepath.Join(baseDir, "libgloss", "libnosys", "pthread_yield.c"),
},
CFlags: []string{
"-D__NO_SYSCALLS__",
"-D_NO_GETUT",
"-DHAVE_CONFIG_H",
"-D_LIBC",
"-D_NO_GLOB",
"-D_NO_GETPWENT",
"-D_NO_SIGSET",
"-D__ESP__",
"-D_NO_GETPASS",
"-D_NO_POSIX_SPAWN",
"-DHAVE_FCNTL",
"-DHAVE_BLKSIZE",
"-DHAVE_OPENDIR",
"-D_GNU_SOURCE",
"-D_LIBGLOSS",
"-D_NO_EXECVE",
"-D_NO_GETLOGIN",
"-D_NO_WORDEXP",
"-D_NO_POPEN",
"-DHAVE_RENAME",
"-DGETREENT_PROVIDED",
"-DSIGNAL_PROVIDED",
"-isystem" + filepath.Join(libcDir, "include"),
"-I" + libcDir,
"-I" + filepath.Join(libcDir, "xtensa"),
"-I" + filepath.Join(baseDir, "libgloss"),
// TODO(MeteorsLiu): support riscv
"-I" + filepath.Join(baseDir, "libgloss", "xtensa", "include"),
"-I" + filepath.Join(baseDir, "libgloss", "xtensa", "boards", "esp32", "include"),
},
LDFlags: []string{"-nostdlib"},
CCFlags: []string{
"-Oz",
},
},
{
OutputFileName: "libc.a",
Files: []string{
filepath.Join(libcDir, "argz", "argz_add.c"),
filepath.Join(libcDir, "argz", "argz_add_sep.c"),
filepath.Join(libcDir, "argz", "argz_append.c"),
filepath.Join(libcDir, "argz", "argz_count.c"),
filepath.Join(libcDir, "argz", "argz_create.c"),
filepath.Join(libcDir, "argz", "argz_create_sep.c"),
filepath.Join(libcDir, "argz", "argz_delete.c"),
filepath.Join(libcDir, "argz", "argz_extract.c"),
filepath.Join(libcDir, "argz", "argz_insert.c"),
filepath.Join(libcDir, "argz", "argz_next.c"),
filepath.Join(libcDir, "argz", "argz_replace.c"),
filepath.Join(libcDir, "argz", "argz_stringify.c"),
filepath.Join(libcDir, "argz", "buf_findstr.c"),
filepath.Join(libcDir, "argz", "envz_entry.c"),
filepath.Join(libcDir, "argz", "envz_get.c"),
filepath.Join(libcDir, "argz", "envz_add.c"),
filepath.Join(libcDir, "argz", "envz_remove.c"),
filepath.Join(libcDir, "argz", "envz_merge.c"),
filepath.Join(libcDir, "argz", "envz_strip.c"),
filepath.Join(libcDir, "stdlib", "__adjust.c"),
filepath.Join(libcDir, "stdlib", "__atexit.c"),
filepath.Join(libcDir, "stdlib", "__call_atexit.c"),
filepath.Join(libcDir, "stdlib", "__exp10.c"),
filepath.Join(libcDir, "stdlib", "__ten_mu.c"),
filepath.Join(libcDir, "stdlib", "_Exit.c"),
filepath.Join(libcDir, "stdlib", "abort.c"),
filepath.Join(libcDir, "stdlib", "abs.c"),
filepath.Join(libcDir, "stdlib", "aligned_alloc.c"),
filepath.Join(libcDir, "stdlib", "assert.c"),
filepath.Join(libcDir, "stdlib", "atexit.c"),
filepath.Join(libcDir, "stdlib", "atof.c"),
filepath.Join(libcDir, "stdlib", "atoff.c"),
filepath.Join(libcDir, "stdlib", "atoi.c"),
filepath.Join(libcDir, "stdlib", "atol.c"),
filepath.Join(libcDir, "stdlib", "calloc.c"),
filepath.Join(libcDir, "stdlib", "callocr.c"),
filepath.Join(libcDir, "stdlib", "cfreer.c"),
filepath.Join(libcDir, "stdlib", "div.c"),
filepath.Join(libcDir, "stdlib", "dtoa.c"),
filepath.Join(libcDir, "stdlib", "dtoastub.c"),
filepath.Join(libcDir, "stdlib", "environ.c"),
filepath.Join(libcDir, "stdlib", "envlock.c"),
filepath.Join(libcDir, "stdlib", "eprintf.c"),
filepath.Join(libcDir, "stdlib", "exit.c"),
filepath.Join(libcDir, "stdlib", "freer.c"),
filepath.Join(libcDir, "stdlib", "gdtoa-gethex.c"),
filepath.Join(libcDir, "stdlib", "gdtoa-hexnan.c"),
filepath.Join(libcDir, "stdlib", "getenv.c"),
filepath.Join(libcDir, "stdlib", "getenv_r.c"),
filepath.Join(libcDir, "stdlib", "imaxabs.c"),
filepath.Join(libcDir, "stdlib", "imaxdiv.c"),
filepath.Join(libcDir, "stdlib", "itoa.c"),
filepath.Join(libcDir, "stdlib", "labs.c"),
filepath.Join(libcDir, "stdlib", "ldiv.c"),
filepath.Join(libcDir, "stdlib", "ldtoa.c"),
filepath.Join(libcDir, "stdlib", "gdtoa-ldtoa.c"),
filepath.Join(libcDir, "stdlib", "gdtoa-gdtoa.c"),
filepath.Join(libcDir, "stdlib", "gdtoa-dmisc.c"),
filepath.Join(libcDir, "stdlib", "gdtoa-gmisc.c"),
filepath.Join(libcDir, "stdlib", "mallinfor.c"),
filepath.Join(libcDir, "stdlib", "malloc.c"),
filepath.Join(libcDir, "stdlib", "mallocr.c"),
filepath.Join(libcDir, "stdlib", "mallstatsr.c"),
filepath.Join(libcDir, "stdlib", "mblen.c"),
filepath.Join(libcDir, "stdlib", "mblen_r.c"),
filepath.Join(libcDir, "stdlib", "mbstowcs.c"),
filepath.Join(libcDir, "stdlib", "mbstowcs_r.c"),
filepath.Join(libcDir, "stdlib", "mbtowc.c"),
filepath.Join(libcDir, "stdlib", "mbtowc_r.c"),
filepath.Join(libcDir, "stdlib", "mlock.c"),
filepath.Join(libcDir, "stdlib", "mprec.c"),
filepath.Join(libcDir, "stdlib", "msizer.c"),
filepath.Join(libcDir, "stdlib", "mstats.c"),
filepath.Join(libcDir, "stdlib", "on_exit_args.c"),
filepath.Join(libcDir, "stdlib", "quick_exit.c"),
filepath.Join(libcDir, "stdlib", "rand.c"),
filepath.Join(libcDir, "stdlib", "rand_r.c"),
filepath.Join(libcDir, "stdlib", "random.c"),
filepath.Join(libcDir, "stdlib", "realloc.c"),
filepath.Join(libcDir, "stdlib", "reallocarray.c"),
filepath.Join(libcDir, "stdlib", "reallocf.c"),
filepath.Join(libcDir, "stdlib", "reallocr.c"),
filepath.Join(libcDir, "stdlib", "sb_charsets.c"),
filepath.Join(libcDir, "stdlib", "strtod.c"),
filepath.Join(libcDir, "stdlib", "strtoimax.c"),
filepath.Join(libcDir, "stdlib", "strtol.c"),
filepath.Join(libcDir, "stdlib", "strtoul.c"),
filepath.Join(libcDir, "stdlib", "strtoumax.c"),
filepath.Join(libcDir, "stdlib", "utoa.c"),
filepath.Join(libcDir, "stdlib", "wcstod.c"),
filepath.Join(libcDir, "stdlib", "wcstoimax.c"),
filepath.Join(libcDir, "stdlib", "wcstol.c"),
filepath.Join(libcDir, "stdlib", "wcstoul.c"),
filepath.Join(libcDir, "stdlib", "wcstoumax.c"),
filepath.Join(libcDir, "stdlib", "wcstombs.c"),
filepath.Join(libcDir, "stdlib", "wcstombs_r.c"),
filepath.Join(libcDir, "stdlib", "wctomb.c"),
filepath.Join(libcDir, "stdlib", "wctomb_r.c"),
filepath.Join(libcDir, "stdlib", "strtodg.c"),
filepath.Join(libcDir, "stdlib", "strtold.c"),
filepath.Join(libcDir, "stdlib", "strtorx.c"),
filepath.Join(libcDir, "stdlib", "wcstold.c"),
filepath.Join(libcDir, "stdlib", "arc4random.c"),
filepath.Join(libcDir, "stdlib", "arc4random_uniform.c"),
filepath.Join(libcDir, "stdlib", "cxa_atexit.c"),
filepath.Join(libcDir, "stdlib", "cxa_finalize.c"),
filepath.Join(libcDir, "stdlib", "drand48.c"),
filepath.Join(libcDir, "stdlib", "ecvtbuf.c"),
filepath.Join(libcDir, "stdlib", "efgcvt.c"),
filepath.Join(libcDir, "stdlib", "erand48.c"),
filepath.Join(libcDir, "stdlib", "jrand48.c"),
filepath.Join(libcDir, "stdlib", "lcong48.c"),
filepath.Join(libcDir, "stdlib", "lrand48.c"),
filepath.Join(libcDir, "stdlib", "mrand48.c"),
filepath.Join(libcDir, "stdlib", "msize.c"),
filepath.Join(libcDir, "stdlib", "mtrim.c"),
filepath.Join(libcDir, "stdlib", "nrand48.c"),
filepath.Join(libcDir, "stdlib", "rand48.c"),
filepath.Join(libcDir, "stdlib", "seed48.c"),
filepath.Join(libcDir, "stdlib", "srand48.c"),
filepath.Join(libcDir, "stdlib", "strtoll.c"),
filepath.Join(libcDir, "stdlib", "strtoll_r.c"),
filepath.Join(libcDir, "stdlib", "strtoull.c"),
filepath.Join(libcDir, "stdlib", "strtoull_r.c"),
filepath.Join(libcDir, "stdlib", "wcstoll.c"),
filepath.Join(libcDir, "stdlib", "wcstoll_r.c"),
filepath.Join(libcDir, "stdlib", "wcstoull.c"),
filepath.Join(libcDir, "stdlib", "wcstoull_r.c"),
filepath.Join(libcDir, "stdlib", "atoll.c"),
filepath.Join(libcDir, "stdlib", "llabs.c"),
filepath.Join(libcDir, "stdlib", "lldiv.c"),
filepath.Join(libcDir, "stdlib", "a64l.c"),
filepath.Join(libcDir, "stdlib", "btowc.c"),
filepath.Join(libcDir, "stdlib", "getopt.c"),
filepath.Join(libcDir, "stdlib", "getsubopt.c"),
filepath.Join(libcDir, "stdlib", "l64a.c"),
filepath.Join(libcDir, "stdlib", "malign.c"),
filepath.Join(libcDir, "stdlib", "malignr.c"),
filepath.Join(libcDir, "stdlib", "malloptr.c"),
filepath.Join(libcDir, "stdlib", "mbrlen.c"),
filepath.Join(libcDir, "stdlib", "mbrtowc.c"),
filepath.Join(libcDir, "stdlib", "mbsinit.c"),
filepath.Join(libcDir, "stdlib", "mbsnrtowcs.c"),
filepath.Join(libcDir, "stdlib", "mbsrtowcs.c"),
filepath.Join(libcDir, "stdlib", "on_exit.c"),
filepath.Join(libcDir, "stdlib", "pvallocr.c"),
filepath.Join(libcDir, "stdlib", "valloc.c"),
filepath.Join(libcDir, "stdlib", "vallocr.c"),
filepath.Join(libcDir, "stdlib", "wcrtomb.c"),
filepath.Join(libcDir, "stdlib", "wcsnrtombs.c"),
filepath.Join(libcDir, "stdlib", "wcsrtombs.c"),
filepath.Join(libcDir, "stdlib", "wctob.c"),
filepath.Join(libcDir, "stdlib", "putenv.c"),
filepath.Join(libcDir, "stdlib", "putenv_r.c"),
filepath.Join(libcDir, "stdlib", "setenv.c"),
filepath.Join(libcDir, "stdlib", "setenv_r.c"),
filepath.Join(libcDir, "stdlib", "rpmatch.c"),
filepath.Join(libcDir, "stdlib", "system.c"),
filepath.Join(libcDir, "ctype", "ctype_.c"),
filepath.Join(libcDir, "ctype", "isalnum.c"),
filepath.Join(libcDir, "ctype", "isalpha.c"),
filepath.Join(libcDir, "ctype", "iscntrl.c"),
filepath.Join(libcDir, "ctype", "isdigit.c"),
filepath.Join(libcDir, "ctype", "islower.c"),
filepath.Join(libcDir, "ctype", "isupper.c"),
filepath.Join(libcDir, "ctype", "isprint.c"),
filepath.Join(libcDir, "ctype", "ispunct.c"),
filepath.Join(libcDir, "ctype", "isspace.c"),
filepath.Join(libcDir, "ctype", "isxdigit.c"),
filepath.Join(libcDir, "ctype", "tolower.c"),
filepath.Join(libcDir, "ctype", "toupper.c"),
filepath.Join(libcDir, "ctype", "categories.c"),
filepath.Join(libcDir, "ctype", "isalnum_l.c"),
filepath.Join(libcDir, "ctype", "isalpha_l.c"),
filepath.Join(libcDir, "ctype", "isascii.c"),
filepath.Join(libcDir, "ctype", "isascii_l.c"),
filepath.Join(libcDir, "ctype", "isblank.c"),
filepath.Join(libcDir, "ctype", "isblank_l.c"),
filepath.Join(libcDir, "ctype", "iscntrl_l.c"),
filepath.Join(libcDir, "ctype", "isdigit_l.c"),
filepath.Join(libcDir, "ctype", "islower_l.c"),
filepath.Join(libcDir, "ctype", "isupper_l.c"),
filepath.Join(libcDir, "ctype", "isprint_l.c"),
filepath.Join(libcDir, "ctype", "ispunct_l.c"),
filepath.Join(libcDir, "ctype", "isspace_l.c"),
filepath.Join(libcDir, "ctype", "iswalnum.c"),
filepath.Join(libcDir, "ctype", "iswalnum_l.c"),
filepath.Join(libcDir, "ctype", "iswalpha.c"),
filepath.Join(libcDir, "ctype", "iswalpha_l.c"),
filepath.Join(libcDir, "ctype", "iswblank.c"),
filepath.Join(libcDir, "ctype", "iswblank_l.c"),
filepath.Join(libcDir, "ctype", "iswcntrl.c"),
filepath.Join(libcDir, "ctype", "iswcntrl_l.c"),
filepath.Join(libcDir, "ctype", "iswctype.c"),
filepath.Join(libcDir, "ctype", "iswctype_l.c"),
filepath.Join(libcDir, "ctype", "iswdigit.c"),
filepath.Join(libcDir, "ctype", "iswdigit_l.c"),
filepath.Join(libcDir, "ctype", "iswgraph.c"),
filepath.Join(libcDir, "ctype", "iswgraph_l.c"),
filepath.Join(libcDir, "ctype", "iswlower.c"),
filepath.Join(libcDir, "ctype", "iswlower_l.c"),
filepath.Join(libcDir, "ctype", "iswprint.c"),
filepath.Join(libcDir, "ctype", "iswprint_l.c"),
filepath.Join(libcDir, "ctype", "iswpunct.c"),
filepath.Join(libcDir, "ctype", "iswpunct_l.c"),
filepath.Join(libcDir, "ctype", "iswspace.c"),
filepath.Join(libcDir, "ctype", "iswspace_l.c"),
filepath.Join(libcDir, "ctype", "iswupper.c"),
filepath.Join(libcDir, "ctype", "iswupper_l.c"),
filepath.Join(libcDir, "ctype", "iswxdigit.c"),
filepath.Join(libcDir, "ctype", "iswxdigit_l.c"),
filepath.Join(libcDir, "ctype", "isxdigit_l.c"),
filepath.Join(libcDir, "ctype", "jp2uc.c"),
filepath.Join(libcDir, "ctype", "toascii.c"),
filepath.Join(libcDir, "ctype", "toascii_l.c"),
filepath.Join(libcDir, "ctype", "tolower_l.c"),
filepath.Join(libcDir, "ctype", "toupper_l.c"),
filepath.Join(libcDir, "ctype", "towctrans.c"),
filepath.Join(libcDir, "ctype", "towctrans_l.c"),
filepath.Join(libcDir, "ctype", "towlower.c"),
filepath.Join(libcDir, "ctype", "towlower_l.c"),
filepath.Join(libcDir, "ctype", "towupper.c"),
filepath.Join(libcDir, "ctype", "towupper_l.c"),
filepath.Join(libcDir, "ctype", "wctrans.c"),
filepath.Join(libcDir, "ctype", "wctrans_l.c"),
filepath.Join(libcDir, "ctype", "wctype.c"),
filepath.Join(libcDir, "ctype", "wctype_l.c"),
filepath.Join(libcDir, "search", "bsearch.c"),
filepath.Join(libcDir, "search", "ndbm.c"),
filepath.Join(libcDir, "search", "qsort.c"),
filepath.Join(libcDir, "search", "hash.c"),
filepath.Join(libcDir, "search", "hash_bigkey.c"),
filepath.Join(libcDir, "search", "hash_buf.c"),
filepath.Join(libcDir, "search", "hash_func.c"),
filepath.Join(libcDir, "search", "hash_log2.c"),
filepath.Join(libcDir, "search", "hash_page.c"),
filepath.Join(libcDir, "search", "hcreate.c"),
filepath.Join(libcDir, "search", "hcreate_r.c"),
filepath.Join(libcDir, "search", "tdelete.c"),
filepath.Join(libcDir, "search", "tdestroy.c"),
filepath.Join(libcDir, "search", "tfind.c"),
filepath.Join(libcDir, "search", "tsearch.c"),
filepath.Join(libcDir, "search", "twalk.c"),
filepath.Join(libcDir, "search", "bsd_qsort_r.c"),
filepath.Join(libcDir, "search", "qsort_r.c"),
filepath.Join(libcDir, "stdio", "nano-vfprintf_float.c"),
filepath.Join(libcDir, "stdio", "nano-svfprintf.c"),
filepath.Join(libcDir, "stdio", "nano-svfscanf.c"),
filepath.Join(libcDir, "stdio", "nano-vfprintf.c"),
filepath.Join(libcDir, "stdio", "nano-vfprintf_i.c"),
filepath.Join(libcDir, "stdio", "nano-vfscanf.c"),
filepath.Join(libcDir, "stdio", "nano-vfscanf_i.c"),
filepath.Join(libcDir, "stdio", "nano-vfscanf_float.c"),
filepath.Join(libcDir, "stdio", "clearerr.c"),
filepath.Join(libcDir, "stdio", "fclose.c"),
filepath.Join(libcDir, "stdio", "fdopen.c"),
filepath.Join(libcDir, "stdio", "feof.c"),
filepath.Join(libcDir, "stdio", "ferror.c"),
filepath.Join(libcDir, "stdio", "fflush.c"),
filepath.Join(libcDir, "stdio", "fgetc.c"),
filepath.Join(libcDir, "stdio", "fgetpos.c"),
filepath.Join(libcDir, "stdio", "fgets.c"),
filepath.Join(libcDir, "stdio", "fileno.c"),
filepath.Join(libcDir, "stdio", "findfp.c"),
filepath.Join(libcDir, "stdio", "flags.c"),
filepath.Join(libcDir, "stdio", "fopen.c"),
filepath.Join(libcDir, "stdio", "fprintf.c"),
filepath.Join(libcDir, "stdio", "fputc.c"),
filepath.Join(libcDir, "stdio", "fputs.c"),
filepath.Join(libcDir, "stdio", "fread.c"),
filepath.Join(libcDir, "stdio", "freopen.c"),
filepath.Join(libcDir, "stdio", "fscanf.c"),
filepath.Join(libcDir, "stdio", "fseek.c"),
filepath.Join(libcDir, "stdio", "fsetpos.c"),
filepath.Join(libcDir, "stdio", "ftell.c"),
filepath.Join(libcDir, "stdio", "fvwrite.c"),
filepath.Join(libcDir, "stdio", "fwalk.c"),
filepath.Join(libcDir, "stdio", "fwrite.c"),
filepath.Join(libcDir, "stdio", "getc.c"),
filepath.Join(libcDir, "stdio", "getchar.c"),
filepath.Join(libcDir, "stdio", "getc_u.c"),
filepath.Join(libcDir, "stdio", "getchar_u.c"),
filepath.Join(libcDir, "stdio", "getdelim.c"),
filepath.Join(libcDir, "stdio", "getline.c"),
filepath.Join(libcDir, "stdio", "gets.c"),
filepath.Join(libcDir, "stdio", "makebuf.c"),
filepath.Join(libcDir, "stdio", "perror.c"),
filepath.Join(libcDir, "stdio", "printf.c"),
filepath.Join(libcDir, "stdio", "putc.c"),
filepath.Join(libcDir, "stdio", "putchar.c"),
filepath.Join(libcDir, "stdio", "putc_u.c"),
filepath.Join(libcDir, "stdio", "putchar_u.c"),
filepath.Join(libcDir, "stdio", "puts.c"),
filepath.Join(libcDir, "stdio", "refill.c"),
filepath.Join(libcDir, "stdio", "remove.c"),
filepath.Join(libcDir, "stdio", "rename.c"),
filepath.Join(libcDir, "stdio", "rewind.c"),
filepath.Join(libcDir, "stdio", "rget.c"),
filepath.Join(libcDir, "stdio", "scanf.c"),
filepath.Join(libcDir, "stdio", "sccl.c"),
filepath.Join(libcDir, "stdio", "setbuf.c"),
filepath.Join(libcDir, "stdio", "setbuffer.c"),
filepath.Join(libcDir, "stdio", "setlinebuf.c"),
filepath.Join(libcDir, "stdio", "setvbuf.c"),
filepath.Join(libcDir, "stdio", "snprintf.c"),
filepath.Join(libcDir, "stdio", "sprintf.c"),
filepath.Join(libcDir, "stdio", "sscanf.c"),
filepath.Join(libcDir, "stdio", "stdio.c"),
filepath.Join(libcDir, "stdio", "svfiwprintf.c"),
filepath.Join(libcDir, "stdio", "svfiwscanf.c"),
filepath.Join(libcDir, "stdio", "svfwprintf.c"),
filepath.Join(libcDir, "stdio", "svfwscanf.c"),
filepath.Join(libcDir, "stdio", "tmpfile.c"),
filepath.Join(libcDir, "stdio", "tmpnam.c"),
filepath.Join(libcDir, "stdio", "ungetc.c"),
filepath.Join(libcDir, "stdio", "vdprintf.c"),
filepath.Join(libcDir, "stdio", "vfiwprintf.c"),
filepath.Join(libcDir, "stdio", "vfiwscanf.c"),
filepath.Join(libcDir, "stdio", "vfwscanf.c"),
filepath.Join(libcDir, "stdio", "vprintf.c"),
filepath.Join(libcDir, "stdio", "vscanf.c"),
filepath.Join(libcDir, "stdio", "vsnprintf.c"),
filepath.Join(libcDir, "stdio", "vsprintf.c"),
filepath.Join(libcDir, "stdio", "vsscanf.c"),
filepath.Join(libcDir, "stdio", "wbuf.c"),
filepath.Join(libcDir, "stdio", "wsetup.c"),
filepath.Join(libcDir, "stdio", "asprintf.c"),
filepath.Join(libcDir, "stdio", "fcloseall.c"),
filepath.Join(libcDir, "stdio", "fseeko.c"),
filepath.Join(libcDir, "stdio", "ftello.c"),
filepath.Join(libcDir, "stdio", "getw.c"),
filepath.Join(libcDir, "stdio", "mktemp.c"),
filepath.Join(libcDir, "stdio", "putw.c"),
filepath.Join(libcDir, "stdio", "vasprintf.c"),
filepath.Join(libcDir, "stdio", "asnprintf.c"),
filepath.Join(libcDir, "stdio", "clearerr_u.c"),
filepath.Join(libcDir, "stdio", "dprintf.c"),
filepath.Join(libcDir, "stdio", "feof_u.c"),
filepath.Join(libcDir, "stdio", "ferror_u.c"),
filepath.Join(libcDir, "stdio", "fflush_u.c"),
filepath.Join(libcDir, "stdio", "fgetc_u.c"),
filepath.Join(libcDir, "stdio", "fgets_u.c"),
filepath.Join(libcDir, "stdio", "fgetwc.c"),
filepath.Join(libcDir, "stdio", "fgetwc_u.c"),
filepath.Join(libcDir, "stdio", "fgetws.c"),
filepath.Join(libcDir, "stdio", "fgetws_u.c"),
filepath.Join(libcDir, "stdio", "fileno_u.c"),
filepath.Join(libcDir, "stdio", "fmemopen.c"),
filepath.Join(libcDir, "stdio", "fopencookie.c"),
filepath.Join(libcDir, "stdio", "fpurge.c"),
filepath.Join(libcDir, "stdio", "fputc_u.c"),
filepath.Join(libcDir, "stdio", "fputs_u.c"),
filepath.Join(libcDir, "stdio", "fputwc.c"),
filepath.Join(libcDir, "stdio", "fputwc_u.c"),
filepath.Join(libcDir, "stdio", "fputws.c"),
filepath.Join(libcDir, "stdio", "fputws_u.c"),
filepath.Join(libcDir, "stdio", "fread_u.c"),
filepath.Join(libcDir, "stdio", "fsetlocking.c"),
filepath.Join(libcDir, "stdio", "funopen.c"),
filepath.Join(libcDir, "stdio", "fwide.c"),
filepath.Join(libcDir, "stdio", "fwprintf.c"),
filepath.Join(libcDir, "stdio", "fwrite_u.c"),
filepath.Join(libcDir, "stdio", "fwscanf.c"),
filepath.Join(libcDir, "stdio", "getwc.c"),
filepath.Join(libcDir, "stdio", "getwc_u.c"),
filepath.Join(libcDir, "stdio", "getwchar.c"),
filepath.Join(libcDir, "stdio", "getwchar_u.c"),
filepath.Join(libcDir, "stdio", "open_memstream.c"),
filepath.Join(libcDir, "stdio", "putwc.c"),
filepath.Join(libcDir, "stdio", "putwc_u.c"),
filepath.Join(libcDir, "stdio", "putwchar.c"),
filepath.Join(libcDir, "stdio", "putwchar_u.c"),
filepath.Join(libcDir, "stdio", "stdio_ext.c"),
filepath.Join(libcDir, "stdio", "swprintf.c"),
filepath.Join(libcDir, "stdio", "swscanf.c"),
filepath.Join(libcDir, "stdio", "ungetwc.c"),
filepath.Join(libcDir, "stdio", "vasnprintf.c"),
filepath.Join(libcDir, "stdio", "vswprintf.c"),
filepath.Join(libcDir, "stdio", "vswscanf.c"),
filepath.Join(libcDir, "stdio", "vwprintf.c"),
filepath.Join(libcDir, "stdio", "vwscanf.c"),
filepath.Join(libcDir, "stdio", "wprintf.c"),
filepath.Join(libcDir, "stdio", "wscanf.c"),
filepath.Join(libcDir, "string", "bcopy.c"),
filepath.Join(libcDir, "string", "bzero.c"),
filepath.Join(libcDir, "string", "explicit_bzero.c"),
filepath.Join(libcDir, "string", "ffsl.c"),
filepath.Join(libcDir, "string", "ffsll.c"),
filepath.Join(libcDir, "string", "fls.c"),
filepath.Join(libcDir, "string", "flsl.c"),
filepath.Join(libcDir, "string", "flsll.c"),
filepath.Join(libcDir, "string", "index.c"),
filepath.Join(libcDir, "string", "memchr.c"),
filepath.Join(libcDir, "string", "memcmp.c"),
filepath.Join(libcDir, "string", "memmove.c"),
filepath.Join(libcDir, "string", "rindex.c"),
filepath.Join(libcDir, "string", "strcasecmp.c"),
filepath.Join(libcDir, "string", "strcat.c"),
filepath.Join(libcDir, "string", "strchr.c"),
filepath.Join(libcDir, "string", "strcoll.c"),
filepath.Join(libcDir, "string", "strcspn.c"),
filepath.Join(libcDir, "string", "strdup.c"),
filepath.Join(libcDir, "string", "strdup_r.c"),
filepath.Join(libcDir, "string", "strerror.c"),
filepath.Join(libcDir, "string", "strerror_r.c"),
filepath.Join(libcDir, "string", "strlcat.c"),
filepath.Join(libcDir, "string", "strlcpy.c"),
filepath.Join(libcDir, "string", "strlwr.c"),
filepath.Join(libcDir, "string", "strncasecmp.c"),
filepath.Join(libcDir, "string", "strncat.c"),
filepath.Join(libcDir, "string", "strncmp.c"),
filepath.Join(libcDir, "string", "strnlen.c"),
filepath.Join(libcDir, "string", "strnstr.c"),
filepath.Join(libcDir, "string", "strpbrk.c"),
filepath.Join(libcDir, "string", "strrchr.c"),
filepath.Join(libcDir, "string", "strsep.c"),
filepath.Join(libcDir, "string", "strsignal.c"),
filepath.Join(libcDir, "string", "strspn.c"),
filepath.Join(libcDir, "string", "strtok.c"),
filepath.Join(libcDir, "string", "strtok_r.c"),
filepath.Join(libcDir, "string", "strupr.c"),
filepath.Join(libcDir, "string", "strxfrm.c"),
filepath.Join(libcDir, "string", "strstr.c"),
filepath.Join(libcDir, "string", "swab.c"),
filepath.Join(libcDir, "string", "timingsafe_bcmp.c"),
filepath.Join(libcDir, "string", "timingsafe_memcmp.c"),
filepath.Join(libcDir, "string", "u_strerr.c"),
filepath.Join(libcDir, "string", "wcscat.c"),
filepath.Join(libcDir, "string", "wcschr.c"),
filepath.Join(libcDir, "string", "wcscmp.c"),
filepath.Join(libcDir, "string", "wcscoll.c"),
filepath.Join(libcDir, "string", "wcscpy.c"),
filepath.Join(libcDir, "string", "wcscspn.c"),
filepath.Join(libcDir, "string", "wcslcat.c"),
filepath.Join(libcDir, "string", "wcslcpy.c"),
filepath.Join(libcDir, "string", "wcslen.c"),
filepath.Join(libcDir, "string", "wcsncat.c"),
filepath.Join(libcDir, "string", "wcsncmp.c"),
filepath.Join(libcDir, "string", "wcsncpy.c"),
filepath.Join(libcDir, "string", "wcsnlen.c"),
filepath.Join(libcDir, "string", "wcspbrk.c"),
filepath.Join(libcDir, "string", "wcsrchr.c"),
filepath.Join(libcDir, "string", "wcsspn.c"),
filepath.Join(libcDir, "string", "wcsstr.c"),
filepath.Join(libcDir, "string", "wcstok.c"),
filepath.Join(libcDir, "string", "wcswidth.c"),
filepath.Join(libcDir, "string", "wcsxfrm.c"),
filepath.Join(libcDir, "string", "wcwidth.c"),
filepath.Join(libcDir, "string", "wmemchr.c"),
filepath.Join(libcDir, "string", "wmemcmp.c"),
filepath.Join(libcDir, "string", "wmemcpy.c"),
filepath.Join(libcDir, "string", "wmemmove.c"),
filepath.Join(libcDir, "string", "wmemset.c"),
filepath.Join(libcDir, "string", "xpg_strerror_r.c"),
filepath.Join(libcDir, "string", "bcmp.c"),
filepath.Join(libcDir, "string", "memccpy.c"),
filepath.Join(libcDir, "string", "mempcpy.c"),
filepath.Join(libcDir, "string", "stpcpy.c"),
filepath.Join(libcDir, "string", "stpncpy.c"),
filepath.Join(libcDir, "string", "strndup.c"),
filepath.Join(libcDir, "string", "strcasestr.c"),
filepath.Join(libcDir, "string", "strchrnul.c"),
filepath.Join(libcDir, "string", "strndup_r.c"),
filepath.Join(libcDir, "string", "wcpcpy.c"),
filepath.Join(libcDir, "string", "wcpncpy.c"),
filepath.Join(libcDir, "string", "wcsdup.c"),
filepath.Join(libcDir, "string", "gnu_basename.c"),
filepath.Join(libcDir, "string", "memmem.c"),
filepath.Join(libcDir, "string", "memrchr.c"),
filepath.Join(libcDir, "string", "rawmemchr.c"),
filepath.Join(libcDir, "string", "strcasecmp_l.c"),
filepath.Join(libcDir, "string", "strcoll_l.c"),
filepath.Join(libcDir, "string", "strncasecmp_l.c"),
filepath.Join(libcDir, "string", "strverscmp.c"),
filepath.Join(libcDir, "string", "strxfrm_l.c"),
filepath.Join(libcDir, "string", "wcscasecmp.c"),
filepath.Join(libcDir, "string", "wcscasecmp_l.c"),
filepath.Join(libcDir, "string", "wcscoll_l.c"),
filepath.Join(libcDir, "string", "wcsncasecmp.c"),
filepath.Join(libcDir, "string", "wcsncasecmp_l.c"),
filepath.Join(libcDir, "string", "wcsxfrm_l.c"),
filepath.Join(libcDir, "string", "wmempcpy.c"),
filepath.Join(libcDir, "signal", "psignal.c"),
filepath.Join(libcDir, "signal", "raise.c"),
filepath.Join(libcDir, "signal", "signal.c"),
filepath.Join(libcDir, "signal", "sig2str.c"),
filepath.Join(libcDir, "time", "asctime.c"),
filepath.Join(libcDir, "time", "asctime_r.c"),
filepath.Join(libcDir, "time", "clock.c"),
filepath.Join(libcDir, "time", "ctime.c"),
filepath.Join(libcDir, "time", "ctime_r.c"),
filepath.Join(libcDir, "time", "difftime.c"),
filepath.Join(libcDir, "time", "gettzinfo.c"),
filepath.Join(libcDir, "time", "gmtime.c"),
filepath.Join(libcDir, "time", "gmtime_r.c"),
filepath.Join(libcDir, "time", "lcltime.c"),
filepath.Join(libcDir, "time", "lcltime_r.c"),
filepath.Join(libcDir, "time", "mktime.c"),
filepath.Join(libcDir, "time", "month_lengths.c"),
filepath.Join(libcDir, "time", "strftime.c"),
filepath.Join(libcDir, "time", "strptime.c"),
filepath.Join(libcDir, "time", "time.c"),
filepath.Join(libcDir, "time", "tzcalc_limits.c"),
filepath.Join(libcDir, "time", "tzlock.c"),
filepath.Join(libcDir, "time", "tzset.c"),
filepath.Join(libcDir, "time", "tzset_r.c"),
filepath.Join(libcDir, "time", "tzvars.c"),
filepath.Join(libcDir, "time", "wcsftime.c"),
filepath.Join(libcDir, "locale", "locale.c"),
filepath.Join(libcDir, "locale", "localeconv.c"),
filepath.Join(libcDir, "locale", "duplocale.c"),
filepath.Join(libcDir, "locale", "freelocale.c"),
filepath.Join(libcDir, "locale", "lctype.c"),
filepath.Join(libcDir, "locale", "lmessages.c"),
filepath.Join(libcDir, "locale", "lnumeric.c"),
filepath.Join(libcDir, "locale", "lmonetary.c"),
filepath.Join(libcDir, "locale", "newlocale.c"),
filepath.Join(libcDir, "locale", "nl_langinfo.c"),
filepath.Join(libcDir, "locale", "timelocal.c"),
filepath.Join(libcDir, "locale", "uselocale.c"),
filepath.Join(libcDir, "reent", "closer.c"),
filepath.Join(libcDir, "reent", "reent.c"),
filepath.Join(libcDir, "reent", "impure.c"),
filepath.Join(libcDir, "reent", "fcntlr.c"),
filepath.Join(libcDir, "reent", "fstatr.c"),
filepath.Join(libcDir, "reent", "getentropyr.c"),
filepath.Join(libcDir, "reent", "getreent.c"),
filepath.Join(libcDir, "reent", "gettimeofdayr.c"),
filepath.Join(libcDir, "reent", "isattyr.c"),
filepath.Join(libcDir, "reent", "linkr.c"),
filepath.Join(libcDir, "reent", "lseekr.c"),
filepath.Join(libcDir, "reent", "mkdirr.c"),
filepath.Join(libcDir, "reent", "openr.c"),
filepath.Join(libcDir, "reent", "readr.c"),
filepath.Join(libcDir, "reent", "renamer.c"),
filepath.Join(libcDir, "reent", "signalr.c"),
filepath.Join(libcDir, "reent", "signgam.c"),
filepath.Join(libcDir, "reent", "sbrkr.c"),
filepath.Join(libcDir, "reent", "statr.c"),
filepath.Join(libcDir, "reent", "timesr.c"),
filepath.Join(libcDir, "reent", "unlinkr.c"),
filepath.Join(libcDir, "reent", "writer.c"),
filepath.Join(libcDir, "reent", "execr.c"),
filepath.Join(libcDir, "errno", "errno.c"),
filepath.Join(libcDir, "misc", "__dprintf.c"),
filepath.Join(libcDir, "misc", "unctrl.c"),
filepath.Join(libcDir, "misc", "ffs.c"),
filepath.Join(libcDir, "misc", "init.c"),
filepath.Join(libcDir, "misc", "fini.c"),
filepath.Join(libcDir, "misc", "lock.c"),
filepath.Join(libcDir, "posix", "closedir.c"),
filepath.Join(libcDir, "posix", "collate.c"),
filepath.Join(libcDir, "posix", "collcmp.c"),
filepath.Join(libcDir, "posix", "creat.c"),
filepath.Join(libcDir, "posix", "dirfd.c"),
// filepath.Join(libcDir, "posix", "fnmatch.c"),
filepath.Join(libcDir, "posix", "glob.c"),
filepath.Join(libcDir, "posix", "opendir.c"),
filepath.Join(libcDir, "posix", "readdir.c"),
filepath.Join(libcDir, "posix", "readdir_r.c"),
filepath.Join(libcDir, "posix", "regcomp.c"),
filepath.Join(libcDir, "posix", "regerror.c"),
filepath.Join(libcDir, "posix", "regexec.c"),
filepath.Join(libcDir, "posix", "regfree.c"),
filepath.Join(libcDir, "posix", "rewinddir.c"),
filepath.Join(libcDir, "posix", "sleep.c"),
filepath.Join(libcDir, "posix", "usleep.c"),
filepath.Join(libcDir, "posix", "telldir.c"),
filepath.Join(libcDir, "posix", "ftw.c"),
filepath.Join(libcDir, "posix", "nftw.c"),
filepath.Join(libcDir, "posix", "scandir.c"),
filepath.Join(libcDir, "posix", "seekdir.c"),
filepath.Join(libcDir, "posix", "execl.c"),
filepath.Join(libcDir, "posix", "execle.c"),
filepath.Join(libcDir, "posix", "execlp.c"),
filepath.Join(libcDir, "posix", "execv.c"),
filepath.Join(libcDir, "posix", "execve.c"),
filepath.Join(libcDir, "posix", "execvp.c"),
filepath.Join(libcDir, "posix", "wordexp.c"),
filepath.Join(libcDir, "posix", "wordfree.c"),
filepath.Join(libcDir, "posix", "popen.c"),
filepath.Join(libcDir, "posix", "posix_spawn.c"),
filepath.Join(libcDir, "syscalls", "sysclose.c"),
filepath.Join(libcDir, "syscalls", "sysfcntl.c"),
filepath.Join(libcDir, "syscalls", "sysfstat.c"),
filepath.Join(libcDir, "syscalls", "sysgetentropy.c"),
filepath.Join(libcDir, "syscalls", "sysgetpid.c"),
filepath.Join(libcDir, "syscalls", "sysgettod.c"),
filepath.Join(libcDir, "syscalls", "sysisatty.c"),
filepath.Join(libcDir, "syscalls", "syskill.c"),
filepath.Join(libcDir, "syscalls", "syslink.c"),
filepath.Join(libcDir, "syscalls", "syslseek.c"),
filepath.Join(libcDir, "syscalls", "sysopen.c"),
filepath.Join(libcDir, "syscalls", "sysread.c"),
filepath.Join(libcDir, "syscalls", "syssbrk.c"),
filepath.Join(libcDir, "syscalls", "sysstat.c"),
filepath.Join(libcDir, "syscalls", "systimes.c"),
filepath.Join(libcDir, "syscalls", "sysunlink.c"),
filepath.Join(libcDir, "syscalls", "syswrite.c"),
filepath.Join(libcDir, "syscalls", "sysexecve.c"),
filepath.Join(libcDir, "syscalls", "sysfork.c"),
filepath.Join(libcDir, "syscalls", "syswait.c"),
filepath.Join(libcDir, "iconv", "ces", "utf-8.c"),
filepath.Join(libcDir, "iconv", "ces", "utf-16.c"),
filepath.Join(libcDir, "iconv", "ces", "ucs-2.c"),
filepath.Join(libcDir, "iconv", "ces", "us-ascii.c"),
filepath.Join(libcDir, "iconv", "ces", "ucs-4.c"),
filepath.Join(libcDir, "iconv", "ces", "ucs-2-internal.c"),
filepath.Join(libcDir, "iconv", "ces", "ucs-4-internal.c"),
filepath.Join(libcDir, "iconv", "ces", "cesbi.c"),
filepath.Join(libcDir, "iconv", "ces", "table.c"),
filepath.Join(libcDir, "iconv", "ces", "table-pcs.c"),
filepath.Join(libcDir, "iconv", "ces", "euc.c"),
filepath.Join(libcDir, "iconv", "ccs", "ccsbi.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_10.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_13.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_14.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_15.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_1.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_2.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_3.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_4.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_5.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_6.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_7.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_8.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_9.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_8859_11.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1250.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1252.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1254.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1256.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1258.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1251.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1253.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1255.c"),
filepath.Join(libcDir, "iconv", "ccs", "win_1257.c"),
filepath.Join(libcDir, "iconv", "ccs", "koi8_r.c"),
filepath.Join(libcDir, "iconv", "ccs", "koi8_u.c"),
filepath.Join(libcDir, "iconv", "ccs", "koi8_ru.c"),
filepath.Join(libcDir, "iconv", "ccs", "koi8_uni.c"),
filepath.Join(libcDir, "iconv", "ccs", "iso_ir_111.c"),
filepath.Join(libcDir, "iconv", "ccs", "big5.c"),
filepath.Join(libcDir, "iconv", "ccs", "cp775.c"),
filepath.Join(libcDir, "iconv", "ccs", "cp850.c"),
filepath.Join(libcDir, "iconv", "ccs", "cp852.c"),
filepath.Join(libcDir, "iconv", "ccs", "cp855.c"),
filepath.Join(libcDir, "iconv", "ccs", "cp866.c"),
filepath.Join(libcDir, "iconv", "ccs", "jis_x0212_1990.c"),
filepath.Join(libcDir, "iconv", "ccs", "jis_x0201_1976.c"),
filepath.Join(libcDir, "iconv", "ccs", "jis_x0208_1990.c"),
filepath.Join(libcDir, "iconv", "ccs", "ksx1001.c"),
filepath.Join(libcDir, "iconv", "ccs", "cns11643_plane1.c"),
filepath.Join(libcDir, "iconv", "ccs", "cns11643_plane2.c"),
filepath.Join(libcDir, "iconv", "ccs", "cns11643_plane14.c"),
filepath.Join(libcDir, "iconv", "lib", "aliasesi.c"),
filepath.Join(libcDir, "iconv", "lib", "ucsconv.c"),
filepath.Join(libcDir, "iconv", "lib", "nullconv.c"),
filepath.Join(libcDir, "iconv", "lib", "iconv.c"),
filepath.Join(libcDir, "iconv", "lib", "aliasesbi.c"),
filepath.Join(libcDir, "iconv", "lib", "iconvnls.c"),
filepath.Join(libcDir, "ssp", "chk_fail.c"),
filepath.Join(libcDir, "ssp", "stack_protector.c"),
filepath.Join(libcDir, "ssp", "memcpy_chk.c"),
filepath.Join(libcDir, "ssp", "memmove_chk.c"),
filepath.Join(libcDir, "ssp", "mempcpy_chk.c"),
filepath.Join(libcDir, "ssp", "memset_chk.c"),
filepath.Join(libcDir, "ssp", "stpcpy_chk.c"),
filepath.Join(libcDir, "ssp", "stpncpy_chk.c"),
filepath.Join(libcDir, "ssp", "strcat_chk.c"),
filepath.Join(libcDir, "ssp", "strcpy_chk.c"),
filepath.Join(libcDir, "ssp", "strncat_chk.c"),
filepath.Join(libcDir, "ssp", "strncpy_chk.c"),
filepath.Join(libcDir, "ssp", "gets_chk.c"),
filepath.Join(libcDir, "ssp", "snprintf_chk.c"),
filepath.Join(libcDir, "ssp", "sprintf_chk.c"),
filepath.Join(libcDir, "ssp", "vsnprintf_chk.c"),
filepath.Join(libcDir, "ssp", "vsprintf_chk.c"),
// TODO(MeteorsLiu): support riscv
filepath.Join(libcDir, "machine", "xtensa", "memcpy.S"),
filepath.Join(libcDir, "machine", "xtensa", "memset.S"),
filepath.Join(libcDir, "machine", "xtensa", "setjmp.S"),
filepath.Join(libcDir, "machine", "xtensa", "strcmp.S"),
filepath.Join(libcDir, "machine", "xtensa", "strcpy.S"),
filepath.Join(libcDir, "machine", "xtensa", "strlen.S"),
filepath.Join(libcDir, "machine", "xtensa", "strncpy.S"),
},
CFlags: []string{
"-DHAVE_CONFIG_H",
"-D_LIBC",
"-D__NO_SYSCALLS__",
"-D_NO_GLOB",
"-D_NO_EXECVE",
"-D_NO_GETLOGIN",
"-D_NO_GETPWENT",
"-D_NO_GETUT",
"-D_NO_GETPASS",
"-D_NO_SIGSET",
"-D_NO_WORDEXP",
"-D_NO_POPEN",
"-D_NO_POSIX_SPAWN",
"-DHAVE_FCNTL",
"-DHAVE_BLKSIZE",
"-DHAVE_OPENDIR",
"-DHAVE_RENAME",
"-DGETREENT_PROVIDED",
"-DSIGNAL_PROVIDED",
"-D__ESP__",
"-isystem" + filepath.Join(libcDir, "include"),
"-I" + filepath.Join(baseDir, "newlib"),
"-I" + libcDir,
"-I" + filepath.Join(libcDir, "xtensa"),
"-I" + filepath.Join(baseDir, "libgloss"),
// TODO(MeteorsLiu): support riscv
"-idirafter" + filepath.Join(baseDir, "include"),
"-I" + filepath.Join(libcDir, "ssp"),
"-I" + filepath.Join(libcDir, "locale"),
"-I" + filepath.Join(libcDir, "errno"),
"-I" + filepath.Join(libcDir, "syscalls"),
"-I" + filepath.Join(libcDir, "iconv", "lib"),
"-I" + filepath.Join(libcDir, "argz"),
"-I" + filepath.Join(libcDir, "stdio"),
"-I" + filepath.Join(libcDir, "iconv", "ccs"),
"-I" + filepath.Join(libcDir, "ctype"),
"-I" + filepath.Join(libcDir, "signal"),
"-I" + filepath.Join(libcDir, "time"),
"-I" + filepath.Join(libcDir, "reent"),
"-I" + filepath.Join(libcDir, "machine", "xtensa", "include"),
"-I" + filepath.Join(libcDir, "string"),
"-I" + filepath.Join(libcDir, "iconv", "ces"),
"-I" + filepath.Join(libcDir, "search"),
"-I" + filepath.Join(libcDir, "misc"),
"-I" + filepath.Join(libcDir, "posix"),
"-I" + filepath.Join(libcDir, "stdlib"),
},
LDFlags: []string{"-nostdlib", "-L" + baseDir, "-lgloss"},
CCFlags: []string{
"-Oz",
"-fno-builtin",
"-ffreestanding",
"-Wno-implicit-function-declaration",
"-Wno-int-conversion",
"-Wno-unused-command-line-argument",
},
},
},
ArchiveSrcDir: "newlib-esp32-esp-4.3.0",
}
}

View File

@@ -0,0 +1,166 @@
package crosscompile
import (
"os"
"path/filepath"
)
// getPicolibcConfig returns configuration for picolibc
func getPicolibcConfig(baseDir string) *compileLibcConfig {
libcIncludeDir := filepath.Join(baseDir, "libc", "include")
libmIncludeDir := filepath.Join(baseDir, "libm", "common")
localeIncludeDir := filepath.Join(baseDir, "libc", "locale")
os.MkdirAll(baseDir, 0700)
headerFile, _ := os.Create(filepath.Join(baseDir, "picolibc.h"))
headerFile.Close()
return &compileLibcConfig{
Url: "https://github.com/picolibc/picolibc/releases/download/1.8.10/picolibc-1.8.10.tar.xz",
Name: "picolibc",
Groups: []compileGroup{
{
OutputFileName: "libc.a",
Files: []string{
filepath.Join(baseDir, "libc", "string", "bcmp.c"),
filepath.Join(baseDir, "libc", "string", "bcopy.c"),
filepath.Join(baseDir, "libc", "string", "bzero.c"),
filepath.Join(baseDir, "libc", "string", "explicit_bzero.c"),
filepath.Join(baseDir, "libc", "string", "ffsl.c"),
filepath.Join(baseDir, "libc", "string", "ffsll.c"),
filepath.Join(baseDir, "libc", "string", "fls.c"),
filepath.Join(baseDir, "libc", "string", "flsl.c"),
filepath.Join(baseDir, "libc", "string", "flsll.c"),
filepath.Join(baseDir, "libc", "string", "gnu_basename.c"),
filepath.Join(baseDir, "libc", "string", "index.c"),
filepath.Join(baseDir, "libc", "string", "memccpy.c"),
filepath.Join(baseDir, "libc", "string", "memchr.c"),
filepath.Join(baseDir, "libc", "string", "memcmp.c"),
filepath.Join(baseDir, "libc", "string", "memcpy.c"),
filepath.Join(baseDir, "libc", "string", "memmem.c"),
filepath.Join(baseDir, "libc", "string", "memmove.c"),
filepath.Join(baseDir, "libc", "string", "mempcpy.c"),
filepath.Join(baseDir, "libc", "string", "memrchr.c"),
filepath.Join(baseDir, "libc", "string", "memset.c"),
filepath.Join(baseDir, "libc", "string", "rawmemchr.c"),
filepath.Join(baseDir, "libc", "string", "rindex.c"),
filepath.Join(baseDir, "libc", "string", "stpcpy.c"),
filepath.Join(baseDir, "libc", "string", "stpncpy.c"),
filepath.Join(baseDir, "libc", "string", "strcasecmp.c"),
filepath.Join(baseDir, "libc", "string", "strcasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "strcasestr.c"),
filepath.Join(baseDir, "libc", "string", "strcat.c"),
filepath.Join(baseDir, "libc", "string", "strchr.c"),
filepath.Join(baseDir, "libc", "string", "strchrnul.c"),
filepath.Join(baseDir, "libc", "string", "strcmp.c"),
filepath.Join(baseDir, "libc", "string", "strcoll.c"),
filepath.Join(baseDir, "libc", "string", "strcoll_l.c"),
filepath.Join(baseDir, "libc", "string", "strcpy.c"),
filepath.Join(baseDir, "libc", "string", "strcspn.c"),
filepath.Join(baseDir, "libc", "string", "strerror_r.c"),
filepath.Join(baseDir, "libc", "string", "strlcat.c"),
filepath.Join(baseDir, "libc", "string", "strlcpy.c"),
filepath.Join(baseDir, "libc", "string", "strlen.c"),
filepath.Join(baseDir, "libc", "string", "strlwr.c"),
filepath.Join(baseDir, "libc", "string", "strncasecmp.c"),
filepath.Join(baseDir, "libc", "string", "strncasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "strncat.c"),
filepath.Join(baseDir, "libc", "string", "strncmp.c"),
filepath.Join(baseDir, "libc", "string", "strncpy.c"),
filepath.Join(baseDir, "libc", "string", "strndup.c"),
filepath.Join(baseDir, "libc", "string", "strnlen.c"),
filepath.Join(baseDir, "libc", "string", "strnstr.c"),
filepath.Join(baseDir, "libc", "string", "strpbrk.c"),
filepath.Join(baseDir, "libc", "string", "strrchr.c"),
filepath.Join(baseDir, "libc", "string", "strsep.c"),
filepath.Join(baseDir, "libc", "string", "strsignal.c"),
filepath.Join(baseDir, "libc", "string", "strspn.c"),
filepath.Join(baseDir, "libc", "string", "strstr.c"),
filepath.Join(baseDir, "libc", "string", "strtok.c"),
filepath.Join(baseDir, "libc", "string", "strtok_r.c"),
filepath.Join(baseDir, "libc", "string", "strupr.c"),
filepath.Join(baseDir, "libc", "string", "strverscmp.c"),
filepath.Join(baseDir, "libc", "string", "strxfrm.c"),
filepath.Join(baseDir, "libc", "string", "strxfrm_l.c"),
filepath.Join(baseDir, "libc", "string", "swab.c"),
filepath.Join(baseDir, "libc", "string", "timingsafe_bcmp.c"),
filepath.Join(baseDir, "libc", "string", "timingsafe_memcmp.c"),
filepath.Join(baseDir, "libc", "string", "strerror.c"),
filepath.Join(baseDir, "libc", "string", "wcpcpy.c"),
filepath.Join(baseDir, "libc", "string", "wcpncpy.c"),
filepath.Join(baseDir, "libc", "string", "wcscasecmp.c"),
filepath.Join(baseDir, "libc", "string", "wcscasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "wcscat.c"),
filepath.Join(baseDir, "libc", "string", "wcschr.c"),
filepath.Join(baseDir, "libc", "string", "wcscmp.c"),
filepath.Join(baseDir, "libc", "string", "wcscoll.c"),
filepath.Join(baseDir, "libc", "string", "wcscoll_l.c"),
filepath.Join(baseDir, "libc", "string", "wcscpy.c"),
filepath.Join(baseDir, "libc", "string", "wcscspn.c"),
filepath.Join(baseDir, "libc", "string", "wcsdup.c"),
filepath.Join(baseDir, "libc", "string", "wcslcat.c"),
filepath.Join(baseDir, "libc", "string", "wcslcpy.c"),
filepath.Join(baseDir, "libc", "string", "wcslen.c"),
filepath.Join(baseDir, "libc", "string", "wcsncasecmp.c"),
filepath.Join(baseDir, "libc", "string", "wcsncasecmp_l.c"),
filepath.Join(baseDir, "libc", "string", "wcsncat.c"),
filepath.Join(baseDir, "libc", "string", "wcsncmp.c"),
filepath.Join(baseDir, "libc", "string", "wcsncpy.c"),
filepath.Join(baseDir, "libc", "string", "wcsnlen.c"),
filepath.Join(baseDir, "libc", "string", "wcspbrk.c"),
filepath.Join(baseDir, "libc", "string", "wcsrchr.c"),
filepath.Join(baseDir, "libc", "string", "wcsspn.c"),
filepath.Join(baseDir, "libc", "string", "wcsstr.c"),
filepath.Join(baseDir, "libc", "string", "wcstok.c"),
filepath.Join(baseDir, "libc", "string", "wcswidth.c"),
filepath.Join(baseDir, "libc", "string", "wcsxfrm.c"),
filepath.Join(baseDir, "libc", "string", "wcsxfrm_l.c"),
filepath.Join(baseDir, "libc", "string", "wcwidth.c"),
filepath.Join(baseDir, "libc", "string", "wmemchr.c"),
filepath.Join(baseDir, "libc", "string", "wmemcmp.c"),
filepath.Join(baseDir, "libc", "string", "wmemcpy.c"),
filepath.Join(baseDir, "libc", "string", "wmemmove.c"),
filepath.Join(baseDir, "libc", "string", "wmempcpy.c"),
filepath.Join(baseDir, "libc", "string", "wmemset.c"),
filepath.Join(baseDir, "libc", "string", "xpg_strerror_r.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-calloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-malloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-pvalloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-realloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-valloc.c"),
filepath.Join(baseDir, "libc", "stdlib", "rand.c"),
filepath.Join(baseDir, "libc", "stdlib", "srand.c"),
filepath.Join(baseDir, "libc", "stdlib", "nano-free.c"),
filepath.Join(baseDir, "libc", "tinystdio", "printf.c"),
filepath.Join(baseDir, "libc", "tinystdio", "putchar.c"),
filepath.Join(baseDir, "libc", "tinystdio", "puts.c"),
},
CFlags: []string{
"-D_COMPILING_NEWLIB",
"-D_HAVE_ALIAS_ATTRIBUTE",
"-DTINY_STDIO",
"-DPOSIX_IO",
"-DFORMAT_DEFAULT_INTEGER",
"-D_IEEE_LIBM",
"-D__OBSOLETE_MATH_FLOAT=1",
"-D__OBSOLETE_MATH_DOUBLE=0",
"-D_WANT_IO_C99_FORMATS",
"-nostdlib",
"-isystem" + libcIncludeDir,
"-I" + libmIncludeDir,
"-I" + localeIncludeDir,
"-I" + baseDir,
"-I" + filepath.Join(baseDir, "libc", "tinystdio"),
},
LDFlags: []string{"-nostdlib"},
CCFlags: []string{
"-Oz",
},
},
},
ArchiveSrcDir: filepath.Join("picolibc-1.8.10", "newlib"),
}
}