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

时间:2018-01-18 19:58:55

标签: build bazel

我正在尝试将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_librarydefinescopts我可以使用select函数,但我无法理解我可以在{{select内使用哪种条件1}}。

1 个答案:

答案 0 :(得分:3)

看看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
bazel build --define avx2=yes ...