feat: support libc for small devices
This commit is contained in:
@@ -826,6 +826,7 @@ func linkObjFiles(ctx *context, app string, objFiles, linkArgs []string, verbose
|
|||||||
if IsDbgSymsEnabled() {
|
if IsDbgSymsEnabled() {
|
||||||
buildArgs = append(buildArgs, "-gdwarf-4")
|
buildArgs = append(buildArgs, "-gdwarf-4")
|
||||||
}
|
}
|
||||||
|
buildArgs = append(buildArgs, "--cref", "--Map=t.map")
|
||||||
|
|
||||||
buildArgs = append(buildArgs, objFiles...)
|
buildArgs = append(buildArgs, objFiles...)
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,8 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"slices"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/goplus/llgo/internal/clang"
|
|
||||||
|
|
||||||
"github.com/goplus/llgo/internal/env"
|
"github.com/goplus/llgo/internal/env"
|
||||||
"github.com/goplus/llgo/internal/targets"
|
"github.com/goplus/llgo/internal/targets"
|
||||||
"github.com/goplus/llgo/internal/xtool/llvm"
|
"github.com/goplus/llgo/internal/xtool/llvm"
|
||||||
@@ -218,67 +215,33 @@ func getESPClangPlatform(goos, goarch string) string {
|
|||||||
return ""
|
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")
|
baseDir := filepath.Join(cacheRoot(), "crosscompile")
|
||||||
libcDir := filepath.Join(baseDir, libcName)
|
outputDir := 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
|
|
||||||
}
|
|
||||||
compileConfig, err := getCompileLibcConfigByName(baseDir, libcName)
|
compileConfig, err := getCompileLibcConfigByName(baseDir, libcName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
tempDir, err := os.MkdirTemp("", "compile*")
|
if err = checkDownloadAndExtractLibc(compileConfig, compileConfig.Url, outputDir, compileConfig.ArchiveSrcDir); err != nil {
|
||||||
if err != nil {
|
|
||||||
return
|
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)
|
for _, group := range compileConfig.Groups {
|
||||||
if err = checkDownloadAndExtractLibc(compileConfig.Url, libcDir, compileConfig.ArchiveSrcDir); err != nil {
|
err = group.Compile(outputDir, cc, linkerName, exportCCFlags, exportLDFlags)
|
||||||
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")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
break
|
||||||
}
|
}
|
||||||
fmt.Fprintf(os.Stderr, "Compile libc file %s to %s...\n", file, tempObjFile.Name())
|
if filepath.Ext(group.OutputFileName) == ".o" {
|
||||||
|
continue
|
||||||
err = compiler.Compile("-o", tempObjFile.Name(), "-x", "c", "-c", file)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
ldflags = append(ldflags, "-l"+ldFlagsFromFileName(group.OutputFileName))
|
||||||
objFiles = append(objFiles, tempObjFile.Name())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
args := []string{"-o", libcArchive}
|
|
||||||
args = append(args, objFiles...)
|
|
||||||
|
|
||||||
err = linker.Link(args...)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ldflags = append(ldflags, "-nostdlib", "-L", libcDir, "-lc")
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package crosscompile
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
|
"archive/zip"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@@ -79,9 +80,9 @@ func checkDownloadAndExtractESPClang(platformSuffix, dir string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkDownloadAndExtractLibc(url, dstDir, internalArchiveSrcDir string) error {
|
func checkDownloadAndExtractLibc(cfg *compileLibcConfig, url, dstDir, internalArchiveSrcDir string) error {
|
||||||
// Check if already exists
|
// Check if already exists
|
||||||
if _, err := os.Stat(dstDir); err == nil {
|
if cfg.IsCompiled(dstDir) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,9 +95,10 @@ func checkDownloadAndExtractLibc(url, dstDir, internalArchiveSrcDir string) erro
|
|||||||
defer releaseLock(lockFile)
|
defer releaseLock(lockFile)
|
||||||
|
|
||||||
// Double-check after acquiring lock
|
// Double-check after acquiring lock
|
||||||
if _, err := os.Stat(dstDir); err == nil {
|
if cfg.IsCompiled(dstDir) {
|
||||||
return nil
|
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))
|
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 {
|
if err := downloadAndExtractArchive(url, tempExtractDir, description); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer os.RemoveAll(tempExtractDir)
|
// defer os.RemoveAll(tempExtractDir)
|
||||||
|
|
||||||
srcDir := tempExtractDir
|
srcDir := tempExtractDir
|
||||||
|
|
||||||
@@ -182,10 +184,14 @@ func downloadAndExtractArchive(url, destDir, description string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to extract %s archive: %w", description, err)
|
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 {
|
} else {
|
||||||
return fmt.Errorf("unsupported archive format: %s", filename)
|
return fmt.Errorf("unsupported archive format: %s", filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rename temp directory to target directory
|
// Rename temp directory to target directory
|
||||||
if err := os.Rename(tempDir, destDir); err != nil {
|
if err := os.Rename(tempDir, destDir); err != nil {
|
||||||
return fmt.Errorf("failed to rename directory: %w", err)
|
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)
|
cmd := exec.Command("tar", "-xf", tarXzFile, "-C", dest)
|
||||||
return cmd.Run()
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,19 +3,101 @@ package crosscompile
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"path/filepath"
|
"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
|
// CompileLibcConfig represents libc compilation configuration
|
||||||
type compileLibcConfig struct {
|
type compileLibcConfig struct {
|
||||||
Url string
|
Url string
|
||||||
Name string // Libc name (e.g., "picolibc", "musl", "glibc")
|
Name string // Libc name (e.g., "picolibc", "musl", "glibc")
|
||||||
Files []string // List of source files to compile
|
Groups []compileGroup
|
||||||
CFlags []string // C compiler flags specific to this libc
|
|
||||||
LDFlags []string // Linker flags
|
|
||||||
ArchiveSrcDir string
|
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
|
// GetCompileLibcConfigByName retrieves libc compilation configuration by name
|
||||||
// Returns compilation file lists and corresponding cflags
|
// Returns compilation file lists and corresponding cflags
|
||||||
func getCompileLibcConfigByName(baseDir, libcName string) (*compileLibcConfig, error) {
|
func getCompileLibcConfigByName(baseDir, libcName string) (*compileLibcConfig, error) {
|
||||||
@@ -27,159 +109,9 @@ func getCompileLibcConfigByName(baseDir, libcName string) (*compileLibcConfig, e
|
|||||||
switch libcName {
|
switch libcName {
|
||||||
case "picolibc":
|
case "picolibc":
|
||||||
return getPicolibcConfig(libcDir), nil
|
return getPicolibcConfig(libcDir), nil
|
||||||
|
case "newlib-esp32":
|
||||||
|
return getNewlibESP32Config(libcDir, "xtensa"), nil
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unsupported libc: %s", libcName)
|
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"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
990
internal/crosscompile/newlibesp.go
Normal file
990
internal/crosscompile/newlibesp.go
Normal 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",
|
||||||
|
}
|
||||||
|
}
|
||||||
166
internal/crosscompile/picolibc.go
Normal file
166
internal/crosscompile/picolibc.go
Normal 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"),
|
||||||
|
}
|
||||||
|
}
|
||||||
185
targets/esp32.app.elf.ld
Executable file
185
targets/esp32.app.elf.ld
Executable file
@@ -0,0 +1,185 @@
|
|||||||
|
__stack = ORIGIN(dram_seg) + LENGTH(dram_seg);
|
||||||
|
__MIN_STACK_SIZE = 0x2000;
|
||||||
|
|
||||||
|
ENTRY(_start)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = SEGMENT_START("iram_seg", 0);
|
||||||
|
.vectors :
|
||||||
|
{
|
||||||
|
_vector_table = ABSOLUTE(.);
|
||||||
|
KEEP(*(.WindowVectors.text));
|
||||||
|
KEEP(*(.Level2InterruptVector.text));
|
||||||
|
KEEP(*(.Level3InterruptVector.text));
|
||||||
|
KEEP(*(.Level4InterruptVector.text));
|
||||||
|
KEEP(*(.Level5InterruptVector.text));
|
||||||
|
KEEP(*(.DebugExceptionVector.text));
|
||||||
|
KEEP(*(.NMIExceptionVector.text));
|
||||||
|
KEEP(*(.KernelExceptionVector.text));
|
||||||
|
KEEP(*(.UserExceptionVector.text));
|
||||||
|
KEEP(*(.DoubleExceptionVector.text));
|
||||||
|
KEEP(*(.ResetVector.text));
|
||||||
|
*(.*Vector.literal)
|
||||||
|
. = ALIGN (16);
|
||||||
|
} > iram_seg
|
||||||
|
|
||||||
|
text :
|
||||||
|
{
|
||||||
|
KEEP (*(.init.literal))
|
||||||
|
KEEP (*(SORT_NONE(.init)))
|
||||||
|
*(.literal .text .stub .literal.* .text.* .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
||||||
|
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||||
|
*(.gnu.warning)
|
||||||
|
KEEP (*(.fini.literal))
|
||||||
|
KEEP (*(SORT_NONE(.fini)))
|
||||||
|
} > iram_seg
|
||||||
|
|
||||||
|
PROVIDE (__etext = .);
|
||||||
|
PROVIDE (_etext = .);
|
||||||
|
PROVIDE (etext = .);
|
||||||
|
|
||||||
|
|
||||||
|
/* Adjust the address for the data segment. We want to adjust up to
|
||||||
|
the same address within the page on the next page up. */
|
||||||
|
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
|
||||||
|
|
||||||
|
|
||||||
|
.rodata :
|
||||||
|
{
|
||||||
|
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||||
|
*(.rodata1)
|
||||||
|
*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
|
||||||
|
*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
|
||||||
|
}
|
||||||
|
|
||||||
|
.preinit_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||||
|
KEEP (*(.preinit_array))
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||||
|
}
|
||||||
|
.init_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__init_array_start = .);
|
||||||
|
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
|
||||||
|
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
|
||||||
|
PROVIDE_HIDDEN (__init_array_end = .);
|
||||||
|
}
|
||||||
|
.fini_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||||
|
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
|
||||||
|
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
|
||||||
|
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||||
|
}
|
||||||
|
.ctors :
|
||||||
|
{
|
||||||
|
/* gcc uses crtbegin.o to find the start of
|
||||||
|
the constructors, so we make sure it is
|
||||||
|
first. Because this is a wildcard, it
|
||||||
|
doesn't matter if the user does not
|
||||||
|
actually link against crtbegin.o; the
|
||||||
|
linker won't look for a file to match a
|
||||||
|
wildcard. The wildcard also means that it
|
||||||
|
doesn't matter which directory crtbegin.o
|
||||||
|
is in. */
|
||||||
|
KEEP (*crtbegin.o(.ctors))
|
||||||
|
KEEP (*crtbegin?.o(.ctors))
|
||||||
|
/* We don't want to include the .ctor section from
|
||||||
|
the crtend.o file until after the sorted ctors.
|
||||||
|
The .ctor section from the crtend file contains the
|
||||||
|
end of ctors marker and it must be last */
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
|
||||||
|
KEEP (*(SORT(.ctors.*)))
|
||||||
|
KEEP (*(.ctors))
|
||||||
|
}
|
||||||
|
.dtors :
|
||||||
|
{
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*crtbegin?.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*(.dtors))
|
||||||
|
}
|
||||||
|
|
||||||
|
_data_start = .;
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
*(.data .data.* .gnu.linkonce.d.*)
|
||||||
|
SORT(CONSTRUCTORS)
|
||||||
|
*(.data1)
|
||||||
|
}
|
||||||
|
_edata = .; PROVIDE (edata = .);
|
||||||
|
. = .;
|
||||||
|
__bss_start = .;
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
*(.dynsbss)
|
||||||
|
*(.sbss .sbss.* .gnu.linkonce.sb.*)
|
||||||
|
*(.scommon)
|
||||||
|
*(.dynbss)
|
||||||
|
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
/* Align here to ensure that the .bss section occupies space up to
|
||||||
|
_end. Align after .bss to ensure correct alignment even if the
|
||||||
|
.bss section disappears because there are no input sections.
|
||||||
|
FIXME: Why do we need it? When there is no .bss section, we do not
|
||||||
|
pad the .data section. */
|
||||||
|
. = ALIGN(. != 0 ? 32 / 8 : 1);
|
||||||
|
}
|
||||||
|
. = ALIGN(32 / 8);
|
||||||
|
. = ALIGN(32 / 8);
|
||||||
|
_end = .; PROVIDE (end = .);
|
||||||
|
. = DATA_SEGMENT_END (.);
|
||||||
|
|
||||||
|
/* Check if data + heap + stack exceeds RAM limit */
|
||||||
|
ASSERT(. <= __stack - __MIN_STACK_SIZE, "region DRAM overflowed by .data and .bss sections")
|
||||||
|
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
.comment 0 : { *(.comment) }
|
||||||
|
.gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
|
||||||
|
/* DWARF debug sections.
|
||||||
|
Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
of the section so we begin them at 0. */
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
/* SGI/MIPS DWARF 2 extensions */
|
||||||
|
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||||
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||||
|
.debug_typenames 0 : { *(.debug_typenames) }
|
||||||
|
.debug_varnames 0 : { *(.debug_varnames) }
|
||||||
|
/* DWARF 3 */
|
||||||
|
.debug_pubtypes 0 : { *(.debug_pubtypes) }
|
||||||
|
.debug_ranges 0 : { *(.debug_ranges) }
|
||||||
|
/* DWARF Extension. */
|
||||||
|
.debug_macro 0 : { *(.debug_macro) }
|
||||||
|
.debug_addr 0 : { *(.debug_addr) }
|
||||||
|
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
|
||||||
|
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_sbss = __bss_start;
|
||||||
|
_ebss = _end;
|
||||||
|
|
||||||
@@ -1,20 +1,25 @@
|
|||||||
{
|
{
|
||||||
"inherits": ["xtensa"],
|
"inherits": [
|
||||||
|
"xtensa"
|
||||||
|
],
|
||||||
"cpu": "esp32",
|
"cpu": "esp32",
|
||||||
"features": "+atomctl,+bool,+clamps,+coprocessor,+debug,+density,+dfpaccel,+div32,+exception,+fp,+highpriinterrupts,+interrupt,+loop,+mac16,+memctl,+minmax,+miscsr,+mul32,+mul32high,+nsa,+prid,+regprotect,+rvector,+s32c1i,+sext,+threadptr,+timerint,+windowed",
|
"features": "+atomctl,+bool,+clamps,+coprocessor,+debug,+density,+dfpaccel,+div32,+exception,+fp,+highpriinterrupts,+interrupt,+loop,+mac16,+memctl,+minmax,+miscsr,+mul32,+mul32high,+nsa,+prid,+regprotect,+rvector,+s32c1i,+sext,+threadptr,+timerint,+windowed",
|
||||||
"build-tags": ["esp32", "esp"],
|
"build-tags": [
|
||||||
|
"esp32",
|
||||||
|
"esp"
|
||||||
|
],
|
||||||
"scheduler": "tasks",
|
"scheduler": "tasks",
|
||||||
"serial": "uart",
|
"serial": "uart",
|
||||||
"linker": "ld.lld",
|
"linker": "ld.lld",
|
||||||
"default-stack-size": 2048,
|
"default-stack-size": 2048,
|
||||||
"rtlib": "compiler-rt",
|
"rtlib": "compiler-rt",
|
||||||
"libc": "picolibc",
|
"libc": "newlib-esp32",
|
||||||
"linkerscript": "targets/esp32.ld",
|
"linkerscript": "targets/esp32.memory.elf.ld",
|
||||||
"extra-files": [
|
"extra-files": [],
|
||||||
"targets/device/esp/esp32.S"
|
|
||||||
],
|
|
||||||
"binary-format": "esp32",
|
"binary-format": "esp32",
|
||||||
"flash-command": "esptool.py --chip=esp32 --port {port} write_flash 0x1000 {bin} -ff 80m -fm dout",
|
"flash-command": "esptool.py --chip=esp32 --port {port} write_flash 0x1000 {bin} -ff 80m -fm dout",
|
||||||
"emulator": "qemu-system-xtensa -machine esp32 -nographic -drive file={img},if=mtd,format=raw",
|
"emulator": "qemu-system-xtensa -machine esp32 -nographic -drive file={img},if=mtd,format=raw",
|
||||||
"gdb": ["xtensa-esp32-elf-gdb"]
|
"gdb": [
|
||||||
|
"xtensa-esp32-elf-gdb"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
200
targets/esp32.ld
200
targets/esp32.ld
@@ -1,200 +0,0 @@
|
|||||||
/* Linker script for the ESP32 */
|
|
||||||
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
/* Data RAM. Allows byte access.
|
|
||||||
* There are various data RAM regions:
|
|
||||||
* SRAM2: 0x3FFA_E000..0x3FFD_FFFF (72 + 128 = 200K)
|
|
||||||
* SRAM1: 0x3FFE_0000..0x3FFF_FFFF (128K)
|
|
||||||
* This gives us 328K of contiguous RAM, which is the largest span possible.
|
|
||||||
* SRAM1 has other addresses as well but the datasheet seems to indicate
|
|
||||||
* these are aliases.
|
|
||||||
*/
|
|
||||||
DRAM (rw) : ORIGIN = 0x3FFAE000, LENGTH = 200K + 128K /* Internal SRAM 1 + 2 */
|
|
||||||
|
|
||||||
/* Instruction RAM. */
|
|
||||||
IRAM (x) : ORIGIN = 0x40080000, LENGTH = 128K /* Internal SRAM 0 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The entry point. It is set in the image flashed to the chip, so must be
|
|
||||||
* defined.
|
|
||||||
*/
|
|
||||||
ENTRY(call_start_cpu0)
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* Constant literals and code. Loaded into IRAM for now. Eventually, most
|
|
||||||
* code should be executed directly from flash.
|
|
||||||
* Note that literals must be before code for the l32r instruction to work.
|
|
||||||
*/
|
|
||||||
.text : ALIGN(4)
|
|
||||||
{
|
|
||||||
*(.literal.call_start_cpu0)
|
|
||||||
*(.text.call_start_cpu0)
|
|
||||||
*(.literal .text)
|
|
||||||
*(.literal.* .text.*)
|
|
||||||
} >IRAM
|
|
||||||
|
|
||||||
/* Put the stack at the bottom of DRAM, so that the application will
|
|
||||||
* crash on stack overflow instead of silently corrupting memory.
|
|
||||||
* See: http://blog.japaric.io/stack-overflow-protection/ */
|
|
||||||
.stack (NOLOAD) :
|
|
||||||
{
|
|
||||||
. = ALIGN(16);
|
|
||||||
. += _stack_size;
|
|
||||||
_stack_top = .;
|
|
||||||
} >DRAM
|
|
||||||
|
|
||||||
/* Constant global variables.
|
|
||||||
* They are loaded in DRAM for ease of use. Eventually they should be stored
|
|
||||||
* in flash and loaded directly from there but they're kept in RAM to make
|
|
||||||
* sure they can always be accessed (even in interrupts).
|
|
||||||
*/
|
|
||||||
.rodata : ALIGN(4)
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
} >DRAM
|
|
||||||
|
|
||||||
/* Mutable global variables.
|
|
||||||
*/
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
_sdata = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
_edata = ABSOLUTE(.);
|
|
||||||
} >DRAM
|
|
||||||
|
|
||||||
/* Check that the boot ROM stack (for the APP CPU) does not overlap with the
|
|
||||||
* data that is loaded by the boot ROM. There may be ways to avoid this
|
|
||||||
* issue if it occurs in practice.
|
|
||||||
* The magic value here is _stack_sentry in the boot ROM ELF file.
|
|
||||||
*/
|
|
||||||
ASSERT(_edata < 0x3ffe1320, "the .data section overlaps with the stack used by the boot ROM, possibly causing corruption at startup")
|
|
||||||
|
|
||||||
/* Global variables that are mutable and zero-initialized.
|
|
||||||
* These must be zeroed at startup (unlike data, which is loaded by the
|
|
||||||
* bootloader).
|
|
||||||
*/
|
|
||||||
.bss (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
. = ALIGN (4);
|
|
||||||
_sbss = ABSOLUTE(.);
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
. = ALIGN (4);
|
|
||||||
_ebss = ABSOLUTE(.);
|
|
||||||
} >DRAM
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For the garbage collector.
|
|
||||||
*/
|
|
||||||
_globals_start = _sdata;
|
|
||||||
_globals_end = _ebss;
|
|
||||||
_heap_start = _ebss;
|
|
||||||
_heap_end = ORIGIN(DRAM) + LENGTH(DRAM);
|
|
||||||
|
|
||||||
_stack_size = 4K;
|
|
||||||
|
|
||||||
|
|
||||||
/* From ESP-IDF:
|
|
||||||
* components/esp_rom/esp32/ld/esp32.rom.libgcc.ld
|
|
||||||
* These are called from LLVM during codegen. The original license is Apache
|
|
||||||
* 2.0, but I believe that a list of function names and addresses can't really
|
|
||||||
* be copyrighted.
|
|
||||||
*/
|
|
||||||
__absvdi2 = 0x4006387c;
|
|
||||||
__absvsi2 = 0x40063868;
|
|
||||||
__adddf3 = 0x40002590;
|
|
||||||
__addsf3 = 0x400020e8;
|
|
||||||
__addvdi3 = 0x40002cbc;
|
|
||||||
__addvsi3 = 0x40002c98;
|
|
||||||
__ashldi3 = 0x4000c818;
|
|
||||||
__ashrdi3 = 0x4000c830;
|
|
||||||
__bswapdi2 = 0x40064b08;
|
|
||||||
__bswapsi2 = 0x40064ae0;
|
|
||||||
__clrsbdi2 = 0x40064b7c;
|
|
||||||
__clrsbsi2 = 0x40064b64;
|
|
||||||
__clzdi2 = 0x4000ca50;
|
|
||||||
__clzsi2 = 0x4000c7e8;
|
|
||||||
__cmpdi2 = 0x40063820;
|
|
||||||
__ctzdi2 = 0x4000ca64;
|
|
||||||
__ctzsi2 = 0x4000c7f0;
|
|
||||||
__divdc3 = 0x400645a4;
|
|
||||||
__divdf3 = 0x40002954;
|
|
||||||
__divdi3 = 0x4000ca84;
|
|
||||||
__divsi3 = 0x4000c7b8;
|
|
||||||
__eqdf2 = 0x400636a8;
|
|
||||||
__eqsf2 = 0x40063374;
|
|
||||||
__extendsfdf2 = 0x40002c34;
|
|
||||||
__ffsdi2 = 0x4000ca2c;
|
|
||||||
__ffssi2 = 0x4000c804;
|
|
||||||
__fixdfdi = 0x40002ac4;
|
|
||||||
__fixdfsi = 0x40002a78;
|
|
||||||
__fixsfdi = 0x4000244c;
|
|
||||||
__fixsfsi = 0x4000240c;
|
|
||||||
__fixunsdfsi = 0x40002b30;
|
|
||||||
__fixunssfdi = 0x40002504;
|
|
||||||
__fixunssfsi = 0x400024ac;
|
|
||||||
__floatdidf = 0x4000c988;
|
|
||||||
__floatdisf = 0x4000c8c0;
|
|
||||||
__floatsidf = 0x4000c944;
|
|
||||||
__floatsisf = 0x4000c870;
|
|
||||||
__floatundidf = 0x4000c978;
|
|
||||||
__floatundisf = 0x4000c8b0;
|
|
||||||
__floatunsidf = 0x4000c938;
|
|
||||||
__floatunsisf = 0x4000c864;
|
|
||||||
__gcc_bcmp = 0x40064a70;
|
|
||||||
__gedf2 = 0x40063768;
|
|
||||||
__gesf2 = 0x4006340c;
|
|
||||||
__gtdf2 = 0x400636dc;
|
|
||||||
__gtsf2 = 0x400633a0;
|
|
||||||
__ledf2 = 0x40063704;
|
|
||||||
__lesf2 = 0x400633c0;
|
|
||||||
__lshrdi3 = 0x4000c84c;
|
|
||||||
__ltdf2 = 0x40063790;
|
|
||||||
__ltsf2 = 0x4006342c;
|
|
||||||
__moddi3 = 0x4000cd4c;
|
|
||||||
__modsi3 = 0x4000c7c0;
|
|
||||||
__muldc3 = 0x40063c90;
|
|
||||||
__muldf3 = 0x4006358c;
|
|
||||||
__muldi3 = 0x4000c9fc;
|
|
||||||
__mulsf3 = 0x400632c8;
|
|
||||||
__mulsi3 = 0x4000c7b0;
|
|
||||||
__mulvdi3 = 0x40002d78;
|
|
||||||
__mulvsi3 = 0x40002d60;
|
|
||||||
__nedf2 = 0x400636a8;
|
|
||||||
__negdf2 = 0x400634a0;
|
|
||||||
__negdi2 = 0x4000ca14;
|
|
||||||
__negsf2 = 0x400020c0;
|
|
||||||
__negvdi2 = 0x40002e98;
|
|
||||||
__negvsi2 = 0x40002e78;
|
|
||||||
__nesf2 = 0x40063374;
|
|
||||||
__nsau_data = 0x3ff96544;
|
|
||||||
__paritysi2 = 0x40002f3c;
|
|
||||||
__popcount_tab = 0x3ff96544;
|
|
||||||
__popcountdi2 = 0x40002ef8;
|
|
||||||
__popcountsi2 = 0x40002ed0;
|
|
||||||
__powidf2 = 0x400638e4;
|
|
||||||
__subdf3 = 0x400026e4;
|
|
||||||
__subsf3 = 0x400021d0;
|
|
||||||
__subvdi3 = 0x40002d20;
|
|
||||||
__subvsi3 = 0x40002cf8;
|
|
||||||
__truncdfsf2 = 0x40002b90;
|
|
||||||
__ucmpdi2 = 0x40063840;
|
|
||||||
__udiv_w_sdiv = 0x40064bec;
|
|
||||||
__udivdi3 = 0x4000cff8;
|
|
||||||
__udivmoddi4 = 0x40064bf4;
|
|
||||||
__udivsi3 = 0x4000c7c8;
|
|
||||||
__umoddi3 = 0x4000d280;
|
|
||||||
__umodsi3 = 0x4000c7d0;
|
|
||||||
__umulsidi3 = 0x4000c7d8;
|
|
||||||
__unorddf2 = 0x400637f4;
|
|
||||||
__unordsf2 = 0x40063478;
|
|
||||||
|
|
||||||
INCLUDE "targets/esp32.rom.newlib-data.ld";
|
|
||||||
INCLUDE "targets/esp32.rom.newlib-funcs.ld";
|
|
||||||
INCLUDE "targets/esp32.rom.newlib-locale.ld";
|
|
||||||
INCLUDE "targets/esp32.rom.newlib-nano.ld";
|
|
||||||
INCLUDE "targets/esp32.rom.newlib-time.ld";
|
|
||||||
26
targets/esp32.memory.elf.ld
Executable file
26
targets/esp32.memory.elf.ld
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* IROM/DRAM definition in QEMU:
|
||||||
|
* [ESP32_MEMREGION_IROM] = { 0x40000000, 0x70000 },
|
||||||
|
* [ESP32_MEMREGION_DRAM] = { 0x3ffae000, 0x52000 },
|
||||||
|
*
|
||||||
|
* In theory we could use whole DRAM section, but I had some faults when using
|
||||||
|
* memory in range 0x3ffae000 - 0x3ffb0000
|
||||||
|
*
|
||||||
|
* But used memory range for data such as esp-idf for ESP32 to satisfy user's
|
||||||
|
* expectation on chip emulation
|
||||||
|
*
|
||||||
|
* Pass '--defsym=entire_dram_seg=1' to linker script to use whole DRAM
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
iram_seg (X) : org = 0x40078000, len = 0x28000
|
||||||
|
/* 64k at the end of DRAM, after ROM bootloader stack
|
||||||
|
* or entire DRAM (for QEMU only)
|
||||||
|
*/
|
||||||
|
dram_seg (RW) : org = 0x3FFF0000 ,
|
||||||
|
len = 0x10000
|
||||||
|
}
|
||||||
|
|
||||||
|
INCLUDE "targets/esp32.app.elf.ld";
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/* These are the .bss/.data symbols used by newlib functions present in ESP32 ROM.
|
|
||||||
See also esp32.rom.newlib-funcs.ld for the list of general newlib functions,
|
|
||||||
and esp32.rom.newlib-nano.ld for "nano" versions of printf/scanf family of functions.
|
|
||||||
|
|
||||||
Unlike other ROM functions and data which are exported using PROVIDE, which declares
|
|
||||||
weak symbols, newlib related functions are exported using assignment,
|
|
||||||
which declares strong symbols. This is done so that ROM functions are always
|
|
||||||
used instead of the ones provided by libc.a.
|
|
||||||
*/
|
|
||||||
|
|
||||||
_ctype_ = 0x3ff96354;
|
|
||||||
__ctype_ptr__ = 0x3ff96350;
|
|
||||||
environ = 0x3ffae0b4;
|
|
||||||
_global_impure_ptr = 0x3ffae0b0;
|
|
||||||
__mb_cur_max = 0x3ff96530;
|
|
||||||
__sf_fake_stderr = 0x3ff96458;
|
|
||||||
__sf_fake_stdin = 0x3ff96498;
|
|
||||||
__sf_fake_stdout = 0x3ff96478;
|
|
||||||
__wctomb = 0x3ff96540;
|
|
||||||
__sfp_lock = 0x3ffae0ac;
|
|
||||||
__sinit_lock = 0x3ffae0a8;
|
|
||||||
__env_lock_object = 0x3ffae0b8;
|
|
||||||
__tz_lock_object = 0x3ffae080;
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
/* These are the newlib functions present in ESP32 ROM.
|
|
||||||
They should not be used when compiling with PSRAM cache workaround enabled.
|
|
||||||
See also esp32.rom.newlib-data.ld for the list of .data/.bss symbols
|
|
||||||
used by these functions, and esp32.rom.newlib-nano.ld for "nano" versions
|
|
||||||
of printf/scanf family of functions.
|
|
||||||
|
|
||||||
Unlike other ROM functions which are exported using PROVIDE, which declares
|
|
||||||
weak symbols, newlib related functions are exported using assignment,
|
|
||||||
which declares strong symbols. This is done so that ROM functions are always
|
|
||||||
used instead of the ones provided by libc.a.
|
|
||||||
|
|
||||||
Time functions were moved to the esp32.rom.newlib-time.ld file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
abs = 0x40056340;
|
|
||||||
__ascii_wctomb = 0x40058ef0;
|
|
||||||
atoi = 0x400566c4;
|
|
||||||
_atoi_r = 0x400566d4;
|
|
||||||
atol = 0x400566ec;
|
|
||||||
_atol_r = 0x400566fc;
|
|
||||||
bzero = 0x4000c1f4;
|
|
||||||
_cleanup = 0x40001df8;
|
|
||||||
_cleanup_r = 0x40001d48;
|
|
||||||
creat = 0x40000e8c;
|
|
||||||
div = 0x40056348;
|
|
||||||
__dummy_lock = 0x4000c728;
|
|
||||||
__dummy_lock_try = 0x4000c730;
|
|
||||||
__env_lock = 0x40001fd4;
|
|
||||||
__env_unlock = 0x40001fe0;
|
|
||||||
fclose = 0x400020ac;
|
|
||||||
_fclose_r = 0x40001fec;
|
|
||||||
fflush = 0x40059394;
|
|
||||||
_fflush_r = 0x40059320;
|
|
||||||
_findenv_r = 0x40001f44;
|
|
||||||
__fp_lock_all = 0x40001f1c;
|
|
||||||
__fp_unlock_all = 0x40001f30;
|
|
||||||
__fputwc = 0x40058da0;
|
|
||||||
fputwc = 0x40058ea8;
|
|
||||||
_fputwc_r = 0x40058e4c;
|
|
||||||
_fwalk = 0x4000c738;
|
|
||||||
_fwalk_reent = 0x4000c770;
|
|
||||||
_getenv_r = 0x40001fbc;
|
|
||||||
isalnum = 0x40000f04;
|
|
||||||
isalpha = 0x40000f18;
|
|
||||||
isascii = 0x4000c20c;
|
|
||||||
isblank = 0x40000f2c;
|
|
||||||
iscntrl = 0x40000f50;
|
|
||||||
isdigit = 0x40000f64;
|
|
||||||
isgraph = 0x40000f94;
|
|
||||||
islower = 0x40000f78;
|
|
||||||
isprint = 0x40000fa8;
|
|
||||||
ispunct = 0x40000fc0;
|
|
||||||
isspace = 0x40000fd4;
|
|
||||||
isupper = 0x40000fe8;
|
|
||||||
__itoa = 0x40056678;
|
|
||||||
itoa = 0x400566b4;
|
|
||||||
labs = 0x40056370;
|
|
||||||
ldiv = 0x40056378;
|
|
||||||
longjmp = 0x400562cc;
|
|
||||||
memccpy = 0x4000c220;
|
|
||||||
memchr = 0x4000c244;
|
|
||||||
memcmp = 0x4000c260;
|
|
||||||
memcpy = 0x4000c2c8;
|
|
||||||
memmove = 0x4000c3c0;
|
|
||||||
memrchr = 0x4000c400;
|
|
||||||
memset = 0x4000c44c;
|
|
||||||
qsort = 0x40056424;
|
|
||||||
rand = 0x40001058;
|
|
||||||
rand_r = 0x400010d4;
|
|
||||||
__sccl = 0x4000c498;
|
|
||||||
__sclose = 0x400011b8;
|
|
||||||
__seofread = 0x40001148;
|
|
||||||
setjmp = 0x40056268;
|
|
||||||
__sflush_r = 0x400591e0;
|
|
||||||
__sfmoreglue = 0x40001dc8;
|
|
||||||
__sfp = 0x40001e90;
|
|
||||||
__sfp_lock_acquire = 0x40001e08;
|
|
||||||
__sfp_lock_release = 0x40001e14;
|
|
||||||
__sinit = 0x40001e38;
|
|
||||||
__sinit_lock_acquire = 0x40001e20;
|
|
||||||
__sinit_lock_release = 0x40001e2c;
|
|
||||||
srand = 0x40001004;
|
|
||||||
__sread = 0x40001118;
|
|
||||||
__sseek = 0x40001184;
|
|
||||||
strcasecmp = 0x400011cc;
|
|
||||||
strcasestr = 0x40001210;
|
|
||||||
strcat = 0x4000c518;
|
|
||||||
strchr = 0x4000c53c;
|
|
||||||
strcmp = 0x40001274;
|
|
||||||
strcoll = 0x40001398;
|
|
||||||
strcpy = 0x400013ac;
|
|
||||||
strcspn = 0x4000c558;
|
|
||||||
strdup = 0x4000143c;
|
|
||||||
_strdup_r = 0x40001450;
|
|
||||||
strlcat = 0x40001470;
|
|
||||||
strlcpy = 0x4000c584;
|
|
||||||
strlen = 0x400014c0;
|
|
||||||
strlwr = 0x40001524;
|
|
||||||
strncasecmp = 0x40001550;
|
|
||||||
strncat = 0x4000c5c4;
|
|
||||||
strncmp = 0x4000c5f4;
|
|
||||||
strncpy = 0x400015d4;
|
|
||||||
strndup = 0x400016b0;
|
|
||||||
_strndup_r = 0x400016c4;
|
|
||||||
strnlen = 0x4000c628;
|
|
||||||
strrchr = 0x40001708;
|
|
||||||
strsep = 0x40001734;
|
|
||||||
strspn = 0x4000c648;
|
|
||||||
strstr = 0x4000c674;
|
|
||||||
__strtok_r = 0x4000c6a8;
|
|
||||||
strtok_r = 0x4000c70c;
|
|
||||||
strtol = 0x4005681c;
|
|
||||||
_strtol_r = 0x40056714;
|
|
||||||
strtoul = 0x4005692c;
|
|
||||||
_strtoul_r = 0x40056834;
|
|
||||||
strupr = 0x4000174c;
|
|
||||||
__submore = 0x40058f3c;
|
|
||||||
__swbuf = 0x40058cb4;
|
|
||||||
__swbuf_r = 0x40058bec;
|
|
||||||
__swrite = 0x40001150;
|
|
||||||
toascii = 0x4000c720;
|
|
||||||
tolower = 0x40001868;
|
|
||||||
toupper = 0x40001884;
|
|
||||||
ungetc = 0x400590f4;
|
|
||||||
_ungetc_r = 0x40058fa0;
|
|
||||||
__utoa = 0x400561f0;
|
|
||||||
utoa = 0x40056258;
|
|
||||||
wcrtomb = 0x40058920;
|
|
||||||
_wcrtomb_r = 0x400588d8;
|
|
||||||
_wctomb_r = 0x40058f14;
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
/* These are the locale-related newlib functions present in ESP32 ROM.
|
|
||||||
ESP32 ROM contains newlib version 2.2.0, and these functions should not be
|
|
||||||
used when compiling with newlib version 3, since locale implementation is
|
|
||||||
different there.
|
|
||||||
|
|
||||||
Unlike other ROM functions which are exported using PROVIDE, which declares
|
|
||||||
weak symbols, newlib related functions are exported using assignment,
|
|
||||||
which declares strong symbols. This is done so that ROM functions are always
|
|
||||||
used instead of the ones provided by libc.a.
|
|
||||||
*/
|
|
||||||
|
|
||||||
__locale_charset = 0x40059540;
|
|
||||||
__locale_cjk_lang = 0x40059558;
|
|
||||||
localeconv = 0x4005957c;
|
|
||||||
_localeconv_r = 0x40059560;
|
|
||||||
__locale_mb_cur_max = 0x40059548;
|
|
||||||
__locale_msgcharset = 0x40059550;
|
|
||||||
setlocale = 0x40059568;
|
|
||||||
_setlocale_r = 0x4005950c;
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
/* These are the printf/scanf related newlib functions present in ESP32 ROM.
|
|
||||||
These functions are compiled with newlib "nano" format option.
|
|
||||||
As such, they don's support 64-bit integer formats.
|
|
||||||
Floating point formats are supported by setting _printf_float and
|
|
||||||
_scanf_float entries in syscall table. This is done automatically
|
|
||||||
by startup code.
|
|
||||||
These functions should not be used when compiling with PSRAM cache workaround enabled.
|
|
||||||
See also esp32.rom.newlib-data.ld for the list of .data/.bss symbols
|
|
||||||
used by newlib functions, and esp32.rom.newlib-funcs.ld for the list
|
|
||||||
of general newlib functions.
|
|
||||||
|
|
||||||
Unlike other ROM functions which are exported using PROVIDE, which declares
|
|
||||||
weak symbols, newlib related functions are exported using assignment,
|
|
||||||
which declares strong symbols. This is done so that ROM functions are always
|
|
||||||
used instead of the ones provided by libc.a.
|
|
||||||
*/
|
|
||||||
|
|
||||||
asiprintf = 0x40056d9c;
|
|
||||||
_asiprintf_r = 0x40056d4c;
|
|
||||||
asniprintf = 0x40056cd8;
|
|
||||||
_asniprintf_r = 0x40056c64;
|
|
||||||
asnprintf = 0x40056cd8;
|
|
||||||
_asnprintf_r = 0x40056c64;
|
|
||||||
asprintf = 0x40056d9c;
|
|
||||||
_asprintf_r = 0x40056d4c;
|
|
||||||
fiprintf = 0x40056efc;
|
|
||||||
_fiprintf_r = 0x40056ed8;
|
|
||||||
fiscanf = 0x40058884;
|
|
||||||
_fiscanf_r = 0x400588b4;
|
|
||||||
fprintf = 0x40056efc;
|
|
||||||
_fprintf_r = 0x40056ed8;
|
|
||||||
fscanf = 0x40058884;
|
|
||||||
_fscanf_r = 0x400588b4;
|
|
||||||
iprintf = 0x40056978;
|
|
||||||
_iprintf_r = 0x40056944;
|
|
||||||
iscanf = 0x40058760;
|
|
||||||
_iscanf_r = 0x4005879c;
|
|
||||||
printf = 0x40056978;
|
|
||||||
_printf_common = 0x40057338;
|
|
||||||
_printf_i = 0x40057404;
|
|
||||||
_printf_r = 0x40056944;
|
|
||||||
scanf = 0x40058760;
|
|
||||||
_scanf_chars = 0x40058384;
|
|
||||||
_scanf_i = 0x4005845c;
|
|
||||||
_scanf_r = 0x4005879c;
|
|
||||||
__sfputs_r = 0x40057790;
|
|
||||||
siprintf = 0x40056c08;
|
|
||||||
_siprintf_r = 0x40056bbc;
|
|
||||||
siscanf = 0x400587d0;
|
|
||||||
_siscanf_r = 0x40058830;
|
|
||||||
sniprintf = 0x40056b4c;
|
|
||||||
_sniprintf_r = 0x40056ae4;
|
|
||||||
snprintf = 0x40056b4c;
|
|
||||||
_snprintf_r = 0x40056ae4;
|
|
||||||
sprintf = 0x40056c08;
|
|
||||||
_sprintf_r = 0x40056bbc;
|
|
||||||
__sprint_r = 0x400577e4;
|
|
||||||
sscanf = 0x400587d0;
|
|
||||||
_sscanf_r = 0x40058830;
|
|
||||||
__ssprint_r = 0x40056ff8;
|
|
||||||
__ssputs_r = 0x40056f2c;
|
|
||||||
__ssrefill_r = 0x40057fec;
|
|
||||||
__ssvfiscanf_r = 0x4005802c;
|
|
||||||
__ssvfscanf_r = 0x4005802c;
|
|
||||||
_sungetc_r = 0x40057f6c;
|
|
||||||
_svfiprintf_r = 0x40057100;
|
|
||||||
__svfiscanf_r = 0x40057b08;
|
|
||||||
_svfprintf_r = 0x40057100;
|
|
||||||
__svfscanf = 0x40057f04;
|
|
||||||
__svfscanf_r = 0x40057b08;
|
|
||||||
vasiprintf = 0x40056eb8;
|
|
||||||
_vasiprintf_r = 0x40056e80;
|
|
||||||
vasniprintf = 0x40056e58;
|
|
||||||
_vasniprintf_r = 0x40056df8;
|
|
||||||
vasnprintf = 0x40056e58;
|
|
||||||
_vasnprintf_r = 0x40056df8;
|
|
||||||
vasprintf = 0x40056eb8;
|
|
||||||
_vasprintf_r = 0x40056e80;
|
|
||||||
vfiprintf = 0x40057ae8;
|
|
||||||
_vfiprintf_r = 0x40057850;
|
|
||||||
vfiscanf = 0x40057eb8;
|
|
||||||
_vfiscanf_r = 0x40057f24;
|
|
||||||
vfprintf = 0x40057ae8;
|
|
||||||
_vfprintf_r = 0x40057850;
|
|
||||||
vfscanf = 0x40057eb8;
|
|
||||||
_vfscanf_r = 0x40057f24;
|
|
||||||
viprintf = 0x400569b4;
|
|
||||||
_viprintf_r = 0x400569e4;
|
|
||||||
viscanf = 0x40058698;
|
|
||||||
_viscanf_r = 0x400586c8;
|
|
||||||
vprintf = 0x400569b4;
|
|
||||||
_vprintf_r = 0x400569e4;
|
|
||||||
vscanf = 0x40058698;
|
|
||||||
_vscanf_r = 0x400586c8;
|
|
||||||
vsiprintf = 0x40056ac4;
|
|
||||||
_vsiprintf_r = 0x40056a90;
|
|
||||||
vsiscanf = 0x40058740;
|
|
||||||
_vsiscanf_r = 0x400586f8;
|
|
||||||
vsniprintf = 0x40056a68;
|
|
||||||
_vsniprintf_r = 0x40056a14;
|
|
||||||
vsnprintf = 0x40056a68;
|
|
||||||
_vsnprintf_r = 0x40056a14;
|
|
||||||
vsprintf = 0x40056ac4;
|
|
||||||
_vsprintf_r = 0x40056a90;
|
|
||||||
vsscanf = 0x40058740;
|
|
||||||
_vsscanf_r = 0x400586f8;
|
|
||||||
|
|
||||||
/* _print_float and _scanf_float functions in ROM are stubs which call
|
|
||||||
real implementations in IDF through the syscall table.
|
|
||||||
As such, don't include these ROM symbols.
|
|
||||||
|
|
||||||
_printf_float = 0x4000befc;
|
|
||||||
_scanf_float = 0x4000bf18;
|
|
||||||
|
|
||||||
*/
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/* These are the newlib functions and the .bss/.data symbols necessary for these functions present in ESP32 ROM.
|
|
||||||
They should not be used when you need to solve the Y2K38 problem.
|
|
||||||
Because these functions were compiled with 32-bit width for the time_t structure.
|
|
||||||
*/
|
|
||||||
|
|
||||||
asctime = 0x40059588;
|
|
||||||
asctime_r = 0x40000ec8;
|
|
||||||
ctime = 0x400595b0;
|
|
||||||
ctime_r = 0x400595c4;
|
|
||||||
__gettzinfo = 0x40001fcc;
|
|
||||||
__get_current_time_locale = 0x40001834;
|
|
||||||
gmtime = 0x40059848;
|
|
||||||
gmtime_r = 0x40059868;
|
|
||||||
localtime = 0x400595dc;
|
|
||||||
localtime_r = 0x400595fc;
|
|
||||||
mktime = 0x4005a5e8;
|
|
||||||
strftime = 0x40059ab4;
|
|
||||||
time = 0x40001844;
|
|
||||||
__time_load_locale = 0x4000183c;
|
|
||||||
tzset = 0x40001a1c;
|
|
||||||
_tzset_r = 0x40001a28;
|
|
||||||
__tzcalc_limits = 0x400018a0;
|
|
||||||
__tz_lock = 0x40001a04;
|
|
||||||
__tz_unlock = 0x40001a10;
|
|
||||||
/* The .bss/.data symbols necessary for these functions */
|
|
||||||
_timezone = 0x3ffae0a0;
|
|
||||||
_tzname = 0x3ffae030;
|
|
||||||
_daylight = 0x3ffae0a4;
|
|
||||||
__month_lengths = 0x3ff9609c;
|
|
||||||
|
|
||||||
/* These functions don't use time_t, but use other structures which include time_t.
|
|
||||||
* For example, 'struct stat' contains time_t.
|
|
||||||
*/
|
|
||||||
_isatty_r = 0x40000ea0;
|
|
||||||
__sfvwrite_r = 0x4005893c;
|
|
||||||
__smakebuf_r = 0x40059108;
|
|
||||||
__srefill_r = 0x400593d4;
|
|
||||||
__swsetup_r = 0x40058cc8;
|
|
||||||
Reference in New Issue
Block a user