From 997ea2849b557f994ad332f80558ee4bf66bd8b3 Mon Sep 17 00:00:00 2001 From: Haolan Date: Mon, 1 Sep 2025 14:48:54 +0800 Subject: [PATCH] feat: support riscv32 --- .../crosscompile/compile/libc/newlibesp.go | 1074 ++++++++++++++++- .../crosscompile/compile/rtlib/compiler_rt.go | 29 +- internal/crosscompile/crosscompile.go | 6 +- internal/crosscompile/libc.go | 4 +- targets/esp32-riscv.app.elf.ld | 195 +++ targets/esp32c2.memory.ld | 33 + targets/esp32c3.json | 30 +- targets/esp32c3.memory.ld | 26 + targets/esp32c5.memory.ld | 22 + targets/esp32c6.memory.ld | 22 + targets/esp32c61.memory.ld | 21 + targets/esp32h2.memory.ld | 22 + targets/esp32h21.memory.ld | 21 + targets/esp32p4.memory.ld | 23 + targets/xtensa.json | 14 +- 15 files changed, 1518 insertions(+), 24 deletions(-) create mode 100644 targets/esp32-riscv.app.elf.ld create mode 100644 targets/esp32c2.memory.ld create mode 100644 targets/esp32c3.memory.ld create mode 100644 targets/esp32c5.memory.ld create mode 100644 targets/esp32c6.memory.ld create mode 100644 targets/esp32c61.memory.ld create mode 100644 targets/esp32h2.memory.ld create mode 100644 targets/esp32h21.memory.ld create mode 100644 targets/esp32p4.memory.ld diff --git a/internal/crosscompile/compile/libc/newlibesp.go b/internal/crosscompile/compile/libc/newlibesp.go index b310c618..1c0e4760 100644 --- a/internal/crosscompile/compile/libc/newlibesp.go +++ b/internal/crosscompile/compile/libc/newlibesp.go @@ -3,12 +3,1073 @@ package libc import ( "fmt" "path/filepath" + "strings" "github.com/goplus/llgo/internal/crosscompile/compile" ) -// getNewlibESP32Config returns configuration for newlib esp32 -func GetNewlibESP32Config(baseDir, target string) *compile.CompileConfig { +func getNewlibESP32ConfigRISCV(baseDir, target string) *compile.CompileConfig { + libcDir := filepath.Join(baseDir, "newlib", "libc") + + return &compile.CompileConfig{ + Url: "https://github.com/goplus/newlib/archive/refs/tags/v0.2.0.tar.gz", + Name: "newlib-esp32", + Groups: []compile.CompileGroup{ + { + OutputFileName: fmt.Sprintf("libcrt0-%s.a", target), + Files: []string{ + filepath.Join(baseDir, "libgloss", "riscv", "esp", "esp_board.c"), + filepath.Join(baseDir, "libgloss", "riscv", "esp", "syscalls.c"), + filepath.Join(baseDir, "libgloss", "riscv", "esp", "crt1-board.S"), + }, + CFlags: []string{ + "-DHAVE_CONFIG_H", + "-isystem" + filepath.Join(libcDir, "include"), + "-I" + filepath.Join(baseDir, "libgloss"), + // TODO(MeteorsLiu): support riscv + "-I" + filepath.Join(baseDir, "libgloss", "riscv"), + "-I" + filepath.Join(baseDir, "libgloss", "riscv", "esp"), + }, + LDFlags: []string{"-nostdlib"}, + CCFlags: []string{ + "-Oz", + }, + }, + { + OutputFileName: fmt.Sprintf("libgloss-%s.a", target), + 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"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_access.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chdir.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chmod.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chown.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_close.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_conv_stat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_execve.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_exit.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_faccessat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_fork.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_fstat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_fstatat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_ftime.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getcwd.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getpid.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getreent.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_gettimeofday.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_isatty.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_kill.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_link.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_lseek.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_lstat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_open.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_openat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_read.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_sbrk.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_stat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_sysconf.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_times.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_unlink.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_utime.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_wait.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_write.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_access.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chdir.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chmod.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chown.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_close.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_conv_stat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_execve.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_exit.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_faccessat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_fork.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_fstat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_fstatat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_ftime.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getcwd.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getpid.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getreent.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_gettimeofday.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_isatty.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_kill.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_link.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_lseek.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_lstat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_open.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_openat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_read.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_sbrk.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_stat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_sysconf.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_times.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_unlink.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_utime.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_wait.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_write.c"), + filepath.Join(baseDir, "libgloss", "riscv", "nanosleep.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chdir.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chmod.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_chown.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_execve.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_fork.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getcwd.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getpid.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_getreent.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_kill.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_utime.c"), + filepath.Join(baseDir, "libgloss", "riscv", "sys_wait.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_close.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_exit.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_fdtable.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_fstat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_ftime.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_isatty.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_link.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_lseek.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_open.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_read.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_sbrk.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_stat.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_stat_common.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_unlink.c"), + filepath.Join(baseDir, "libgloss", "riscv", "semihost-sys_write.c"), + }, + CFlags: []string{ + "-DHAVE_CONFIG_H", + "-isystem" + filepath.Join(libcDir, "include"), + "-I" + libcDir, + "-I" + filepath.Join(libcDir, "riscv"), + "-I" + filepath.Join(baseDir, "libgloss"), + "-I" + filepath.Join(baseDir, "libgloss", "riscv"), + "-I" + filepath.Join(baseDir, "libgloss", "riscv", "esp"), + }, + LDFlags: []string{"-nostdlib"}, + CCFlags: []string{ + "-Oz", + }, + }, + { + OutputFileName: fmt.Sprintf("libc-%s.a", target), + 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", "memcpy.c"), + filepath.Join(libcDir, "string", "memmove.c"), + filepath.Join(libcDir, "string", "memset.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", "strcmp.c"), + filepath.Join(libcDir, "string", "strcoll.c"), + filepath.Join(libcDir, "string", "strcpy.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", "strlen.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", "strncpy.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", "_isatty.c"), + filepath.Join(libcDir, "posix", "isatty.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"), + filepath.Join(libcDir, "machine", "riscv", "memmove.S"), + filepath.Join(libcDir, "machine", "riscv", "memmove-stub.c"), + filepath.Join(libcDir, "machine", "riscv", "memset.S"), + filepath.Join(libcDir, "machine", "riscv", "memcpy-asm.S"), + filepath.Join(libcDir, "machine", "riscv", "memcpy.c"), + filepath.Join(libcDir, "machine", "riscv", "strlen.c"), + filepath.Join(libcDir, "machine", "riscv", "strcpy.c"), + filepath.Join(libcDir, "machine", "riscv", "strcmp.S"), + filepath.Join(libcDir, "machine", "riscv", "setjmp.S"), + filepath.Join(libcDir, "machine", "riscv", "ieeefp.c"), + filepath.Join(libcDir, "machine", "riscv", "ffs.c"), + }, + CFlags: []string{ + "-DHAVE_CONFIG_H", + "-D_LIBC", + "-DHAVE_NANOSLEEP", + "-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, "riscv"), + "-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", "ces"), + "-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", "riscv", "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"}, + CCFlags: []string{ + "-Oz", + "-fno-builtin", + "-ffreestanding", + "-Wno-implicit-function-declaration", + "-Wno-int-conversion", + "-Wno-unused-command-line-argument", + }, + }, + }, + ArchiveSrcDir: "newlib-0.2.0", + } +} + +func getNewlibESP32ConfigXtensa(baseDir, target string) *compile.CompileConfig { libcDir := filepath.Join(baseDir, "newlib", "libc") return &compile.CompileConfig{ @@ -988,3 +2049,12 @@ func GetNewlibESP32Config(baseDir, target string) *compile.CompileConfig { ArchiveSrcDir: "newlib-0.1.0", } } + +// getNewlibESP32Config returns configuration for newlib esp32 +func GetNewlibESP32Config(baseDir, target, mcpu string) *compile.CompileConfig { + if strings.Contains(target, "riscv32") { + fmt.Println(target) + return getNewlibESP32ConfigRISCV(baseDir, target) + } + return getNewlibESP32ConfigXtensa(baseDir, target) +} diff --git a/internal/crosscompile/compile/rtlib/compiler_rt.go b/internal/crosscompile/compile/rtlib/compiler_rt.go index d8926918..6446e9b9 100644 --- a/internal/crosscompile/compile/rtlib/compiler_rt.go +++ b/internal/crosscompile/compile/rtlib/compiler_rt.go @@ -3,10 +3,33 @@ package rtlib import ( "fmt" "path/filepath" + "strings" "github.com/goplus/llgo/internal/crosscompile/compile" ) +func platformSpecifiedFiles(builtinsDir, target string) []string { + switch { + case strings.Contains(target, "riscv32"): + return []string{ + filepath.Join(builtinsDir, "riscv", "mulsi3.S"), + filepath.Join(builtinsDir, "riscv", "fp_mode.c"), + filepath.Join(builtinsDir, "riscv", "save.S"), + filepath.Join(builtinsDir, "riscv", "restore.S"), + } + case target == "xtensa": + return []string{ + filepath.Join(builtinsDir, "xtensa", "ieee754_sqrtf.S"), + } + } + return nil +} + +func withPlatformSpecifiedFiles(baseDir, target string, files []string) []string { + builtinsDir := filepath.Join(baseDir, "lib", "builtins") + return append(files, platformSpecifiedFiles(builtinsDir, target)...) +} + func GetCompilerRTConfig(baseDir, target string) *compile.CompileConfig { return &compile.CompileConfig{ Url: "https://github.com/goplus/compiler-rt/archive/refs/tags/v0.1.0.tar.gz", @@ -14,8 +37,7 @@ func GetCompilerRTConfig(baseDir, target string) *compile.CompileConfig { Groups: []compile.CompileGroup{ { OutputFileName: fmt.Sprintf("libclang_builtins-%s.a", target), - Files: []string{ - filepath.Join(baseDir, "lib", "builtins", "xtensa/ieee754_sqrtf.S"), + Files: withPlatformSpecifiedFiles(baseDir, target, []string{ filepath.Join(baseDir, "lib", "builtins", "absvdi2.c"), filepath.Join(baseDir, "lib", "builtins", "absvsi2.c"), filepath.Join(baseDir, "lib", "builtins", "absvti2.c"), @@ -163,7 +185,8 @@ func GetCompilerRTConfig(baseDir, target string) *compile.CompileConfig { filepath.Join(baseDir, "lib", "builtins", "trunctfdf2.c"), filepath.Join(baseDir, "lib", "builtins", "trunctfhf2.c"), filepath.Join(baseDir, "lib", "builtins", "trunctfsf2.c"), - }, + filepath.Join(baseDir, "lib", "builtins", "atomic.c"), + }), CFlags: []string{ "-DNDEBUG", "-DVISIBILITY_HIDDEN", diff --git a/internal/crosscompile/crosscompile.go b/internal/crosscompile/crosscompile.go index 13e69de3..3c8285ca 100644 --- a/internal/crosscompile/crosscompile.go +++ b/internal/crosscompile/crosscompile.go @@ -317,12 +317,12 @@ func use(goos, goarch string, wasiThreads bool) (export Export, err error) { export.CCFLAGS = append( export.CCFLAGS, "-fdata-sections", - "-ffunction-sections", + // "-ffunction-sections", ) export.LDFLAGS = append( export.LDFLAGS, "-fdata-sections", - "-ffunction-sections", + // "-ffunction-sections", "-Xlinker", "--gc-sections", "-lm", @@ -612,7 +612,7 @@ func useTarget(targetName string) (export Export, err error) { baseDir := filepath.Join(cacheRoot(), "crosscompile") outputDir := filepath.Join(baseDir, config.Libc) - compileConfig, err = getLibcCompileConfigByName(baseDir, config.Libc, config.LLVMTarget) + compileConfig, err = getLibcCompileConfigByName(baseDir, config.Libc, config.LLVMTarget, config.CPU) if err != nil { return } diff --git a/internal/crosscompile/libc.go b/internal/crosscompile/libc.go index f3d27f4d..fdbb7307 100644 --- a/internal/crosscompile/libc.go +++ b/internal/crosscompile/libc.go @@ -11,7 +11,7 @@ import ( // GetCompileConfigByName retrieves libc compilation configuration by name // Returns compilation file lists and corresponding cflags -func getLibcCompileConfigByName(baseDir, libcName, target string) (*compile.CompileConfig, error) { +func getLibcCompileConfigByName(baseDir, libcName, target, mcpu string) (*compile.CompileConfig, error) { if libcName == "" { return nil, fmt.Errorf("libc name cannot be empty") } @@ -21,7 +21,7 @@ func getLibcCompileConfigByName(baseDir, libcName, target string) (*compile.Comp case "picolibc": return libc.GetPicolibcConfig(libcDir, target), nil case "newlib-esp32": - return libc.GetNewlibESP32Config(libcDir, target), nil + return libc.GetNewlibESP32Config(libcDir, target, mcpu), nil default: return nil, fmt.Errorf("unsupported libc: %s", libcName) } diff --git a/targets/esp32-riscv.app.elf.ld b/targets/esp32-riscv.app.elf.ld new file mode 100644 index 00000000..7f6ab8f6 --- /dev/null +++ b/targets/esp32-riscv.app.elf.ld @@ -0,0 +1,195 @@ +__stack = ORIGIN(dram_seg) + LENGTH(dram_seg); +__MIN_STACK_SIZE = 0x1000; +_stack_top = __stack; + +/* Default entry point */ +ENTRY(_start) +SECTIONS +{ + .text : + { + _iram_start = .; + + /* Place the _start function at the beginning of IRAM. + * Just in case some versions of QEMU ignore the entry address when loading the ELF file. */ + KEEP(*(.text._start)) + + KEEP (*(SORT_NONE(.init))) + *(.text .stub .text.* .gnu.linkonce.t.*) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + KEEP (*(SORT_NONE(.fini))) + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + } > iram_seg + + .rodata : + { + *(.rodata .rodata.* .gnu.linkonce.r.*) + *(.rodata1) + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) + . = ALIGN(4); + __cpu_frequency = .; + LONG(CPU_FREQUENCY); + __uart0_clkdiv_reg = .; + LONG(UART0_CLKDIV_REG); + __uart0_clkdiv_val = .; + LONG(UART0_CLKDIV_VAL); + __uart0_tx_addr = .; + LONG(UART0_TX_ADDR); + __uart0_status = .; + LONG(UART0_STATUS); + } > iram_seg + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } > iram_seg + .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 = .); + } > iram_seg + .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 = .); + } > iram_seg + .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)) + } > iram_seg + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + _iram_end = .; + } > iram_seg + + /** + * This section is required to skip .iram0.text area because iram0_0_seg and + * dram0_0_seg reflect the same address space on different buses. + */ + .dram0.dummy (NOLOAD): + { + /* Add a gap only in case we have separate iram/dram regions */ + . += ORIGIN(iram_seg) == ORIGIN(dram_seg) ? 0 : _iram_end - _iram_start; + } > dram_seg + + .data : + { + _data_start = .; + *(.data .data.* .gnu.linkonce.d.*) + SORT(CONSTRUCTORS) + } > dram_seg + .data1 : { *(.data1) } > dram_seg + /* We want the small data sections together, so single-instruction offsets + can access them all, and initialized data all before uninitialized, so + we can shorten the on-disk segment size. */ + .sdata : + { + PROVIDE(__global_pointer$ = . + 0x800); + *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) + *(.sdata .sdata.* .gnu.linkonce.s.*) + _edata = .; PROVIDE (edata = .); + . = .; + } > dram_seg + + .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } > dram_seg + .eh_frame : { KEEP (*(.eh_frame)) *(.eh_frame.*) } > dram_seg + + .bss (NOLOAD) : + { + __bss_start = .; + *(.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 = .); + } > dram_seg + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(_end <= __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_*) } +} diff --git a/targets/esp32c2.memory.ld b/targets/esp32c2.memory.ld new file mode 100644 index 00000000..0e5ce025 --- /dev/null +++ b/targets/esp32c2.memory.ld @@ -0,0 +1,33 @@ +# See "System Structure and Address Mapping" figure at +# https://www.espressif.com/sites/default/files/documentation/esp8684_technical_reference_manual_en.pdf + +ICACHE_SIZE = 0x4000; +# Skip possible ICACHE area +IRAM_START_ADDRESS = 0x4037C000 + ICACHE_SIZE; +IRAM_LEN = 0x40000 - ICACHE_SIZE; + +DRAM_START_ADDRESS = 0x3FCA0000; +DRAM_LEN = 0x40000; + +# Docs say that: +# The default console baud rate on ESP32-C2: +# - 115200 when a 40 MHz XTAL is used +# - 74880 when a 26 MHz XTAL is used +# +# It seems something wrong with CPU_FREQUENCY and UART0_BAUD definitions, +# but UART0_CLKDIV_VAL == 173 gives expected baud rate 74880 on 26 MHz XTAL. +CPU_FREQUENCY = 20000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x60000014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x6000001C; +UART0_TX_ADDR = 0x60000000; + +MEMORY +{ + iram_seg (RX) : org = IRAM_START_ADDRESS, len = IRAM_LEN + dram_seg (RW) : org = DRAM_START_ADDRESS, len = DRAM_LEN +} + +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/esp32c3.json b/targets/esp32c3.json index b9586bef..01f2211a 100644 --- a/targets/esp32c3.json +++ b/targets/esp32c3.json @@ -1,23 +1,31 @@ { - "inherits": ["riscv32"], + "inherits": [ + "riscv32" + ], "features": "+32bit,+c,+m,+zmmul,-a,-b,-d,-e,-experimental-smmpm,-experimental-smnpm,-experimental-ssnpm,-experimental-sspm,-experimental-ssqosid,-experimental-supm,-experimental-zacas,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-f,-h,-relax,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-v,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xesppie,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zicsr,-zifencei,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zve32f,-zve32x,-zve64d,-zve64f,-zve64x,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl128b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl32b,-zvl4096b,-zvl512b,-zvl64b,-zvl65536b,-zvl8192b", - "build-tags": ["esp32c3", "esp"], + "build-tags": [ + "esp32c3", + "esp" + ], "serial": "usb", "rtlib": "compiler-rt", - "libc": "picolibc", + "libc": "newlib-esp32", "cflags": [ "-march=rv32imc" ], - "linkerscript": "targets/esp32c3.ld", - "extra-files": [ - "targets/device/esp/esp32c3.S" - ], + "linkerscript": "targets/esp32c3.memory.ld", + "extra-files": [], "binary-format": "esp32c3", "flash-command": "esptool.py --chip=esp32c3 --port {port} write_flash 0x0 {bin}", - "serial-port": ["303a:1001"], + "serial-port": [ + "303a:1001" + ], "openocd-interface": "esp_usb_jtag", "openocd-target": "esp32c3", - "openocd-commands": ["gdb_memory_map disable"], - "gdb": ["riscv32-esp-elf-gdb"] + "openocd-commands": [ + "gdb_memory_map disable" + ], + "gdb": [ + "riscv32-esp-elf-gdb" + ] } - diff --git a/targets/esp32c3.memory.ld b/targets/esp32c3.memory.ld new file mode 100644 index 00000000..91f6803c --- /dev/null +++ b/targets/esp32c3.memory.ld @@ -0,0 +1,26 @@ +# See "System Structure and Address Mapping" figure at +# https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf + +ICACHE_SIZE = 0x4000; +# Skip possible ICACHE area +IRAM_START_ADDRESS = 0x4037C000 + ICACHE_SIZE; +IRAM_LEN = 0x64000 - ICACHE_SIZE; + +DRAM_START_ADDRESS = 0x3FC80000; +DRAM_LEN = 0x40000; + +CPU_FREQUENCY = 20000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x60000014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x6000001C; +UART0_TX_ADDR = 0x60000000; + +MEMORY +{ + iram_seg (RX) : org = IRAM_START_ADDRESS, len = IRAM_LEN + dram_seg (RW) : org = DRAM_START_ADDRESS, len = DRAM_LEN +} + +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/esp32c5.memory.ld b/targets/esp32c5.memory.ld new file mode 100644 index 00000000..75a00839 --- /dev/null +++ b/targets/esp32c5.memory.ld @@ -0,0 +1,22 @@ +# Memory layout obtained from IDF linker files. + +SRAM_START_ADDRESS = 0x40800000; +SRAM_LEN = 0x60000; + +CPU_FREQUENCY = 40000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x60000014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x6000001C; +UART0_TX_ADDR = 0x60000000; + +MEMORY +{ + sram_seg (RWX) : org = SRAM_START_ADDRESS, len = SRAM_LEN +} + +REGION_ALIAS("iram_seg", sram_seg); +REGION_ALIAS("dram_seg", sram_seg); + +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/esp32c6.memory.ld b/targets/esp32c6.memory.ld new file mode 100644 index 00000000..98d10b5f --- /dev/null +++ b/targets/esp32c6.memory.ld @@ -0,0 +1,22 @@ +# See "System Structure and Address Mapping" figure at +# https://www.espressif.com/sites/default/files/documentation/esp32-c6_technical_reference_manual_en.pdf + +SRAM_START_ADDRESS = 0x40800000; +SRAM_LEN = 0x80000; + +CPU_FREQUENCY = 40000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x60000014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x6000001C; +UART0_TX_ADDR = 0x60000000; + +MEMORY +{ + sram_seg (RWX) : org = SRAM_START_ADDRESS, len = SRAM_LEN +} + +REGION_ALIAS("iram_seg", sram_seg); +REGION_ALIAS("dram_seg", sram_seg); +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/esp32c61.memory.ld b/targets/esp32c61.memory.ld new file mode 100644 index 00000000..34cd39ff --- /dev/null +++ b/targets/esp32c61.memory.ld @@ -0,0 +1,21 @@ +# Memory layout obtained from IDF linker files. + +SRAM_START_ADDRESS = 0x40800000; +SRAM_LEN = 0x50000; + +CPU_FREQUENCY = 40000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x60000014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x6000001C; +UART0_TX_ADDR = 0x60000000; + +MEMORY +{ + sram_seg (RWX) : org = SRAM_START_ADDRESS, len = SRAM_LEN +} + +REGION_ALIAS("iram_seg", sram_seg); +REGION_ALIAS("dram_seg", sram_seg); +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/esp32h2.memory.ld b/targets/esp32h2.memory.ld new file mode 100644 index 00000000..c55526bb --- /dev/null +++ b/targets/esp32h2.memory.ld @@ -0,0 +1,22 @@ +# See "System Structure and Address Mapping" figure at +# https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf + +SRAM_START_ADDRESS = 0x40800000; +SRAM_LEN = 0x50000; + +CPU_FREQUENCY = 40000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x60000014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x6000001C; +UART0_TX_ADDR = 0x60000000; + +MEMORY +{ + sram_seg (RWX) : org = SRAM_START_ADDRESS, len = SRAM_LEN +} + +REGION_ALIAS("iram_seg", sram_seg); +REGION_ALIAS("dram_seg", sram_seg); +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/esp32h21.memory.ld b/targets/esp32h21.memory.ld new file mode 100644 index 00000000..34cd39ff --- /dev/null +++ b/targets/esp32h21.memory.ld @@ -0,0 +1,21 @@ +# Memory layout obtained from IDF linker files. + +SRAM_START_ADDRESS = 0x40800000; +SRAM_LEN = 0x50000; + +CPU_FREQUENCY = 40000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x60000014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x6000001C; +UART0_TX_ADDR = 0x60000000; + +MEMORY +{ + sram_seg (RWX) : org = SRAM_START_ADDRESS, len = SRAM_LEN +} + +REGION_ALIAS("iram_seg", sram_seg); +REGION_ALIAS("dram_seg", sram_seg); +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/esp32p4.memory.ld b/targets/esp32p4.memory.ld new file mode 100644 index 00000000..3fe96558 --- /dev/null +++ b/targets/esp32p4.memory.ld @@ -0,0 +1,23 @@ +# Memory layout obtained from IDF linker files. + +L2_CACHE_SIZE = 0x40000; + +SRAM_START_ADDRESS = 0x4FF00000; +SRAM_LEN = 0xC0000 - L2_CACHE_SIZE; + +CPU_FREQUENCY = 40000000; +UART0_BAUD = 115200; + +UART0_CLKDIV_REG = 0x500CA014; +UART0_CLKDIV_VAL = CPU_FREQUENCY / UART0_BAUD; +UART0_STATUS = 0x500CA01C; +UART0_TX_ADDR = 0x500CA000; + +MEMORY +{ + sram_seg (RWX) : org = SRAM_START_ADDRESS, len = SRAM_LEN +} + +REGION_ALIAS("iram_seg", sram_seg); +REGION_ALIAS("dram_seg", sram_seg); +INCLUDE "targets/esp32-riscv.app.elf.ld"; diff --git a/targets/xtensa.json b/targets/xtensa.json index 893a3eb7..42424d92 100644 --- a/targets/xtensa.json +++ b/targets/xtensa.json @@ -2,15 +2,23 @@ "llvm-target": "xtensa", "goos": "linux", "goarch": "arm", - "build-tags": ["xtensa", "baremetal", "linux", "arm"], + "build-tags": [ + "xtensa", + "baremetal", + "linux", + "arm" + ], "gc": "conservative", "scheduler": "none", "cflags": [ "-Werror", "-fshort-enums", "-Wno-macro-redefined", - "-fno-exceptions", "-fno-unwind-tables", "-fno-asynchronous-unwind-tables", - "-ffunction-sections", "-fdata-sections" + "-fno-exceptions", + "-fno-unwind-tables", + "-fno-asynchronous-unwind-tables", + "-ffunction-sections", + "-fdata-sections" ], "ldflags": [ "--gc-sections"