Skip to content
Merged
2 changes: 2 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# Take care to document any settings that you expect users to apply.
# Settings that apply only to CI are in .github/workflows/ci.bazelrc

import %workspace%/.bazelrc.flags

# Deleted packages for integration tests.
# To update these lines, execute
# `bazel run @contrib_rules_bazel_integration_test//tools:update_deleted_packages`
Expand Down
6 changes: 6 additions & 0 deletions .bazelrc.flags
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Defines aliases for rules_zig build settings flags,
# see https://bazel.build/extending/config#using-build-setting-aliases
# Copy this file into your project and import it into your `.bazelrc` to enable
# the same aliases.

build --flag_alias=zig_mode=@rules_zig//zig/settings:mode
2 changes: 1 addition & 1 deletion util/update_filegroups.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import subprocess

# Add exlusions for packages to skip here.
PACKAGE_PATTERN = "//... - //docs/... - //util/... - //zig/tests/..."
PACKAGE_PATTERN = "//...:* - //docs/...:* - //util/...:* - //zig/tests/...:*"

# Add extra source files to capture here.
EXTRA_SRCS = {
Expand Down
2 changes: 2 additions & 0 deletions zig/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ filegroup(
":defs.bzl",
":repositories.bzl",
":toolchain.bzl",
"//zig/config:all_files",
"//zig/private:all_files",
"//zig/settings:all_files",
],
visibility = ["//:__pkg__"],
)
9 changes: 9 additions & 0 deletions zig/config/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Execute `bazel run //util:update_filegroups` to update this target.
filegroup(
name = "all_files",
srcs = [
":BUILD.bazel",
"//zig/config/mode:all_files",
],
visibility = ["//zig:__pkg__"],
)
34 changes: 34 additions & 0 deletions zig/config/mode/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
config_setting(
name = "debug",
flag_values = {
"//zig/settings:mode": "debug",
},
)

config_setting(
name = "release_safe",
flag_values = {
"//zig/settings:mode": "release_safe",
},
)

config_setting(
name = "release_small",
flag_values = {
"//zig/settings:mode": "release_small",
},
)

config_setting(
name = "release_fast",
flag_values = {
"//zig/settings:mode": "release_fast",
},
)

# Execute `bazel run //util:update_filegroups` to update this target.
filegroup(
name = "all_files",
srcs = [":BUILD.bazel"],
visibility = ["//zig/config:__pkg__"],
)
33 changes: 19 additions & 14 deletions zig/private/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,46 +1,50 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")

bzl_library(
name = "zig_binary",
srcs = ["zig_binary.bzl"],
name = "zig_package",
srcs = ["zig_package.bzl"],
visibility = ["//zig:__subpackages__"],
deps = [
"//zig/private/common:filetypes",
"//zig/private/common:zig_cache",
"//zig/private/providers:zig_package_info",
],
)

bzl_library(
name = "zig_package",
srcs = ["zig_package.bzl"],
name = "zig_test",
# Gazelle removes the srcs attribute for some reason.
srcs = ["zig_test.bzl"], # keep
visibility = ["//zig:__subpackages__"],
deps = [
"//zig/private/common:filetypes",
"//zig/private/providers:zig_package_info",
],
)

bzl_library(
name = "zig_library",
srcs = ["zig_library.bzl"],
name = "settings",
srcs = ["settings.bzl"],
visibility = ["//zig:__subpackages__"],
deps = ["@bazel_skylib//rules:common_settings"],
)

bzl_library(
name = "zig_binary",
srcs = ["zig_binary.bzl"],
visibility = ["//zig:__subpackages__"],
deps = [
"//zig/private/common:filetypes",
"//zig/private/common:zig_cache",
"//zig/private/providers:zig_package_info",
"//zig/private/providers:zig_settings_info",
],
)

bzl_library(
name = "zig_test",
# Gazelle removes the srcs attribute for some reason.
srcs = ["zig_test.bzl"], # keep
name = "zig_library",
srcs = ["zig_library.bzl"],
visibility = ["//zig:__subpackages__"],
deps = [
"//zig/private/common:filetypes",
"//zig/private/common:zig_cache",
"//zig/private/providers:zig_package_info",
"//zig/private/providers:zig_settings_info",
],
)

Expand Down Expand Up @@ -68,6 +72,7 @@ filegroup(
srcs = [
":BUILD.bazel",
":resolved_toolchain.bzl",
":settings.bzl",
":toolchains_repo.bzl",
":versions.bzl",
":zig_binary.bzl",
Expand Down
7 changes: 7 additions & 0 deletions zig/private/providers/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,19 @@ bzl_library(
visibility = ["//zig:__subpackages__"],
)

bzl_library(
name = "zig_settings_info",
srcs = ["zig_settings_info.bzl"],
visibility = ["//zig:__subpackages__"],
)

# Execute `bazel run //util:update_filegroups` to update this target.
filegroup(
name = "all_files",
srcs = [
":BUILD.bazel",
":zig_package_info.bzl",
":zig_settings_info.bzl",
],
visibility = ["//zig/private:__pkg__"],
)
18 changes: 18 additions & 0 deletions zig/private/providers/zig_settings_info.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""Defines providers for the settings rule."""

ZigSettingsInfo = provider(
doc = "Collection of all active Zig build settings.",
fields = {
"mode": "The Zig build mode.",
"args": "The collected compiler arguments for all active settings.",
},
)

def zig_settings(*, settings, args):
"""Set flags for the given Zig build settings.

Args:
settings: ZigSettingsInfo, The active Zig build settings.
args: Args; mutable, Append the needed Zig compiler flags to this object.
"""
args.add_all(settings.args)
50 changes: 50 additions & 0 deletions zig/private/settings.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
"""Implementation of the settings rule."""

load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
load("//zig/private/providers:zig_settings_info.bzl", "ZigSettingsInfo")

DOC = """\
"""

ATTRS = {
"mode": attr.label(
doc = "The build mode setting.",
mandatory = True,
),
}

MODE_ARGS = {
"debug": ["-O", "Debug"],
"release_safe": ["-O", "ReleaseSafe"],
"release_small": ["-O", "ReleaseSmall"],
"release_fast": ["-O", "ReleaseFast"],
}

def _settings_impl(ctx):
args = []

mode = ctx.attr.mode[BuildSettingInfo].value
args.extend(MODE_ARGS[mode])

settings_info = ZigSettingsInfo(
mode = mode,
args = args,
)

settings_json = ctx.actions.declare_file(ctx.label.name + ".json")
ctx.actions.write(settings_json, settings_info.to_json(), is_executable = False)

default_info = DefaultInfo(
files = depset([settings_json]),
)

return [
default_info,
settings_info,
]

settings = rule(
_settings_impl,
attrs = ATTRS,
doc = DOC,
)
15 changes: 15 additions & 0 deletions zig/private/zig_binary.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ load(
"ZigPackageInfo",
"zig_package_dependencies",
)
load(
"//zig/private/providers:zig_settings_info.bzl",
"ZigSettingsInfo",
"zig_settings",
)

DOC = """\
"""
Expand All @@ -27,6 +32,11 @@ ATTRS = {
mandatory = False,
providers = [ZigPackageInfo],
),
"_settings": attr.label(
default = "//zig/settings",
doc = "Zig build settings.",
providers = [ZigSettingsInfo],
),
}

def _zig_binary_impl(ctx):
Expand Down Expand Up @@ -62,6 +72,11 @@ def _zig_binary_impl(ctx):
args = args,
)

zig_settings(
settings = ctx.attr._settings[ZigSettingsInfo],
args = args,
)

ctx.actions.run(
outputs = outputs,
inputs = depset(direct = direct_inputs, transitive = transitive_inputs),
Expand Down
15 changes: 15 additions & 0 deletions zig/private/zig_library.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ load(
"ZigPackageInfo",
"zig_package_dependencies",
)
load(
"//zig/private/providers:zig_settings_info.bzl",
"ZigSettingsInfo",
"zig_settings",
)

DOC = """\
"""
Expand All @@ -27,6 +32,11 @@ ATTRS = {
mandatory = False,
providers = [ZigPackageInfo],
),
"_settings": attr.label(
default = "//zig/settings",
doc = "Zig build settings.",
providers = [ZigSettingsInfo],
),
}

def _zig_library_impl(ctx):
Expand Down Expand Up @@ -63,6 +73,11 @@ def _zig_library_impl(ctx):
args = args,
)

zig_settings(
settings = ctx.attr._settings[ZigSettingsInfo],
args = args,
)

ctx.actions.run(
outputs = outputs,
inputs = depset(direct = direct_inputs, transitive = transitive_inputs),
Expand Down
15 changes: 15 additions & 0 deletions zig/private/zig_test.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ load(
"ZigPackageInfo",
"zig_package_dependencies",
)
load(
"//zig/private/providers:zig_settings_info.bzl",
"ZigSettingsInfo",
"zig_settings",
)

DOC = """\
"""
Expand All @@ -27,6 +32,11 @@ ATTRS = {
mandatory = False,
providers = [ZigPackageInfo],
),
"_settings": attr.label(
default = "//zig/settings",
doc = "Zig build settings.",
providers = [ZigSettingsInfo],
),
}

def _zig_test_impl(ctx):
Expand Down Expand Up @@ -62,6 +72,11 @@ def _zig_test_impl(ctx):
args = args,
)

zig_settings(
settings = ctx.attr._settings[ZigSettingsInfo],
args = args,
)

ctx.actions.run(
outputs = outputs,
inputs = depset(direct = direct_inputs, transitive = transitive_inputs),
Expand Down
26 changes: 26 additions & 0 deletions zig/settings/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("//zig/private:settings.bzl", "settings")

settings(
name = "settings",
mode = ":mode",
visibility = ["//visibility:public"],
)

string_flag(
name = "mode",
build_setting_default = "debug",
values = [
"debug",
"release_safe",
"release_small",
"release_fast",
],
)

# Execute `bazel run //util:update_filegroups` to update this target.
filegroup(
name = "all_files",
srcs = [":BUILD.bazel"],
visibility = ["//zig:__pkg__"],
)
7 changes: 5 additions & 2 deletions zig/tests/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
load(":rules_test.bzl", "rules_test_suite")
load(":mode_test.bzl", "mode_test_suite")
load(":package_info_test.bzl", "package_info_test_suite")
load(":rules_test.bzl", "rules_test_suite")
load(":versions_test.bzl", "versions_test_suite")

rules_test_suite(name = "rules_test")
mode_test_suite(name = "mode_test")

package_info_test_suite(name = "package_info_test")

rules_test_suite(name = "rules_test")

versions_test_suite(name = "versions_test")
Loading