mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-03 02:27:48 +00:00
0ffa3eb748
Builder: - Update clang.cpp for LLVM 22 API changes: DiagnosticOptions is no longer ref-counted, TextDiagnosticPrinter and DiagnosticsEngine take references instead of pointers, createDiagnostics() signature changed. - Update cc1as.cpp: clang/Driver/Options.h moved to clang/Options/Options.h, namespace changed from clang::driver::options to clang::options, MCInstPrinter now passed as unique_ptr. - Add new LLVM 22 libraries to GNUmakefile: clangAnalysisLifetimeSafety, clangOptions, LLVMDTLTO, and dtlto component. - Add llvm22 build tag to all build/test commands. CGo: - Handle CXType_Unexposed in libclang.go by resolving via canonical type. LLVM 22 reports builtin type aliases (e.g. __size_t) as Unexposed instead of Typedef. - Always make C typedefs into Go type aliases. LLVM 22 changed getTypedefDeclUnderlyingType to return CXType_Enum directly instead of wrapping in an elaborated type. Compileopts: - Add build-tag-guarded ClangTriple() to substitute wasm32-unknown-wasi with wasm32-unknown-wasip1 for LLVM 22 (deprecated triple). - Add build-tag-guarded patchFeatures() to map renamed Xtensa features (atomctl, memctl, timerint, esp32s3) for LLVM 22. Targets: - Remove -zca from RISC-V target feature strings (esp32c3, esp32c6, fe310, k210, riscv-qemu, tkey). LLVM 22 now implies +zca from +c. - Remove -zcd from k210. LLVM 22 now implies +zcd from +c,+d. Tests: - Change TestClangAttributes to check individual feature flags instead of exact string match, allowing new LLVM features without failures. - Update TestBinarySize expected values for LLVM 22 codegen. Signed-off-by: deadprogram <ron@hybridgroup.com>
27 lines
825 B
Go
27 lines
825 B
Go
//go:build llvm22
|
|
|
|
package compileopts
|
|
|
|
import "strings"
|
|
|
|
// patchFeatures applies LLVM-version-specific feature name mappings.
|
|
// LLVM 22 renamed several Xtensa target features.
|
|
func patchFeatures(features string) string {
|
|
// Xtensa feature renames in LLVM 22:
|
|
// atomctl → (removed, no direct replacement)
|
|
// memctl → (removed, no direct replacement)
|
|
// esp32s3 → esp32s3ops
|
|
// timerint → timers3 (for esp32/esp32s3) or timers1 (for esp8266)
|
|
// Since we can't distinguish which timer variant at this level,
|
|
// just remove the obsolete features. The CPU definition already
|
|
// implies the correct features in LLVM 22.
|
|
replacer := strings.NewReplacer(
|
|
"+atomctl,", "",
|
|
"+memctl,", "",
|
|
"+esp32s3,", "+esp32s3ops,",
|
|
"+timerint,", "",
|
|
",+timerint", "",
|
|
)
|
|
return replacer.Replace(features)
|
|
}
|