【问题标题】:can I add extra flags to meson ```compiles``` test?我可以在介子“编译”测试中添加额外的标志吗?
【发布时间】:2021-10-30 05:31:24
【问题描述】:

我想用ret变量来检查,我的cpu是否支持avx2:

    ret = cc.compiles('''
        #include <immintrin.h>
        int main() {
            __m256i m = _mm256_set1_epi32(17);
            return sizeof(__mm256_srli_epi32(m 8);
        }
        ''')

但我需要以某种方式添加编译标志-mavx2。 那可能吗? 我在 2019 年读到它不是,但也许它已经改变了?

【问题讨论】:

  • 即使禁用了优化,也不会检查 AVX2 的可用性。请注意,_mm256_srli_epi32(m, 8)sizeof 内,因此它永远不会执行。 GCC 甚至可以只用-mavx (godbolt.org/z/T3eKz3j3v)编译它,而不需要-mavx2-march=znver1。更好的版本godbolt.org/z/q56r769xM 避免了这个问题,编译(使用-O0)包含一个AVX2 vpsrld 指令。 (其实自从我使用volatile __m256i,即使使用-O3,它也能正确测试。)
  • 如果构建选项有问题,您可能可以使用 GNU C __attribute__((target("avx2")))。是的,godbolt.org/z/fxfPTWGGE 表明它适用于 GCC(和 clang/ICC)。您可以为 MSVC 使用 ifdef 它,这样您就可以将内在用于未启用的扩展。
  • this

标签: avx2 meson-build


【解决方案1】:

您想要的是文档不完整的 args 关键字:

cc.compiles(..., args : [...])

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多