Merge pull request #1264 from MeteorsLiu/libc-version

Fix xtensa newlib `stdio` stuck and support libc version
This commit is contained in:
xushiwei
2025-09-10 13:46:36 +08:00
committed by GitHub
12 changed files with 740 additions and 167 deletions

View File

@@ -168,20 +168,18 @@ func getESPClangPlatform(goos, goarch string) string {
return ""
}
// ldFlagsFromFileName extracts the library name from a filename for use in linker flags
// For example, "libmath.a" becomes "math" for use with "-lmath"
func ldFlagsFromFileName(fileName string) string {
return strings.TrimPrefix(strings.TrimSuffix(fileName, ".a"), "lib")
}
func getOrCompileWithConfig(
compileConfig *compile.CompileConfig,
// compileWithConfig compiles libraries according to the provided configuration
// and returns the necessary linker flags for linking against the compiled libraries
func compileWithConfig(
compileConfig compile.CompileConfig,
outputDir string, options compile.CompileOptions,
) (ldflags []string, err error) {
if err = checkDownloadAndExtractLib(
compileConfig.Url, outputDir,
compileConfig.ArchiveSrcDir,
); err != nil {
return
}
ldflags = append(ldflags, "-nostdlib", "-L"+outputDir)
for _, group := range compileConfig.Groups {
@@ -587,16 +585,16 @@ func UseTarget(targetName string) (export Export, err error) {
var libcIncludeDir []string
if config.Libc != "" {
var outputDir string
var libcLDFlags []string
var compileConfig *compile.CompileConfig
var compileConfig compile.CompileConfig
baseDir := filepath.Join(cacheRoot(), "crosscompile")
outputDir := filepath.Join(baseDir, config.Libc)
compileConfig, err = getLibcCompileConfigByName(baseDir, config.Libc, config.LLVMTarget, config.CPU)
outputDir, compileConfig, err = getLibcCompileConfigByName(baseDir, config.Libc, config.LLVMTarget, config.CPU)
if err != nil {
return
}
libcLDFlags, err = getOrCompileWithConfig(compileConfig, outputDir, compile.CompileOptions{
libcLDFlags, err = compileWithConfig(compileConfig, outputDir, compile.CompileOptions{
CC: export.CC,
Linker: export.Linker,
CCFLAGS: ccflags,
@@ -605,24 +603,24 @@ func UseTarget(targetName string) (export Export, err error) {
if err != nil {
return
}
cflags = append(cflags, compileConfig.LibcCFlags...)
cflags = append(cflags, compileConfig.ExportCFlags...)
ldflags = append(ldflags, libcLDFlags...)
libcIncludeDir = compileConfig.LibcCFlags
libcIncludeDir = compileConfig.ExportCFlags
export.Libc = config.Libc
}
if config.RTLib != "" {
var outputDir string
var rtLibLDFlags []string
var compileConfig *compile.CompileConfig
var compileConfig compile.CompileConfig
baseDir := filepath.Join(cacheRoot(), "crosscompile")
outputDir := filepath.Join(baseDir, config.RTLib)
compileConfig, err = getRTCompileConfigByName(baseDir, config.RTLib, config.LLVMTarget)
outputDir, compileConfig, err = getRTCompileConfigByName(baseDir, config.RTLib, config.LLVMTarget)
if err != nil {
return
}
rtLibLDFlags, err = getOrCompileWithConfig(compileConfig, outputDir, compile.CompileOptions{
rtLibLDFlags, err = compileWithConfig(compileConfig, outputDir, compile.CompileOptions{
CC: export.CC,
Linker: export.Linker,
CCFLAGS: ccflags,