Cada vez que intento compilar cualquier programa C++ con march=native en una Macbook con un chip M1, aparece el siguiente error al usar clang:
clang: error: the clang compiler does not support '-march=native'Sin embargo, solía funcionar en una Macbook más antigua con una CPU Intel. ¿Clang no es compatible con esta arquitectura (todavía)?
clang --version da:
Apple clang version 12.0.0 (clang-1200.0.32.29) Target: arm64-apple-darwin20.2.0Por lo que sé, esto no es específico de Apple M1 , también ocurre con sonido metálico para varias otras arquitecturas (principalmente varios otros procesadores de brazo). por ejemplo, vea este informe de error aquí https://github.com/DMOJ/judge-server/issues/303
Básicamente, cada compilación de clang para una nueva arquitectura debe elegir proporcionar valores predeterminados para "march=native" para el objetivo para el cual se compila o no el compilador; y si no, verá este mensaje de error. Incluso para aquellos procesadores de brazo que tienen objetivos de optimización, a menudo tiene que usar específicamente "-mcpu=xxx" en lugar de "-march".
por ejemplo, para el iPhone usaría -mcpu=apple-a11 -mcpu=apple-a12 etc.
Sin embargo, tal objetivo aún no se ha implementado para Apple M1
$ clang --print-supported-cpus Apple clang version 12.0.5 (clang-1205.0.22.9) Target: arm64-apple-darwin20.5.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin Available CPUs for this target: a64fx apple-a10 apple-a11 apple-a12 apple-a13 apple-a14 apple-a7 apple-a8 apple-a9 apple-latest apple-s4 apple-s5 carmel cortex-a34 cortex-a35 cortex-a53 cortex-a55 cortex-a57 cortex-a65 cortex-a65ae cortex-a72 cortex-a73 cortex-a75 cortex-a76 cortex-a76ae cortex-a77 cortex-a78 cortex-x1 cyclone exynos-m3 exynos-m4 exynos-m5 falkor generic kryo lightning neoverse-e1 neoverse-n1 saphira thunderx thunderx2t99 thunderx3t110 thunderxt81 thunderxt83 thunderxt88 tsv110 vortex -mcpu=apple-a14 podría ser el mejor para M1.
En Apple clang versión 13.0.0, -mcpu=apple-m1 ya está disponible.