如何在 bazel 中有条件地指定 C 编译器定义



我正在尝试将 Makefile 构建转换为 bazel,并且需要重现以下条件来指定为 C 代码编译定义的 CPU 功能:

HAVE_AVX2 := $(shell grep avx2 /proc/cpuinfo)
ifdef HAVE_AVX2
$(info Checking for AVX support... AVX and AVX2)
CFLAGS += -DRTE_MACHINE_CPUFLAG_AVX -DRTE_MACHINE_CPUFLAG_AVX2
else
HAVE_AVX := $(shell grep avx /proc/cpuinfo)
ifdef HAVE_AVX
$(info Checking for AVX support... AVX)
CFLAGS += -DRTE_MACHINE_CPUFLAG_AVX
else
$(info Checking for AVX support... no)
endif
endif

是否可以在 bazel 中实现这样的条件?从我的发现来看,cc_library已经definescopts可以使用select函数,但我无法理解我可以在select内部使用什么样的条件。

看看 https://docs.bazel.build/versions/master/be/general.html#config_setting。

一般来说,你会做类似的事情

config_setting(
    name = "avx2",
    values = {
        "define": "avx2=yes"
    }
)

以及您可以选择:avx2条件:

cc_library(...
   copts = select({":avx2":[...], ...})

并运行巴泽尔

bazel build --define avx2=yes ...

最新更新