From b9a3c35d8795766e42d5e4fb1ebd534f63aa89fa Mon Sep 17 00:00:00 2001 From: Krzysztof Naglik Date: Fri, 28 Oct 2022 14:49:49 +0200 Subject: [PATCH] Enable passing vars to configure_file with flags during build [BUILD-391] --- configure_file.bzl | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/configure_file.bzl b/configure_file.bzl index e34eb68d..f4c07433 100644 --- a/configure_file.bzl +++ b/configure_file.bzl @@ -1,8 +1,17 @@ +load("@bazel_skylib//rules:common_settings.bzl", "string_flag") + CMAKE_FALSE_CONSTANTS = ["0", "OFF", "NO", "FALSE", "N", "IGNORE", "NOTFOUND"] def _configure_file_impl(ctx): vars = {} - for (key, val) in ctx.attr.vars.items(): + for var in ctx.attr.vars: + key_val = var.split("=") + if len(key_val) != 2: + # skip if var is not in the right format: = + continue + key = key_val[0] + val = key_val[1] + cmake_define = "#cmakedefine {}".format(key) define = "// #undef {}".format(key) if val in CMAKE_FALSE_CONSTANTS else "#define {}".format(key) @@ -21,7 +30,7 @@ def _configure_file_impl(ctx): configure_file = rule( implementation = _configure_file_impl, attrs = { - "vars": attr.string_dict(), + "vars": attr.string_list(), "out": attr.string(), "template": attr.label( allow_single_file = [".in"], @@ -29,3 +38,23 @@ configure_file = rule( ), }, ) + +def config_var(var, config): + return select({ + config: [var + "=ON"], + "//conditions:default": [var + "=OFF"], + }) + +def var(var, value): + return [var + "=" + value] + +def config_flag(config, flag): + string_flag( + name = flag, + build_setting_default = "", + ) + + native.config_setting( + name = config, + flag_values = {":" + flag: "ON"}, + )