targets: change LLVM features to match vanilla Clang

I mistakenly believed the difference was in LLVM version 11.0.0 vs LLVM
11.1.0. However, the difference is in whether we use the Debian version
of Clang.

The Debian version has had lots of patches. I'm not sure which is to
blame, but it could be this one:
https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/blob/snapshot/debian/patches/clang-arm-default-vfp3-on-armv7a.patch
Этот коммит содержится в:
Ayke van Laethem 2021-11-19 14:47:55 +01:00 коммит произвёл Ayke
родитель f8206b9bcc
коммит 34011c4800
6 изменённых файлов: 17 добавлений и 12 удалений

Просмотреть файл

@ -5,6 +5,7 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"runtime"
"testing" "testing"
"github.com/tinygo-org/tinygo/compileopts" "github.com/tinygo-org/tinygo/compileopts"
@ -60,7 +61,11 @@ func TestClangAttributes(t *testing.T) {
{GOOS: "darwin", GOARCH: "arm64"}, {GOOS: "darwin", GOARCH: "arm64"},
{GOOS: "windows", GOARCH: "amd64"}, {GOOS: "windows", GOARCH: "amd64"},
} { } {
t.Run("GOOS="+options.GOOS+",GOARCH="+options.GOARCH, func(t *testing.T) { name := "GOOS=" + options.GOOS + ",GOARCH=" + options.GOARCH
if options.GOARCH == "arm" {
name += ",GOARM=" + options.GOARM
}
t.Run(name, func(t *testing.T) {
testClangAttributes(t, options) testClangAttributes(t, options)
}) })
} }
@ -131,12 +136,12 @@ func testClangAttributes(t *testing.T, options *compileopts.Options) {
t.Errorf("target has CPU %#v but Clang makes it CPU %#v", config.CPU(), cpu) t.Errorf("target has CPU %#v but Clang makes it CPU %#v", config.CPU(), cpu)
} }
if features != config.Features() { if features != config.Features() {
if llvm.Version != "11.0.0" { if hasBuiltinTools || runtime.GOOS != "linux" {
// This needs to be removed once we switch to LLVM 12. // Skip this step when using an external Clang invocation on Linux.
// LLVM 11.0.0 uses a different "target-features" string than LLVM // The reason is that Debian has patched Clang in a way that
// 11.1.0 for Thumb targets. The Xtensa fork is still based on LLVM // modifies the LLVM features string, changing lots of FPU/float
// 11.0.0, so we need to skip this check on that version. // related flags. We want to test vanilla Clang, not Debian Clang.
t.Errorf("target has LLVM features %#v but Clang makes it %#v", config.Features(), features) t.Errorf("target has LLVM features\n\t%#v\nbut Clang makes it\n\t%#v", config.Features(), features)
} }
} }
} }

Просмотреть файл

@ -262,7 +262,7 @@ func defaultTarget(goos, goarch, triple string) (*TargetSpec, error) {
case "armv6": case "armv6":
spec.Features = "+armv6,+dsp,+fp64,+strict-align,+vfp2,+vfp2sp,-thumb-mode" spec.Features = "+armv6,+dsp,+fp64,+strict-align,+vfp2,+vfp2sp,-thumb-mode"
case "armv7": case "armv7":
spec.Features = "+armv7-a,+dsp,+fp64,+vfp2,+vfp2sp,+vfp3d16,+vfp3d16sp,-thumb-mode" spec.Features = "+armv7-a,+d32,+dsp,+fp64,+neon,+vfp2,+vfp2sp,+vfp3,+vfp3d16,+vfp3d16sp,+vfp3sp,-thumb-mode"
} }
case "arm64": case "arm64":
spec.CPU = "generic" spec.CPU = "generic"

Просмотреть файл

@ -2,5 +2,5 @@
"inherits": ["cortex-m"], "inherits": ["cortex-m"],
"llvm-target": "thumbv6m-unknown-unknown-eabi", "llvm-target": "thumbv6m-unknown-unknown-eabi",
"cpu": "cortex-m0", "cpu": "cortex-m0",
"features": "+armv6-m,+soft-float,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" "features": "+armv6-m,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-dotprod,-dsp,-fp16fml,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-ras,-sb,-sha2"
} }

Просмотреть файл

@ -2,5 +2,5 @@
"inherits": ["cortex-m"], "inherits": ["cortex-m"],
"llvm-target": "thumbv6m-unknown-unknown-eabi", "llvm-target": "thumbv6m-unknown-unknown-eabi",
"cpu": "cortex-m0plus", "cpu": "cortex-m0plus",
"features": "+armv6-m,+soft-float,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" "features": "+armv6-m,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-dotprod,-dsp,-fp16fml,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-ras,-sb,-sha2"
} }

Просмотреть файл

@ -2,5 +2,5 @@
"inherits": ["cortex-m"], "inherits": ["cortex-m"],
"llvm-target": "thumbv7m-unknown-unknown-eabi", "llvm-target": "thumbv7m-unknown-unknown-eabi",
"cpu": "cortex-m3", "cpu": "cortex-m3",
"features": "+armv7-m,+hwdiv,+soft-float,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" "features": "+armv7-m,+hwdiv,+strict-align,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-dotprod,-dsp,-fp16fml,-fullfp16,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-ras,-sb,-sha2"
} }

Просмотреть файл

@ -1,7 +1,7 @@
{ {
"llvm-target": "armv4t-unknown-unknown-eabi", "llvm-target": "armv4t-unknown-unknown-eabi",
"cpu": "arm7tdmi", "cpu": "arm7tdmi",
"features": "+armv4t,+soft-float,+strict-align,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-ras,-sb,-sha2,-thumb-mode,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp", "features": "+armv4t,+strict-align,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-dotprod,-dsp,-fp16fml,-fullfp16,-hwdiv,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-ras,-sb,-sha2,-thumb-mode",
"build-tags": ["gameboyadvance", "arm7tdmi", "baremetal", "linux", "arm"], "build-tags": ["gameboyadvance", "arm7tdmi", "baremetal", "linux", "arm"],
"goos": "linux", "goos": "linux",
"goarch": "arm", "goarch": "arm",